Vote for your favorite SkillMD. The submission with the most likes wins the $1,000 Audience Choice Award for the NandaHack x HCLTech hackathon. Voting is open through September 25.Vote now →

Historical PR
gallery.

Repository pull requests displayed through the earlier Town’s twelve protocol layers. This preserves contribution provenance; it does not mean a contribution is installed, executed, or adopted by the current Town.

Pull requests

85

Merged

84

Layers covered

12/12

All pull requests

Merged first,
newest next.

JamesCarnley avatar
mergedhumandatafacts

docs(town): align the current manual, trace viewer and build checks

Bring the public entry points into agreement with the rebuilt Town code and its actual evidence boundaries:

@JamesCarnleyPR #263
JamesCarnley avatar
mergedhumanother

fix(packaging): ship runtime assets and verify built distributions

- Regenerate stale exported record schemas and test them against the live models.

@JamesCarnleyPR #260
JamesCarnley avatar
mergedhumanother

fix(catalog): bound submissions and commit history atomically

- Bound streamed JSON request bodies and individual catalog fields before any database work, with shared validation for the API and submission form.

@JamesCarnleyPR #257
JamesCarnley avatar
mergedhumanother

fix(viewers): safely render evidence and rank only verified bundles

- Render participant-controlled viewer values as inert text, escape the HTML title/script-data boundary, constrain styles, and support the actual Path profile and empty timelines.

@JamesCarnleyPR #262
JamesCarnley avatar
mergedhumanother

fix(imports): preserve pinned snapshots and disclose incomplete imports

- Refuse silent replacement of an on-ramp snapshot and validate the full pinned release reference on an idempotent re-import.

@JamesCarnleyPR #258
JamesCarnley avatar
mergedhumanidentity

fix(runtime): serialize mailbox work and settle participant processes

- Serialize mailbox claim/ack/reoffer decisions with their writes and evidence events; finish is atomic/idempotent and terminal runs reject subsequent mutations.

@JamesCarnleyPR #259
JamesCarnley avatar
mergedhumanauth

fix(evidence): bind receipt claims and version strict Path evaluation

A valid signature alone was too easily confused with agreement between a receipt's claims and its bundle. Incomplete/malformed bundle manifests and replay ambiguities could also undermine downstream verification.

@JamesCarnleyPR #261
JamesCarnley avatar
mergedhumannegotiation

Bind marketplace settlements to capped negotiations

- Enforce the stock marketplace buyer's configured unit-price cap before an order or escrow hold can be created.

@JamesCarnleyPR #256
JamesCarnley avatar
mergedhumantransport

Fail closed on invalid fault-rule numbers

- Validate every current fault-rule numeric field before a run starts.

@JamesCarnleyPR #255
JamesCarnley avatar
mergedhumancoordination

Reject duplicate bids in sealed-bid auctions

- Make the current advertised sealed-bid auction accept at most one bid from each bidder before award.

@JamesCarnleyPR #254
JamesCarnley avatar
mergedhumantrust

Stop fetching untrusted catalog URLs on submission

- Stop the catalog form from fetching user-submitted URL and GitHub sources.

@JamesCarnleyPR #253
JamesCarnley avatar
mergedhumanpayments

Reject malformed ledger amounts before mutation

- Enforce the declared integer-cent domain at every current ledger entry boundary.

@JamesCarnleyPR #252
JamesCarnley avatar
mergedhumanidentity

Reject malformed run grant timestamps without changing signed payloads

Reject malformed or non-finite timestamps when verifying current Town run grants, without changing signed payloads or adding permission policy.

@JamesCarnleyPR #251
JamesCarnley avatar
mergedhumanidentity

Make message acceptance atomic and bind the complete envelope

Make current Town's durable message acceptance atomic and bind replay to the complete message envelope.

@JamesCarnleyPR #250
JamesCarnley avatar
mergedhumanpayments

Add optional quote-intent profile for cheaper wrong-item failures

Add the optional a2a-quote-intent@0.1 profile to the existing Path runner. A quote within the price ceiling is not enough if it describes the wrong item.

@JamesCarnleyPR #249
JamesCarnley avatar
mergedhumanidentity

test: require run-bound session proof at grant join

Preserves the absent/wrong-presenter test requirement from legacy #156 (@mwarsss) on current Town Run Grants. The production check already exists; this PR adds seven regressions only, with no runtime, permission or schema change.

@JamesCarnleyPR #248
JamesCarnley avatar
mergedhumandatafacts

fix(catalog): guard form submission re-entry

Rescues the client-side re-entry guard from @stanleyoz's legacy #204 onto current main. The retained SkillMD form could queue a second action when submit events arrived before the pending render or while the first action was outstanding.

@JamesCarnleyPR #247
JamesCarnley avatar
mergedhumanauth

fix: validate catalog sources and label unchecked links

Preserve the useful current-catalog requirements from #130 by @nonggde and the review by @dhve, without adding another automatic remote probe.

@JamesCarnleyPR #246
JamesCarnley avatar
mergedhumancoordination

fix: bind Lab auction settlement to its task and payee

Current Lab auction settlement checks the payer and amount but not the payee or task. A real local run with the ledger transfer redirected to a losing bidder still reports passed, even though the auctioneer receives zero.

@JamesCarnleyPR #245
JamesCarnley avatar
mergedhumancoordination

fix: verify correlated majority evidence in Lab consensus

Fix a false-positive in the current Lab consensus evaluator. It previously counted delivered prepare_ack events and entries in the proposer’s acks list without independently establishing distinct eligible voters or binding the…

@JamesCarnleyPR #244
JamesCarnley avatar
mergedhumanidentity

test: preserve grant key-binding regressions from legacy #172

Retain the key-substitution regression requirement from #172 by @theCodeForgerHQ against current Run Grants.

@JamesCarnleyPR #243
JamesCarnley avatar
mergedhumantrust

fix(lab): verify receipt-backed reputation arithmetic

The marketplace reputation stage previously accepted two updates ending at score 2, even if receipt events were absent, a receipt named a different seller, or the first score was 999.

@JamesCarnleyPR #242
JamesCarnley avatar
mergedhumanmemory

fix(path): require exact fulfillment request correlation

Require a fulfillment's returned request_id to match the exact, nonempty order identifier Town issued and recorded as the event subject.

@JamesCarnleyPR #236
JamesCarnley avatar
mergedhumanother

fix(runner): reject unknown agent override roles

Reject unsupported role keys in both harnesses and external before starting a Track run.

@JamesCarnleyPR #237
JamesCarnley avatar
mergedhumanmemory

fix(receipt): verify evidence before rendering Town Proof

Require successful bundle verification before rendering Town Proof or automatically creating its receipt.

@JamesCarnleyPR #235
JamesCarnley avatar
mergedhumanidentity

fix(bundle): verify the declared bundle fingerprint

Verify that the manifest's declared bundle_fingerprint matches the canonical fingerprint of its file-hash map before accepting a bundle.

@JamesCarnleyPR #234
JamesCarnley avatar
mergedhumanregistry

fix(lab): disclose untested scope of imported scenarios

Imported legacy scenarios run Town reference agents, not their original plugins or validators. Previously a declared network_partition disappeared silently, and a generic adapted exchange could pass without any result saying that the…

@JamesCarnleyPR #241
JamesCarnley avatar
mergedhumantransport

fix(a2a): bound streamed responses and version transport policy

Bound external AgentCard and native A2A JSON responses before parsing, and record the effective transport policy in each Path run.

@JamesCarnleyPR #240
JamesCarnley avatar
mergedhumanprivacy

fix(lab): require scenario coverage before a passing verdict

