oacp-cli 0.4.2__tar.gz → 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/.github/workflows/release.yml +1 -1
  2. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/.gitignore +2 -1
  3. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/CHANGELOG.md +61 -0
  4. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/PKG-INFO +6 -2
  5. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/QUICKSTART.md +11 -1
  6. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/README.md +4 -0
  7. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/runtime_capability_matrix.md +5 -4
  8. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/autonomy.md +306 -5
  9. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/inbox_outbox.md +67 -8
  10. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/org_memory.md +7 -1
  11. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/review_loop.md +52 -0
  12. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/runtime_capabilities.md +12 -5
  13. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/session_init.md +27 -17
  14. oacp_cli-0.4.3/mcp_servers/README.md +8 -0
  15. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/oacp/cli.py +6 -0
  16. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/pyproject.toml +11 -1
  17. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/_oacp_constants.py +2 -1
  18. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/add_agent.py +7 -1
  19. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/autonomy_gate.py +1042 -9
  20. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/codex_session_init.py +214 -45
  21. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/init_project_workspace.py +7 -1
  22. oacp_cli-0.4.3/scripts/retention.py +407 -0
  23. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/session_lifecycle_hooks.py +2 -2
  24. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/setup_runtime.py +223 -35
  25. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/update_workspace.sh +34 -0
  26. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/receiver_config.template.yaml +4 -0
  27. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/README.md +13 -0
  28. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_boundary_action.yaml +12 -0
  29. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_conflict.yaml +21 -0
  30. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_cross_channel.yaml +14 -0
  31. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_reuse.yaml +14 -0
  32. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_same_channel.yaml +14 -0
  33. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/reauth_scopeless_boundary.yaml +10 -0
  34. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/review_live_head_mismatch.yaml +2 -0
  35. oacp_cli-0.4.3/tests/conformance/autonomy/actuals/review_live_head_prefix.yaml +2 -0
  36. oacp_cli-0.4.3/tests/conformance/autonomy/audits/prior_review_addressed_accepted.yaml +18 -0
  37. oacp_cli-0.4.3/tests/conformance/autonomy/audits/prior_review_grant_addressed_types.yaml +49 -0
  38. oacp_cli-0.4.3/tests/conformance/autonomy/audits/prior_review_grant_approved.yaml +48 -0
  39. oacp_cli-0.4.3/tests/conformance/autonomy/audits/prior_review_grant_denied_later.yaml +29 -0
  40. oacp_cli-0.4.3/tests/conformance/autonomy/audits/prior_review_grant_denied_postmessage.yaml +29 -0
  41. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_boundary_action_resumes.yaml +41 -0
  42. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_conflict_declines.yaml +36 -0
  43. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_cross_channel_resumes.yaml +37 -0
  44. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_reuse_stays_paused.yaml +31 -0
  45. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_same_channel_resumes.yaml +37 -0
  46. oacp_cli-0.4.3/tests/conformance/autonomy/expected/checkpoint_reauth_scopeless_boundary_resumes.yaml +42 -0
  47. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_accepted_auto_continues.yaml +31 -0
  48. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_disabled_pauses.yaml +16 -0
  49. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_drift_pauses.yaml +18 -0
  50. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_expired_pauses.yaml +17 -0
  51. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_head_mismatch_records.yaml +26 -0
  52. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_later_round_pauses.yaml +17 -0
  53. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_missing_approval_pauses.yaml +14 -0
  54. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_prefix_head_records.yaml +26 -0
  55. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_repeated_addressed_round_exceeded.yaml +19 -0
  56. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_revoke_before_processing_pauses.yaml +19 -0
  57. oacp_cli-0.4.3/tests/conformance/autonomy/expected/review_continuation_revoked_pauses.yaml +18 -0
  58. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_addressed_round3.yaml +17 -0
  59. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_cross_pr.yaml +17 -0
  60. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_head_mismatch.yaml +18 -0
  61. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_prefix_head.yaml +19 -0
  62. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_request.yaml +17 -0
  63. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_round4.yaml +17 -0
  64. oacp_cli-0.4.3/tests/conformance/autonomy/messages/review_continuation_unapproved.yaml +27 -0
  65. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_add_agent.py +8 -6
  66. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_autonomy_conformance_fixtures.py +7 -0
  67. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_autonomy_gate.py +1147 -0
  68. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_codex_session_init.py +178 -10
  69. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_init_project_workspace.py +13 -0
  70. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_cli.py +13 -0
  71. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_record_autonomy_outcome.py +32 -0
  72. oacp_cli-0.4.3/tests/test_retention.py +268 -0
  73. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_setup_runtime.py +230 -11
  74. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_update_workspace.py +30 -3
  75. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/.gitattributes +0 -0
  76. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/.github/workflows/ci.yml +0 -0
  77. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/CONTRIBUTING.md +0 -0
  78. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/LICENSE +0 -0
  79. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/Makefile +0 -0
  80. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/SECURITY.md +0 -0
  81. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/SPEC.md +0 -0
  82. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/from-claude-p.md +0 -0
  83. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/adoption.md +0 -0
  84. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/doctor.md +0 -0
  85. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/prompt_caching.md +0 -0
  86. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/setup.md +0 -0
  87. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/unified_skill_spec.md +0 -0
  88. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/guides/versioning.md +0 -0
  89. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/img/oacp-cli-demo.png +0 -0
  90. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/img/oacp-filesystem-tree.png +0 -0
  91. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/img/oacp-fleet-thread.png +0 -0
  92. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/agent_profiles.md +0 -0
  93. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/agent_safety_defaults.md +0 -0
  94. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/credential_scoping.md +0 -0
  95. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/cross_runtime_sync.md +0 -0
  96. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/dispatch_states.yaml +0 -0
  97. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/mcp_integration.md +0 -0
  98. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/message_signing.md +0 -0
  99. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  100. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/packet_states.yaml +0 -0
  101. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/skills_manifest.yaml +0 -0
  102. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/docs/protocol/task_negotiation.md +0 -0
  103. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/README.md +0 -0
  104. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/decisions.md +0 -0
  105. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
  106. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
  107. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
  108. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
  109. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
  110. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
  111. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/recent.md +0 -0
  112. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/org-memory/rules.md +0 -0
  113. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
  114. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
  115. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
  116. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
  117. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
  118. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/examples/quickstart/README.md +0 -0
  119. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/mcp_servers/oacp_coordinator.py +0 -0
  120. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/oacp/__init__.py +0 -0
  121. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/oacp/envelope_hook.py +0 -0
  122. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/_oacp_env.py +0 -0
  123. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/agent_profile.py +0 -0
  124. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/check_quality_gate.py +0 -0
  125. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/claude_envelope_hook.py +0 -0
  126. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/create_handoff_packet.py +0 -0
  127. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/envelope_compiler.py +0 -0
  128. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/handoff_schema.py +0 -0
  129. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/init_org_memory.py +0 -0
  130. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/init_packet.sh +0 -0
  131. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/init_project_workspace.sh +0 -0
  132. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/key_cli.py +0 -0
  133. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/memory_archive_common.py +0 -0
  134. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/memory_cli.py +0 -0
  135. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/memory_sync.py +0 -0
  136. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/message_signing.py +0 -0
  137. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/message_verify.py +0 -0
  138. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/normalize_findings.py +0 -0
  139. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/oacp_doctor.py +0 -0
  140. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/oacp_inbox.py +0 -0
  141. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/oacp_watch.py +0 -0
  142. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/policy_signing.py +0 -0
  143. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/preflight.py +0 -0
  144. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/promote_to_archive.py +0 -0
  145. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/record_autonomy_outcome.py +0 -0
  146. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/restore_from_archive.py +0 -0
  147. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/send_inbox_message.py +0 -0
  148. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/trust_cli.py +0 -0
  149. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/trust_root.py +0 -0
  150. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/validate_agent_card.py +0 -0
  151. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/validate_message.py +0 -0
  152. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/scripts/write_event.py +0 -0
  153. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/agent_card.template.yaml +0 -0
  154. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/agent_profile.template.yaml +0 -0
  155. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/agent_status.template.yaml +0 -0
  156. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/checkpoint.template.md +0 -0
  157. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/claude/agents/role_agent.template.md +0 -0
  158. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/claude/rules/guardrail.template.md +0 -0
  159. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/findings_packet.template.yaml +0 -0
  160. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/github_actions_quality_gate.yaml +0 -0
  161. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/guardrails/coding_standards.template.md +0 -0
  162. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/guardrails/safe_commands.template.md +0 -0
  163. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/guardrails/secrets_rules.template.md +0 -0
  164. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/handoff_packet.template.yaml +0 -0
  165. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/inbox_message.template.yaml +0 -0
  166. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/manual_validation.template.md +0 -0
  167. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/merge_decision.template.md +0 -0
  168. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/org-memory/decisions.md +0 -0
  169. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/org-memory/events/.gitkeep +0 -0
  170. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  171. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/org-memory/recent.md +0 -0
  172. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/org-memory/rules.md +0 -0
  173. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/review_packet.template.md +0 -0
  174. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/roles/role_baseline.template.md +0 -0
  175. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/roles/role_definition.template.yaml +0 -0
  176. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/runtime_capabilities.yaml +0 -0
  177. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/skills_manifest.template.yaml +0 -0
  178. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/templates/test_packet.template.md +0 -0
  179. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
  180. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
  181. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
  182. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
  183. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
  184. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
  185. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
  186. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
  187. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
  188. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
  189. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
  190. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
  191. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  192. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  193. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  194. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
  195. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +0 -0
  196. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
  197. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
  198. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
  199. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
  200. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
  201. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
  202. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
  203. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
  204. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
  205. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
  206. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
  207. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
  208. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
  209. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  210. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  211. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  212. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
  213. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  214. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
  215. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  216. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
  217. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
  218. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
  219. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
  220. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
  221. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
  222. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  223. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
  224. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
  225. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
  226. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
  227. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  228. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
  229. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
  230. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  231. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
  232. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
  233. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
  234. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
  235. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
  236. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
  237. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
  238. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
  239. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
  240. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
  241. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
  242. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  243. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  244. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
  245. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
  246. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  247. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  248. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
  249. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
  250. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
  251. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
  252. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
  253. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
  254. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  255. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
  256. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  257. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
  258. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  259. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
  260. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  261. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
  262. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
  263. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
  264. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
  265. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
  266. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  267. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/negated_guardrails.yaml +0 -0
  268. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
  269. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
  270. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
  271. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
  272. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
  273. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
  274. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
  275. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
  276. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
  277. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
  278. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
  279. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
  280. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
  281. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
  282. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
  283. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  284. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  285. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/README.md +0 -0
  286. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
  287. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/configs/malformed.yaml +0 -0
  288. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
  289. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
  290. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +0 -0
  291. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
  292. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
  293. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
  294. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
  295. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
  296. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
  297. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
  298. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
  299. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
  300. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
  301. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/README.md +0 -0
  302. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/configs/enforce.yaml +0 -0
  303. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/configs/off.yaml +0 -0
  304. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/configs/warn.yaml +0 -0
  305. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/signed_basic__enforce.yaml +0 -0
  306. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/signed_revoked__enforce.yaml +0 -0
  307. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/signed_revoked__off.yaml +0 -0
  308. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/signed_revoked__warn.yaml +0 -0
  309. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +0 -0
  310. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_body_flip__off.yaml +0 -0
  311. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +0 -0
  312. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +0 -0
  313. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +0 -0
  314. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +0 -0
  315. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +0 -0
  316. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/unsigned_notification__off.yaml +0 -0
  317. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/intake/expected/unsigned_notification__warn.yaml +0 -0
  318. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/README.md +0 -0
  319. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
  320. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
  321. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
  322. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
  323. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
  324. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
  325. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
  326. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
  327. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
  328. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
  329. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
  330. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
  331. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
  332. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
  333. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
  334. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
  335. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
  336. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
  337. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
  338. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
  339. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
  340. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
  341. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/keys/alice.json +0 -0
  342. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/keys/bob.json +0 -0
  343. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/keys/carol.json +0 -0
  344. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
  345. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
  346. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
  347. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
  348. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
  349. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
  350. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
  351. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
  352. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
  353. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
  354. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
  355. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
  356. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
  357. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
  358. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
  359. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
  360. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
  361. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
  362. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
  363. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
  364. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
  365. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
  366. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
  367. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
  368. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
  369. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
  370. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
  371. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
  372. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/conformance/signing/regen_fixtures.py +0 -0
  373. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_agent_profile.py +0 -0
  374. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_claude_envelope_hook.py +0 -0
  375. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_create_handoff_packet.py +0 -0
  376. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_default_envelope.py +0 -0
  377. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_envelope_compiler.py +0 -0
  378. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_envelope_conformance_fixtures.py +0 -0
  379. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_envelope_public_admission.py +0 -0
  380. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_github_workflows.py +0 -0
  381. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_handoff_schema.py +0 -0
  382. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_inbox_verify.py +0 -0
  383. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_intake_conformance.py +0 -0
  384. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_memory_archive.py +0 -0
  385. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_memory_sync.py +0 -0
  386. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_message_signing.py +0 -0
  387. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_message_verify.py +0 -0
  388. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_constants.py +0 -0
  389. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_coordinator.py +0 -0
  390. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_doctor.py +0 -0
  391. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_env.py +0 -0
  392. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_inbox.py +0 -0
  393. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_oacp_watch.py +0 -0
  394. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_policy_signing.py +0 -0
  395. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_preflight.py +0 -0
  396. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_review_loop.py +0 -0
  397. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_send_inbox_message.py +0 -0
  398. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_session_lifecycle_hooks.py +0 -0
  399. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_signing_conformance.py +0 -0
  400. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_trust_root.py +0 -0
  401. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_validate_agent_card.py +0 -0
  402. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_validate_message.py +0 -0
  403. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_workspace_discovery.py +0 -0
  404. {oacp_cli-0.4.2 → oacp_cli-0.4.3}/tests/test_write_event.py +0 -0
