{"ok":true,"localProofContract":{"schema":"odei.daorg.local-proof-contract.v1","version":"2026-05-15","self":"/api/daorg/runtime/local-proof-contract","status":"staged","operationalReady":false,"boundary":{"source":"ODEI local app","publicSurface":"app.odei.ai","privacy":"public-safe proof only","noRawLocalData":true,"redactionRequired":true,"hash":"sha256"},"acceptedArtifacts":[{"artifact":"odei.local.execution-proof","schema":"odei.local.execution-proof.v1","publicRead":"https://app.odei.ai/execution-proof.json","intakeTemplate":"https://app.odei.ai/intake-status/{intakeId}/execution-proof","requiredFields":["schema","proofHash","publicSafe","redactions","summary"]},{"artifact":"odei.local.runtime-receipt","schema":"odei.local.runtime-receipt.v1","publicRead":"https://app.odei.ai/runtime-receipt.json","intakeTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-receipt","writePath":"/intake-status/{intakeId}/runtime-receipt","requiredFields":["schema","runtimeId","receiptHash","publicSafe","generatedAt"]},{"artifact":"odei.local.runtime-heartbeat","schema":"odei.local.runtime-heartbeat.v1","publicRead":"https://app.odei.ai/runtime-heartbeat.json","intakeTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-heartbeat","writePath":"/intake-status/{intakeId}/runtime-heartbeat","requiredFields":["schema","runtimeId","heartbeatHash","publicSafe","generatedAt"]}],"minimumEvidence":["artifact and schema identify the local proof packet","publicSafe must be true before DAOrg treats the artifact as reviewable","private tool arguments and local paths must be redacted","runtime receipt or heartbeat must bind the proof to an intake id when submitted through app.odei.ai","a stable sha256 hash or proofHash must be present before public receipt finality is claimed","runtime heartbeat must be fresh before it can close the local proof lane"],"freshnessPolicy":{"clock":"UTC ISO-8601 generatedAt","maxHeartbeatAgeSeconds":900,"maxReceiptAgeSeconds":86400,"staleState":"blocked","rule":"A stale heartbeat or receipt can stay visible as history, but it cannot close the local proof lane or unlock production-complete language."},"verificationMatrix":[{"id":"execution-proof-shape","artifact":"odei.local.execution-proof","command":"curl -fsS https://app.odei.ai/execution-proof.json","requiredFields":["schema","proofHash","publicSafe","redactions","summary"],"closeRule":"publicSafe=true, proofHash is sha256, and private payload fields are absent."},{"id":"runtime-receipt-shape","artifact":"odei.local.runtime-receipt","command":"curl -fsS https://app.odei.ai/runtime-receipt.json","requiredFields":["schema","runtimeId","receiptHash","publicSafe","generatedAt"],"closeRule":"receiptHash is sha256 and generatedAt is within the receipt freshness policy."},{"id":"runtime-heartbeat-freshness","artifact":"odei.local.runtime-heartbeat","command":"curl -fsS https://app.odei.ai/runtime-heartbeat.json","requiredFields":["schema","runtimeId","heartbeatHash","publicSafe","generatedAt"],"maxAgeSeconds":900,"closeRule":"heartbeatHash is sha256 and generatedAt is not older than the heartbeat freshness policy."}],"submission":{"writeTokenEnv":"ODEI_RUNTIME_WRITE_TOKEN","command":"npm run runtime:proof","submitCommand":"ODEI_RUNTIME_WRITE_TOKEN=<runtime-token> npm run runtime:proof:submit -- --intake-id <intakeId> --runtime-id odei-local-runtime","receiptWriteTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-receipt","heartbeatWriteTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-heartbeat","failClosed":true},"daorgUse":{"syncLane":"local-app-proof-producer","statusEnv":"ODEI_LOCAL_PROOF_PRODUCER_STATUS","promotionRule":"Move the local proof lane to pass only after execution proof, runtime receipt, and runtime heartbeat are public-safe and stable.","proofConsumer":"/api/daorg/runtime/sync-contract","proofVerifier":"/api/daorg/runtime/local-proof-verifier"},"routes":{"localProofContract":"/api/daorg/runtime/local-proof-contract","appLiveContract":"/api/daorg/runtime/app-live-contract","localProofVerifier":"/api/daorg/runtime/local-proof-verifier","runtimeSyncContract":"/api/daorg/runtime/sync-contract","syncStatus":"/daorg/sync","appExecutionProof":"https://app.odei.ai/execution-proof.json","appExecutionProofTemplate":"https://app.odei.ai/intake-status/{intakeId}/execution-proof","appRuntimeReceipt":"https://app.odei.ai/runtime-receipt.json","appRuntimeReceiptTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-receipt","appRuntimeHeartbeat":"https://app.odei.ai/runtime-heartbeat.json","appRuntimeHeartbeatTemplate":"https://app.odei.ai/intake-status/{intakeId}/runtime-heartbeat"},"invariants":["Private local app data stays local until converted into a public-safe artifact.","DAOrg does not infer execution from chat messages, screenshots, or private operator claims.","A local proof artifact can support review, but material execution or reward finality still requires a DAOrg receipt."],"contractHash":"sha256:791dc48aef649ad9636b13f65519b01cf6d0711a30251ae9c00703c5c32a3bdb"}}