A registered Lab validator can return no scenario checks and still receive a passing verdict from generic checks. This change makes missing scenario coverage explicit before those generic checks are appended.

@JamesCarnleyPR #239
JamesCarnley avatar
mergedhumantransport

fix(path): preserve the explicit profile in rerun commands

Generated Path rerun commands used --profile, but the already-running-agent CLI consumes --path-profile. A rerun therefore used the current default instead of the profile recorded in the evidence bundle.

@JamesCarnleyPR #238
JamesCarnley avatar
mergedhumanidentity

feat(agent-test): test an existing OpenClaw agent from the CLI

The headline workflow should be one clear command for a terminal-comfortable developer, not a private bridge or hand-edited adapter.

@JamesCarnleyPR #228
JamesCarnley avatar
mergedhumanother

feat(agent-test): run managed runtimes through Town

A prepared runtime still needs lifecycle-safe orchestration through the shared loopback adapter and Town evaluator without coupling the engine to OpenClaw internals.

@JamesCarnleyPR #227
JamesCarnley avatar
mergedhumanother

feat(agent-test): add a bounded OpenClaw connector

Testing an existing OpenClaw agent needs a bounded connector that checks the behavior Town relies on without locking users to one release or guessing across incompatible routes, retries, or output envelopes.

@JamesCarnleyPR #226
JamesCarnley avatar
mergedhumanother

refactor(agent-test): share the local adapter server

The managed-runtime path needs the same strict authenticated loopback server as the public reference adapter without duplicating or drifting its wire behavior.

@JamesCarnleyPR #225
JamesCarnley avatar
mergedhumantrust

feat(agent-test): add the local-adapter CLI

Developers need a documented command to attach a strict local adapter, run the Town test, and consume stable human or machine-readable results.

@JamesCarnleyPR #224
JamesCarnley avatar
mergedhumanregistry

feat(agent-test): evaluate external agents in Town

A successful adapter exchange is not enough: Town must drive the participant through a real deterministic workflow and emit honest, stage-specific evidence instead of a single opaque score.

@JamesCarnleyPR #223
JamesCarnley avatar
mergedhumantransport

feat(agent-test): add a hardened loopback HTTP driver

Town needs a small local adapter transport with strict authentication, bounds, timeouts, and failure attribution before external agents can safely participate in a test run.

@JamesCarnleyPR #222
JamesCarnley avatar
mergedhumantransport

feat(agent-test): define version 1 contracts and profiles

External-agent tests need a strict, versioned contract whose wire bytes, profile identity, result semantics, and extension boundary are reviewable independently of transport and CLI code.

@JamesCarnleyPR #221
JamesCarnley avatar
mergedhumanauth

feat(town): add deterministic capability testing support

Town needs a deterministic, real execution seam before an external agent can be evaluated through the simulator without coupling generic scenario code to the agent-test feature.

@JamesCarnleyPR #220
Skyrider3 avatar
mergedhumanother

Fix/enforce grant permissions

Merging branch with added visualization.

@Skyrider3PR #232
Skyrider3 avatar
mergedhumanidentity

Enforce Run Grant permissions on join and every mailbox action

nandatown run --identity joins each role through a Run Grant: a controller-signed authorization for one disposable session key, for one run, with named permissions.

@Skyrider3PR #231
Sharathvc23 avatar
mergedhumanother

Add Agentic Commerce Hackathon page

Adds a page promoting the Agentic Commerce Hackathon (Devfolio, July 31 - Aug 2 2026), where Project NANDA is a partner sponsor.

@Sharathvc23PR #206
StevenMih avatar
mergedhumantrust

Trust/Payments layer: verifiable capsule receipts (capsule-emit-nanda) — rebuild addressing #177

Re-opens the work from #54 → #177 (closed by @Skyrider3), rebuilt to address every

@StevenMihPR #197
StevenMih avatar
mergedhumantrust