@@ -102,7 +102,7 @@ jobs:
102
102
 
103
103
  - name: Publish to PyPI
104
104
  if: steps.check-pypi-version.outputs.version_exists != 'true'
105
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
105
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
106
106
 
107
107
  - name: Skip duplicate PyPI publish
108
108
  if: steps.check-pypi-version.outputs.version_exists == 'true'
@@ -4,7 +4,8 @@
4
4
  AGENTS.md
5
5
  CLAUDE.md
6
6
  GEMINI.md
7
- .claude/skills/
7
+ .claude/
8
+ .codex/
8
9
  .worktrees/
9
10
  __pycache__/
10
11
  *.pyc
@@ -5,6 +5,66 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.3] - 2026-08-12
9
+
10
+ ### Added
11
+
12
+ - Review-loop continuation grants: a human-approved
13
+ `approved_thread_continuation` may carry a `review_loop` scope (one
14
+ repository, PR, and sender thread; allowed lifecycle types; a round
15
+ ceiling; wall-clock expiry; permitted review side effects) so in-scope
16
+ same-thread follow-up review rounds auto-invoke the reviewer. A grant
17
+ authorizes running a round, never its verdict — the live PR head stays
18
+ authoritative, with declared heads compared by exact full-SHA equality.
19
+ Expiry and revocation bind at evaluation time, approvals never authorize
20
+ retroactively, only rounds that actually ran consume the round budget,
21
+ the accepted side-effect set binds the invocation, and out-of-scope
22
+ requests pause. Receiver config enables recognition only; authority
23
+ exists solely in prior human-approved grant audits. Adds the
24
+ `review_continuation` audit block, pinned `review_continuation_*` and
25
+ `review_loop_invalid` reason codes, and a conformance fixture set; full
26
+ semantics in `docs/protocol/autonomy.md` and
27
+ `docs/protocol/review_loop.md`.
28
+ - Checkpoint re-authorization is now specified end to end: three pinned
29
+ answer channels — receiver-side human, signature-verified sender reply
30
+ bounded by the receiver's own admission policy, GitHub comments as
31
+ advisory-only — with rank, never arrival order, deciding conflicts. A
32
+ consumption rule binds each answer to the pause it clears: scope-less
33
+ approvals clear one checkpoint, scoped numeric budgets stand for the
34
+ rest of the task up to the granted value, and boundary-action grants
35
+ durably authorize one granular capability until task completion. The
36
+ audit surface separates the requested scope from the effective
37
+ policy-capped grant, with pinned reason codes `checkpoint_reauthorized`
38
+ and `checkpoint_reauthorization_stale` and a conformance fixture set.
39
+ - `oacp session-init` now supports Codex `SessionStart` JSON, a bounded and
40
+ truthful ordered-read manifest, optional pull-before-verify memory sync, and
41
+ active-model/cwd input from the hook payload. `oacp setup codex` safely
42
+ merges one startup-only handler into `.codex/hooks.json`; users review and
43
+ trust the definition with `/hooks`.
44
+ - Project-wide message-history retention through `oacp retention`: outbox,
45
+ dead-letter, and processed inbox-archive files are pruned when they exceed
46
+ either an age or count bound (defaults 30 days and 1,000 files per target),
47
+ with validated partial overrides in `workspace.json`, deterministic dry-run
48
+ JSON, and file-identity rechecks before deletion.
49
+ - Processed inbound messages now have one cross-runtime destination,
50
+ `inbox/archive/`, preserving the original filename and bytes. Quarantine
51
+ evidence is excluded from automatic pruning by its durable filename format;
52
+ manually managed fixtures can use adjacent `.retain` markers. Protocol spec
53
+ version advances to 0.4.3.
54
+
55
+ ### Changed
56
+
57
+ - Codex startup file states now say `verified` instead of `loaded`: the command
58
+ confirms readability and updates `status.yaml`, while its hook context tells
59
+ Codex which files still require ordered reads. Legacy `.agent-hub` project
60
+ detection has been removed from this Codex path.
61
+ - `oacp setup claude` keeps automatic startup memory pull but no longer creates
62
+ or registers an automatic `SessionEnd` push. Rerunning setup removes only the
63
+ exact historical generated registration and leaves any existing script or
64
+ custom hooks untouched; explicit wrap-up remains the single push path.
65
+ - Session lifecycle documentation now distinguishes coordinator telemetry in
66
+ `session_lifecycle_state.json` from runtime startup and `status.yaml`.
67
+
8
68
  ## [0.4.2] - 2026-08-07
