Write Pipeline

A write does not appear in the Oak segment store at once. It moves through seven stages: ingress, the unverified queue, verification, the adaptive packing buffer, release, the backpressure gate, and Aeron commit. Each stage has its own queue, limits and counters. Operators tuning throughput need the stage boundaries; anyone diagnosing a latency spike needs to know which stage owns which counter.

The consensus commit step itself is documented in Consensus Model; this page covers everything around it. Walk the pipeline once, then watch GET /v1/proposals/queue/stats while you submit test traffic.

Glossary: release-flow is the model (verified work is released by capacity); "epoch" survives only in field names such as currentEpoch and proposalsByEpoch.

End-to-End Pipeline

proposal-flow

Stage-by-Stage

Field names below are keys of GET /v1/proposals/queue/stats on the validator, unless marked otherwise.

1. Ingress and Signature

2. Unverified Queue

3. Verification and Payment

4. Adaptive Packing Buffer

5. Release

6. Backpressure Gate

7. Aeron Commit and Apply

The total*Count fields cover the current counter window (counterWindowStartMs, counterRotationIntervalMs); the *Lifetime variants cover the process lifetime. Queue stats are per validator, and operation records live only on the validator that accepted the write.

Release Model

After payment and signature checks pass, Oak does not send every write straight into Aeron. Verified proposals enter the adaptive packing buffer, where the runtime:

Release timing depends on verification status, queue pressure, and Aeron health. The payment contract has no tiers and does not set it.

The release governor reads the verified-to-finalized gap, backpressure pending count and age, and the buffer and release-ready counts. It reports a state (HEALTHY, PRESSURED or OVERLOADED), an action (DIRECT, BUFFERED or THROTTLED) and reason codes.

Use these runtime surfaces to inspect live behavior:

Ethereum confirmation windows (requiredConfirmations) still matter for payment verification in Sepolia mode. They do not set write latency.

Edge Overview Fields

The local edge adapter from oak-chain-edge-worker serves GET http://127.0.0.1:8787/ops/v1/overview. It exists only when start-cluster.sh found that repository and started the adapter. Its fields are derived from validator data:

Interpretation:

Operating States

Use these five labels on dashboards and in runbooks. A dashboard derives them from the fields above; the validator does not emit them.

Core Derived Metrics

Recommended derived metrics (computed in a dashboard or worker):

Notes:

Fast Triage Commands

# Cluster overview (needs the local edge adapter on :8787)
curl -s http://127.0.0.1:8787/ops/v1/overview | jq '.data | {
  leader, queue, durability, replication
}'

# Leader queue stats (use the leader's port)
curl -s http://127.0.0.1:8090/v1/proposals/queue/stats | jq '{
  totalProposals,totalVerifiedCount,totalFinalizedCount,
  verifiedCount,processedCount,batchQueueSize,
  backpressurePendingCount,backpressurePendingRawCount,
  persistencePendingChanges,persistenceFlushAvgMs,persistenceFlushLastMs,
  verifierQueueWaitAvgMs,verifierQueueWaitMaxMs,
  adaptiveReleaseGovernorState,adaptiveReleaseAction
}'

# Release flow
curl -s http://127.0.0.1:8090/v1/proposals/release-flow | jq

Practical Operator Checklist

Before load tests:

  1. Confirm the queue starts drained (pendingCount=0, batchQueueSize=0, backpressureActive=false).
  2. Confirm queue tuning at startup: the QUEUE_TUNING_SOURCE log line lists the values in use.

During load:

  1. Watch backpressurePendingRawCount, backpressureTimeoutCount and re-queue log lines.
  2. Compare verifiedCount with processedCount and totalFinalizedCount.
  3. Watch adaptiveReleaseGovernorState and its reason codes.

After load, require all of:

  1. batchQueueSize = 0
  2. backpressurePendingCount = 0
  3. persistencePendingChanges = 0
  4. verifiedCount = 0
  5. totalVerifiedCount == totalFinalizedCount

If all pass, the run has settled. Capture a queue stats snapshot as run evidence. See the 2026-02-07 report for a run that did not settle.