Trust layer: verifiable capsule receipts with CCF write-receipt anchoring

Re-opens the work from #54 → #177 (closed by @Skyrider3), rebuilt with a fundamentally

@StevenMihPR #200
dhve avatar
mergedhumanother

Nanda Town UI: audience-choice voting, live PR gallery, and site cleanup

Brings the live nandatown.projectnanda.org UI onto the repo. All commits authored by dhve. Changes are confined to apps/nest-dashboard/ (no packages/ or scenarios/ touched), so this composes with the merged hackathon PRs already on main.

@dhvePR #198
Skyrider3 avatar
mergedhumannegotiation

Revert "[Hackathon] distributed-sys-engg: deterministic negotiation session ids (ADR-004 sibling fix)"

Reverts projnanda/nandatown#184

@Skyrider3PR #196
rakshit-tresata avatar
mergedhumannegotiation

distributed-sys-engg: deterministic negotiation session ids (ADR-004 sibling fix)

Persona: distributed-sys-engg — reliability/determinism focus.

@rakshit-tresataPR #184
CalyirexTechnologies avatar
mergedhumancoordination

calyirex: validators must not certify corrupted ground truth (3 fixes: auction shill, voting inflation, revocation laundering)

Three validator fixes, one defect class: a validator that reconstructs 'ground truth' from attacker-influenceable data ends up certifying the very corruption it exists to catch.

@CalyirexTechnologiesPR #175
HreStyles avatar
mergedhumancommunication

replay-safe: comms replay-attack resistance on top of authenticated

I picked #01 — versioned message schemas

@HreStylesPR #169
arii avatar
mergedhumanregistry

[hackathon phase 1] fix: return defensive copy from CidFacts.fetch()

Fixes a bug where CidFacts.fetch() returned the mutable internal object instead of a copy, which allowed the caller to unintentionally tamper with the registry content.

@ariiPR #158
Dashrath175 avatar
mergedhumanregistry

