Repository navigation
shell→dag bucket A: last shell.Exec off host_runner_memory_cap_verify; meta-exec roster 3→0 + per-PR emptiness wall - #7241
Merged
Merged
Conversation
…y; meta-exec roster 3->0 + per-PR emptiness wall; census true-up - host_runner_memory_cap_verify probed_at: retained_runtime shell.Exec.Run(date -Iseconds) -> typed extdeps.clock Clock.Now via gunbc.clock_read (host_converge_slice1 precedent). extdeps.shell import, retained_shell_script bridge and the transport-script scaffold all deleted. Refusal decision refactored to runner_memory_cap_verify_result_from_live_read so the read-absent arm is executable hermetically; RED control proves a widen fails. - meta_exec_confinement_exception_roster 3 -> 0: tools/review.dag and ci_deploy_target_host.dag verified stale (0 shell.Exec); host_runner_memory_cap_verify dissolved above. - Per-PR enforcement is a construction wall (empty roster => stale_count 0, no scan); live receipt measured 13.5s cold vs a 5s fast-lane budget, homed in the long lane with a non-degeneracy control. - Census section 4/5 + ledger trued up to main (#7184/#7192/#7193/#7194/#7215/#7231/#7233). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
shell→dag bucket A. Roster 3 → 0, every behavioral change green-by-execution with a discriminating RED.
1.
host_runner_memory_cap_verify— lastshell.Execoff the intent layerThe brief said "2 live
shell.Exec" — there was 1 (the memory-property reads had already gone typed viasystemctl_show_read). The remaining one wasprobed_at:shell.Exec.Run(retained_runtime("date -Iseconds"))→clock_now_probed_at()(gunbc.clock_read→extdeps.clockClock.Now) — the same single authorityhost_converge_slice1already uses, so this removes a §3 fork rather than just a shell call.extdeps.shellimport, theretained_shell_scriptbridge, andhost_runner_memory_cap_verify_transport_script_scaffold(its medium-as-string dissolution trigger no longer has a subject).runner_memory_cap_verify_result_from_live_read(host, read: RunnerUnitMemoryLiveRead?), so the read-absent arm is executable hermetically.runner_memory_cap_verify_runkeeps the knobs-absent guard before the live read, so no read-only op fires on a host with no knobs.RED control (by execution): perturbing the absent arm to fabricate an empty read and report it
Observed— the exact §5 widen — turnssrv3_runner_memory_cap_plan_verify_holdsFAIL; restored → PASS. Paired witnesses:none→Refusedwith the located reason,Present→Observed.2.
SetHostnameCas→os.Hostname.Set— already landed on main (#7194)Verified, not assumed:
host_effect_realize.dag's arm callsgunbc.hostname_sethostname_set_cas, whosehostname_set_localisos.Hostname.Set(desired:); SSH goes throughtyped_argv_exec_over_ssh; the CAS read reusesos.Hostname.ReadShort.host_effect_set_hostname_cas_scriptdoes not exist anywhere in tree. No code change was needed — recorded as DONE in the census instead. (Consequently no contact withhost_effect_realize.dag, so no overlap with #7237.)3. Roster 3 → 0
Both stale rows verified at 0 live
shell.Execbefore deletion:dag/gunbc/tools/review.dag— imports onlyextdeps.git.dag/gunbc/ci_deploy_target_host.dag— importsextdeps.shellforshell.Env.Get, which is not the confinedextdeps.shell.exec(non_exec_import_is_not_leak_holdsis the standing receipt).dag/gunbc/host_runner_memory_cap_verify.dag— the genuine remainder, dissolved by item 1.rostered_consumer_import_is_not_leak_holdswas re-parameterized onto a synthetic roster: spelled against the canonical roster it would have passed for the wrong reason (no row to exempt) and silently stopped discriminating. It now asserts both directions, plus a newempty_canonical_roster_grants_no_exception_holds.4. The dark-lane fix — measured, then designed
The diagnosis is confirmed:
meta_exec_roster_sound_liveexisted but ran on no per-PR cadence; the only enrolled roster RED was synthetic (hand-written fact rows, blind to the live roster). That is why two stale rows survived merges.The literal fix does not fit, and the measurement is part of the receipt: the live receipt evaluates in 13470ms cold over
meta_exec_consumer_scan_roots, and still 11485ms overdag/gunbcalone, against a 5s fast-lane budget — next to an enrolled sibling costing 2ms. The cost is intrinsic tolayer_import_facts_liveover a real tree, so no narrower root rescues it. (Behind an already-warmed scan it reports 1852ms — borrowed warmth, not a cost this row may declare.)What runs per-PR instead is stronger than soundness and needs no scan (§5 construction over validation): a stale row is only possible because the roster is a hand-written second representation of a fact the tree already carries.
stale_countis bounded above by roster length, so length 0 proves soundness outright.meta_exec_roster_shrunk_to_empty_holdswalls that state, costs 0ms, and reds by name in the same PR that re-adds a row — precisely the event that went unnoticed before.The live receipt stays as a backstop in the long lane, now with a non-degeneracy control: over a clean tree a live scan is true either because nothing is stale or because the walk read nothing (⊤-as-answer vs ⊤-as-ignorance), and leak-candidate paths are legitimately empty, so the control asserts the underlying fact set is non-empty.
Named residue, not papered over: that long lane is still dark (not roster-enrolled). Dissolve-on is a falsifier batch admitting live-tree lens receipts; batch 6 exists but is declared for
SubstrateInputsOnlyfixture-shaped rows, so enrolling there is a lane-owner call, not mine to take silently.5. Census true-up
§4.A/§4.C rows marked DONE for the hostname and
date -Isecondsclusters; a2026-07-25ledger true-up block ahead of the stale 07-22 snapshot. Every claimed PR verified againstorigin/main— which corrected a line I had drafted from the brief: §5.A is COMPLETE, not partially remaining (ListUnits,Status,os.Id.Uidall landed on #7194 and are cited at their post-#7231 homes). §5.E is marked LANDED (#7184), so the wall-first pause on §5.B is discharged.Receipts
gunbc compile --target dag— 0 blocking errors (2576 pre-existing advisories).commit_witness_claim_roster_holdsPASS (every enrolled (entry, check_fn) pair resolves — the Layering-imports gate: repoint fact producer onto reference-derived edges (Phase 1) #7060 stale-roster class).ci.yml: witness roster is not embedded in any generated artifact (0 hits) — no drift.gunbc cifails identically on baseline with my changes stashed, i.e. a pre-existing local env issue, not this PR.🤖 Generated with Claude Code