9
69
 
10
70
  ### Added
@@ -702,6 +762,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
702
762
  - Checkout step in github-release workflow job (#19)
703
763
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
704
764
 
765
+ [0.4.3]: https://github.com/kiloloop/oacp/compare/v0.4.2...v0.4.3
705
766
  [0.4.2]: https://github.com/kiloloop/oacp/compare/v0.4.1...v0.4.2
706
767
  [0.4.1]: https://github.com/kiloloop/oacp/compare/v0.4.0...v0.4.1
707
768
  [0.4.0]: https://github.com/kiloloop/oacp/compare/v0.3.5...v0.4.0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: oacp-cli
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Open Agent Coordination Protocol CLI for file-based multi-agent workflows
5
5
  Project-URL: Homepage, https://github.com/kiloloop/oacp
6
6
  Project-URL: Repository, https://github.com/kiloloop/oacp
@@ -262,6 +262,7 @@ uv tool install .
262
262
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
263
263
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
264
264
  | `oacp memory` | Archive, restore, or git-sync project/org memory files |
265
+ | `oacp session-init` | Verify Codex startup inputs, optionally pull memory, and update status |
265
266
  | `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
266
267
  | `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
267
268
  | `oacp write-event` | Write an event to `org-memory/events/` |
@@ -309,6 +310,9 @@ oacp/
309
310
  └── SPEC.md # Full protocol specification
310
311
  ```
311
312
 
313
+ [`mcp_servers/`](mcp_servers/) contains experimental, unsupported prototypes;
314
+ it is not part of the OACP product surface.
315
+
312
316
  ## Related
313
317
 
314
318
  - **[agent-estimate](https://github.com/kiloloop/agent-estimate)** — Estimate how long agent tasks take. Pairs with OACP dispatch for task sizing.
@@ -90,7 +90,6 @@ This creates or updates:
90
90
  - `.claude/agents/my-first-project.md`
91
91
  - `.claude/skills/`
92
92
  - `.claude/hooks/oacp-memory-pull.sh`
93
- - `.claude/hooks/oacp-memory-push.sh`
94
93
  - `.claude/settings.json`
95
94
 
96
95
  For other supported runtimes, use the same shape:
@@ -101,6 +100,17 @@ oacp setup cursor --project my-first-project
101
100
  oacp setup gemini --project my-first-project
102
101
  ```
103
102
 
103
+ Codex setup creates or merges `.codex/hooks.json` with one startup-only hook.
104
+ Review and trust it with `/hooks`; it runs memory pull and startup verification
105
+ sequentially. If hooks are unavailable, run the manual fallback:
106
+
107
+ ```bash
108
+ oacp session-init --pull-memory --project my-first-project
109
+ ```
110
+
111
+ Runtime setup does not install an automatic memory push. Publish durable memory
112
+ explicitly during wrap-up with `oacp memory push`.
113
+
104
114
  Cursor support is scaffold-only until Cursor-owned rules land. Cursor sessions
105
115
  must set `OACP_RUNTIME=cursor` or pass `--from` explicitly when sending messages.
106
116
 
@@ -234,6 +234,7 @@ uv tool install .
234
234
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
235
235
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
236
236
  | `oacp memory` | Archive, restore, or git-sync project/org memory files |
237
+ | `oacp session-init` | Verify Codex startup inputs, optionally pull memory, and update status |
237
238
  | `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
238
239
  | `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
239
240
  | `oacp write-event` | Write an event to `org-memory/events/` |
@@ -281,6 +282,9 @@ oacp/
281
282
  └── SPEC.md # Full protocol specification
282
283
  ```
283
284
 
285
+ [`mcp_servers/`](mcp_servers/) contains experimental, unsupported prototypes;
286
+ it is not part of the OACP product surface.
287
+
284
288
  ## Related
285
289
 
286
290
  - **[agent-estimate](https://github.com/kiloloop/agent-estimate)** — Estimate how long agent tasks take. Pairs with OACP dispatch for task sizing.
@@ -1,10 +1,10 @@
1
1
  # Cross-Runtime Parity Matrix
2
2
 
3
- **Date**: 2026-08-03
3
+ **Date**: 2026-08-07
4
4
 
5
5
  This is a capability comparison across the currently profiled agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Cursor support is scaffold-only until Cursor-owned onboarding lands, so Cursor is intentionally excluded from this comparison table; see `docs/protocol/runtime_capabilities.md` for its conservative scaffold defaults.
6
6
 
7
- Claude was last checked against Claude Code `v2.1.220` (verified in-session 2026-08-03 via `claude --version`) with Claude Fable 5 (`claude-fable-5`, serving model verified in-session on the 1M-context variant). Fable 5 (released 2026-06-09, first Mythos-class model) is now included in Max and Team Premium plan usage as part of the shared weekly limit pool (the launch-window free-inclusion/credit period has ended); the API rate is $10/$50 per MTok. Claude Opus 5 (`claude-opus-5`, released 2026-07-24) is the current Opus tier at $5/$25 per MTok with the same 1M context; Opus 4.8 remains available at the same price and remains the safeguard-fallback target for Fable 5's classifier fallbacks (unchanged by the Opus 5 release).
7
+ Claude was last checked against Claude Code `v2.1.225` (verified in-session 2026-08-07 via `claude --version`) with Claude Fable 5 (`claude-fable-5`, serving model verified in-session on the 1M-context variant). Fable 5 (released 2026-06-09, first Mythos-class model) is now included in Max and Team Premium plan usage as part of the shared weekly limit pool (the launch-window free-inclusion/credit period has ended); the API rate is $10/$50 per MTok. Claude Opus 5 (`claude-opus-5`, released 2026-07-24) is the current Opus tier at $5/$25 per MTok with the same 1M context; Opus 4.8 remains available at the same price and remains the safeguard-fallback target for Fable 5's classifier fallbacks (unchanged by the Opus 5 release).
8
8
 
9
9
  Codex was last checked against app update `26.727`, stable CLI `0.146.0`, GPT-5.6, and the OpenAI Codex/API changelog entries through 2026-07-30. Runtime availability remains configuration-dependent: standard multi-agent support and memories are stable, while multi-agent V2, token budgets, current-time reminders, and remote Code Mode may still require explicit enablement or experimental configuration.
10
10
 
@@ -42,6 +42,7 @@ Codex was last checked against app update `26.727`, stable CLI `0.146.0`, GPT-5.
42
42
  | Plan mode | Claude, Codex | Claude has structured explore → plan → approve → implement; Codex CLI can move from planning into fresh-context implementation |
43
43
  | Auto-compaction | Claude | Context auto-compresses, enabling unlimited session length |
44
44
  | Cross-session semantic search | Claude | MCP-based searchable memory (optional) |
45
+ | Cross-session messaging | Claude | SendMessage reaches the user's other Claude Code sessions, including across machines (macOS/Linux), with ListAgents discovery; inbound delivery is configurable (`crossSessionInbound`, `dialogExpiry`) and messages can initiate conversations with Remote Control sessions by name |
45
46
  | Browser automation | Codex, Gemini | Codex Browser/Chrome plugins can click, type, navigate, inspect, and capture approved contexts; Gemini also supports WebP video recording |
46
47
  | GPT-5.6 model family | Codex | Sol, Terra, and Luna provide task-tier choices with a documented 272K context window |
47
48
  | Image generation | Codex, Gemini | Codex CLI image generation is enabled by default; Gemini has native `generate_image` |
@@ -51,7 +52,7 @@ Codex was last checked against app update `26.727`, stable CLI `0.146.0`, GPT-5.
51
52
  | `apply_patch` editing | Codex | Grammar-based file edits |
52
53
  | App-level computer use | Codex | macOS app, simulator, and GUI-only workflows; unavailable in EEA, UK, and Switzerland at launch |
53
54
  | Windows computer use | Codex | Codex app can operate Windows desktop apps in the foreground when available |
54
- | Remote host control | Codex | Mobile or desktop remote control can run work on connected Mac or Windows hosts with host-local files, credentials, plugins, skills, and config |
55
+ | Remote host control | Codex | Mobile or desktop remote control can run work on connected Mac or Windows hosts with host-local files, credentials, plugins, skills, and config; Claude Code's cross-session messaging now also reaches its own Remote Control sessions on other machines, narrowing this distinction |
55
56
  | App-level artifact review | Codex | Sidebar preview for generated PDFs, spreadsheets, documents, and presentations |
56
57
  | App-level PR review | Codex | PR sidebar can inspect changed files, review comments, and follow-up fixes |
57
58
  | Multi-folder projects | Codex | One project can span repositories; the primary folder owns Git and automatic instruction, skill, and config discovery, while secondary folders are file-access-only |
@@ -154,7 +155,7 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
154
155
  - Codex app/CLI capability changes are reviewed through app `26.727` and stable CLI `0.146.0`; workstation-specific alpha versions are intentionally kept out of this public matrix.
155
156
  - GPT-5.6 API model and pricing changes through 2026-07-30 come from the OpenAI API changelog: <https://developers.openai.com/api/docs/changelog>.
156
157
  - Sites, Amazon Bedrock, Remote, Record & Replay, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
157
- - Claude Fable 5 release date and pricing come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>; the current plan-inclusion posture (Max/Team Premium shared weekly pool, launch promo ended) reflects Anthropic's plan policy as of 2026-07-20. Claude Opus 5 model ID, pricing ($5/$25 per MTok), 1M context, and its release as the current Opus tier were re-verified 2026-08-03 against Anthropic's model documentation (models overview + migration guide at <https://platform.claude.com/docs/en/about-claude/models/overview.md>): Opus 5 is a drop-in at Opus 4.8's pricing, and Opus 4.8 stays available. Present-day interface fallback behavior comes from Anthropic's Help Center article "Why Claude switched models in your conversation with Fable 5" (2026-07-01, verified 2026-08-04): automatic switching to Opus 4.8 is enabled by default and user-configurable — Settings > Capabilities in the apps, Config > MODEL & OUTPUT in Claude Code ("Switch models when a message is flagged" toggle); with it off, a flagged request pauses the conversation. The Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards") remains the source for the safeguard design, the observed fallback-rate/session-event facts, and the API posture: the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback — whose category-routed default likewise targets Opus 4.8 for cyber-class refusals, so the fallback target is unchanged post-Opus-5. The serving model (claude-fable-5) and Claude Code version (v2.1.220) in the header were verified in-session by the Claude runtime on 2026-08-03.
158
+ - Claude Fable 5 release date and pricing come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>; the current plan-inclusion posture (Max/Team Premium shared weekly pool, launch promo ended) reflects Anthropic's plan policy as of 2026-07-20. Claude Opus 5 model ID, pricing ($5/$25 per MTok), 1M context, and its release as the current Opus tier were re-verified 2026-08-03 against Anthropic's model documentation (models overview + migration guide at <https://platform.claude.com/docs/en/about-claude/models/overview.md>): Opus 5 is a drop-in at Opus 4.8's pricing, and Opus 4.8 stays available. Present-day interface fallback behavior comes from Anthropic's Help Center article "Why Claude switched models in your conversation with Fable 5" (2026-07-01, verified 2026-08-04): automatic switching to Opus 4.8 is enabled by default and user-configurable — Settings > Capabilities in the apps, Config > MODEL & OUTPUT in Claude Code ("Switch models when a message is flagged" toggle); with it off, a flagged request pauses the conversation. The Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards") remains the source for the safeguard design, the observed fallback-rate/session-event facts, and the API posture: the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback — whose category-routed default likewise targets Opus 4.8 for cyber-class refusals, so the fallback target is unchanged post-Opus-5. The serving model (claude-fable-5) and Claude Code version (v2.1.225) in the header were verified in-session by the Claude runtime on 2026-08-07. Cross-session messaging capabilities (SendMessage across sessions and machines, ListAgents discovery, crossSessionInbound/dialogExpiry settings) come from the Claude Code v2.1.222–v2.1.225 release notes.
158
159
 
159
160
  ---
160
161
 
@@ -263,7 +263,7 @@ Every autonomy decision writes one YAML file:
263
263
 
264
264
  ```yaml
265
265
  schema_version: 2
266
- spec_version: "0.4.2"
266
+ spec_version: "0.4.3"
267
267
  created_at_utc: "2026-05-12T13:23:25Z"
268
268
  receiver: codex
269
269
  sender: iris
@@ -363,7 +363,8 @@ signer_kid, reason}` — the policy-file authorization outcome (see
363
363
  `policy_sha256` the record commits to an *authorized* policy identity,
364
364
  not just which bytes ran. An `invalid` status fails closed with reason
365
365
  code `policy_auth_invalid` before any gate consumes the config.
366
- `spec_version: "0.4.2"` pins everything 0.4.1 pinned — Gate 1 integrity
366
+ `spec_version: "0.4.3"` preserves every autonomy field and rule pinned by
367
+ 0.4.2 — Gate 1 integrity
367
368
  enforcement, the recalibrated Gate 2/3 policy, full task-profile capture, the
368
369
  explicit `breached` list, the outcome block shown above, session-scoped
369
370
  envelope enforcement, the enforce-mode trust-pin completeness gate, and
@@ -372,7 +373,9 @@ plus intake verification as mechanism (`verify_mode: enforce` rejects at
372
373
  the gate), the `policy_auth` authorized-policy block, the default scope
373
374
  envelope for profileless admissions (with `scope_envelope_source` and the
374
375
  null-on-admitted writer refusal), and the recorded none-by-rule
375
- enforcement branch for approved public-visibility tasks. Audit
376
+ enforcement branch for approved public-visibility tasks. The spec version
377
+ advances because 0.4.3 adds the project-wide message-retention policy and the
378
+ processed-inbound archive convention; autonomy semantics are unchanged. Audit
376
379
  `schema_version: 2` adds thread identity and
377
380
  the structured `result.human_outcome` block. Recorders may upgrade a v1 audit
378
381
  to v2 when the first human outcome is written; standing grants trust only v2
@@ -546,10 +549,20 @@ families are:
546
549
  `continuation_grant_missing_approval`,
547
550
  `continuation_grant_missing_scope`, `continuation_grant_missing_thread`,
548
551
  `continuation_grant_scope_exceeded`, `threshold_checkpoint_breached`,
552
+ `checkpoint_reauthorized`, `checkpoint_reauthorization_stale`,
549
553
  `message_valid`, `message_not_expired`, `message_hash_recorded`,
550
554
  `task_profile_present`, `task_profile_not_required`, `task_type_allowed`,
551
555
  `risk_threshold_passed`, `hard_stops_clear`, and
552
- `workspace_check_required`.
556
+ `workspace_check_required`;
557
+ - review-loop continuation codes (see "Review-loop continuation"):
558
+ `review_continuation_accepted`,
559
+ `review_continuation_confirmation_required`,
560
+ `review_continuation_context_only`, `review_continuation_expired`,
561
+ `review_continuation_head_mismatch`,
562
+ `review_continuation_ignored_disabled`,
563
+ `review_continuation_missing_approval`, `review_continuation_revoked`,
564
+ `review_continuation_round_exceeded`,
565
+ `review_continuation_scope_exceeded`, and `review_loop_invalid`.
553
566
 
554
567
  ## State Transition Metadata
555
568
 
@@ -688,6 +701,174 @@ explicit `breach_basis` inconsistent with the input (`realized` alongside
688
701
  intent fields, `declared_intent` without them). A mixed situation records
689
702
  the realized breach on its own, then re-evaluates the correction.
690
703
 
704
+ ### Re-authorization channels and arbitration
705
+
706
+ A paused checkpoint can be answered from more than one channel. Three are
707
+ defined, highest precedence first:
708
+
709
+ | Channel | Surface | Authority |
710
+ |---------|---------|-----------|
711
+ | `receiver_human` | The receiver-side human decision recorded on the audit record (`oacp autonomy-outcome`) | Authoritative |
712
+ | `sender_reply` | A signature-verified sender message threaded to the checkpoint notification | Bounded by the receiver's admission policy |
713
+ | `gh_comment` | A comment on the related PR or issue | Advisory only — never authoritative |
714
+
715
+ Consultation order follows precedence: the receiver consults its own audit
716
+ record first, then the checkpoint thread in its inbox, then the related
717
+ PR/issue. Provenance verification for each channel — the signature and
718
+ thread binding of a sender reply, the recorded outcome on the audit record —
719
+ happens at the receiver before an answer may be presented for arbitration;
720
+ the arbitration input is a decision surface, not a trust boundary.
721
+
722
+ Arbitration rules:
723
+
724
+ - The **governing answer** is the one on the highest-precedence channel that
725
+ carries an answer. Precedence is by channel rank, never arrival order: a
726
+ lower-ranked answer arriving after a higher-ranked ruling is recorded as
727
+ advisory and never re-opens the decision — in both directions. A
728
+ receiver-side human approval stands against a later sender decline, and a
729
+ receiver-side human decline stands against any sender approval.
730
+ - **Sender authority is bounded by the receiver's own admission policy.** A
731
+ sender re-authorization can never authorize more than the receiver's
732
+ policy would have auto-accepted at admission: numeric extensions are
733
+ honored only up to the receiver's caps, and a boundary action is granted
734
+ only when an envelope declaring that capability would itself auto-accept
735
+ under the receiver's external-side-effect policy — for
736
+ `allow_pr_artifacts`, an artifact-class anchor (`creates_or_updates_pr`,
737
+ `comments_on_github`, or `files_issues`) on a private target present in
738
+ the receiver's `private_repo_allowlist`; a standalone `commits_changes`
739
+ or an unlisted/public target stays paused. Merge authority is never
740
+ sender-grantable, whatever the policy (merge always passes the
741
+ receiver-side human, mirroring the admission rule), and neither is any
742
+ field outside the coverable boundary-action vocabulary: the legacy risk
743
+ fields (destructive ops, auth/config/secrets, dependency changes, public
744
+ visibility) are receiver-side authority only, on the scoped and
745
+ scope-less paths alike. The party whose under-declaration caused the
746
+ breach cannot self-serve unlimited scope. Without a resolvable receiver
747
+ policy the sender channel extends nothing (fail closed).
748
+ - **GH comments never clear a checkpoint.** They sit outside the protocol's
749
+ identity and verification boundary; any decision they carry is recorded as
750
+ advisory, and a checkpoint answered only by a GH comment stays paused.
751
+ - A sender withdrawal of the task is a lifecycle event (`superseded`), not a
752
+ checkpoint answer; it is not arbitrated here.
753
+
754
+ The receiver presents the answers it has observed as checkpoint input under
755
+ `actuals.reauthorization`, and the evaluation records the arbitration under
756
+ `threshold_checkpoint.reauthorization`:
757
+
758
+ ```yaml
759
+ actuals:
760
+ actual_minutes: 25
761
+ actual_files_touched: 1
762
+ paused_at_utc: "2026-05-12T12:30:00Z"
763
+ reauthorization:
764
+ receiver_human:
765
+ decision: approved # approved | modified | declined
766
+ decided_at_utc: "2026-05-12T12:50:00Z"
767
+ actor: alice
768
+ scope: # optional: budget extension and/or
769
+ max_actual_minutes: 30 # boundary-action grants
770
+ sender_reply:
771
+ decision: approved
772
+ decided_at_utc: "2026-05-12T12:45:00Z"
773
+ source_message_id: msg-20260512124500-sender-reauth1
774
+ gh_comment:
775
+ decision: approved # advisory only; cannot carry scope
776
+ author: driveby-collaborator
777
+ ```
778
+
779
+ ```yaml
780
+ threshold_checkpoint:
781
+ action: resumed_after_reauthorization
782
+ reauthorization:
783
+ presented: true
784
+ channel: receiver_human # governing channel
785
+ decision: approved
786
+ decided_at_utc: "2026-05-12T12:50:00Z"
787
+ actor: alice
788
+ requested_scope: # the raw request, kept as provenance
789
+ max_actual_minutes: 30
790
+ scope: # the effective grant — policy-capped;
791
+ max_actual_minutes: 30 # the durable value later checkpoints
792
+ disposition: resumed # and envelope recompiles consume
793
+ cleared_paused_at_utc: "2026-05-12T12:30:00Z"
794
+ advisory:
795
+ - channel: sender_reply
796
+ decision: approved
797
+ reason: overridden_by_receiver_human
798
+ - channel: gh_comment
799
+ decision: approved
800
+ reason: never_authoritative
801
+ ```
802
+
803
+ `requested_scope` preserves the answer exactly as asked; `scope` records
804
+ what was actually granted after channel bounds — sender numerics capped at
805
+ the receiver's thresholds, sender booleans filtered to the admission
806
+ predicate. The two diverge exactly when a sender asked past the receiver's
807
+ policy, and only `scope` may ever be consumed downstream.
808
+
809
+ `disposition` is pinned to: `resumed` (breach cleared — the accept records
810
+ `checkpoint_reauthorized` and the action `resumed_after_reauthorization`),
811
+ `declined` (governing channel declined — action `reauthorization_declined`),
812
+ `stale` (the reuse rejection below — adds `checkpoint_reauthorization_stale`),
813
+ `insufficient` (a current answer that does not cover the breach),
814
+ `advisory_only` (only non-authoritative answers exist), `unanswered`
815
+ (breach with no input), and `not_required` (answers presented but nothing
816
+ breached). `modified` behaves as approved with a replacement scope and
817
+ requires an explicit `scope`, matching the outcome recorder.
818
+
819
+ ### Consumption
820
+
821
+ What one answer clears is pinned by its scope shape:
822
+
823
+ - **A scope-less approval** authorizes exactly the extent recorded at the
824
+ pause it answers (`decided_at_utc` at or after that pause's
825
+ `paused_at_utc`) — the numeric actuals and the boundary fields of that
826
+ pause alike, within the answering channel's grant bounds. It creates
827
+ nothing durable (`scope` stays null) and is consumed by that checkpoint:
828
+ presented against any later pause, it clears nothing.
829
+ - **A scoped numeric budget** authorizes up to the granted budget for the
830
+ remainder of the task. A later checkpoint whose actuals stay within the
831
+ budget is cleared by the same standing answer — nothing new is consumed —
832
+ while growth beyond the budget is a new breach requiring a fresh answer.
833
+ - **A boundary-action grant** (scope boolean) is durable for the remainder
834
+ of the task; see below.
835
+ - **No answer shape clears the whole task unbounded.** Nothing waives future
836
+ checkpoints wholesale.
837
+
838
+ An answer that neither postdates the current pause nor covers the breach
839
+ through a standing granted scope is spent. Presenting it against a new
840
+ breach is a reuse attempt and fails with `checkpoint_reauthorization_stale`.
841
+
842
+ Consumption state lives on the audit record: the
843
+ `threshold_checkpoint.reauthorization` block binds the governing answer to
844
+ the pause it cleared (`cleared_paused_at_utc`) and preserves the granted
845
+ scope for later checkpoints. A new checkpoint re-stamps `paused_at_utc`;
846
+ whether prior answers still cover it is decided by the arbitration above,
847
+ never by implicit trust.
848
+
849
+ ### Boundary-action grants
850
+
851
+ A re-authorization may be scoped to a specific boundary action instead of —
852
+ or in addition to — numeric budgets: a scope boolean naming one declarable
853
+ granular capability (`creates_or_updates_pr`, `comments_on_github`,
854
+ `commits_changes`, `merges_pr`, `files_issues`).
855
+
856
+ - A granted boundary action behaves as if declared true for the remainder of
857
+ the task: the same action class does not re-fire the checkpoint, and an
858
+ envelope recompile picks it up. It is not consumed per use; it expires at
859
+ task completion.
860
+ - Numeric budgets stay per-checkpoint as above: granting an action never
861
+ extends time or file budgets, and vice versa.
862
+ - Channel bounds apply. The receiver-side human may grant any action; a
863
+ sender re-authorization may grant only an action the receiver's admission
864
+ policy would itself auto-accept (the exact `allow_pr_artifacts`
865
+ conditions above — never a standalone `commits_changes`, never an
866
+ unlisted or public target), and never `merges_pr`.
867
+ - Standing authority across tasks is out of scope for a boundary-action
868
+ grant — that is the continuation-grants mechanism (see Continuation
869
+ Grants), which resolves only from prior human-approved audits in the same
870
+ thread.
871
+
691
872
  ## Envelope Compilation (Phase 2)
692
873
 
693
874
  Phase 2 turns the declared `task_profile` from reviewed intent into enforced
@@ -746,7 +927,7 @@ The envelope is written to
746
927
  ```json
