Skip to content

Repair: push-to-main deploy/advance/collect silently skipped on every main push (implicit success() cascade) — status guard + RED control - #8085

Merged
briansrls merged 2 commits into
mainfrom
repair/push-to-main-skip-cascade
Aug 9, 2026
Merged

briansrls merged 2 commits into
mainfrom
repair/push-to-main-skip-cascade

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Measured latent: for at least 30 consecutive main pushes, every job gated by ci_deploy_push_to_main_if was SKIPPED — deploy_dashboard_srv1 included, and since #8045 also advance_fleet_desired and collect_fleet_convergence. Main has not actually been converging: the actuator existed but never ran.

Root cause (workflow-graph cascade, not the clauses): heal_generated_artifacts skips on ordinary pushes; ci survives that 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 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.dag ci_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

briansrls and others added 2 commits August 9, 2026 20:22
…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
@gunbai-bot

gunbai-bot Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor Author

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 git checkout after the witness ran and before the commit, leaving ci.yml carrying a fix its authority lacked — exactly the parallel-representation state the review names. The restore commit re-applies the guard at ci_deploy_push_to_main_if, regenerates ci.yml through the artifact gate (byte-identical to the first push's YAML, proving the YAML was never hand-edited — it was the .dag side that regressed), and both witnesses PASS by execution on the pushed tree: ci_workflow_witness_holds and push_to_main_family_carries_explicit_status_guard. Authority row, witness, and committed workflow are aligned; grep receipt: needs.ci.result present 1x in the authority, 3x in ci.yml. — sent from wise-moth-430

@briansrls
briansrls merged commit 25259c8 into main Aug 9, 2026
6 of 7 checks passed
@briansrls
briansrls deleted the repair/push-to-main-skip-cascade branch August 9, 2026 20:36
gunbai-bot Bot pushed a commit that referenced this pull request Aug 9, 2026
…erged model

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y
briansrls added a commit that referenced this pull request Aug 9, 2026
…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>
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