Skip to content

Seed the witness row-cost basis so the drift comparator can fire - #7475

Merged
briansrls merged 1 commit into
mainfrom
session/quiet-ferret-16-basis-seed
Jul 30, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/quiet-ferret-16-basis-seed

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

dag/gunbc/witness_row_cost_basis.tsv has carried a header, two comments, and zero data rows since it was created. So every floor run printed:

[receipt] floor witness row-cost drift: basis_absent=5344 drift_exceeded=0

That reads as "no drift". It is the comparator being structurally incapable of reporting any — drift_exceeded was 0 by construction, not by measurement.

The fail-quiet is the sharp part. claim_executor has a loud witness-row-cost basis file missing at {} diagnostic, but it only fires when the read fails. The file existed and was merely empty of data, so the loud arm was skipped and nothing counted 5,344 BasisAbsent rows as a deficit. This is the mechanism that would have warned as resolution_divergence_silent_pick_gate_keystone_holds climbed 717s → 815s → 900s into its ceiling. It went dark instead, and the row crossed with no advance signal.

Where the rows come from

Falsifier run 30550328673 — runner_spec_is_self_hosted_arm64, the host class witness_row_cost_basis_host_class_note requires ("never local x86"). The rows are read from that run's own [witness-row-cost] receipt lines, which claim_executor eprintlns per row. Its sole failure was the silent-pick row's wall-budget refusal; every seeded row completed normally.

  • 1,192 rows seeded
  • 4,148 zero-eval rows correctly unseedable (the parser already refuses eval_ms_basis == 0)
  • 3 keys observed in two batches keep the max of the pair (all differ by <2% — themselves an instance of the duplicate-work thread, the same witness evaluated in batches 6 and 7)

The row deliberately left out

resolution_divergence_silent_pick_gate_keystone_holds — the corpus's most expensive witness — is not seeded, and that is the load-bearing decision in this PR.

It was killed at its deadline. The log carries wall budget exceeded: 900001ms elapsed > 900000ms whole-receipt budget, yet its row-cost entry records a flat 900794 ms, indistinguishable from a witness that genuinely finished in that time. That is a censored measurement rendered as a completed one — DESIGN §5's ⊤-as-answer conflated with ⊤-as-ignorance.

Seeding it would be worse than useless. Under the 2× comparator (witness_row_cost_exceeds_basis), a basis of 900794 means drift cannot fire below ~1.8M ms — so the row most in need of a cost signal would be pinned WithinBasis forever, and a deadline ceiling would become its official normal cost. That is the re-basis trap, arriving through the basis file instead of through the budget constant.

It stays BasisAbsent, which is the honest third state, until ClaimOutcome::TimedOut can distinguish a killed row from a completed one. This makes the TimedOut plumbing a prerequisite for a correct basis on exactly the expensive rows, not independent cleanup.

Cannot red CI

The drift receipt writer returns true regardless of drift_count and fails only on a write error, so drift stays observational — matching witness_row_cost_spine_note's "falsifier-cadence counted, not merge-refusing".

Verified by execution

committed_witness_row_cost_basis_loads_and_excludes_the_censored_row runs the real committed artifact through the loader's own parse_witness_row_cost_basis_line. It asserts ≥1000 rows load and panics on any row the loader would refuse — the loader silently skips refused rows, so a malformed commit would otherwise degrade back to BasisAbsent unnoticed, which is the exact failure mode this PR exists to end.

Discriminating RED controls, both directions:

control result
basis restored to the old vacuous state (0 data rows) FAILED — committed basis loaded only 0 row(s)
censored row re-seeded at its 900794ms ceiling FAILED — names the offending row
the real committed basis ok

Full claim_executor suite: 36 passed, 0 failed.

Related

Discharges the reproduction blocker named in placement_workstream_task_20_open_unknown_note (status OpenUnknown), whose instructions require per-witness cost receipts from the arm64 fleet host class.

`dag/gunbc/witness_row_cost_basis.tsv` has carried a header and two comments and
zero data rows since it was created. Every floor run therefore printed

    [receipt] floor witness row-cost drift: basis_absent=5344 drift_exceeded=0

which reads as "no drift" but is the comparator being structurally incapable of
reporting any. `drift_exceeded` was 0 by construction, not by measurement. The
fail-quiet is the sharp part: the loud "basis file missing" diagnostic only fires
when the read FAILS, and the file existed — so an empty-of-data basis produced no
diagnostic at all.

This is the mechanism that would have warned as
`resolution_divergence_silent_pick_gate_keystone_holds` climbed 717s -> 815s ->
900s into its ceiling. It went dark instead.

SEEDED from falsifier run 30550328673 (`runner_spec_is_self_hosted_arm64`, the
host class `witness_row_cost_basis_host_class_note` requires — never local x86).
The rows are read from that run's own `[witness-row-cost]` receipt lines. Its
sole failure was the silent-pick row's wall-budget refusal; every seeded row
completed normally. 1192 rows land; 4148 zero-eval rows are correctly unseedable
(the parser refuses `eval_ms_basis == 0`); 3 keys observed in two batches keep
the max of the pair (all differ by <2%).

DELIBERATELY NOT SEEDED — the corpus's most expensive row.
`resolution_divergence_silent_pick_gate_keystone_holds` was KILLED at its
deadline (`wall budget exceeded: 900001ms elapsed > 900000ms`), yet its row-cost
entry records a flat 900794ms, indistinguishable from a witness that genuinely
finished in that time. That is a censored measurement rendered as a completed one
— DESIGN §5's ⊤-as-answer conflated with ⊤-as-ignorance.

Seeding it would be worse than useless. Under the 2x comparator a basis of
900794 means drift cannot fire below ~1.8M ms, so the row most in need of a cost
signal would be pinned WithinBasis forever and a deadline ceiling would become
its official normal cost — the re-basis trap, arriving through the basis file
instead of through the budget constant. It stays BasisAbsent, which is the
honest third state, until `ClaimOutcome::TimedOut` can distinguish a killed row
from a completed one. That makes the TimedOut plumbing a prerequisite for a
correct basis on exactly the expensive rows, not independent cleanup.

Drift is observational, not merge-refusing: the drift receipt writer returns true
regardless of `drift_count` and fails only on a write error, so seeding cannot
red CI.

VERIFIED BY EXECUTION: `committed_witness_row_cost_basis_loads_and_excludes_the_censored_row`
parses the real committed artifact through the loader's own
`parse_witness_row_cost_basis_line`, asserts >= 1000 rows load, and PANICS on any
row the loader would refuse — the loader silently skips refused rows, so a
malformed commit would otherwise degrade back to BasisAbsent unnoticed. It also
asserts the censored key is absent, so re-seeding it from a deadline-killed run
fails the test with the reason.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@briansrls
briansrls merged commit 0d6ffc4 into main Jul 30, 2026
5 checks passed
@briansrls
briansrls deleted the session/quiet-ferret-16-basis-seed branch July 30, 2026 21:01
briansrls added a commit that referenced this pull request Jul 31, 2026
…coverage, first slice) (#7497)

* Budget-gate the compile-clean leg on the witness cost model (prelude coverage, first slice)

Discharges the compile-clean portion of gunbc_ci_floor_batch_clamp_note
FOLLOW-UP ROW (a): the eager compile-clean install ran outside every batch
budget and could only red at the step cap — which is how a 15m32s green
gate grew past 49 minutes across #7398/#7438 with nothing naming the
growth. Operator dispatch this session: "can we add the budget gating ...
i suggest we share that model" — this shares the witness row-cost model
wholesale rather than minting a parallel mechanism.

Receipt keys: the leg writes [compile-clean-cost] rows (pass wall + units
+ every computed module's typecheck wall) to
target/floor-compile-clean-cost-receipt.tsv — the "phase_mark walls get
their own receipt keys" prerequisite the note names.

Enforced clamp (merge-refusing): gunbc.ci_spec gunbc_ci_compile_clean_clamp
(FloorBatchClamp reused), clamp_ms = 60s + units*320ms with units = the
leg's compiled closure module count (1,648 whole-tree today — the entry
closure, not the 2,725-file index). Over-clamp is a typed
FLOOR-COMPILE-CLEAN-OVER-BUDGET walk refusal at admission grain: the
compile receipt's ok and the gate verdict are untouched (the signed
admission/verdict split). Constants worker-sized from run 30602520347
(srv1-01, 258s/1648 units = 157ms/unit; 320ms funds a 2x fleet-spread
host per the family margin ruling) and AWAIT the operator's counter-signed
line per the raise discipline. RED-control hook
GUNBC_FLOOR_COMPILE_CLEAN_BUDGET_TIGHTEN_MS lowers the computed clamp
(min), never raises.

Counted drift (growth detector): compile-clean rows compare against
dag/gunbc/compile_clean_cost_basis.tsv through the SAME
witness_row_cost_exceeds_basis 2x authority, parser, host-class and
zero-basis refusals; BasisAbsent is counted loudly every run (the #7475
lesson — an unseeded basis must never read as no-drift). The basis ships
unseeded on purpose: rows may only cite a fleet run's own
[compile-clean-cost] receipt lines, and the first run to emit them is this
change's own CI.

Receipts by execution (local x86 — logic, not cost):
- witness suite 7/7 at final constants incl. over-by-one RED and at-clamp
  boundary (dag/test/claim/compile_clean_cost_clamp_witness_test.dag)
- green e2e (gunbc_ci_plan_artifact_plan): pass whole_tree 310127ms/1648
  units -> WithinBudget, 1204 module rows, drift basis_absent=1205
  counted, gate PASS, exit 0
- RED control (tighten=1): compile ok=true, gate PASS, typed
  FLOOR-COMPILE-CLEAN-OVER-BUDGET line, walk EXIT=1 — the admission/verdict
  split by execution

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaAWvG3LgBAM9tGF1D2bG1

* Record the operator signature on the compile-clean clamp constants

gunbc_ci_compile_clean_clamp_note: the worker-proposed constants
(overhead_seconds 60, per_unit_ms 320) are operator-affirmed
(briansrls, 2026-07-31), so the refusal arm is signed-live per the
batch-budget family raise discipline. Witness suite re-run green
(7/7) after the note edit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaAWvG3LgBAM9tGF1D2bG1

---------

Co-authored-by: Claude <noreply@anthropic.com>
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