Skip to content

Repair: CONVERGE actuator ran + failed — Class B compile break in collect, pre-push hook blocking desired-ref advance - #8090

Merged
briansrls merged 2 commits into
mainfrom
repair/converge-actuator-classb-and-advance-hook
Aug 9, 2026
Merged

briansrls merged 2 commits into
mainfrom
repair/converge-actuator-classb-and-advance-hook

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

The #8085 merge run (31334668866) is the first main push in 30+ to actually EXECUTE advance_fleet_desired and collect_fleet_convergence rather than silently skip (the skip-cascade fix worked: ci SUCCESS, deploy_dashboard_srv1 SUCCESS). Both then failed with two real defects — the first diagnostics this path has ever produced. This repair clears both under the CONVERGE-0 acceptance outcome.

Failure 1 — advance_fleet_desired: our own pre-push hook blocks the desired-ref advance

.githooks/pre-push: line 14: cargo: command not found → exit 127 → failed to push some refs. The deploy runner has core.hooksPath=.githooks (convergence installs it) but no cargo, so the source-format guard aborts the push. refs/fleet/desired is a data ref carrying no source — the guard has nothing to check on it.

Fix (per parent ruling msg_0e7d195a — explicitly NOT a blanket --no-verify): the generated pre-push hook now reads the pushed refspecs from stdin (git's pre-push contract, one <lref> <lsha> <rref> <rsha> line per ref) and skips the source guards only when ≥1 ref was seen AND every pushed remote ref is under refs/fleet/*. It fails closed on empty/unreadable stdin and on any non-fleet ref (all guards run). Behaviorally tested four ways (fleet-only → skip; source / mixed / empty → guards run). The enforcement wall stays the required CI floor.

Failure 2 — collect_fleet_convergence: fleet_converge_cli does not compile through that entry on main

Two classes, both fixed:

  • 4 §4c violations — annotations inside a declaration body (deleted; the match arm is self-documenting).
  • 9 Class B bare cross-module references — host_converge_slice1_* / runner_memory_* resolved only by pool coincidence and were not dragged into the collect entry's closure. Explicit imports added (plus fleet_show_effective_read's srv1/srv2 ssh-transport bare refs). This is the third independent live corroboration today that pool-coincidence resolution is corpus-wide accidental coverage.

Typed finding for follow-up

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. Per-PR affected-set selection appears never to have selected it. Worth its own row.

The line-budget witness was raised 1500→2100 with rationale (the correctness preamble; the bloat guard is retained with headroom). #8083 remains the acceptance carrier; items 1/2 receipts can start filling once this merges and the next main push advances the ref + collects.

🤖 Generated with Claude Code

https://claude.ai/code/session_0168R31q15ZsPJyik18Roz3y

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

gunbai-bot Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 50843's sibling concern (parent's oracle-rule question) at HEAD: the line-budget witness (length(sh) < N) is DELETED, not raised. It was a tree-measured numeric oracle — the tell was that adding the correct fleet-ref preamble forced the cap up to fit the very code it bounded (DESIGN §5 oracle rule, a ratchet loosening). Its intent — the hook stays a thin dispatcher doing no heavy work — is already asserted structurally and precisely by witness_no_in_hook_build, witness_no_corpus_or_witness_run, witness_no_claim_batch_dependency, and witness_no_tree_mutation, none of them tree-measured; a byte count added nothing they don't already bound (DESIGN §2).

Acceptance evidence to record with this PR: on the same run 31334668866, deploy_dashboard_srv1 SUCCEEDED — the srv1 deploy leg proven by execution, not just present in a run log. — sent from wise-moth-430

@briansrls
briansrls merged commit 0f9bf74 into main Aug 9, 2026
6 checks passed
@briansrls
briansrls deleted the repair/converge-actuator-classb-and-advance-hook branch August 9, 2026 23:03
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