747
928
  {
748
929
  "envelope_version": 1,
749
- "spec_version": "0.4.2",
930
+ "spec_version": "0.4.3",
750
931
  "compiler": "envelope_compiler.py",
751
932
  "compiled_at_utc": "2026-07-12T02:00:00Z",
752
933
  "project": "my-project",
@@ -1046,6 +1227,126 @@ accepted residual
1046
1227
  trust boundary; it does not bypass hard stops or the grant's declared/actual
1047
1228
  scope checks.
1048
1229
 
1230
+ ### Review-loop continuation
1231
+
1232
+ Review lifecycle messages (`review_request`, `review_feedback`,
1233
+ `review_addressed`, `review_lgtm`) carry no `task_profile` and do not run
1234
+ the four task gates. Without a grant, every reviewer invocation requires
1235
+ explicit human confirmation — that default is unchanged. A human may
1236
+ instead grant a bounded, revocable continuation for **one PR review
1237
+ thread**, so follow-up rounds in that thread auto-invoke the reviewer.
1238
+
1239
+ The grant authorizes *running* a review round, never its verdict: the
1240
+ reviewer still fetches and validates the live PR head, runs the quality
1241
+ gate, and independently chooses `review_feedback` or `review_lgtm` (see
1242
+ `review_loop.md` → "Exact-Head Validation").
1243
+
1244
+ The grant is the same `approved_thread_continuation` kind, extended with a
1245
+ `review_loop` block inside its scope. A review-only grant may omit the
1246
+ task budget keys — they default to `0`, so the grant carries no
1247
+ task-continuation authority:
1248
+
1249
+ ```yaml
1250
+ grant:
1251
+ decision: approved
1252
+ granted_scope:
1253
+ review_loop:
1254
+ repository: example-org/widget # pinned repo slug
1255
+ pr_number: 88 # pinned pull request
1256
+ allowed_types: # inbound types that may trigger
1257
+ - review_request # a round (review_addressed only
1258
+ max_round: 3 # if listed explicitly)
1259
+ expires_at_utc: "2026-06-30T00:00:00Z"
1260
+ permitted_side_effects:
1261
+ writes_findings_packet: true
1262
+ sends_oacp_reply: true
1263
+ comments_on_github: false
1264
+ submits_github_review: false
1265
+ ```
1266
+
1267
+ Recognition and authority are separate: receiver config
1268
+ (`autonomy.continuation_grants.enabled: true`) only enables grant
1269
+ *recognition*. Authority exists only in a prior schema-v2 audit whose
1270
+ `human_outcome` records a task decision of `approved` or `modified` plus a
1271
+ grant decision of `approved` or `modified` with a valid
1272
+ `granted_scope.review_loop`. A sender-declared grant claim is a request,
1273
+ never proof — with no matching prior human decision it pauses with
1274
+ `review_continuation_missing_approval`.
1275
+
1276
+ A fresh `review_request` auto-continues only when **all** of these hold,
1277
+ checked in pinned order with early-out:
1278
+
1279
+ 1. the receiver recognizes grants (`enabled: true`; else
1280
+ `review_continuation_ignored_disabled`) and the message has same-thread
1281
+ evidence (`conversation_id` or `parent_message_id`) matching the grant
1282
+ audit's sender and thread — cross-sender, cross-thread, and
1283
+ cross-receiver requests fall back to the explicit-confirmation default
1284
+ (`review_continuation_confirmation_required`);
1285
+ 2. the message type is listed in `allowed_types` — `review_addressed`
1286
+ stays context-only unless listed (the manual-continuation shape), and
1287
+ reviewer-output types (`review_feedback`, `review_lgtm`) are always
1288
+ context-only (`review_continuation_context_only`);
1289
+ 3. the declared `repo` and `pr` match the pinned `repository` and
1290
+ `pr_number`, the declared fields parse, and the round's requested side
1291
+ effects stay inside `permitted_side_effects` — any excess or
1292
+ unverifiable declaration pauses with
1293
+ `review_continuation_scope_exceeded` (fail closed: a request that does
1294
+ not declare its repository cannot be confirmed in-scope);
1295
+ 4. the effective round stays within `max_round`
1296
+ (`review_continuation_round_exceeded` otherwise). The effective round
1297
+ is `max(declared round, 1 + prior round-consuming audits in the
1298
+ thread)`, where an audit consumes one unit only when its invocation
1299
+ actually ran: an `auto_accepted` continuation round, or a pause whose
1300
+ recorded human outcome authorized the manual round
1301
+ (`approved`/`modified`). Declined, unanswered, and context-only
1302
+ records consume nothing — a dead ask can never exhaust the budget a
1303
+ later re-grant promises. The receiver's own audit trail is the floor,
1304
+ so a sender cannot under-declare the round number to stay inside the
1305
+ ceiling, and grant-listed `review_addressed` invocations cannot
1306
+ repeat unbounded;
1307
+ 5. the grant is unexpired on **both clocks**: neither the message's
1308
+ `created_at_utc` nor the evaluation time may pass `expires_at_utc`
1309
+ (`review_continuation_expired` otherwise). `created_at_utc` is
1310
+ sender-controlled, so the evaluation-time check is the binding one —
1311
+ a request queued before expiry does not run after it.
1312
+
1313
+ Authorization and revocation arbitrate on different clocks. An approval
1314
+ governs only requests created after it — authority is never retroactive.
1315
+ A denial takes effect the moment it is recorded: a denial decided before
1316
+ *evaluation* revokes queued work even when the request predates it
1317
+ (`review_continuation_revoked`), and on a tie the denial wins. A denial
1318
+ is not a tombstone — a newer approval that still predates the request
1319
+ re-establishes standing continuation.
1320
+
1321
+ The decision records a `review_continuation` block alongside
1322
+ `continuation_grant`: the governing scope, the declared request context,
1323
+ the `effective_round`, `exceeded_fields` on drift, the grant's
1324
+ `source_audit`/`source_message_id`, and a `head_check`
1325
+ (`declared_head`, `live_head`, `status:
1326
+ match|mismatch|undeclared|unverified`). A head mismatch — including a
1327
+ declared value that only shares a prefix with the live head, or a
1328
+ truncated declaration — is recorded with
1329
+ `review_continuation_head_mismatch` and never blocks the round: the live
1330
+ head is authoritative, and the reviewer must resolve the declared value
1331
+ against a live fetch before any terminal verdict. Head drift after
1332
+ approval still invalidates completion per the review-loop protocol.
1333
+
1334
+ `permitted_side_effects` binds execution, not just admission: the
1335
+ dispatching runtime passes the accepted scope's permitted set to the
1336
+ reviewer invocation as its bound, and the reviewer withholds any outward
1337
+ action whose entry is `false` (recording what was withheld) — a granted
1338
+ round never performs a GitHub comment or review submission the grant did
1339
+ not permit. A round that cannot complete without a forbidden effect
1340
+ pauses instead of performing it.
1341
+
1342
+ Lexical hard-stop scanning deliberately does not run on review lifecycle
1343
+ bodies: a granted reviewer invocation executes a pinned workflow whose
1344
+ side effects are bounded by `permitted_side_effects`, not by sender prose,
1345
+ and review bodies quote diffs and commands by design. Admission here is
1346
+ scope matching against a human-granted bound, not body classification.
1347
+ An admitted review decision carries no task `scope_envelope`; its bound is
1348
+ the accepted `review_continuation.scope`.
1349
+
1049
1350
  ## Taxonomy Pin
1050
1351
 
1051
1352
  Audit `result.final_state` is limited to: