The mainnet candidate gate prevents local launch readiness from being mistaken for production deployment status.
Run:
python tools/mainnet_candidate_gate.py --prettyCurrent expected status:
localLaunchReady: True
mainnetCandidateReady: False
releaseMode: LOCAL_LAUNCH_READY_ONLY
The gate combines:
- public claim safety;
- launch reality check status;
- external deployment/evidence gates.
The local checks can pass today. The external gates stay blocking until real evidence exists.
| Gate | Required evidence |
|---|---|
verified_mainnet_poolmanager |
Official PoolManager address and chain assumptions are re-checked before promotion. |
mainnet_hook_deployment |
Hook deployment record exists for the target chain. |
source_verification |
Hook source and bytecode are verified on the target explorer. |
observed_after_swap_log |
A finalized AfterSwapObserved log exists. |
observed_flowpulse_log |
A finalized FlowPulse log exists. |
reader_verifier_evidence |
Reader-derived receipt metadata is attached and reproducible. |
incident_response_owner |
An operator owns release status and incident response. |
security_review |
Hook, deployment, reader, and claim boundaries are reviewed. |
| Mode | Meaning |
|---|---|
LOCAL_LAUNCH_READY_ONLY |
The repo can demonstrate the hook primitive and local conformance suite, but must not claim a production deployment. |
MAINNET_CANDIDATE |
Local checks pass and every external gate has recorded evidence. |
Default mode exits zero when the local launch surface is healthy:
python tools/mainnet_candidate_gate.py --prettyStrict mode exits non-zero unless every external gate is satisfied:
python tools/mainnet_candidate_gate.py --require-mainnet-candidateThat split lets CI enforce local launch health without making a false production claim.