docs: retain production apply authorization boundary
This commit is contained in:
parent
db64500a12
commit
bd3c17628c
3 changed files with 345 additions and 0 deletions
|
|
@ -0,0 +1,260 @@
|
||||||
|
{
|
||||||
|
"artifact": "proposal_apply_production_authorization_packet",
|
||||||
|
"authorization_record_required": {
|
||||||
|
"authorization_text": "<EXACT_TEXT_FROM_VERIFIER>",
|
||||||
|
"authorized": true,
|
||||||
|
"binding_sha256": "e6f38b0b2925f60a83a3210325ab3b35864185638ed173aeca7cc45352e5c345",
|
||||||
|
"expires_at_utc": "<UTC>",
|
||||||
|
"operator_identity": "<OPERATOR_IDENTITY>",
|
||||||
|
"production_rollback_sql_sha256": "<EXACT_PRODUCTION_ROLLBACK_SHA256>",
|
||||||
|
"received_at_utc": "<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 <PRODUCTION_ROLLBACK_SQL_SHA256> 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 <OPERATOR_IDENTITY>; received <UTC>; expires <UTC>.",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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 <PRODUCTION_ROLLBACK_SQL_SHA256> 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 <OPERATOR_IDENTITY>; received <UTC>; expires <UTC>.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
@ -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"]
|
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():
|
def test_authorization_packet_is_exact_but_never_self_authorizes_production():
|
||||||
packet, record, destination, production_rollback_artifact = _authorization_materials()
|
packet, record, destination, production_rollback_artifact = _authorization_materials()
|
||||||
verification = lifecycle.verify_authorization_record(
|
verification = lifecycle.verify_authorization_record(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue