Skip to content

feat(ci): fold the ADR conformance rulesets into the derived-artifact chain - #554

Merged
beyondnetPeru merged 1 commit into
developfrom
gt-adr-chain-link
Aug 16, 2026
Merged

feat(ci): fold the ADR conformance rulesets into the derived-artifact chain#554
beyondnetPeru merged 1 commit into
developfrom
gt-adr-chain-link

Conversation

@beyondnetPeru

Copy link
Copy Markdown
Contributor

Pull Request Summary

The loose end GT-703 left behind. 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 (SixteenSeventeen) 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 own 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 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:

✗ native evaluability snapshot consumes src/rulesets/adr/generated/adr-0001-…rules.json,
  which a LATER link writes.

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 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 instead of handing the chain a link that verifies nothing and reports success. Same shape as GT-557.

Verification

  • Chain: 9 links / 146 artifacts, current and at a fixed point
  • Reproduced the original failure: edited ADR prose → check mode names ADR conformance rulesets is STALE (link 3 of 9) → one --fix repairs it → tree restored byte-identical
  • Ordering is machine-checked: links swapped → validateChainShape refuses; restored → green
  • Vacuity check bites: an empty generated/ directory fails with its own message
  • Tests 12/12 — they broke first, and the breakage was the fixture describing a chain that had moved: the declared count is re-pinned 8 → 9 (deliberately pinned, per the existing rationale that a silently dropped link is an artifact nobody verifies), and the new producer is stubbed in the synthetic roots
  • Meta-guards: 42 classifies 82 guards, 43 observes 58 refusing the empty fixture
  • 08-validate-tracking, 01-validate-docs, 66-validate-bilingual-sync all pass

Evolith Core Quality Gates

  • Bilingual Parity: no documentation pairs touched.
  • Validation Scripts: 01-validate-docs.mjs passes.
  • Bilingual Validation: 04-check-bilingual-parity.mjs passes.
  • Agnosticism: one link added to an existing guard's declared chain, plus its fixture.

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

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.
@beyondnetPeru
beyondnetPeru requested a review from a team as a code owner August 16, 2026 22:18
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@github-actions

Copy link
Copy Markdown

📊 Bilingual Coverage Impact

PR Changes

  • Paired EN/ES files modified: 0
  • New EN files needing ES translation: 0

Repository Coverage

Metric Value
Total EN files 531
Total ES files 502
Paired files 0
Coverage 0%

Good: All EN changes have ES counterparts.


Generated by GitHub Actions

@beyondnetPeru
beyondnetPeru merged commit 23e3e65 into develop Aug 16, 2026
32 checks passed
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.

1 participant