Repository navigation
Repair: push-to-main deploy/advance/collect silently skipped on every main push (implicit success() cascade) — status guard + RED control - #8085
Conversation
…tion now carries its own status guard, with a RED control Measured latent (>=30 consecutive main pushes): heal_generated_artifacts skips on ordinary pushes; ci survives via its own !cancelled(); but a needs:[ci] job whose if carries NO status function gets GitHub's implicit success() ANDed in, and success() is false downstream of any transitively skipped job — so deploy_dashboard_srv1, advance_fleet_desired, and collect_fleet_convergence skipped while every clause in their condition was true (an empty-observation narrow: 'dependency skipped' rendered as 'condition false'). Receipt: run 31320306318 (ci=success, all three skipped); no deploy ran in the last 30 main pushes. Fix at the one generating authority (ci_deploy_push_to_main_if): '!cancelled() && needs.ci.result == 'success' && <event clauses>'. ci.yml regenerated through the artifact gate. RED control push_to_main_family_carries_explicit_status_guard: reds if the guard leaves the authority row, if any push-to-main job's condition drops it, or if the family goes vacuous. Verified discriminating by execution (reverting the row -> FAIL). This is the focused repair arm under the CONVERGE-0 acceptance outcome (#8083 remains the acceptance carrier); items 1/2 of the receipt set become obtainable once this is on main. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y
…he first commit) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y
|
review 50843's two findings were correct against the first pushed commit and are fixed by 0e9b53b: a RED-discrimination check (revert the row, expect FAIL) had clobbered the authority row via |
…erged model Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y
…lect, pre-push hook blocking desired-ref advance (#8090) * Repair: #8085 actuator ran and both jobs failed — Class B compile break in collect + pre-push hook blocking the desired-ref advance The #8085 merge run (31334668866) is the first main push in 30+ to actually EXECUTE advance_fleet_desired and collect_fleet_convergence (the skip-cascade fix worked); both then failed with two real defects this repair clears. FAILURE 1 (advance_fleet_desired): the desired-ref advance push aborted with '.githooks/pre-push: cargo: command not found' (exit 127) on a runner with core.hooksPath set but no cargo. refs/fleet/desired is a DATA ref carrying no source, so the source-format guards have nothing to check. Fix (parent ruling msg_0e7d195a — NOT a blanket --no-verify): the generated pre-push hook now reads the pushed refspecs from stdin (git's pre-push contract) and skips the source guards ONLY when >=1 ref was seen AND every pushed remote ref is under refs/fleet/*. Fails CLOSED on empty/unreadable stdin and on any non-fleet ref (guards run). Behaviorally tested four ways; the wall stays the required CI floor. FAILURE 2 (collect_fleet_convergence): dag/gunbc/fleet_converge_cli.dag did not compile through the collect entry ON MAIN — 4 §4c in-body annotations (deleted; the arm is self-documenting) and 9 Class B bare cross-module references to host_converge_slice1_*/runner_memory_* that resolved only by pool coincidence and were not dragged into the collect closure (explicit imports added; fleet_show_effective_read's srv1/srv2 ssh-transport bare refs likewise). Third independent live corroboration today that pool-coincidence resolution is corpus-wide accidental coverage. Also a typed finding for the parent: main's compile-clean gate did not select this production entry's closure — a runnable entry that cannot load is exactly what the gate exists to prevent. Line-budget witness raised 1500->2100 with rationale (the correctness preamble; bloat guard retained). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y * Address review: delete the byte-count budget (tree-measured oracle), not raise it The parent's oracle-rule question answered honestly as neither (a) nor (b): the line-budget witness (length(sh) < N) was a merge-blocking numeric literal grounded in a measurement of the current hook, not a policy budget — the tell being that adding the correct fleet-ref preamble forced the cap up to fit the very code it was meant to bound (DESIGN §5 oracle rule; a ratchet loosening). Its intent ('hook stays a thin dispatcher, no heavy work') is already asserted STRUCTURALLY by witness_no_in_hook_build / witness_no_corpus_or_witness_run / witness_no_claim_batch_dependency / witness_no_tree_mutation, none tree-measured. So the byte count is deleted as redundant (DESIGN §2), not raised. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y --------- Co-authored-by: Brian Searls <briansrls@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Measured latent: for at least 30 consecutive main pushes, every job gated by
ci_deploy_push_to_main_ifwas SKIPPED —deploy_dashboard_srv1included, and since #8045 alsoadvance_fleet_desiredandcollect_fleet_convergence. Main has not actually been converging: the actuator existed but never ran.Root cause (workflow-graph cascade, not the clauses):
heal_generated_artifactsskips on ordinary pushes;cisurvives that via its own!cancelled(); but aneeds: [ci]job whoseifcarries NO status function gets GitHub's implicitsuccess()ANDed in — andsuccess()is false downstream of ANY transitively skipped job. So the family skipped while every clause it named was true. Receipt: run 31320306318 (ci=success, all three deploy-family jobs skipped, attempt 1). This is the empty-observation-narrow class: 'dependency skipped' rendered as 'condition false'.Fix at the one generating authority (
dag/gunbc/ci_workflow_expressions.dagci_deploy_push_to_main_if):!cancelled() && needs.ci.result == 'success' && github.ref == 'refs/heads/main' && github.event_name == 'push'ci.yml regenerated through the artifact gate (3 occurrences, one per family job).
RED control
push_to_main_family_carries_explicit_status_guard(ci_workflow_witness_test): reds if the guard leaves the authority row, if any push-to-main job's condition drops it, or if the family goes vacuous. Verified discriminating by execution: reverting the row FAILs the witness; both witnesses PASS on this branch.Focused repair arm under the CONVERGE-0 acceptance outcome (parent ruling msg_275c3f7e); #8083 remains the acceptance carrier and starts accumulating item 1/2 receipts (desired-ref advance + collect fold on main pushes) once this merges.
🤖 Generated with Claude Code
https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y