Nervos Sidecar Recovery Runbook
Use this runbook when nervos-smt-v2 is scheduled or active and the sidecar is unhealthy, missing, unresponsive, wrong-version, or unable to load checkpoints.
After activation, sidecar failure is a consensus-safety blocker. NOOSChain must fail closed rather than compute roots with another engine.
First Checks
Run:
npm run noos -- state-root status --json
npm run noos -- state-root preflight --json
npm run noos -- production monitor-report --jsonIn the Admin GUI, check Dashboard and Membership > Consensus for:
- readiness;
- failed readiness checks;
- supervisor state;
- sidecar running;
- sidecar engine/protocol/checkpoint version;
- latest verified checkpoint;
- last error.
Sidecar Process Died
Symptoms:
stateRootEngine.supervisor.state = degradedorstopped;stateRootEngine.supervisor.sidecar.running = false;- monitor-report emits
state_root_sidecar_supervisor_unhealthy.
Actions:
- Check the sidecar binary path and permissions.
- Check process logs for the supervisor last error.
- Confirm the configured command exists on this host.
- Run
noos state-root preflight --json. - Restart the node or sidecar supervisor according to the deployment model.
- Re-run production preflight before admitting validator traffic.
If the chain is post-activation and block execution failed, run replay/sync verification before marking any incident resolved.
Sidecar Is Unresponsive
Symptoms:
- request timeout in supervisor
lastError; - no recent
lastHealthyAt; - sidecar process may still have a PID.
Actions:
- Stop or restart the supervised process through the node/deployment manager.
- Confirm
NOOS_STATE_ROOT_SIDECAR_TIMEOUT_MSis realistic for the host. - Inspect CPU, memory, disk, and checkpoint directory latency.
- Run
noos state-root preflight --json. - If repeated, keep the validator out of production traffic and collect a support bundle/logs.
Do not increase timeouts to hide deterministic execution stalls without benchmark evidence.
Wrong Version
Symptoms:
- readiness check
sidecarVersionorsidecarSupervisorVersionfails; - monitor-report emits
state_root_sidecar_version_mismatch; - reported engine/protocol/checkpoint format does not match the frozen contract.
Actions:
- Deploy the sidecar binary built from the same NOOSChain release.
- Confirm
NOOS_STATE_ROOT_SIDECAR_PROTOCOL_VERSION=1. - Restart the supervisor/node.
- Run state-root preflight.
- Run production preflight.
Never allow a wrong-version sidecar to execute post-activation blocks.
Missing Or Corrupt Checkpoint
Symptoms:
- sidecar checkpoint load fails;
- checkpoint file hash does not match DB metadata;
- checkpoint root changes after load.
Actions:
- Treat verified checkpoint mismatch as unsafe local cache.
- Restore the checkpoint directory from a backup taken with the database, if available.
- If no checkpoint backup is available, allow the node to rebuild the sidecar from materialized
state_leavesonly after confirming database integrity. - Run chain and replay verification.
- Let the next successful Nervos block export a new verified checkpoint.
Checkpoint files are local operational cache. They are not a replacement for block roots, snapshot verification, or replay.
Snapshot Restore Path
After importing a snapshot:
- Verify the snapshot archive.
- Import into an empty database or approved restore flow.
- Confirm the checkpoint records the snapshot engine metadata.
- If the snapshot is post-activation, ensure the sidecar is ready before the first new block.
- Run replay/chain verification.
Commands:
npm run noos -- snapshots verify --file snapshot.noosnap.tar.gz
npm run noos -- snapshots import --file snapshot.noosnap.tar.gz --mode empty_database_only --yes
npm run noos -- state-root preflight
npm run noos -- chain verify
npm run noos -- chain replay-verifyIncident Handling
If block execution fails after activation because the Nervos sidecar is missing, wrong-version, corrupt, or unresponsive:
- stop validator traffic;
- keep the incident active;
- repair the sidecar/checkpoint problem;
- replay or resync the node;
- verify chain and replay;
- only then mark the incident resolved.
Marking an incident resolved only updates incident status. It does not repair a sidecar, checkpoint, state root, or validator membership problem.