The panels gate did not run; every gate now declares a cadence
Some checks failed
ci / check (push) Failing after 3s
Some checks failed
ci / check (push) Failing after 3s
CB-REV-0002 #7 found the H1 harnesses were run by no gate. The fix created a `panels` target and registered it — and did not add it to `make all`. So the gate existed, passed lint, and ran nowhere: the same defect one level up, committed in the fix for it. The registry checked that a gate's target EXISTS. It never checked that the gate RUNS, and six of ten registered gates are absent from `make all`. Some are legitimately manual — cost-budget needs spend data, gate-review is periodic. So a gate may be manual, but it must SAY so: every entry now declares cadence = all | manual | none, loop-lint requires it, and a gate claiming "all" that is not in `all:` fails. Both rules mutation-verified. panels is cadence = all and now runs there, so the figures in CB-EV-0030 and CB-EV-0031 are regenerated by the gate rather than by hand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
da58e78e4a
commit
43e93126e0
3 changed files with 34 additions and 1 deletions
2
Makefile
2
Makefile
|
|
@ -299,4 +299,4 @@ loc:
|
|||
done
|
||||
|
||||
## every gate, in order. The one CI would run.
|
||||
all: check test sim coverage size-metrics runtime-metrics am6 am7 am8 edition-check replay-test dep-weight self-tests env-test facts-check loop-lint bench-test
|
||||
all: check test sim coverage size-metrics runtime-metrics am6 am7 am8 edition-check replay-test dep-weight self-tests env-test facts-check loop-lint bench-test panels
|
||||
|
|
|
|||
10
gates.toml
10
gates.toml
|
|
@ -26,6 +26,7 @@ not_control_gates = [
|
|||
id = "CB-01/CB-02"
|
||||
name = "cost budget"
|
||||
target = "cost-budget"
|
||||
cadence = "manual"
|
||||
checks = "spend since the last commit; soft $10, hard $22"
|
||||
added = "2026-07-30"
|
||||
review_by = "2026-11-30"
|
||||
|
|
@ -39,6 +40,7 @@ retire_if = "two consecutive passes never approach the soft line, or commits get
|
|||
id = "SH-1/SH-2"
|
||||
name = "session-shape budget"
|
||||
target = "shape-budget"
|
||||
cadence = "manual"
|
||||
checks = "mean and p90 context since the last commit (SH-3 retired as a gate, ADR-0008 D1 — still reported as a diagnostic)"
|
||||
added = "2026-08-01"
|
||||
review_by = "2026-11-30"
|
||||
|
|
@ -52,6 +54,7 @@ retire_if = "context stops correlating with cost, or the model's context handlin
|
|||
id = "M-D1-MUT"
|
||||
name = "mutation coverage of acceptance rows"
|
||||
target = "mutation-check"
|
||||
cadence = "manual"
|
||||
checks = "each acceptance row's assertion must go red for a stated reason when mutated"
|
||||
added = "2026-07-31"
|
||||
review_by = "2026-12-31"
|
||||
|
|
@ -71,6 +74,7 @@ retire_if = "a full pass adds rows without finding anything, twice running — t
|
|||
id = "DFD"
|
||||
name = "single source of fact"
|
||||
target = "facts-check"
|
||||
cadence = "all"
|
||||
checks = "every tagged number in the docs matches the tool that measures it"
|
||||
added = "2026-07-31"
|
||||
review_by = "2026-12-31"
|
||||
|
|
@ -83,6 +87,7 @@ retire_if = "the untagged-literal count reaches zero and stays there, meaning th
|
|||
id = "AM-1b"
|
||||
name = "kernel spec->code link"
|
||||
target = "coverage"
|
||||
cadence = "all"
|
||||
checks = "every numbered K-rule is named in the source; binds 2026-08-31"
|
||||
added = "2026-07-31"
|
||||
review_by = "2026-08-31"
|
||||
|
|
@ -95,6 +100,7 @@ retire_if = "it stays at 100% through two passes that add kernel rules — at th
|
|||
id = "META-20"
|
||||
name = "meta budget"
|
||||
target = "status"
|
||||
cadence = "manual"
|
||||
checks = "share of the trailing 5 passes spent on the loop itself; soft 20%. Purpose (InnerLoop v1.7): most spend on the task at hand, some on control, review and improving the process that carries the work forward"
|
||||
added = "2026-08-01"
|
||||
review_by = "2026-11-30"
|
||||
|
|
@ -116,6 +122,7 @@ retire_if = "product and meta stop being separable, or the share sits under the
|
|||
id = "LOOP-LINT"
|
||||
name = "executable InnerLoop rules"
|
||||
target = "loop-lint"
|
||||
cadence = "all"
|
||||
checks = "loadability, unmeasured verdicts, tier and chaos declarations, review trails, self-test entry points, and this registry"
|
||||
added = "2026-07-30"
|
||||
review_by = "2026-12-31"
|
||||
|
|
@ -130,6 +137,7 @@ retire_if = "two passes run with no finding while artifacts keep growing — tha
|
|||
id = "CHAOS"
|
||||
name = "the chaos roll"
|
||||
target = ""
|
||||
cadence = "none"
|
||||
checks = "d8 on each tier declaration, 12-declaration calibration window (window 2, opened 2026-08-03; window 1 ran at d4)"
|
||||
added = "2026-07-30"
|
||||
review_by = "2026-11-30"
|
||||
|
|
@ -156,6 +164,7 @@ retire_if = "an override changes nothing twice running (window 2 condition, CB-W
|
|||
id = "GATE-REVIEW"
|
||||
name = "this registry"
|
||||
target = "gate-review"
|
||||
cadence = "manual"
|
||||
checks = "gates past their review date, and gates that have caught nothing"
|
||||
added = "2026-08-01"
|
||||
review_by = "2026-12-31"
|
||||
|
|
@ -168,6 +177,7 @@ retire_if = "it has retired, tightened, or forced the re-justification of nothin
|
|||
id = "CB-REV-0002/7"
|
||||
name = "variant panels"
|
||||
target = "panels"
|
||||
cadence = "all"
|
||||
checks = "the H1 measurement harnesses actually run, and a short cell fails rather than printing a number a reader must notice"
|
||||
notes = """
|
||||
Registered because the second adversarial review asked what the harness
|
||||
|
|
|
|||
|
|
@ -303,6 +303,29 @@ def check_gate_registry(root=REPO):
|
|||
out.append(Finding(
|
||||
"gates", "gates.toml",
|
||||
f"entry names target {target!r}, which the Makefile lacks"))
|
||||
|
||||
# CB-REV-0002 #7, generalised. The registry checked that a gate's
|
||||
# target EXISTS; it never checked that the gate RUNS. `panels` was
|
||||
# added to close "the harness is run by no gate" and passed lint while
|
||||
# running nowhere -- the same defect, one level up.
|
||||
#
|
||||
# A gate may legitimately be manual. It must SAY so, and one that says
|
||||
# it runs in `make all` must be there.
|
||||
for g in gates:
|
||||
target = g.get("target")
|
||||
if not target:
|
||||
continue
|
||||
cadence = g.get("cadence")
|
||||
if cadence not in ("all", "manual", "none"):
|
||||
out.append(Finding(
|
||||
"gates", "gates.toml",
|
||||
f"{target!r} declares no cadence — say whether `make all` runs "
|
||||
f"it, or a gate can exist without ever running"))
|
||||
elif cadence == "all" and target not in deps:
|
||||
out.append(Finding(
|
||||
"gates", "gates.toml",
|
||||
f"{target!r} declares cadence=\"all\" and `make all` does not "
|
||||
f"run it — a gate that does not run is not a gate"))
|
||||
return out
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue