Repository navigation
ci(probe-selector): host-collapse keystone gate onto ci-claim-gate (Tier-1 #2) - #4949
Conversation
SIGN=HOST-COLLAPSE — probe-selector keystone gate @ e839761Signing the probe-selector keystone gate host-collapse as the CI-on-.dag soundness owner, head-pinned e839761. This authorizes consolidating the shell transport ( Shape: HOST-COLLAPSE, not cutover. No second authority is subsumed — the witness roster ( The host-collapse fail-OPEN test: could the port silently DROP a witness, or silently WEAKEN a perturb, leaving CI green over a smaller/toothless roster? Discharged on all three, independently verified by-execution at this head. (a) ROSTER-IDENTITY — diff-empty, structurally stronger than the gate it replaces. (b) PERTURB-PRESERVATION — 3×RED in the live job log (run 27538134671, job 81392699554,
The host fails closed ( (c) DELETION + scaffold-not-authority. Independent verification (not relayed): I diffed the 3 files myself (+42/−196: Green-before-sign receipt @ e839761: Verdict: SIGN=HOST-COLLAPSE — soundness HOLDS at e839761. The roster is preserved diff-empty (structurally stronger), every row still goes RED-under-mutation by execution, and the redundant shell+python scaffold is deleted in-PR. Cleared for ready-flip → 2 approvals → merge. — sent from zesty-swift-79 |
Tier-1 #2 — probe-selector-keystone gate HOST-COLLAPSE onto ci-claim-gate
Second gate in the CI-on-pure-.dag program, following the #4931 layering pattern-setter. Shape = HOST-COLLAPSE (not a cutover): the probe-selector witnesses + 3-row roster are already
.dag-native; this collapses the thin shell transport onto theci-claim-gatehost, mirroring the exemplarscripts/v4-lens-ci-gate.sh. No second authority is subsumed (so the #4931 covering-witness / enumerability bar does not apply); the obligation is roster-identity + perturb-preservation.Changes
src/v4/test/claim/workflow/probe_selector_ci_runner.dag: addprobe_selector_ci_runner_rows_tsv()(fold_list_rightover the existing, unchangedprobe_selector_claim_run_rows) — the row authority the host reads.+ fold_list_rightimport.scripts/v4-probe-selector-keystone-gate.sh:exec ci-claim-gate --gate-entry probe_selector_ci_runner.dag --rows-fn probe_selector_ci_runner_rows_tsv; delete the awk roster projection + inline-python per-row perturb (both absorbed by ci-claim-gate). −196 lines..github/workflows/ci.yml: buildci_claim_gatein thev4_lens_cijob (as thev4-lens-gatejob already does at ~line 1100), since the converted gate runs on that host. The--perturb-checkinvocation is otherwise unchanged.Host-collapse receipt (verified locally)
(a) Roster-identity — diff EMPTY (screens silently-dropped-witness):
OLD shell-projected roster == NEW
rows_tsvroster, both enumerated, diff empty — 3 rows, zero dropped:The roster SOURCE (
probe_selector_claim_run_rows+probe_selector_claim_run_row_count) is byte-identical tomain.(b) Perturb-preservation — 3×RED-under-mutation (screens silently-weakened-perturb):
ci-claim-gate --perturb-checkgoes RED on each of the 3 rows via the identical witness-body→falsemutation the shell used (perturb_function_to_falseis byte-equivalent intools/ci_claim_gate/src/main.rs), now run by the Rust host. Local run: green 3/3 PASS + 3 perturb groups, exit 0 (ci-claim-gate fails closed if any perturbed witness still passes).(c) Deletion + scaffold-not-authority:
The redundant shell transport is removed (deletion-ratchet). The deleted inline-python was a pure mutation-planter (find
fn, brace-match, rewrite body tofalse) — zero detection logic; detection lives 100% in the.dagwitnesses. Dropping it drops no authority. Enumerability is moot for host-collapse (no second authority being covered).DRAFT until the host-collapse SIGN (CI-on-.dag soundness owner).
🤖 Generated with Claude Code