Skip to content

finding(docs): ci-cd-pipeline.md says "every workflow declares '22.x'" — one lane declares '22', and that lane is the reason #6400's anchor normalises on the major #6448

Description

@os-warren

Found while implementing #6400 (deriving the node-version set from .github/workflows so the ledger's Node 22.x entries stop restating a hand-written count). Deliberately not fixed there: #6400's PR is test-only and this is a prose edit on a guide page, and — more to the point — this exact sentence is the one the neighbouring ledger entry (ci-cd-pipeline.md :: node-version: 20, landed by #6409) is anchored on. Rewording it is a claim on that entry, not on #6400's.

The sentence

content/docs/guide/ci-cd-pipeline.md:1744, inside the numbered "adding a new workflow" steps:

  1. Copy the pnpm + Turbo setup from a workflow that runs today, not from a snippet on this
    page. A copied YAML block is a fossil the moment it is pasted — this page used to keep
    one here, and every line of it had drifted: actions/setup-node@v4 where every workflow
    now uses @v7, a hardcoded node-version: 20where every workflow declares '22.x'
    (and 20 sat below the floor the root package.json's engines field now declares), and
    pnpm/action-setup@v4, which no workflow in this repository has ever used …

Measured on c8ea8af9c (origin/main at 2026-08-26T00:47Z)

$ grep -rhoP "node-version:\s*'22\.x'" .github/workflows/ | wc -l
27
$ grep -rhoP "node-version:\s*'22'" .github/workflows/ | wc -l
1
$ grep -rnP "node-version:\s*'22'" .github/workflows/
.github/workflows/half-state-patrol.yml:196: node-version: '22'

28 declarations across 23 files. 27 are spelled '22.x'; half-state-patrol.yml is spelled '22'. So "every workflow declares '22.x'" is false as written — by one lane, on the spelling, not on the version.

Control, same page and same sweep: the page's three references to readme-exports.yml all resolve to a workflow that exists (.github/workflows/readme-exports.yml), so this is not a page whose workflow references have gone stale wholesale — the rest of the paragraph measures true, including @v7 and the pnpm/action-setup@v4 claim.

Why it is worth a card rather than a shrug

It is the same defect shape as #6400 one layer out: an absolute quantifier over .github/workflows written into prose, which one lane falsifies and nothing re-measures. #6400 moved the ledger's version anchor into a run precisely because a sentence a reader re-measures by is not re-measured by anything; this sentence is on the page rather than in the ledger, and #6400's new assertion deliberately does not cover it (it compares the major a page states against the major the workflows declare — it is blind to spelling, which is the whole reason it can see the '22' lane at all).

The claim the sentence is making is true and worth keeping: a copied block pinning 20 is a fossil, and the tree is on 22 everywhere. What is wrong is the spelling-level absolute.

Two dispositions, both one line:

A is recommended: the sentence is teaching don't copy a fossilised pin, and the spelling of the quote marks is not part of that lesson. Same reasoning #6409 used when it deliberately gave its own node-version: 20 ledger entry no declaration count.

Related: #6400 (the ledger entries for the same page's Node 22.x literal), #6409 (the ledger entry anchored on this very sentence), #6447 (the same class in the pnpm 10.x entries).

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:queue

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions