{"implementation":"env-snapshot-v1","specVersion":"0.2-network-activation-status","note":"Derived from this process env only. Does not verify RPC connectivity, gas, or deployed contracts. Use npm run check:testnet-env, check:opstack-env, check:network-*-ops for live gates.","trustMvpMajorGaps":[{"id":"verification_onchain_fault_proof","codeRemainingRef":"CODE_REMAINING_TODOS §2 (#6–#8)","status":"gap_remains","summary":"Postgres queue, L1 log indexer, consumer, optional L1-window gate for DISPUTED — on-chain fraud proof, production dispute period, multi-validator set remain."},{"id":"state_proof_withdrawal_production","codeRemainingRef":"CODE_REMAINING_TODOS §3 (#9)","status":"partial","summary":"v0 verify, hash/oracle, L1 submit module, SUBMIT_STUB, submit timeout + metrics, batch witness commitment (S10.3) — Bedrock prove/finalize, fault-proof join, permissionless L1 E2E remain."},{"id":"consensus_sequencer","codeRemainingRef":"CODE_REMAINING_TODOS §4 (#10)","status":"gap_remains","summary":"Redis leader lock + deterministic batch ordering only — protocol-grade consensus sequencer and failover ordering not implemented."}],"recentTrustLayerCodeLandmarks":["GET /api/public/endpoint-readiness (production_ready|pilot|stub inventory) + npm run check:credential-leak-guard (CI + check:operational-mvp-preflight)","S10.3 chain/blocks witnessCommitmentHex (paychain-batch-header-chain-v1) + check-chain-blocks-witness-http","GET /api/public/l2-execution-head + dual-layer chain-head (L2_RPC_URL; standalone op-geth/Anvil)","V6.1 L1 on-chain indexer catch-up env (VERIFICATION_ONCHAIN_L1_INDEXER_CATCHUP_*) + paychain_verification_onchain_l1_indexer_catchup_chunk_total","VERIFICATION_CHALLENGE_CONSUMER_REQUIRE_L1_WINDOW_FOR_DISPUTED + disputed_skipped_no_l1_window metric","STATE_PROOF_WITHDRAWAL_SUBMIT_TIMEOUT_MS + paychain_state_proof_l1_submit_total + 504 PAYCHAIN_STATE_PROOF_L1_SUBMIT_TIMEOUT"],"trustMvpSnapshotNote":"trustMvpMajorGaps IDs align with docs/TODOS_AND_NETWORK.md §0.3a. productionNetworkMvp.complete stays false while p0TrustLayerGapsRemain is true.","placeholders":{"consensusSequencer":"Not implemented — CODE_REMAINING_TODOS #10 (Redis leader lock is not consensus). Placeholder until protocol lands.","onChainChallengeQueue":"Not implemented — on-chain challenge period / multi-validator; off-chain Postgres queue + optional VERIFICATION_CHALLENGE_MIN_AGE_SECONDS (not L1 fraud proof).","permissionlessWithdrawal":"Partially implemented — state_proof v0 + optional hash/oracle checks + L1 submit module or SUBMIT_STUB rehearsal txHash; production permissionless path still incomplete: bedrock ABI prove/finalize, fault-proof, real L1 E2E (CODE_REMAINING_TODOS #9).","liveNetworkProof":"Not derivable from env — requires testnet-smoke / explorer tx confirmation."},"env":{"ANCHOR_TARGET":"evm","ANCHOR_MOCK":true,"OP_BATCHER_MOCK":false,"BATCHER_LEADER_LOCK_ENABLED":false,"redisUrlPresent":false,"RBAC_ENABLED":false,"ledgerStore":"postgres","CHAIN_BOOTSTRAP_STATUS_PUBLIC":true,"seedOrPublicUrlPresent":false,"L2_RPC_URL":false,"L2_BATCH_COMMIT_ADDRESS":false,"L2_EXECUTION_CLIENT":"opgeth"},"l2ExecutionLayer":{"configured":false,"batchCommitContractPresent":false,"architecture":"sequencing-only","executionClient":null,"publicProbePath":"GET /api/public/l2-execution-head","note":"S10.3 batch headers remain canonical sequencing; L2 eth blocks are a separate execution layer."},"milestones":{"M1_testnetAnchor":{"summary":"EVM testnet anchor (ANCHOR_MOCK=false is required for non-mock)","anchorMock":true,"configHints":["Set ANCHOR_MOCK=false for live L1 writes"]},"M2_staging":{"rbacEnabled":false,"persistedStore":true,"ledgerStore":"postgres","publicBootstrapEndpoints":true},"M3_opStack":{"anchorTarget":"evm","opBatcherMock":false,"status":"not_opstack_target"},"M4_multiBatcherLock":{"leaderLockEnabled":false,"redisUrlPresent":false,"status":"inactive"},"M5_releaseGates":{"note":"Run: npm run check:network-anchor-ops && npm run check:network-opstack-ops (from repo root)"}},"networkTier":{"seedOrPublicUrlConfigured":false,"note":"No seed/public URL — single-node default"},"anchorAdapter":{"supportedTargets":["evm","pci","subnet","opstack"],"activeTarget":"evm","selectionNote":"PayChain core (receipts/batches/settlement) is anchor-agnostic. loadL1Config() + createL1Provider() swap the L1 plugin. One target per Ledger/Batcher process — e.g. PCI anchors and OP Stack anchors together in production => separate deployments (env) unless a future multi-target design is added.","checkScript":"npm run check:anchor-env-matrix"},"operationalMvpBeforeConsensusSequencer":{"docRef":"docs/TODOS_AND_NETWORK.md §7 (operational release line, M1–M4)","trustLayerDocRef":"documentation-archive/migrated-2026-04/CODE_REMAINING_TODOS.md #10 (out of scope here)","complete":false,"summary":"Env snapshot matches M1–M4 hints: live anchor target (ANCHOR_MOCK=false), RBAC + persisted store, OP batcher not mocked when ANCHOR_TARGET=opstack, Redis URL when batcher leader lock is on. Does not prove RPC gas/contracts; does not include consensus sequencer or full trust-layer P0.","outOfScope":{"consensusSequencer10":"CODE_REMAINING_TODOS #10 — protocol-grade sequencer set; BATCHER_LEADER_LOCK is not consensus.","trustLayerP0":"On-chain verification depth, permissionless withdrawal production (#9), etc. — see productionNetworkMvp."},"estimatedOpsHints":{"m1_nonMockAnchor":false,"m2_rbacAndPersistedStore":false,"m3_opStackIfTarget":true,"m4_redisIfLeaderLock":true},"blockers":["env: one or more estimatedOpsHints is false — see milestones M1–M4 and ENV_SCHEMA_AND_CONSTANTS.md"],"recommendedManualVerification":["npm run check:network-anchor-ops","npm run check:network-opstack-ops","npm run testnet-smoke (with ANCHOR_MOCK=false and testnet env)","npm run mvp:phase5-leader-lock-smoke (when BATCHER_LEADER_LOCK_ENABLED and multi-replica)"]},"productionNetworkMvp":{"docRef":"docs/NETWORK_ACTIVATION_MASTER_PLAN.md §7","complete":false,"estimatedReleaseGateEnvHintsGreen":false,"estimatedOpsHints":{"m1_nonMockAnchor":false,"m2_rbacAndPersistedStore":false,"m3_opStackIfTarget":true,"m4_redisIfLeaderLock":true},"p0TrustLayerGapsRemain":true,"notePreConsensusOpsMvp":"When operationalMvpBeforeConsensusSequencer.complete is true but this.complete is false, you are at ops-ready env alignment before trust-layer P0 and consensus sequencer #10.","blockers":["env: one or more estimatedOpsHints false — tune env or see milestones","code: P0 trust layer — CODE_REMAINING_TODOS #6–#10 (on-chain verification, permissionless withdrawal #9, consensus sequencer #10); placeholders above remain until removed"],"manualGatesRequired":["npm run check:network-anchor-ops","npm run check:network-opstack-ops","npm run check:network-opstack-release-gate","npm run check:network-anchor-release-gate"],"note":"complete=true requires env hints green, P0 gaps closed in code (no trust placeholders), and CI/release gates green — not derivable from this endpoint alone."},"codeLevelImplementationExcludingPlaceholders":{"docRef":"documentation-archive/migrated-2026-04/CODE_REMAINING_TODOS.md §0.6","complete":false,"note":"While true in source, §1–8 still lists implementation work. Flip codeLevelWorkExcludingPlaceholderStringsRemains when CODE_REMAINING tables are cleared."},"v2Absorption":{"policy":"settlement-kernel-first-selective-backport","manifestRef":"infra/v2-backport/MANIFEST.json","publicMeta":{"networkRegistry":"GET /api/public/network-registry","productLayerBridge":"GET /api/public/product-layer-bridge","px402ListenerBridge":"GET /api/public/px402-listener-bridge"},"px402ContractsStaging":"packages/paychain-contracts/src/px402 (reference, not default deploy)","parkedPackages":"staging/v2-packages after npm run sync:v2-packages-staging","checkScript":"npm run check:v2-backport-readiness"}}