feat(ci): fold the ADR conformance rulesets into the derived-artifact chain - #554
Merged
Conversation
The loose end left by GT-703. `generate-adr-rulesets.mjs` writes one conformance
ruleset per ADR, so editing an ADR's PROSE drifts a generated artifact — a one-word
correction to ADR-0126 ("Sixteen" -> "Seventeen") turned `Validate documentation` red
on a PR that touched no ruleset at all. It had its own step and its own `--check`, but
it was not a chain link, so nothing replayed it in order and `--fix` could not repair
it.
THE EDGE WAS ALREADY KNOWN, IN PROSE ONLY. The native evaluability snapshot's comment
says `documentation-only` moved 129 -> 136 "purely because seven generated ADR rulesets
appeared". That is a dependency, written down and never declared, so the ordering claim
could not be checked. The link now sits before the snapshot and those rulesets are in
the snapshot's `consumes`, which turns the sentence into an assertion — verified by
swapping the two links and watching `validateChainShape` refuse: "native evaluability
snapshot consumes …adr-0001….rules.json, which a LATER link writes."
ARTIFACTS RESOLVED FROM DISK, NOT LISTED. 135 files today and one more per future ADR.
A hand-written list would rot on the next ADR and rot SILENTLY: a `writes` entry that
stops existing fails loudly, but one that was never added is simply not checked.
AND THE VACUITY THAT CREATES: a resolved-from-disk list can come back empty. An ABSENT
directory is legitimate (a synthetic `--root` has none, and the missing producer is what
fails there); an EXISTING but empty one is not, and now fails with its own message
rather than handing the chain a link that verifies nothing and reports success.
Verified: chain 9 links / 146 artifacts, current and at a fixed point. Reproduced the
original failure — ADR prose edited, check mode names "ADR conformance rulesets is
STALE (link 3 of 9)", one `--fix` repairs it. Tests 12/12 after re-pinning the declared
count 8 -> 9 and stubbing the new producer in the synthetic roots (they broke first, and
the breakage was the fixture describing a chain that had moved). Meta-guards: 82
classified, 58 observed refusing the empty fixture.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
✅ Good: All EN changes have ES counterparts. Generated by GitHub Actions |
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Summary
The loose end GT-703 left behind.
generate-adr-rulesets.mjswrites one conformance ruleset per ADR, so editing an ADR's prose drifts a generated artifact — a one-word correction to ADR-0126 (Sixteen→Seventeen) turnedValidate documentationred on a PR that touched no ruleset at all. It had its own step and its own--check, but it was not a chain link, so nothing replayed it in order and--fixcould not repair it.The edge was already known — in prose only
The native evaluability snapshot's own comment says
documentation-onlymoved 129 → 136 "purely because seven generated ADR rulesets appeared". That is a dependency, written down and never declared, so the ordering claim could not be checked by anything.The link now sits before the snapshot, and those rulesets are in the snapshot's
consumes— which turns the sentence into an assertion. Verified by swapping the two links and watching the guard refuse:Artifacts resolved from disk, not listed
135 files today, one more per future ADR. A hand-written list would rot on the next ADR and rot silently: a
writesentry that stops existing fails loudly, but one that was never added is simply not checked.And the vacuity that creates. A resolved-from-disk list can come back empty. An absent directory is legitimate — a synthetic
--roothas none, and the missing producer is what fails there. An existing but empty one is not, and now fails with its own message instead of handing the chain a link that verifies nothing and reports success. Same shape as GT-557.Verification
ADR conformance rulesets is STALE (link 3 of 9)→ one--fixrepairs it → tree restored byte-identicalvalidateChainShaperefuses; restored → greengenerated/directory fails with its own message42classifies 82 guards,43observes 58 refusing the empty fixture08-validate-tracking,01-validate-docs,66-validate-bilingual-syncall passEvolith Core Quality Gates
01-validate-docs.mjspasses.04-check-bilingual-parity.mjspasses.Linked ADRs / Issues
Follow-on to GT-703. No gap ids declared — no board row moves in this diff.
Conventional Commits
feat:🤖 Generated with Claude Code