docs(fast-inbox): document message-prefix consumption and correct the streaming Inbox docs - #25416
Draft
spalladino wants to merge 11 commits into
Draft
docs(fast-inbox): document message-prefix consumption and correct the streaming Inbox docs#25416spalladino wants to merge 11 commits into
spalladino wants to merge 11 commits into
Conversation
spalladino
force-pushed
the
spl/fi2-message-only-docs
branch
4 times, most recently
from
September 5, 2026 13:58
d88196e to
145907b
Compare
… API and the accepted limitations
…etless node cutover
… checks, stale heights and the leaf-index derivation
…ecks and height refresh precisely
…en-tip assumption at an epoch boundary
Recovery no longer keeps unchanged messages and their proposed blocks until a content difference is found. The operator changelog, the developer Inbox page and the archiver README now say what actually happens: the log is rolled back to the newest message the node can still find on L1 near the height it recorded for it, proposed blocks that consumed anything past that point are dropped even when the same content comes straight back, and published checkpoints are never deleted by this path.
Replaces the completion-target wording in the developer Inbox page and the v6 operator changelog. Selection is local-only while a block's end stays at or below 768 messages into the checkpoint; above that line, and on every final block, the proposer resolves a live bucket end from the Inbox first. Nothing is retained between blocks and consumption is never frozen, so a bucket closing later in the slot can still be taken. The changelog also records the extra transaction-less block that ends a checkpoint whose sub-slot schedule ran out, its deadline derived from the timetable's last block build time rather than the attestation deadline, and drops inbox_completion_unreachable from the reason list.
spalladino
force-pushed
the
spl/fi2-message-only-docs
branch
from
September 8, 2026 00:55
145907b to
f0d1f1b
Compare
…t a lower bound The count a public simulation appends is an estimate, not a bound in either direction. Above the threshold a checkpoint's final block ends on a live L1 bucket boundary that the simulating node never reads, and that boundary can sit below the local step: with the cursor at 0, 400 messages observed and live buckets ending at 200 and 400, simulation appends 256 while the final block lands on 200, so a public call reading message index 220 simulates and then fails. The readiness helper is documented for what it does — it checks inclusion at a chosen L2 tip, which is a statement about the chain as it stands rather than a promise about a future block. Wording and a regression test for the 200/400 case only; the prediction mismatch itself is unchanged.
Factual corrections across the migration notes, the archiver README, the messaging and changelog pages, the Aave bridge tutorial, the barretenberg skill docs, and the comments in the network defaults, the Noir constants and checkpoint root validator, and the Rollup field-range Solidity test. The recurring errors were: describing recovery as comparing content before pruning rather than rolling back to an authenticated anchor and refetching; presenting the publication preflight's verdict as unconditional when a due prune pins it to the proven tip; promising fixed inclusion delays for L1-to-L2 messages instead of pointing at the readiness helpers; naming removed selection helpers and the wrong shape for the message-sent log; and calling four block opportunities "below the Inbox minimum" when four is exactly the floor. Timing values, the proven-tip policy and every decision gate are unchanged. Range reads: `CustomRange.end` is documented as exclusive, and the archiver's typed range error is documented as arriving generic across JSON-RPC so callers do not branch on its class. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
spalladino
force-pushed
the
spl/fi2-message-only-docs
branch
from
September 9, 2026 21:15
d43e92e to
8e97deb
Compare
spalladino
removed this pull request from stack #25417
September 9, 2026 21:16
spalladino
added this pull request to stack #25441
September 9, 2026 21:16
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
spalladino
removed this pull request from stack #25441
September 10, 2026 11:49
spalladino
added this pull request to stack #25448
September 10, 2026 11:49
spalladino
force-pushed
the
spl/fi2-message-only-docs
branch
2 times, most recently
from
September 10, 2026 12:06
15e855e to
0df3fa2
Compare
spalladino
removed this pull request from stack #25448
September 10, 2026 12:09
spalladino
changed the base branch from
spl/fi2-bucketless-node-cutover
to
spl/fi2-l1-endpoint-resolver-preflight
September 10, 2026 12:10
spalladino
changed the base branch from
spl/fi2-l1-endpoint-resolver-preflight
to
spl/fi2-bucketless-node-cutover
September 10, 2026 12:10
spalladino
added this pull request to stack #25449
September 10, 2026 12:11
spalladino
removed this pull request from stack #25449
September 10, 2026 13:04
spalladino
added this pull request to stack #25451
September 10, 2026 13:05
spalladino
removed this pull request from stack #25451
September 10, 2026 13:53
spalladino
added this pull request to stack #25452
September 10, 2026 13:54
spalladino
removed this pull request from stack #25452
September 10, 2026 14:31
spalladino
added this pull request to stack #25453
September 10, 2026 14:32
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.
Context
The bucketless Fast Inbox rebuild (#25413 → #25414 → #25415) changed what the node does with L1-to-L2 messages: every
L2 block consumes the messages the proposer's archiver has observed, blocks may end at any message prefix, only a
checkpoint's final position must be a live Inbox bucket end (resolved through
Inbox.getBucketAtOrBeforeTotalandpreflighted through
Rollup.validateCheckpointHeaderAndInbox), validators authenticate content and never penalise alocal prefix disagreement, and the archiver stores a plain message log whose reorg recovery rolls back to the newest
message still on L1 and refetches.
This PR is the normative documentation for that rebuild, plus the documentation errors the review turned up. It
changes prose and comments only — no behaviour, no timing value, no decision gate. The code fixes the review produced
are stacked directly above as #25440, and the three changes that alter node acceptance policy or proposer packing
are above that as #25436, #25437 and #25438, so each can be reviewed and taken or dropped on its own.
Documentation
ethereum-aztec-messaging/inbox.mdis rewritten around the current contract: leaf index semantics, theMessageSentevent, a "How messages reach L2" section (immediate greedy consumption, an endpoint lookup only on the final block or
well into the checkpoint, the extra transaction-less block when the schedule runs out, mandatory consumption,
content-only validation), the distinction between public same-block consumption and private consumption against a
historical header, the accepted limitations, ring headroom and back pressure, and the full view-function table. The
portal overview, the aztec-nr messaging guide, the token-bridge, Uniswap and Aave tutorials and the operator glossary
drop the descendant-wait and fixed 12–30 s wording in favour of the readiness helpers.
resources/migration_notes.mdgains the umbrella carry-overs, the additive Inbox/Rollup views and errors, thecount-addressed archiver API and the sequencer/validator internals. A new operator page
docs-operate/operators/reference/changelog/v6.mdcovers the automatic archiver store reset, the loweredmaxBlocksPerCheckpointfloor, the behaviour changes, the non-punitive validator reasons, rollback-and-refetchrecovery and the new L1 views.
Documentation the review found to be wrong
Several comments and pages asserted things the code does not do. Corrected here:
CustomRange.endis exclusive, and the archiver's typed range error arrives genericacross JSON-RPC, so callers must not branch on its class.
No operational timing value was changed anywhere, including in the network defaults, where only the stale
justification comment moved.
Message-count prediction
The largest correction is to what a node promises when it simulates a public call. The count the simulator appends is
an estimate, not a bound in either direction: above the threshold, a checkpoint's final block ends on a live L1 bucket
boundary the simulating node never reads, and that boundary can sit below the local step.
With the consumption cursor at 0, 400 messages observed, and live buckets ending at 200 and 400:
A public call reading message index 220 therefore simulates successfully and then fails when it runs for real. The
prediction mismatch itself is not fixed here (deferred), only described honestly, and
waitForL1ToL2MessageReady/isL1ToL2MessageReadyare documented for what they check: inclusion at an L2 tip that already exists, which is astatement about the chain as it stands rather than a promise about a future block.
Testing
One regression test accompanies the prediction correction — the 200/400 case above, asserting that the local step is
256 while the resolved final-block endpoint is 200.
yarn workspace @aztec/sequencer-client test src/sequencer/inbox_message_selection.test.tspasses (18 tests). Nothing else in this PR is executable.Stacked on #25415 (
spl/fi2-bucketless-node-cutover). #25440, #25436, #25437 and #25438 stack above this one.Part of A-1928
🤖 Generated with Claude Code