dashrath: agent_receipts — sever collusion by evidence shape, not size (closes #97)

Credit to @SwasthikaDev's issue #97 for identifying the flaw.

@Dashrath175PR #160
dhritimandas avatar
mergedhumanauth

dhritimandas: capability-conformance registry gate

AgentCard.capabilities (nest_core/types.py:82) is a bare, self-asserted list[str]. Registry.lookup() does string matching against this list.

@dhritimandasPR #159
parsaayoubi avatar
mergedhumanauth

Hackathon/parsa noah mesh revocable auth

delegatable (#138) solved delegation, but its revocation set is one in-process

@parsaayoubiPR #155
Redeem-Grimm-Satoshi avatar
mergedhumantransport

Redeem_Grimm: authenticate failure-detector heartbeats against a forgery attack

This is a direct follow-up to the failure-detector layer merged in #46. In the review on merge, @Skyrider3 flagged two gaps, and both are worth fixing:

@Redeem-Grimm-SatoshiPR #152
ckeda avatar
mergedhumanauth

ckeda-security: delegatable capability tokens with cascading revocation

Branch: hackathon/ckeda-delegatable-auth · Problem 04

@ckedaPR #138
bogacsmz avatar
mergedhumanregistry

bogacsmz: byzantine-resistant gossip registry — signed-equivocation quarantine + eclipse resistance

Persona for this review: trust/honesty auditor. I built the adversarial

@bogacsmzPR #148
libr3andr3 avatar
mergedhumantrust

libre: attested-peering trust plugin

Persona: libre — a self-sovereignty / decentralized-infrastructure engineer

@libr3andr3PR #149
moltpass avatar
mergedhumantrust

moltpass.dev — bonded_trust — a Sybil-resistant trust root with a pluggable scarcity anchor

[Hackathon] Moltpass.dev — bonded_trust — a Sybil-resistant trust root with a pluggable scarcity anchor

@moltpassPR #53
SwasthikaDev avatar
mergedhumancoordination

validators: fix auction_winner_highest trusting the announced amount over real bids

Fixes validate_auction_winner_highest returning PASS for an auction where a lower bidder was awarded, when the won: message announces a winning amount inflated past every real bid.

@SwasthikaDevPR #96
Sam04-dev avatar
mergedhumantrust

hackathon/sam04-trust-gated-privacy

The merged hybrid_x25519 plugin (#28) answers *who* can read with a static, all-or-nothing audience — it is deliberately trust-blind. Meanwhile the trust layer computes reputation scores that no privacy plugin consumes.

@Sam04-devPR #115
tedschw avatar
mergedhumanpayments

edge: address EMPIC escrow review feedback

Follow-up to #41 addressing Skyrider3's review feedback on EMPIC Step 1 escrow behavior.

@tedschwPR #90
ai-naymul avatar
mergedhumancommunication

protocol-security-engineer: tamper-evident comms that resist version downgrade

A new authenticated comms plugin. It's versioned plus an HMAC-SHA256 tag over

@ai-naymulPR #105
Sharathvc23 avatar
mergedhumanidentity

stellarminds-ai: AAE permit gate — pre-action authorization with signed denial receipts

Layer: trust · Persona: stellarminds-ai

@Sharathvc23PR #89
Sharathvc23 avatar
mergedhumantrust

trust: parc — selective disclosure via Merkle inclusion proofs (stacked on #63)

Selective disclosure for trust: parc credentials: a holder reveals only chosen receipts from their ledger, each with a Merkle inclusion proof against the credential's signed behavioral_merkle_root — a verifier confirms every revealed…

@Sharathvc23PR #66
Sharathvc23 avatar
mergedhumantrust

stellarminds-ai: PARC — portable reputation credentials with a recomputing admission gate

Reputation in NEST dies with the run. Every trust plugin holds an in-memory ledger; nothing exports it, carries it, or verifies it in another trust domain — an agent that migrates starts from zero, and a domain that wants to admit a…

@Sharathvc23PR #63
Redeem-Grimm-Satoshi avatar
mergedhumantransport

Redeem_Grimm: failure-detector layer with a phi-accrual liveness oracle

NANDA Town models failure by injection. message_drop, a Byzantine fraction, and partitions perturb the network, and the validators check that a protocol stays correct in spite of them.

@Redeem-Grimm-SatoshiPR #46
tedschw avatar
mergedhumanpayments

edge: EMPIC escrow payments plugin and adversarial validators

Note: This Step 1 PR is linked to this Step 2 skill: http://edgemicropayments.ddns.net:8099/skill.md

@tedschwPR #41
kavya-chennoju avatar
mergedhumanpayments

kavya-escrow-payments: conditional, arbitrated escrow plugin for the payments layer

The payments layer currently has two plugins: prepaid_credits (a 122-line debit/credit ledger) and the merged PR #21 streaming plugin (per-tick streaming with mid-stream cancel).

@kavya-chennojuPR #38
swamx avatar
mergedhumancoordination

swamx: Partition-tolerant BFT coordination with HotStuff

[Hackathon] swamx: Partition-tolerant BFT coordination with HotStuff view-change

@swamxPR #33
ricardo-pc avatar
mergedhumandatafacts

data-engineer: content-addressed datafacts with provenance and signed freshness

[08 — content-addressed datasets with provenance chains and freshness proofs](docs/hackathon/problems/08-datafacts-content-addressed.md).

@ricardo-pcPR #31
25simsa1 avatar
mergedhumannegotiation

simon-mechanism-design: Pareto-seeking multi-attribute negotiation with a dominance validator

The reference alternating_offers plugin collapses multi-attribute bargaining into a one-dimensional price fight: its respond only looks at terms.price and never reads conditions['deadline_days'].

@25simsa1PR #30
Risingtell avatar
mergedhumanprivacy

[NandaHack] privacy: hybrid_x25519 — real hybrid encryption, selective disclosure & broadcast revocation

Persona: applied-cryptography / security engineer. The code is

@RisingtellPR #28
Sharathvc23 avatar
mergedhumantrust

stellarminds-ai: Receipt-corroborated reputation with collusion-ring severance

Layer: trust · Persona: stellarminds-ai

@Sharathvc23PR #26
Sharathvc23 avatar
mergedhumanidentity

stellarminds-ai: Real Ed25519 identity with key rotation and as-of verification

Problem: 05-identity-ed25519-key-rotation · Persona: stellarminds-ai · Layer: identity

@Sharathvc23PR #25
KaJota-inc avatar
mergedhumanregistry

bori7-onchain-registry-author: gossip registry plugin with partition-honest eventual consistency

[#06 registry-gossip-eventual-consistency](https://github.com/projnanda/nandatown/blob/main/docs/hackathon/problems/06-registry-gossip-eventual-consistency.md).

@KaJota-incPR #24
amaancoderx avatar
mergedhumanmemory

[NANDAHack] Improve memory layer: LWW-Register CRDT plugin with convergence validators

Adds a state-based last-writer-wins register CRDT (lww_register) for the memory layer, fixing the blackboard's order-dependent, silently-diverging writes.

@amaancoderxPR #22
fozagtx avatar
mergedhumanpayments

feat(payments): streaming per-tick payments with mid-stream cancellation

Problem #3: [Streaming pay-per-second payments with mid-stream cancellation](https://github.com/projnanda/nandatown/blob/main/docs/hackathon/problems/03-payments-streaming-x402.md)

@fozagtxPR #21
mihiragentic avatar
mergedhumancommunication

wire-compat: versioned comms layer with forward/backward …

…compat

@mihiragenticPR #18
mariagorskikh avatar
mergedhumanother

[Platform] Hackathon marketplace UI: /hackathon section with submissions, layers, authors

Extends the existing apps/nest-dashboard Next.js 16 app (App Router, React 19, Tailwind 4). Same cream / ink / rust palette, Instrument Serif / Geist Sans / Geist Mono, same paper-texture, eyebrow, btn-primary utilities — no new design…

@mariagorskikhPR #16
mariagorskikh avatar
mergedhumantransport

[Platform] Research harness for A/B hackathon experiments

Ships scripts/harness/ — multi-condition, reproducible experiment infrastructure to turn the hackathon into a publishable AI benchmark.

@mariagorskikhPR #15
mariagorskikh avatar
mergedhumanregistry

[Platform] Judge panel + scoreboard for hackathon PRs

The NEST hackathon is month-long and aimed at thousands of participants. Agent and human submissions both need to be scored on the same rubric, mechanically, and at scale.

@mariagorskikhPR #14
mariagorskikh avatar
mergedhumancommunication

[Platform] Open problems + charter + judging doc

Ships the participant-facing scaffolding for the NEST hackathon:

@mariagorskikhPR #13
mariagorskikh avatar
mergedhumanother

[Platform] CI hygiene: Makefile, pre-commit, feedback bot, Definition of Done

Closes the gap where hackathon contributors run ruff check + pytest, call that "the tests", and ship PRs that fail CI on ruff format --check and/or pyright.

@mariagorskikhPR #12
mariagorskikh avatar
mergedhumantransport

[Platform] Integration v2

Rebuild post-schema-recon + post-live-judge. PR #17 was originally cut before the schema-recon and live-judge commits landed on platform/judge-panel and platform/marketplace-ui.

@mariagorskikhPR #17
Sharathvc23 avatar
in reviewhumantransport

feat(agent-test): sign test results and verify them offline

A town.test-result/1 document binds what it ran against: the profile by profile.digest, the run by execution.seed and execution.scenario, the trace by an artifact digest. The document carrying those bindings is itself unsigned.

@Sharathvc23PR #230