feat(spine): ship the ESTATE-BOARD and unblock JSON in the SPDX gate - #810
Merged
Merged
Conversation
Contributor
|
Warning Review limit reachedNext included review available in 47 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (6)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The read half of the estate spine, which this plan has said ships first since
it was written. One page answering the question the CI/CD campaign opened with:
which of 441 live repos are actually gated, actually reporting, and actually
pinned to something that exists.
WHAT LANDS
docs/ESTATE-BOARD.adoc 441 repos, one row each
.machine_readable/estate-board.json the same, machine-readable
.machine_readable/estate-board.tsv the same, joinable
.machine_readable/estate-residue-ledger.tsv the repair surface, 85 rows
scripts/spine/board.sh board.awk the generator
scripts/spine/verify-board.sh the verifier
Every cell carries its horizon and its measurement date. Disk-derived columns
aggregate UNION over files and MAX over counts across a repo's local checkouts,
never SUM -- a repo with four checkouts is one repo, not four.
MEASURED, NOT ASSERTED (origin/HEAD, 2026-09-15)
workflow soundness 8334 OK / 58 UNPARSEABLE / 7 NOJOBS of 8399 = 99.2%
reusable pin state 1965 pinned / 46 unpinned refs, canonicalising to
15 refs across 9 repos
Actions posture n=440, zero errors; no repo has an empty
patterns_allowed (floor 92); zero repos are
verified_allowed:false
residue ledger 85 rows, 69 PENDING, 16 DO-NOT-TOUCH
The residue is 60 unsound files plus 9 repos with unpinned reusable refs --
roughly 47 repos, not 441. That is the number the next campaign drives to zero.
VERIFIED, NOT MERELY PRESENT
scripts/spine/verify-board.sh: 16 assertions, all passing, including a
RED-THEN-GREEN fixture. A deliberately unsound workflow file and a
deliberately unpinned reusable ref are planted into a copy of the input set;
both must appear in the fixture ledger with the right class, and both must be
absent from the real one, BEFORE any "the board finds no X" claim is
admissible. Soundness is the two-limb test -- a non-empty jobs map AND a
trigger key -- never parseability, and never CI colour: a broken workflow
emits no check run, so a destroyed repo scores greener than a healthy one.
The verifier's JSON half recounts the board's own totals from the TSV with a
second instrument (jq reads the JSON, awk recounts the TSV) rather than
trusting the generator's arithmetic.
A BEHAVIOUR CHANGE TO A GATE, STATED AS ONE
.githooks/validate-spdx.sh drops *.json from is_source_file.
The test is `head -10 "$file" | grep -qE '^# SPDX-License-Identifier:'`.
JSON has no '#' comment syntax, so this rule was unsatisfiable by
construction, and it was never satisfied: both .machine_readable/*.json
files already on main -- hypatia-baseline.schema.json and
scorecard/scorecard.schema.json -- carry zero such headers. Removing the
extension restores truth rather than weakening a check, and it unblocks
every future commit touching a JSON file in this repo.
Proven both ways before the change was kept: the validator as it stands on
main exits 1 on this commit's file list, naming estate-board.json; with
*.json dropped it exits 0. Same defect class as the staged-mode filter bug
fixed in #804, one extension over.
.machine_readable/REGISTRY.a2ml was regenerated to clear build-registry
drift and is deliberately LEFT UNSTAGED -- staging it is what creates the
commit deadlock this repo has hit before.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GEWfbxba7BJaTFRFhCGNF
hyperpolymath
force-pushed
the
spine/estate-board-2026-09-15
branch
from
September 15, 2026 12:54
9b6eaaa to
393b053
Compare
|
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.



Ships the ESTATE-BOARD — the read half of the propagation spine, and the closure
deliverable under owner ruling CICD-R-W1. Zero writes to any repo other than this one.
What the board answers
One page, one row per repo, for the question that started this campaign: which of 441 repos
are actually gated, actually reporting, and actually pinned to something that exists. Every
cell carries its horizon and its measurement date.
Measured at
origin/HEAD, whole population, every file parsed — not sampled:The soundness test is the two-limb one, never parseability: a workflow is healthy iff
jobsisa non-empty map and a trigger key is present. Parseability is not the test — a YAML file
whose
jobs:has been swallowed into a multi-linenamescalar parses perfectly and iscompletely inert.
⚠ Behaviour change to a gate
This PR changes the behaviour of
.githooks/validate-spdx.sh: it drops*.jsonfromis_source_file. That is a deliberate behaviour change to a gate, made under owner rulingCICD-R-W6, and it is called out here rather than buried in the diff.
The rule was unsatisfiable by construction. The test is
and JSON has no
#comment syntax, so no JSON file can ever satisfy it.Control, measured on
main: the two.machine_readable/*.jsonfiles already committed —hypatia-baseline.schema.jsonandscorecard/scorecard.schema.json— carry zero SPDXheaders between them. The rule has never been satisfiable and has never been satisfied.
Removing
*.jsontherefore restores truth rather than weakening a check, and it completesthe repair #804 began, one extension over: that was the staged-mode filter bug; this is the same
defect class in the extension allowlist itself.
Proven red-then-green, not asserted: the validator as it stands on
mainexits 1,naming
.machine_readable/estate-board.json; with*.jsondropped it exits 0. That sameprobe also proved the
# SPDX-License-Identifier: MPL-2.0headers added toboard.sh,board.awkandverify-board.shwere both necessary and sufficient.The verifier, and the fixture that fired
scripts/spine/verify-board.shis committed alongside the generator and was run:16 assertions passed, 0 failed, exit 0.
It is not a set of inert assertions. Two things are worth naming:
ZZ-PLANTED-CONTROL.yml) and a knownunpinned reusable ref are planted, and the board must classify both correctly and ledger
them — and both must be absent from the real ledger. Both fired. This satisfies §11.8
criteria 2 and 5 by measurement rather than by assertion.
jq; thesame six figures are recomputed from the TSV with
awk. They agree(
rows=441 wf=6551 unsound=60 unpinned=15 nocheckout=8). Thejq-missing branch failsrather than skipping, so the JSON half of the verifier cannot pass vacuously.
verify-board.shusesjqandawkonly — no Python, consistent with the estate-wide banon tracked
.pyfiles.board.shandverify-board.share committed 100755; a suitecommitted
100644passes every local run and dies in CI at exit 126 before one control runs.Files
docs/ESTATE-BOARD.adoc.machine_readable/estate-board.json.machine_readable/estate-board.tsv.machine_readable/estate-residue-ledger.tsvscripts/spine/board.sh+board.awkscripts/spine/verify-board.sh.githooks/validate-spdx.shMerge honesty
maincarries theOptimus-Branchruleset with nine rule types, three of which no PR in thisbacklog can satisfy:
code_coveragedemandsminimum_coverage: 95on a shell/AsciiDoc repo,required_deploymentsdemands thecopilotandgithub-pagesenvironments, and the requiredCodeQLcontext is emitted only by GitHub default code-scanning setup.This PR will land by admin bypass, and that is stated as a bypass rather than reported as a
gate passed.
The commit is signed (
%G?=G) and was made with no--no-verify— all ninepre-commit validators passed on their merits.
🤖 Generated with Claude Code
https://claude.ai/code/session_014GEWfbxba7BJaTFRFhCGNF