diff --git a/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.json b/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.json new file mode 100644 index 0000000..44db097 --- /dev/null +++ b/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.json @@ -0,0 +1,260 @@ +{ + "artifact": "proposal_apply_production_authorization_packet", + "authorization_record_required": { + "authorization_text": "", + "authorized": true, + "binding_sha256": "e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345", + "expires_at_utc": "", + "operator_identity": "", + "production_rollback_sql_sha256": "", + "received_at_utc": "", + "rollback_authorized": true + }, + "authorization_text_template": "I authorize one production DB apply for proposal 9b2b5fa4-0e0d-5db0-aa4d-6fd102889946 with payload SHA-256 6fba5e8e105a28dfaf5733ff7c9f85a20d31d653add0bc4a0f81e4b08de803af to Docker container teleo-pg, database teleo, system identifier 7649789040005668902, binding SHA-256 e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345. I also authorize conditional production rollback SHA-256 only if the bound postflight fails and no downstream dependency exists. Do not send Telegram, mutate another proposal, expose Cloud SQL, or promote GCP. Operator ; received ; expires .", + "binding": { + "approval_gate": { + "apply_role_present": true, + "approve_function_present": false, + "assert_function_present": false, + "finish_function_present": false, + "immutable_approval_table_present": false, + "review_role_present": false + }, + "approval_gate_dependency": { + "path": "scripts/kb_apply_prereqs.sql", + "requires_separate_production_authorization": true, + "sha256": "bdf8c5da05eed10665b05ad1e331e3c9c8d72464c59889a3cf8f34ab23822faa" + }, + "candidate_readback": { + "matching_candidate": null, + "matching_candidate_count": 0 + }, + "destination": { + "container": "teleo-pg", + "database": "teleo", + "server_version_num": "160014", + "system_identifier": "7649789040005668902" + }, + "destination_readback": { + "observed_at_utc": "2026-07-15T00:45:59.238006+00:00", + "read_only_transaction": true + }, + "engine": { + "apply_engine_path": "scripts/apply_proposal.py", + "apply_engine_sha256": "ca2c0a0c1031393c95a26102d57339654d2363f4c51cdf39aabb9071d0ca6c26", + "apply_sql_sha256": "1a7d65870e415ee8891b6dd84732a29bcee00412c10862d3d1db4b191a8ade38", + "repo_git_sha": "db64500a12a64206e1bb7fd0c9a0a21bca755c3d", + "runtime_manifest": { + "scripts/apply_proposal.py": "ca2c0a0c1031393c95a26102d57339654d2363f4c51cdf39aabb9071d0ca6c26", + "scripts/kb_apply_prereqs.sql": "bdf8c5da05eed10665b05ad1e331e3c9c8d72464c59889a3cf8f34ab23822faa", + "scripts/kb_apply_replay_receipt.py": "4ead132fc32a69baaecfe7b638cba8ba6d54d8508d0b7e6a922dc8065805c97f", + "scripts/proposal_apply_lifecycle.py": "a643b83b55c9e76f545ebafb9582d6d07ff432600c1b66004cc7440d7ac1963b" + } + }, + "expected_rows": { + "row_ids": { + "claim_edges": [ + "b28d8770-9ac9-5b5f-bfe2-7280d7422a21" + ], + "claim_evidence": [ + "13e580c5-458d-5146-aef3-8c74ffc43b7c", + "dac3934f-b7ad-5205-8efe-a00163370a54" + ], + "claims": [ + "38dead14-6b1d-5909-99c4-3c45ad2dd21f", + "71a3331b-fb75-5e18-aa61-b256bc38af36" + ], + "reasoning_tools": [ + "2b8a01ea-125c-5d90-a9b9-39ccb0a1c9e0" + ], + "sources": [ + "a86f55dc-5058-585d-b492-a4f1d932670f", + "ed9da5f1-846e-5298-8689-15027a7ce56d" + ] + }, + "row_sha256": { + "claim_edges": [ + "60d14cbc45d424fa1eb62db6478f185bf2c2d86559e57ffa77474e8d0b3c527c" + ], + "claim_evidence": [ + "e97de162c0730da69b357e1350f0da7e5843c4e67d498c12d731a0f04a8868d7", + "3054718195abe3f78e08cfcacd59902d41eb91c7153c6c63f9bcb3bc7c6902ac" + ], + "claims": [ + "e593b9cf7b0bc9267f3e48d8173129b84b09c028f290f1abc97ccb73940b31dc", + "24280b5159cbbf75e00eb24ae50ab69994397a583f347a241a5e262cf0c03179" + ], + "reasoning_tools": [ + "257924b236c3c27289b9ae2314687be0e96779415fc6ff87faada22893b757ba" + ], + "sources": [ + "d7a690c2b18701db5b48e8189b1621c8025c1ed75889a4d0a3a4c9761c03dc3b", + "bee048794799006bd00bf4bb02ae57998e670f5bcdfb140dff871dcb042d0198" + ] + } + }, + "production_preconditions": { + "approval_gate_ready": false, + "destination_readback_observed_at_utc": "2026-07-15T00:45:59.238006+00:00", + "destination_readback_was_read_only": true, + "exact_production_rollback_packet_ready": false, + "matching_candidate_count": 0, + "production_apply_authorization_present": false, + "production_apply_executed": false, + "strict_proposal_present_and_approved": false + }, + "production_rollback": { + "artifact_schema": null, + "artifact_sha256": null, + "bound_for_action_time_authorization": false, + "conditional_rollback_requires_explicit_authorization": true, + "rollback_sql_sha256": null, + "scope": "exact_production_destination_postapply_receipt", + "status": "not_generated" + }, + "proposal": { + "apply_payload_sha256": "c89bc03ce7714f325293329a0bf95eaba0a56c596ef021d731b48dab0447c684", + "approval_snapshot_sha256": "310b54030e26ed43d7226f2e803610586e80d21ff064c67e11ea21e93ef40bd9", + "id": "9b2b5fa4-0e0d-5db0-aa4d-6fd102889946", + "payload": { + "apply_payload": { + "agent_id": null, + "claims": [ + { + "confidence": 0.9, + "created_by": null, + "id": "38dead14-6b1d-5909-99c4-3c45ad2dd21f", + "status": "open", + "superseded_by": null, + "tags": [ + "working-leo", + "clone-canary" + ], + "text": "An approved strict proposal can create exact canonical rows atomically.", + "type": "structural" + }, + { + "confidence": 0.85, + "created_by": null, + "id": "71a3331b-fb75-5e18-aa61-b256bc38af36", + "status": "open", + "superseded_by": null, + "tags": [ + "working-leo", + "row-proof" + ], + "text": "Row-level proof is the authority for canonical KB state.", + "type": "concept" + } + ], + "contract_version": 2, + "edges": [ + { + "created_by": null, + "edge_type": "supports", + "from_claim": "38dead14-6b1d-5909-99c4-3c45ad2dd21f", + "to_claim": "71a3331b-fb75-5e18-aa61-b256bc38af36", + "weight": 0.75 + } + ], + "evidence": [ + { + "claim_id": "38dead14-6b1d-5909-99c4-3c45ad2dd21f", + "created_by": null, + "role": "grounds", + "source_id": "ed9da5f1-846e-5298-8689-15027a7ce56d", + "weight": 0.9 + }, + { + "claim_id": "71a3331b-fb75-5e18-aa61-b256bc38af36", + "created_by": null, + "role": "illustrates", + "source_id": "a86f55dc-5058-585d-b492-a4f1d932670f", + "weight": 0.8 + } + ], + "reasoning_tools": [ + { + "agent_id": null, + "category": "verification", + "description": "Verify approved proposal to canonical graph lifecycle in a disposable clone.", + "id": "2b8a01ea-125c-5d90-a9b9-39ccb0a1c9e0", + "name": "Canonical row proof canary" + } + ], + "sources": [ + { + "created_by": null, + "excerpt": "Disposable clone lifecycle canary source A.", + "hash": "approve-claim-canary-08c2358330-a", + "id": "ed9da5f1-846e-5298-8689-15027a7ce56d", + "source_type": "observation", + "storage_path": null, + "url": null + }, + { + "created_by": null, + "excerpt": "Disposable clone lifecycle canary source B.", + "hash": "approve-claim-canary-08c2358330-b", + "id": "a86f55dc-5058-585d-b492-a4f1d932670f", + "source_type": "observation", + "storage_path": null, + "url": null + } + ] + } + }, + "proposal_payload_sha256": "6fba5e8e105a28dfaf5733ff7c9f85a20d31d653add0bc4a0f81e4b08de803af", + "proposal_type": "approve_claim", + "required_applied_at": null, + "required_status": "approved", + "review_note": "Reviewed exact strict payload inside the disposable clone.", + "reviewed_at": "2026-07-15 01:59:03.105846+00", + "reviewed_by_agent_id": "11111111-1111-4111-8111-111111111111", + "reviewed_by_handle": "m3ta" + }, + "rollback": { + "conditional_rollback_requires_explicit_authorization": true, + "lifecycle_receipt_sha256": "8e74cf1f5c372633f9b6f15363ff759ba6ce9bf42df51288bb9be70ddabe49b3", + "production_executable": false, + "rollback_sql_sha256": "ef2464a6802426509333861cf0768ca64184901ab7bd2030529e7356a35d9cb3", + "scope": "disposable_clone_rehearsal" + } + }, + "binding_sha256": "e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345", + "claim_ceiling": "T2 clone lifecycle plus T3 destination readback; no production apply authorization or execution", + "current_tier": "T3_live_readonly", + "generated_at_utc": "2026-07-15T02:00:26.190995+00:00", + "next_exact_action": "deploy and independently verify the immutable approval gate before selecting a production proposal", + "production_apply_authorization_present": false, + "production_apply_executed": false, + "production_preconditions": { + "approval_gate_ready": false, + "destination_readback_observed_at_utc": "2026-07-15T00:45:59.238006+00:00", + "destination_readback_was_read_only": true, + "exact_production_rollback_packet_ready": false, + "matching_candidate_count": 0, + "production_apply_authorization_present": false, + "production_apply_executed": false, + "strict_proposal_present_and_approved": false + }, + "production_rollback_requirement": { + "clone_rehearsal_is_not_production_rollback": true, + "clone_rehearsal_rollback_sql_sha256": "ef2464a6802426509333861cf0768ca64184901ab7bd2030529e7356a35d9cb3", + "production_rollback_artifact_schema": null, + "production_rollback_artifact_sha256": null, + "production_rollback_sql_sha256": null, + "required_before_apply_window": true, + "required_binding": "an exact production rollback SQL SHA-256 in both the action-time record and authorization text", + "status": "not_generated" + }, + "required_tier": "T6_authorized_production", + "safe_to_enter_apply_window": false, + "schema": "livingip.proposalApplyAuthorizationPacket.v1", + "scope_exclusions": { + "approval_gate_deployment_authorized": false, + "cloud_sql_exposure_authorized": false, + "gcp_promotion_authorized": false, + "telegram_send_authorized": false + } +} diff --git a/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.md b/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.md new file mode 100644 index 0000000..0cb4d42 --- /dev/null +++ b/docs/reports/leo-working-state-20260709/proposal-apply-production-authorization-packet-current.md @@ -0,0 +1,62 @@ +# Proposal Apply Production Authorization Packet + +Generated UTC: `2026-07-15T02:00:26.190995+00:00` +Required tier: `T6_authorized_production` +Current tier: `T3_live_readonly` +Safe to enter apply window: `False` +Production apply authorized: `False` +Production apply executed: `False` + +## Exact Binding + +- Proposal: `9b2b5fa4-0e0d-5db0-aa4d-6fd102889946` (`approve_claim`) +- Proposal payload SHA-256: `6fba5e8e105a28dfaf5733ff7c9f85a20d31d653add0bc4a0f81e4b08de803af` +- Apply payload SHA-256: `c89bc03ce7714f325293329a0bf95eaba0a56c596ef021d731b48dab0447c684` +- Immutable approval SHA-256: `310b54030e26ed43d7226f2e803610586e80d21ff064c67e11ea21e93ef40bd9` +- Destination: `teleo-pg/teleo` +- Destination system identifier: `7649789040005668902` +- Apply engine SHA-256: `ca2c0a0c1031393c95a26102d57339654d2363f4c51cdf39aabb9071d0ca6c26` +- Apply engine path: `scripts/apply_proposal.py` +- Apply SQL SHA-256: `1a7d65870e415ee8891b6dd84732a29bcee00412c10862d3d1db4b191a8ade38` +- Clone rehearsal rollback SQL SHA-256: `ef2464a6802426509333861cf0768ca64184901ab7bd2030529e7356a35d9cb3` +- Production rollback status: `not_generated` +- Production rollback SQL SHA-256: `None` +- Approval gate prerequisite SHA-256: `bdf8c5da05eed10665b05ad1e331e3c9c8d72464c59889a3cf8f34ab23822faa` +- Approval gate prerequisite path: `scripts/kb_apply_prereqs.sql` +- Binding SHA-256: `e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345` + +## Production Preconditions + +- `approval_gate_ready`: `False` +- `destination_readback_observed_at_utc`: `2026-07-15T00:45:59.238006+00:00` +- `destination_readback_was_read_only`: `True` +- `exact_production_rollback_packet_ready`: `False` +- `matching_candidate_count`: `0` +- `production_apply_authorization_present`: `False` +- `production_apply_executed`: `False` +- `strict_proposal_present_and_approved`: `False` + +## Approval Gate Readback + +- `apply_role_present`: `True` +- `approve_function_present`: `False` +- `assert_function_present`: `False` +- `finish_function_present`: `False` +- `immutable_approval_table_present`: `False` +- `review_role_present`: `False` + +## Exact Action-Time Authorization Text + +This text is not actionable until every production precondition above is true. + +I authorize one production DB apply for proposal 9b2b5fa4-0e0d-5db0-aa4d-6fd102889946 with payload SHA-256 6fba5e8e105a28dfaf5733ff7c9f85a20d31d653add0bc4a0f81e4b08de803af to Docker container teleo-pg, database teleo, system identifier 7649789040005668902, binding SHA-256 e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345. I also authorize conditional production rollback SHA-256 only if the bound postflight fails and no downstream dependency exists. Do not send Telegram, mutate another proposal, expose Cloud SQL, or promote GCP. Operator ; received ; expires . + +## Current Gate + +deploy and independently verify the immutable approval gate before selecting a production proposal + +The production approval-gate deployment is explicitly outside this apply packet and requires separate authorization. + +## Claim Ceiling + +T2 clone lifecycle plus T3 destination readback; no production apply authorization or execution diff --git a/tests/test_proposal_apply_lifecycle.py b/tests/test_proposal_apply_lifecycle.py index 370dde1..916f32f 100644 --- a/tests/test_proposal_apply_lifecycle.py +++ b/tests/test_proposal_apply_lifecycle.py @@ -605,6 +605,29 @@ def test_retained_current_lifecycle_evidence_is_self_consistent(): assert hashlib.sha256(rollback.encode("utf-8")).hexdigest() == receipt["rollback"]["rollback_sql_sha256"] +def test_retained_production_authorization_packet_is_exact_and_unexecuted(): + packet_path = ( + REPO_ROOT + / "docs" + / "reports" + / "leo-working-state-20260709" + / "proposal-apply-production-authorization-packet-current.json" + ) + packet = json.loads(packet_path.read_text(encoding="utf-8")) + + assert packet["binding_sha256"] == lifecycle.sha256_json(packet["binding"]) + assert packet["binding"]["engine"]["apply_engine_path"] == "scripts/apply_proposal.py" + assert packet["binding"]["approval_gate_dependency"]["path"] == "scripts/kb_apply_prereqs.sql" + assert packet["production_preconditions"]["approval_gate_ready"] is False + assert packet["production_preconditions"]["strict_proposal_present_and_approved"] is False + assert packet["production_preconditions"]["exact_production_rollback_packet_ready"] is False + assert packet["safe_to_enter_apply_window"] is False + assert packet["production_apply_authorization_present"] is False + assert packet["production_apply_executed"] is False + assert all(value is False for value in packet["scope_exclusions"].values()) + assert "/private/tmp" not in json.dumps(packet, sort_keys=True) + + def test_authorization_packet_is_exact_but_never_self_authorizes_production(): packet, record, destination, production_rollback_artifact = _authorization_materials() verification = lifecycle.verify_authorization_record(