Skip to content

AGENTS.md contradicts itself on the Node version for the marketplace ingest workflow #479

Description

@orioltf

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-specsEnough info from reporter; ready to write a specrepoArea: monorepo-wide / cross-cutting worktech-debtInternal restructuring; no behaviour change

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions