Skip to content

batch_operator: drop the operator-side bootstrap push#521

Closed
jglanz wants to merge 1 commit into
fix/chain-plugin-sync-gatefrom
fix/batch-operator-drop-genesis-bootstrap-push
Closed

batch_operator: drop the operator-side bootstrap push#521
jglanz wants to merge 1 commit into
fix/chain-plugin-sync-gatefrom
fix/batch-operator-drop-genesis-bootstrap-push

Conversation

@jglanz

@jglanz jglanz commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #520

Base is fix/chain-plugin-sync-gate (PR #520 — the chain_plugin sync gate). This PR is the one-file follow-up the sync-gate PR called out as out-of-scope. Review #520 first; GitHub will auto-retarget this to master once #520 merges.

Problem

batch_operator_plugin::do_poll_epoch_state pushed sysio.msgch::bootstrap at epoch 0 to trigger the genesis advance — signed with the operator's own account authority. But msgch::bootstrap gates on require_auth(get_self()) (i.e. sysio.msgch's own authority), so the chain rejected the push unconditionally with missing authority of sysio.msgch (3090004), before the check(epoch == 0) ever ran. It never advanced anything — it only emitted boot-window error-log noise (3 lines/run on the 9-op clusters).

The genesis advance is a system responsibility: only the holder of sysio.msgch's authority (the genesis / bootstrap process; the harness in test clusters) can trigger it. From epoch 1 onward, advance re-arms itself via evalcons consensus — batch operators never trigger it.

Change

Remove the epoch == 0 bootstrap-push block from do_poll_epoch_state and the now-orphan action_bootstrap constant. One file, +9/−14.

Verification

On top of #520:

  • Unit sweep 7/7 greenunit_test 1507/1507, contracts_unit_test, plugin_test, test_fc, and the test_chain_plugin / test_underwriter_plugin / test_batch_operator_plugin binaries.
  • Full 13-flow suite: 13/13 SUCCEEDED (fresh cluster per flow, canonical runner + heartbeat monitor, 8 concurrent).
    • msgch::bootstrap 3090004 signature = 0 across all 13 clusters (was 3× on the 9-op runs of the parent branch — this is exactly what the change removes).
    • 3060002/3060003 (the sync-gate target) still 0 across all 13.

🤖 Generated with Claude Code

The genesis advance (epoch 0 -> 1) is a SYSTEM responsibility, not a batch
operator's. `sysio.msgch::bootstrap` gates on `require_auth(get_self())`, so only
the holder of `sysio.msgch`'s own authority (the genesis / bootstrap process) can
trigger it. `do_poll_epoch_state` was pushing `msgch::bootstrap` at epoch 0 signed
with the operator's own account authority, which the chain rejects UNCONDITIONALLY
with `missing authority of sysio.msgch (3090004)` before the epoch check ever runs.
It never advanced anything; it only produced boot-window error-log noise
(3 lines/run observed on the 9-op clusters). From epoch 1 onward `advance` re-arms
itself via `evalcons` consensus; batch operators never trigger it.

Remove the epoch==0 bootstrap-push block and the now-orphan `action_bootstrap`
constant.

Verified on top of the chain_plugin sync gate (#520): full unit sweep green
(unit_test 1507/1507, contracts_unit_test, plugin_test, test_fc, and the chain /
underwriter / batch_operator plugin test binaries), and the full 13-flow suite
13/13 SUCCEEDED with the `msgch::bootstrap 3090004` signature now 0 across every
cluster (was 3x on the 9-op runs) and `3060002/3060003` still 0.

Co-Authored-By: Claude <noreply@anthropic.com>
Change-Id: I08613c5379c85ba98e5d00a1c794ac00fb9b2de5
@jglanz
jglanz requested a review from heifner July 16, 2026 12:55
@jglanz jglanz changed the title batch_operator: drop the operator-side genesis bootstrap push batch_operator: drop the operator-side bootstrap push Jul 16, 2026
@heifner

heifner commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Restacked as #523 on top of #522 (the replacement for #520) — same single commit, cherry-picked unchanged with authorship preserved. Closing so the stack tracks the new base.

@heifner heifner closed this Jul 16, 2026
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.

2 participants