docs: the hard-stop paths pointed at a root that has none of those files - #686
Conversation
…ere wrong Two gaps found by measuring rather than reading, both in the class of "a wrong or missing message sends the next agent astray". 1. HARD-STOP PATHS WERE WRONG. This file listed Marco De Rossi's protected files as bare root-level names -- ERC8004SPEC.md, contracts/, test/, abis/. None of the four exist at hyperdag-protocol's root; all live under packages/contracts/. An agent that checked the documented path, found nothing, and concluded the hard stop had gone stale would have read a live prohibition as a dead one, on the one set of files that must not be touched. 2. hyperdag-protocol HAD NO ENTRY POINT AT ALL. A find across its whole tree for CLAUDE.md / AGENTS.md / LESSONS.md returned nothing. The other four surfaces each carry one. A missing file raises no warning and fails no check; it just produces an agent working with less context than it thinks it has. It now carries a CLAUDE.md with the corrected hard-stop paths, the public-repo discipline, Sean's execution rules and the operator environment. Adds the per-surface read-first table here too, so the pointer exists on the surface an agent actually lands on rather than only in LESSONS rule 12. npm run check VERIFIED; lessons-injectable 10/10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3yrSVaGDLirLw4itQJ5wK
Strix Security ReviewNo security issues found. Updated for Reviewed by Strix |
There was a problem hiding this comment.
Reviewed PR #686, a documentation-only change to CLAUDE.md. The diff adds a cross-repository "read first" guidance table and corrects hard-stop file paths under hyperdag-protocol/packages/contracts/. No runtime code, configuration, secrets, or security controls were added or modified; the change introduces no attack surface and no actionable security findings.
Reviewed by Strix
Configure security review settings
Sean named the real scope: TrustShell, TrustMarket, TrustRepID, TrustRails, TrustTrader, TrustCRE, TrustEscrow and TrustMedical are all planned on the same HAL / RepID / ERC-8004 / x402 harness, plus third parties building via TrustMarket. Not five surfaces -- thirteen-plus and open-ended. Two corrections to what this branch originally said. 1. The table SHIPPED INCOMPLETE. DealAppSeo/trustrails-dev is live today and is documented in trinity-ecosystem/CLAUDE.md's deployment table, and it is not in the rows here. Absence from the table must not be read as "that surface has no rules", so the table now says so out loud. 2. The PR body claimed it "goes wrong only if a surface renames its entry point, which is loud". That is false. It also goes wrong when a surface is ADDED, and that failure is silent: the new surface is simply not listed, nothing breaks, and an agent landing there sees no pointer -- the exact defect this section was written to fix, reintroduced one level up. A per-repo list of all siblings is N tables of N rows; adding a surface means editing every other repo. That is the hand-maintained jest `roots` list under Test layout wearing different clothes, and the recorded lesson there is to prefer a discovery rule to a list anywhere this pattern appears. The fix named in place is a star, not a mesh: one line per repo naming true north, nothing about siblings, no table to rot. Left as a named pending decision rather than done here, because whether outside builders get a separate PUBLISHED contract instead of this internal file is Sean's call -- LESSONS.md is capped at 6000 chars because it is a dispatch payload, and it is full of dated retractions a stranger evaluating the ecosystem should not meet first. The hard-stop path correction in this branch is unaffected and correct at any scale. npm run check VERIFIED; lessons-injectable 10/10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3yrSVaGDLirLw4itQJ5wK
|
@strix-security new head Correcting a false claim this PR was carrying, rather than merging with it in. The original body said the read-first table "goes wrong only if a surface renames its entry point, which is loud." That is false, and the counterexample already existed at the moment I wrote it: It also goes wrong when a surface is added, and that failure is silent — the new surface simply is not listed, nothing breaks, and an agent landing there sees no pointer. That is the exact defect this section was written to fix, reintroduced one level up. The scope is wider than five repos: TrustShell, TrustMarket, TrustRepID, TrustRails, TrustTrader, TrustCRE, TrustEscrow and TrustMedical are all planned on the same HAL / RepID / ERC-8004 / x402 harness, plus third parties building via TrustMarket. A per-repo list of all siblings is N tables of N rows — the hand-maintained jest So this push does three things and deliberately stops short of a fourth:
The hard-stop path correction — the four Marco De Rossi paths being under
Generated by Claude Code |
There was a problem hiding this comment.
Reviewed the only changed file, CLAUDE.md. The PR is documentation-only: it adds a cross-repo "read first" pointer table, clarifies that the table is deliberately non-exhaustive, and corrects the hyperdag-protocol hard-stop file paths from bare root-level names to their actual location under packages/contracts/. No executable code, runtime configuration, secrets, or security-relevant data flows were introduced or modified, so no security findings apply.
Reviewed by Strix
Configure security review settings
There was a problem hiding this comment.
Reviewed the single changed file, CLAUDE.md (+47/-1). The diff is documentation-only: it adds a "read first" table listing agent entry points across sibling repositories, documents that the table is intentionally non-exhaustive, and corrects the paths in a "hard stops" list from bare root-level names to their actual packages/contracts/ locations. No code, secrets, injection sinks, authentication/authorization logic, input handling, or runtime behavior is changed. The content does not disclose any actual secrets (the RepID scoring formula and ANFIS parameters are only referenced as items that must not appear in public docs). No security vulnerabilities were introduced or exposed by this PR.
Reviewed by Strix
Configure security review settings
Two gaps found by measuring the other repos rather than reading about them. Both are the class LESSONS rule 12 exists for: a wrong or missing message sends the next agent astray, and outlives the thing it describes.
1. The Marco De Rossi hard stop named paths that do not exist
The line read:
Four bare root-level names. None of the four exist at that repository's root [MEASURED 2026-09-08]. All live one directory down, under
packages/contracts/:The failure mode is silent and lands on the worst possible target. An agent checks the documented path before touching anything — the correct instinct — finds nothing there, and concludes the hard stop is stale. A live prohibition read as a dead one, on the one set of files that must not be touched without Sean's permission.
This is the same shape as the
plonky3-stubline that prompted rule 12: not a lie, just a description nobody re-measured, repeated forward as fact.2.
hyperdag-protocolhad no entry point at allA
findacross its whole tree forCLAUDE.md/AGENTS.md/LESSONS.mdreturned nothing. The other four surfaces each carry one.A missing file is worse than a wrong one because nothing announces it — no warning, no failing check, no 404. It just produces an agent working with less context than it believes it has, and no prompt to go looking. It now carries a
CLAUDE.mdwith the corrected hard-stop paths, the public-repo discipline, Sean's execution rules and the operator environment: DealAppSeo/hyperdag-protocol#19.3. The pointer now exists where an agent lands
Rule 12 names the four surfaces, and
LESSONS.mdis injected into every XC/GA dispatch — so XC and GA see it. Nobody else does. Measured across all five repos, the string appears in exactly one file. An agent starting intrinity-ecosystem,trustshellortrinity-symphony-sharedgets that repo's own guidance and no sign that a cross-surface true north exists.This adds the read-first table to the top of this file, where every reader of it already arrives:
repid-engineLESSONS.md, then this filetrinity-ecosystemCLAUDE.md, thendocs/PRIOR-WORK-INDEX.mdtrustshellAGENTS.md(CLAUDE.mdis a one-line@AGENTS.mdinclude)trinity-symphony-sharedCLAUDE.md— lane rules; take a lane before touching a repohyperdag-protocolCLAUDE.mdEach row was verified by reading the named file on that surface — including that
trustshell/CLAUDE.mdis a single@AGENTS.mdline, which is why that row namesAGENTS.mdand notCLAUDE.md.This is a table, and tables go stale. It is deliberately the shortest durable thing: five filenames, no verdicts, no dated measurements. It goes wrong only if a surface renames its entry point, which is loud.
Verification
npm run check→ VERIFIED (1 check, 163 markdown files scanned).tests/lessons-injectable.test.ts→ 10/10 —LESSONS.mdis unchanged, so the 6000-character injection cap is untouched. The table went inCLAUDE.md, which has no cap, precisely so the capped file did not have to give something up for it.NOT CHECKED: whether any other document repeats the bad hard-stop paths. I corrected the two places I measured — this file and the new
hyperdag-protocol/CLAUDE.md.🤖 Generated with Claude Code
https://claude.ai/code/session_01F3yrSVaGDLirLw4itQJ5wK
Generated by Claude Code