[ ] 17791 Remove received Brain executables from the Engine, [ ] 13 Receive Agent OS source and package topology in the Brain, [x] 17787 Bind the Agent OS cut manifest to the freeze line
Skills reach consuming repos as an npm dependency, never as copied bytes
neomjs/neo#17784 shipped a canonical store and then copied its bytes into every consuming repo, with a receipt and a two-leg guard to police divergence between those copies. The operator rejected that twice — SSOT violation on neomjs/devindex#6, and a merged-then-reverted neomjs/neo-agent-brain#5 — and @neo-gpt falsified its freshness model: a consumer pinned to an older canonical revision verified green while measurably behind. A store whose contents are duplicated N times is not canonical, and the machinery needed to police those duplicates was evidence of the mistake rather than mitigation of it.
The operator's mechanism, first-hand: "Other repos have an npm DEPENDENCY for the skills repo. postinstall hook can create SYMLINKS into the node_module[s]. Skill changes ⇒ package.json VERSION BUMP. This is KISS ⇒ TRIVIALLY EASY."
Live latest-open sweep: latest 20 open issues at 2026-08-26T09:11:07Z; no equivalent. Closed sweep run because this topic has a closed predecessor — only neomjs/neo#17784 itself. A2A: Emmy's lifecycle broadcast mandates a new successor; no peer claim outstanding.
The Problem
Nothing kept consuming repos current, and the failure mode was invisible staleness — neomjs/devindex carried a hand-copied AGENTS.md and no skill tree at all, with no instrument reporting either. That problem is real. The rejected fix was the transport, not the goal.
Committed copies fail for a structural reason worth stating once: they create N authoritative-looking trees, so every subsequent question ("is this repo current?") requires bespoke machinery to answer. An npm dependency answers it with npm outdated.
The Architectural Reality
neomjs/neo-agent-skills — dev is the sole branch (operator-switched); main becomes release-only via the pipeline. Package contract already live at dev@ecb4e69a07: package.json (neo-agent-skills@0.1.0, unscoped per the neo.mjs / neo-agent-brain convention) and scripts/materialize-harness-skills.mjs.
neomjs/neo — today authors .agents/skillsand carries 37 committed .claude/skills links. Both change: authoring moves to canonical, and the links become untracked projection.
npm install <pkg> does not run the consumer's postinstall; only a bare npm install does. Measured on a clean fixture. The command that bumps the dependency therefore leaves links stale until the next install.
npm ci --ignore-scripts skips postinstall and prepare, and is already deliberate practice in three neomjs/neo workflows — under this transport it yields a resolved dependency and zero reachable skills.
The Fix
Publishneo-agent-skills to the registry. Currently E404; the npm org is operator-owned and no agent can clear it.
Consumers take the dependency — package.json entry plus lockfile — and run the materializer from postinstall.
Untrack the projection..claude/skills becomes git-ignored; the 37 committed links are removed from neomjs/neo.
Authoring moves to neo-agent-skills/dev; promotion is version bump + publish.
Consumer CI asserts materialization, which is the whole answer to --ignore-scripts.
Contract Ledger Matrix
Target surface
Source of authority
Proposed behavior
Fallback
Docs
Evidence
neo-agent-skills npm package
canonical dev
registry-published; version bumps on skill change
unpublished ⇒ consumers cannot adopt
package README
live at dev@ecb4e69a07
consumer postinstall
skills.manifest.json
symlinks into node_modules; zero bytes in consumer git
hook skipped ⇒ CI red via --check
script docblock
clean-fixture install proof
.claude/skills in consumers
manifest projection
untracked, git-ignored
tracked entries are shadow bytes
consumer README
37 links currently tracked in neomjs/neo
freshness
npm
npm outdated / dependabot
—
—
ecosystem-native; no bespoke gate
Decision Record
Required: ADR — ADR 0041 is Proposed with its transport and freshness sections rescinded; this ticket supplies the replacement text and flips it to Accepted.
Decision Record impact
amends ADR 0041 (transport + freshness) · aligned-with ADR 0040 — skill-tree custody after the cut stays the cut's question, not this ticket's.
Acceptance Criteria
AC-1 — neo-agent-skills resolves from the registry; npm view neo-agent-skills version returns a version.
AC-2 — neomjs/neo, neomjs/neo-agent-brain, and neomjs/devindex each declare the dependency and run the materializer from postinstall; a clean git clone + npm install yields a working projection with zero skill bytes tracked, proven by git ls-files. Widened 2026-08-26 by operator directive — the Brain must consume the substrate today, and this AC named only neomjs/neo. Brain consumption is purely additive (it never carried the corpus); neomjs/neo sheds 170 files.
AC-3 — both projection surfaces are untracked in neomjs/neo and git-ignored: the 37 .claude/skills links and the 133-file .agents/skills tree. A tracked entry under either fails CI. Widened 2026-08-26 after @neo-gpt's audit added the harness-neutral .agents/skills surface: 0.1.1's guard refuses to materialize over git-tracked content, so leaving .agents/skills tracked makes the whole transport inert on this repo. Consequence stated plainly — neomjs/neo stops authoring the corpus and becomes a pure consumer, which is D#17782's stated model ("consume … at pinned revisions") but is a larger change than this AC originally described.
AC-4 — consumer CI runs --check and goes red when materialization did not happen. Red control: an npm ci --ignore-scripts install must fail it, demonstrated, not asserted.
AC-5 — no freshness gate, no epoch-lag check, no red-at-historical-pin exists anywhere in the mechanism. Absence is the criterion.
AC-6 — rewrite ADR 0041 and flip it to Accepted.VOID: ADR 0041 exists only on closed, unmerged PR neomjs/neo#17793 and never entered dev; there is no repository document to amend or accept.
Out of Scope
Skill-tree custody after the cut — neomjs/neo#17786's manifest decides it.
Enforcement binding / required status checks — neomjs/neo#17783.
The Windows core.symlinks arm and commit-vs-gitignore of link entries beyond AC-3.
Re-litigating transport. The operator has ruled; submodule and committed-copy ideation is closed.
Avoided Traps
Committed copies. Rejected twice by the operator; duplicated bytes are what made the drift machinery necessary.
A bespoke freshness gate. Explicitly retracted upstream as manufactured-problem machinery. npm outdated is the surface.
Assuming postinstall ran. Measured: npm install <pkg> does not fire it, and --ignore-scripts skips it. AC-4 is the arm, not an assumption.
A git-URL dependency. Complicates lifecycle scripts; registry is the KISS reading.
Retrieval Hint: query_raw_memories("npm transport skills dependency postinstall symlink ignore-scripts materialization")
tobiu referenced in commit c038a62 - "fix: strip dead committed-copy machinery before first publish (neomjs/neo#17798) on Aug 26, 2026, 11:19 AM
tobiu referenced in commit d637e75 - "fix: delete the facts renderer and schema — no ticket asks for them (neomjs/neo#17798) on Aug 26, 2026, 11:22 AM
tobiu referenced in commit 652972f - "fix: delete the reusable guard workflow — every script it calls is gone (neomjs/neo#17798) on Aug 26, 2026, 11:23 AM
tobiu referenced in commit ba719c0 - "feat: harness-neutral surface, exact link verification, lean package (neomjs/neo#17798) on Aug 26, 2026, 11:35 AM
tobiu referenced in commit e861766 - "feat: canonical anti-bloat CI for the skill corpus (neomjs/neo#17798) on Aug 26, 2026, 11:41 AM
tobiu referenced in commit 287c3a4 - "fix: refuse to materialize over git-tracked content (neomjs/neo#17798) on Aug 26, 2026, 12:05 PM
tobiu referenced in commit 5915cf2 - "test(ci): regression arm proving materialization refuses tracked content (neomjs/neo#17798) on Aug 26, 2026, 12:16 PM
tobiu referenced in commit a899fc8 - "fix(ci): Node 24, matching the engine (neomjs/neo#17798)" on Aug 26, 2026, 12:36 PM
tobiu referenced in commit 6c91df2 - "fix(ci): target dev, this repo's default branch (neomjs/neo#17798) on Aug 26, 2026, 12:55 PM
tobiu referenced in commit c353282 - "test: port the combined-surface boundary cases with the rule (neomjs/neo#17798) on Aug 26, 2026, 12:58 PM
tobiu referenced in commit ac35fd5 - "ci: pin node 24, the engine's LTS (neomjs/neo#17798) on Aug 26, 2026, 1:00 PM
tobiu referenced in commit ce3d929 - "feat: consume the agent skill substrate as an npm dependency (neomjs/neo#17798) on Aug 26, 2026, 1:03 PM
tobiu referenced in commit 3d6f41c - "feat: absorb the manifest schema and growth-justification rules (neomjs/neo#17798) on Aug 26, 2026, 1:14 PM
Successor to neomjs/neo#17784 (CLOSED NOT_PLANNED). Graduated from D#17756 comment 18159875.
Context
neomjs/neo#17784 shipped a canonical store and then copied its bytes into every consuming repo, with a receipt and a two-leg guard to police divergence between those copies. The operator rejected that twice —
SSOT violationon neomjs/devindex#6, and a merged-then-reverted neomjs/neo-agent-brain#5 — and @neo-gpt falsified its freshness model: a consumer pinned to an older canonical revision verified green while measurably behind. A store whose contents are duplicated N times is not canonical, and the machinery needed to police those duplicates was evidence of the mistake rather than mitigation of it.The operator's mechanism, first-hand: "Other repos have an npm DEPENDENCY for the skills repo. postinstall hook can create SYMLINKS into the node_module[s]. Skill changes ⇒ package.json VERSION BUMP. This is KISS ⇒ TRIVIALLY EASY."
Live latest-open sweep: latest 20 open issues at 2026-08-26T09:11:07Z; no equivalent. Closed sweep run because this topic has a closed predecessor — only neomjs/neo#17784 itself. A2A: Emmy's lifecycle broadcast mandates a new successor; no peer claim outstanding.
The Problem
Nothing kept consuming repos current, and the failure mode was invisible staleness —
neomjs/devindexcarried a hand-copiedAGENTS.mdand no skill tree at all, with no instrument reporting either. That problem is real. The rejected fix was the transport, not the goal.Committed copies fail for a structural reason worth stating once: they create N authoritative-looking trees, so every subsequent question ("is this repo current?") requires bespoke machinery to answer. An npm dependency answers it with
npm outdated.The Architectural Reality
neomjs/neo-agent-skills—devis the sole branch (operator-switched);mainbecomes release-only via the pipeline. Package contract already live atdev@ecb4e69a07:package.json(neo-agent-skills@0.1.0, unscoped per theneo.mjs/neo-agent-brainconvention) andscripts/materialize-harness-skills.mjs.neomjs/neo— today authors.agents/skillsand carries 37 committed.claude/skillslinks. Both change: authoring moves to canonical, and the links become untracked projection.npm install <pkg>does not run the consumer'spostinstall; only a barenpm installdoes. Measured on a clean fixture. The command that bumps the dependency therefore leaves links stale until the next install.npm ci --ignore-scriptsskipspostinstallandprepare, and is already deliberate practice in threeneomjs/neoworkflows — under this transport it yields a resolved dependency and zero reachable skills.The Fix
neo-agent-skillsto the registry. CurrentlyE404; the npm org is operator-owned and no agent can clear it.package.jsonentry plus lockfile — and run the materializer frompostinstall..claude/skillsbecomes git-ignored; the 37 committed links are removed fromneomjs/neo.neo-agent-skills/dev; promotion is version bump + publish.--ignore-scripts.Contract Ledger Matrix
neo-agent-skillsnpm packagedevdev@ecb4e69a07postinstallskills.manifest.jsonnode_modules; zero bytes in consumer git--check.claude/skillsin consumersneomjs/neonpm outdated/ dependabotDecision Record
Required: ADR— ADR 0041 isProposedwith its transport and freshness sections rescinded; this ticket supplies the replacement text and flips it toAccepted.Decision Record impact
amends ADR 0041(transport + freshness) ·aligned-with ADR 0040— skill-tree custody after the cut stays the cut's question, not this ticket's.Acceptance Criteria
neo-agent-skillsresolves from the registry;npm view neo-agent-skills versionreturns a version.neomjs/neo,neomjs/neo-agent-brain, andneomjs/devindexeach declare the dependency and run the materializer frompostinstall; a cleangit clone+npm installyields a working projection with zero skill bytes tracked, proven bygit ls-files. Widened 2026-08-26 by operator directive — the Brain must consume the substrate today, and this AC named onlyneomjs/neo. Brain consumption is purely additive (it never carried the corpus); neomjs/neo sheds 170 files.neomjs/neoand git-ignored: the 37.claude/skillslinks and the 133-file.agents/skillstree. A tracked entry under either fails CI. Widened 2026-08-26 after @neo-gpt's audit added the harness-neutral.agents/skillssurface:0.1.1's guard refuses to materialize over git-tracked content, so leaving.agents/skillstracked makes the whole transport inert on this repo. Consequence stated plainly —neomjs/neostops authoring the corpus and becomes a pure consumer, which is D#17782's stated model ("consume … at pinned revisions") but is a larger change than this AC originally described.--checkand goes red when materialization did not happen. Red control: annpm ci --ignore-scriptsinstall must fail it, demonstrated, not asserted.AC-6 — rewrite ADR 0041 and flip it toVOID: ADR 0041 exists only on closed, unmerged PR neomjs/neo#17793 and never enteredAccepted.dev; there is no repository document to amend or accept.Out of Scope
core.symlinksarm and commit-vs-gitignore of link entries beyond AC-3.Avoided Traps
npm outdatedis the surface.postinstallran. Measured:npm install <pkg>does not fire it, and--ignore-scriptsskips it. AC-4 is the arm, not an assumption.Related
neomjs/neo#17784 (closed predecessor) · neomjs/neo#17783 (enforcement custody) · neomjs/neo#17791 (blocked on this) · neomjs/neo#17500 · D#17756 · D#17782 · ADR 0041
Origin Session ID: f27af939-3cec-4f52-a67d-e4e8786fed08
Retrieval Hint:
query_raw_memories("npm transport skills dependency postinstall symlink ignore-scripts materialization")