Problem
AGENTS.md now states two rules that contradict each other, and nothing in the file says which one wins.
The Tech stack section says:
- Runtime: Node.js ≥ 22.
.nvmrc is the source of truth for local dev (currently 24.15.0) and is consumed by actions/setup-node in CI.
The Marketplace ingest section, added in #478, says:
Both files are upstream templates, copied verbatim. Never hand-edit them and never reformat them.
One of those two files pins a Node version below the stated floor:
# .github/workflows/marketplace-ingest.yml
- uses: actions/setup-node@v4
with: { node-version: '20' }
The other two workflows read .nvmrc:
| workflow |
Node version |
ci.yml |
node-version-file: .nvmrc |
streams-page.yml |
node-version-file: .nvmrc |
marketplace-ingest.yml |
node-version: '20' |
ci.yml also runs a node: ['22', '24'] test matrix, so 20 appears nowhere else in this repository.
No behaviour is broken today
The mapper needs node:fs, node:path, JSON, Buffer and process. Its own header declares its floor:
// 077 — repo → artefact-envelope mapper for CI pipelines. Zero dependencies (Node 18+).
So Node 20 runs it. This is a contradiction in the instructions an agent always loads, not a failing pipeline. The cost is that the next agent to read both sections has to guess, and either guess is defensible.
Two ways out
Keep the pin, name the exception. Add a sentence to the Marketplace ingest section saying the template's Node pin is below this repository's floor on purpose, because byte-identity with upstream is worth more than version consistency for a script that needs neither. Costs nothing, and the next re-copy from VP still reads as no diff.
Edit the pin, drop the verbatim claim for that file. Change the two lines to node-version-file: .nvmrc and say in the same section that this one file carries a local deviation. The workflow then follows the repo's runtime rule, and every future re-copy shows a diff a person has to re-apply by hand.
The first option is cheaper and keeps the re-copy clean. The second is more honest about which rule the repo actually enforces. Pick one and make AGENTS.md say so.
Whichever wins, a third option is worth ruling out explicitly: do not raise the pin to '24' and leave it hardcoded. That satisfies the floor, breaks byte-identity, and still ignores .nvmrc — the worst of both.
Provenance
Found by the review on #478. Scored 50 of 100 against that command's 80 threshold, so it was never posted to the PR and was deferred here by decision instead. The measurement above was taken on 2026-09-07 against commit 283a7ab.
Acceptance criteria
Not written yet — hence needs-specs. Whoever writes them should note that the evidence is a read, not a run: AGENTS.md either names the exception or the workflow reads .nvmrc, and the two sections agree either way.
Problem
AGENTS.mdnow states two rules that contradict each other, and nothing in the file says which one wins.The Tech stack section says:
The Marketplace ingest section, added in #478, says:
One of those two files pins a Node version below the stated floor:
The other two workflows read
.nvmrc:ci.ymlnode-version-file: .nvmrcstreams-page.ymlnode-version-file: .nvmrcmarketplace-ingest.ymlnode-version: '20'ci.ymlalso runs anode: ['22', '24']test matrix, so20appears nowhere else in this repository.No behaviour is broken today
The mapper needs
node:fs,node:path,JSON,Bufferandprocess. Its own header declares its floor:So Node 20 runs it. This is a contradiction in the instructions an agent always loads, not a failing pipeline. The cost is that the next agent to read both sections has to guess, and either guess is defensible.
Two ways out
Keep the pin, name the exception. Add a sentence to the Marketplace ingest section saying the template's Node pin is below this repository's floor on purpose, because byte-identity with upstream is worth more than version consistency for a script that needs neither. Costs nothing, and the next re-copy from VP still reads as no diff.
Edit the pin, drop the verbatim claim for that file. Change the two lines to
node-version-file: .nvmrcand say in the same section that this one file carries a local deviation. The workflow then follows the repo's runtime rule, and every future re-copy shows a diff a person has to re-apply by hand.The first option is cheaper and keeps the re-copy clean. The second is more honest about which rule the repo actually enforces. Pick one and make
AGENTS.mdsay so.Whichever wins, a third option is worth ruling out explicitly: do not raise the pin to
'24'and leave it hardcoded. That satisfies the floor, breaks byte-identity, and still ignores.nvmrc— the worst of both.Provenance
Found by the review on #478. Scored 50 of 100 against that command's 80 threshold, so it was never posted to the PR and was deferred here by decision instead. The measurement above was taken on 2026-09-07 against commit
283a7ab.Acceptance criteria
Not written yet — hence
needs-specs. Whoever writes them should note that the evidence is a read, not a run:AGENTS.mdeither names the exception or the workflow reads.nvmrc, and the two sections agree either way.