Skip to content

The weekly freshness check could not fail, and the .nvmrc §4 asks for - #178

Merged
oblomov-dev merged 3 commits into
mainfrom
claude/repos-tests-improvements-ia9cna
Aug 28, 2026
Merged

The weekly freshness check could not fail, and the .nvmrc §4 asks for#178
oblomov-dev merged 3 commits into
mainfrom
claude/repos-tests-improvements-ia9cna

Conversation

@oblomov-dev

@oblomov-dev oblomov-dev commented Aug 28, 2026

Copy link
Copy Markdown
Member

1. release-freshness.yml has never been able to report anything

run: node scripts/check-version.mjs | tee version.txt

GitHub runs a run: step as bash -e {0} — errexit, but not pipefail. A
pipeline reports its last command's status, and tee succeeds whenever it can
write the file. So the step passed however stale the site was, and the
if: failure() step below it — the one that opens the stale-release issue —
never ran.

A weekly check that reports nothing and looks green doing it is the failure mode
this organisation names as the worst it can produce.

Measured rather than reasoned:

$ bash -e -c 'node failing.mjs | tee version.txt'; echo $?
0          # Actions reads this as PASSED

$ bash -e -c 'set +e; node failing.mjs | tee version.txt; S=${PIPESTATUS[0]}; set -e; exit $S'; echo $?
1          # correctly red

abap2UI5/linter's upstream-sync.yml already handles the identical
node … | tee shape with PIPESTATUS, so this copies an in-house pattern
rather than inventing one.

2. A green run claimed more than it had established

check-version.mjs ended with `the documentation names the release that exists

  • OK` — even when the release API had been unreachable, two lines under its own
    report that this was UNVERIFIED. The three places had been compared against
    each other and against nothing else.

It now says which of the two it actually checked. Still exit 0 when the API is
down: an outage is not a documentation defect, and the same reasoning
shared-file-gate.mjs writes down ("must not claim to have verified something
they did not") applies to the wording as much as to the verdict.

Both branches exercised — the unreachable one with fetch stubbed out.

3. The .nvmrc CONVENTIONS §4 asks for

§4 is one sentence: "engines.node is >=22 and .nvmrc says 22." The first
half was here; the second was missing — in seven of the nine repositories,
only abap2UI5 and linter had it. §4 is the one section
conventions-gate.mjs does not touch at all, which is how it drifted. The file
records what is already true: CI here already runs Node 22 and engines.node
already says >=22. abap2UI5#2679 adds the gate that keeps it that way.

Checks

npm run check — 33 tests, the VitePress build and all seven gates, green.

Section 4 is one sentence: "`engines.node` is `>=22` and `.nvmrc` says `22`."
The first half was here; the second was missing — in seven of the nine
repositories, which is what happens to a rule with no gate behind it. Section 4
is the only section of CONVENTIONS.md that `conventions-gate.mjs` does not
touch: it decides workflow file names (§2), AGENTS.md/CLAUDE.md pairing (§6)
and .gitattributes (§6), and nothing at all about the toolchain.

The file records what is already true rather than proposing a move: CI runs
Node 22 here and `engines.node` already says `>=22`. What it changes is that
`nvm use` picks that version instead of whatever the shell happened to have.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146Q9UP9JavNhdDd8bqdQik
Copilot AI lite review requested due to automatic review settings August 28, 2026 16:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

`run: node scripts/check-version.mjs | tee version.txt`

GitHub runs a `run:` step as `bash -e {0}` — errexit, but NOT pipefail. So the
pipeline reports its LAST command's status, and `tee` succeeds whenever it can
write the file. The step passed however stale the site was, and the
`if: failure()` step below it, the one that opens the stale-release issue, has
therefore never run.

That makes this a check that reports nothing and looks green doing it, which is
the failure mode this organisation names as the worst it can produce.

Measured rather than reasoned: a script exiting 1 through `| tee` under
`bash -e` gives the step exit 0; with PIPESTATUS it gives 1.
`abap2UI5/linter`'s upstream-sync.yml already solves the identical `node … |
tee` shape that way, so this copies a pattern rather than inventing one.

And while reading it: the closing line said "the documentation names the release
that exists - OK" even when the release API had been unreachable — two lines
under its own report that this was "UNVERIFIED". A green run then claimed more
than the run had established. It now says which of the two it checked. Still
exit 0 when the API is down: an outage is not a documentation defect.

Both branches exercised, the unreachable one with fetch stubbed out.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146Q9UP9JavNhdDd8bqdQik
@oblomov-dev oblomov-dev changed the title The .nvmrc CONVENTIONS section 4 asks for The weekly freshness check could not fail, and the .nvmrc §4 asks for Aug 28, 2026
§6 wants a `CONTRIBUTING.md` in "every source and corpus repository", saying
"how to propose a change, and what CI will check". This repository is a source
repository — AGENTS.md, a test suite, seven gates — and had none. It and
`playground` were the two without one.

Follows the shape the other seven use: the shared two-line preamble pointing at
the contribution guidelines on the site, then the commands that actually run
here, and what `npm run check` covers. The part worth saying out loud is why a
green VitePress build is not enough on its own: the gates hold these pages to
what the OTHER repositories ship, so a page that quotes one is checked against
it rather than against memory.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146Q9UP9JavNhdDd8bqdQik
@oblomov-dev
oblomov-dev merged commit 8046186 into main Aug 28, 2026
1 check passed
@oblomov-dev
oblomov-dev deleted the claude/repos-tests-improvements-ia9cna branch August 28, 2026 21:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants