Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agent/runbooks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Agents fetch this `README.md` to discover what's available, then `WebFetch` the
| [`operating-archive-node-byov.md`](operating-archive-node-byov.md) | Required volume contents, PV/PVC spec, SeiNode/SeiNetwork spec, controller validation surface, and EBS-swap cutover sequence for archive nodes using the bring-your-own-volume (`dataVolume.import`) path. | Bringing up an archive node from a pre-populated EBS; swapping the underlying volume of an existing archive PV; debugging `ImportPVCReady=False`; receipt-store pruning concerns. |
| [`migrating-validator-to-byo-secrets.md`](migrating-validator-to-byo-secrets.md) | Cutting a live validator from a legacy host onto the platform carrying its consensus identity via Secrets (`signingKey`/`nodeKey`): what migrates, SeiNetwork spec, controller validation surface, the stop-before-start double-sign discipline + layered equivocation defenses, cutover/rollback sequence, and dry-run gotchas. | Migrating an existing validator (e.g. arctic-1 node-19) off EC2 onto K8s; any cutover where a consensus key changes hosts; understanding the `replicas:1` CEL guard or the double-sign alerts. |
| [`validating-flatkv-memiavl-parity-via-sharded-replay.md`](validating-flatkv-memiavl-parity-via-sharded-replay.md) | flatKV↔memIAVL storage-engine parity validation by differential historical replay: the flatKV+memIAVL replay-pair topology (same binary, same snapshot, blocks from a shared archive), the correctness gates (compare pair-not-archive; verify migration complete so flatKV reads are genuine; `historical_replay` build for pre-v6.5 txs), the seictl shadow comparator, result aggregation + Notion report, and the fan-out to 50+ shards. | Standing up a flatKV-vs-memIAVL correctness validation on harbor; driving a sharded replay campaign; debugging why a replay node is stuck or a comparison reads all-indeterminate/vacuous; understanding `migrate_evm` vs `memiavl_only`/`evm_migrated`/`flatkv_only` read routing. |
| [`benchmarking-evm-gas-vs-execution-time.md`](benchmarking-evm-gas-vs-execution-time.md) | Testing whether Sei's EVM gas schedule tracks real compute, for both (1) replaying a real historical block against restored state and (2) executing arbitrary bytecode against a specific historical state: why hardware parity with prod validators is automatic (`NodepoolForMode`, no engineer config needed), the replayer-node mechanism for functionality 1 and its real gap (gas is captured, execution time is not), the unverified `eth_call`-state-override dependency for functionality 2 and its private-writable-fork fallback, the confounds that invalidate a naive comparison (governance-mutable `SSTORE` gas, precompiles, OCC re-execution/determinism), the differential-loop bytecode-crafting technique for per-opcode isolation, the privileged-attach gate for eBPF on harbor's `eng-<alias>` namespaces (PSS posture, scoped `kubectl debug --target=`), and concrete probe design against real `seid`/go-ethereum symbols (why per-opcode uprobing doesn't work, why `offcputime`/`profile` beat raw uprobe timing). | Designing a gas-vs-compute benchmark; replaying a historical block for timing rather than storage-parity; deciding whether an opcode's gas cost is a fair compute proxy before trusting a result; attaching any eBPF probe to a harbor pod; resolving `seid`'s real symbol names before writing a probe. |
| [`benchmarking-evm-gas-vs-execution-time.md`](benchmarking-evm-gas-vs-execution-time.md) | Testing whether Sei's EVM gas schedule tracks real compute, for both (1) replaying a real historical block against restored state and (2) executing arbitrary bytecode against a specific historical state: the validated RPC-native measurement primitive (`debug_traceTransactionProfile` gives clean per-tx gas + execution time in one call, no eBPF required — replacing an earlier eBPF-first draft), the version-pinning discipline a replayer needs to avoid an app-hash-mismatch halt (including the `mock_chain_validation` build mode for testing unreleased code against real transaction load), why hardware parity with prod validators is automatic (`NodepoolForMode`, no engineer config needed), the scope limits confirmed by reading the actual code (only `Y=X-1` is supported for functionality 1; functionality 2's `debug_traceCall` path has a real execution-time gap), the confounds that invalidate a naive comparison (governance-mutable `SSTORE` gas, precompiles, whole-block-latency being the wrong timing proxy), the differential-loop bytecode-crafting technique for per-opcode isolation, subtracting intrinsic gas for a cleaner correlation, reading whole-block execution time from the existing log line with no new instrumentation, and eBPF (§9) demoted to a fallback tier for needs beyond what's specified. An appendix documents OpenTelemetry tracing as an investigated-and-invalidated avenue for this same measurement, with the real data that ruled it out. | Designing a gas-vs-compute benchmark; replaying a historical block for timing; choosing between a release-pinned replayer and `mock_chain_validation`; deciding whether an opcode's gas cost is a fair compute proxy before trusting a result; understanding why `Y=X-1` is the supported case, not the general one; attaching any eBPF probe to a harbor pod only if the RPC primitive genuinely isn't enough. |

## Adding a new runbook

Expand Down
Loading
Loading