oacp-cli 0.5.0__tar.gz → 0.5.1__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 (446) hide show
  1. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/CHANGELOG.md +22 -0
  2. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/PKG-INFO +3 -3
  3. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/README.md +1 -1
  4. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/autonomy.md +148 -16
  5. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/inbox_outbox.md +15 -35
  6. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/org_memory.md +8 -4
  7. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/session_init.md +4 -2
  8. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/cli.py +63 -4
  9. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/pyproject.toml +3 -4
  10. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/_oacp_constants.py +1 -1
  11. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/autonomy_gate.py +1 -1
  12. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/claude_envelope_hook.py +3 -3
  13. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/codex_session_init.py +14 -84
  14. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/envelope_compiler.py +446 -37
  15. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/finalize_autonomy_record.py +279 -17
  16. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/preflight.py +3 -6
  17. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/record_autonomy_outcome.py +1 -1
  18. oacp_cli-0.5.1/tests/conformance/autonomy/records/cancelled_missing_actor.yaml +45 -0
  19. oacp_cli-0.5.1/tests/conformance/autonomy/records/clean_terminal_cancelled.yaml +46 -0
  20. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/expected_findings.yaml +7 -0
  21. oacp_cli-0.5.1/tests/conformance/autonomy/records/invalid_live_clock_adjustment.yaml +54 -0
  22. oacp_cli-0.5.1/tests/conformance/autonomy/records/pause_and_clock_adjustment.yaml +85 -0
  23. oacp_cli-0.5.1/tests/conformance/autonomy/records/two_clock_adjustments.yaml +100 -0
  24. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/README.md +24 -2
  25. oacp_cli-0.5.1/tests/conformance/envelope/expected/adapter_detection_failed.yaml +27 -0
  26. oacp_cli-0.5.1/tests/conformance/envelope/expected/adapter_expected_missing.yaml +28 -0
  27. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +8 -0
  28. oacp_cli-0.5.1/tests/conformance/envelope/expected/unsupported_runtime_codex.yaml +27 -0
  29. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/canonical_memory_gitignore.txt +2 -2
  30. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_conformance_fixtures.py +1 -1
  31. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_gate.py +1 -1
  32. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_claude_envelope_hook.py +1 -1
  33. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_codex_session_init.py +17 -104
  34. oacp_cli-0.5.1/tests/test_envelope_compiler.py +1142 -0
  35. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_envelope_conformance_fixtures.py +56 -3
  36. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_envelope_public_admission.py +20 -3
  37. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_finalize_autonomy_record.py +333 -0
  38. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_memory_layout_fixture.py +12 -3
  39. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_cli.py +80 -2
  40. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_preflight.py +16 -0
  41. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_readme_commands.py +2 -2
  42. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_record_autonomy_outcome.py +2 -1
  43. oacp_cli-0.5.0/scripts/retention.py +0 -407
  44. oacp_cli-0.5.0/tests/test_envelope_compiler.py +0 -490
  45. oacp_cli-0.5.0/tests/test_retention.py +0 -268
  46. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.gitattributes +0 -0
  47. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/auto-estimate.yml +0 -0
  48. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/ci.yml +0 -0
  49. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/release.yml +0 -0
  50. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.gitignore +0 -0
  51. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/CONTRIBUTING.md +0 -0
  52. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/LICENSE +0 -0
  53. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/Makefile +0 -0
  54. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/QUICKSTART.md +0 -0
  55. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/SECURITY.md +0 -0
  56. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/SPEC.md +0 -0
  57. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/from-claude-p.md +0 -0
  58. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/adoption.md +0 -0
  59. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/doctor.md +0 -0
  60. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/memory-context.md +0 -0
  61. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/prompt_caching.md +0 -0
  62. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/setup.md +0 -0
  63. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/unified_skill_spec.md +0 -0
  64. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/versioning.md +0 -0
  65. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-cli-demo.png +0 -0
  66. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-filesystem-tree.png +0 -0
  67. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-fleet-thread.png +0 -0
  68. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/agent_profiles.md +0 -0
  69. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/agent_safety_defaults.md +0 -0
  70. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/credential_scoping.md +0 -0
  71. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/dispatch_states.yaml +0 -0
  72. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/mcp_integration.md +0 -0
  73. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/message_signing.md +0 -0
  74. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  75. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/packet_states.yaml +0 -0
  76. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/review_loop.md +0 -0
  77. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/runtime_capabilities.md +0 -0
  78. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/skills_manifest.yaml +0 -0
  79. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/task_negotiation.md +0 -0
  80. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/README.md +0 -0
  81. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/decisions.md +0 -0
  82. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
  83. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
  84. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
  85. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
  86. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
  87. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
  88. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/recent.md +0 -0
  89. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/rules.md +0 -0
  90. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
  91. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
  92. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
  93. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
  94. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
  95. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/quickstart/README.md +0 -0
  96. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/__init__.py +0 -0
  97. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/envelope_hook.py +0 -0
  98. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/_oacp_env.py +0 -0
  99. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/add_agent.py +0 -0
  100. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/agent_profile.py +0 -0
  101. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/check_quality_gate.py +0 -0
  102. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/gen_readme_commands.py +0 -0
  103. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/handoff_schema.py +0 -0
  104. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/init_packet.sh +0 -0
  105. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/init_project_workspace.py +0 -0
  106. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/key_cli.py +0 -0
  107. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/message_signing.py +0 -0
  108. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/message_verify.py +0 -0
  109. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_doctor.py +0 -0
  110. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_inbox.py +0 -0
  111. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_watch.py +0 -0
  112. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/policy_signing.py +0 -0
  113. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/send_inbox_message.py +0 -0
  114. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/setup_runtime.py +0 -0
  115. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/trust_cli.py +0 -0
  116. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/trust_root.py +0 -0
  117. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/update_workspace.sh +0 -0
  118. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/validate_agent_card.py +0 -0
  119. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/validate_message.py +0 -0
  120. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/write_event.py +0 -0
  121. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_card.template.yaml +0 -0
  122. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_profile.template.yaml +0 -0
  123. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_status.template.yaml +0 -0
  124. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/checkpoint.template.md +0 -0
  125. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/claude/agents/role_agent.template.md +0 -0
  126. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/claude/rules/guardrail.template.md +0 -0
  127. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/findings_packet.template.yaml +0 -0
  128. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/github_actions_quality_gate.yaml +0 -0
  129. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/coding_standards.template.md +0 -0
  130. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/safe_commands.template.md +0 -0
  131. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/secrets_rules.template.md +0 -0
  132. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/handoff_packet.template.yaml +0 -0
  133. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/inbox_message.template.yaml +0 -0
  134. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/manual_validation.template.md +0 -0
  135. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/merge_decision.template.md +0 -0
  136. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/receiver_config.template.yaml +0 -0
  137. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/review_packet.template.md +0 -0
  138. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/roles/role_baseline.template.md +0 -0
  139. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/roles/role_definition.template.yaml +0 -0
  140. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/runtime_capabilities.yaml +0 -0
  141. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/skills_manifest.template.yaml +0 -0
  142. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/test_packet.template.md +0 -0
  143. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/README.md +0 -0
  144. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
  145. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
  146. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
  147. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
  148. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
  149. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_boundary_action.yaml +0 -0
  150. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_conflict.yaml +0 -0
  151. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_cross_channel.yaml +0 -0
  152. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_reuse.yaml +0 -0
  153. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_same_channel.yaml +0 -0
  154. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_scopeless_boundary.yaml +0 -0
  155. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/review_live_head_mismatch.yaml +0 -0
  156. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/review_live_head_prefix.yaml +0 -0
  157. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
  158. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_addressed_accepted.yaml +0 -0
  159. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_addressed_types.yaml +0 -0
  160. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_approved.yaml +0 -0
  161. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_denied_later.yaml +0 -0
  162. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_denied_postmessage.yaml +0 -0
  163. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
  164. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
  165. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
  166. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
  167. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
  168. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
  169. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  170. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  171. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  172. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
  173. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +0 -0
  174. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
  175. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
  176. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_boundary_action_resumes.yaml +0 -0
  177. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_conflict_declines.yaml +0 -0
  178. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_cross_channel_resumes.yaml +0 -0
  179. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_reuse_stays_paused.yaml +0 -0
  180. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_same_channel_resumes.yaml +0 -0
  181. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_scopeless_boundary_resumes.yaml +0 -0
  182. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
  183. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
  184. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
  185. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
  186. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
  187. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
  188. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_error_admission_pauses.yaml +0 -0
  189. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
  190. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
  191. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
  192. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
  193. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
  194. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  195. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  196. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  197. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
  198. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  199. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
  200. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  201. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
  202. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
  203. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
  204. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
  205. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
  206. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
  207. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  208. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
  209. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
  210. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
  211. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
  212. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  213. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
  214. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
  215. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  216. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
  217. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
  218. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_designed.yaml +0 -0
  219. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_mixed.yaml +0 -0
  220. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_undeclared.yaml +0 -0
  221. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_unplanned.yaml +0 -0
  222. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
  223. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
  224. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
  225. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
  226. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_accepted_auto_continues.yaml +0 -0
  227. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_disabled_pauses.yaml +0 -0
  228. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_drift_pauses.yaml +0 -0
  229. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_expired_pauses.yaml +0 -0
  230. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_head_mismatch_records.yaml +0 -0
  231. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_later_round_pauses.yaml +0 -0
  232. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_missing_approval_pauses.yaml +0 -0
  233. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_prefix_head_records.yaml +0 -0
  234. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_repeated_addressed_round_exceeded.yaml +0 -0
  235. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_revoke_before_processing_pauses.yaml +0 -0
  236. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_revoked_pauses.yaml +0 -0
  237. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
  238. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/sensitive_content_reply_only_advisory.yaml +0 -0
  239. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
  240. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
  241. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
  242. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
  243. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  244. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/ledger_replay/corpus.yaml +0 -0
  245. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  246. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
  247. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
  248. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  249. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  250. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
  251. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
  252. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
  253. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/declaration_error_admission.yaml +0 -0
  254. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
  255. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
  256. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
  257. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  258. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
  259. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  260. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
  261. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  262. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
  263. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  264. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
  265. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
  266. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
  267. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
  268. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
  269. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  270. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/negated_guardrails.yaml +0 -0
  271. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
  272. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_designed.yaml +0 -0
  273. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_mixed.yaml +0 -0
  274. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_undeclared.yaml +0 -0
  275. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_unplanned.yaml +0 -0
  276. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
  277. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
  278. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
  279. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
  280. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_addressed_round3.yaml +0 -0
  281. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_cross_pr.yaml +0 -0
  282. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_head_mismatch.yaml +0 -0
  283. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_prefix_head.yaml +0 -0
  284. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_request.yaml +0 -0
  285. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_round4.yaml +0 -0
  286. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_unapproved.yaml +0 -0
  287. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
  288. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
  289. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
  290. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_content_reply_only.yaml +0 -0
  291. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
  292. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
  293. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
  294. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
  295. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
  296. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
  297. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
  298. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  299. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  300. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/README.md +0 -0
  301. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/admission_outcome_replaced_by_clear.yaml +0 -0
  302. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/breach_basis_source_mismatch.yaml +0 -0
  303. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/breached_empty_fields.yaml +0 -0
  304. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/clean_terminal_done.yaml +0 -0
  305. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_live_a.yaml +0 -0
  306. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_live_b.yaml +0 -0
  307. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_yaml_key_logged_notes.yaml +0 -0
  308. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/final_state_superseded_valid.yaml +0 -0
  309. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/inconsistent_work_clock.yaml +0 -0
  310. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/noncanonical_axis_names.yaml +0 -0
  311. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_final_state_completed.yaml +0 -0
  312. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_completed_after_human_approval.yaml +0 -0
  313. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_executed.yaml +0 -0
  314. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_human_approved_completed.yaml +0 -0
  315. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_review_round_delivered.yaml +0 -0
  316. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/paused_terminal_action_unreconciled.yaml +0 -0
  317. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/paused_terminal_completed_stamp.yaml +0 -0
  318. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/serialized_wave_item.yaml +0 -0
  319. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_legacy_kind_repaired.yaml +0 -0
  320. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_legacy_successor_live.yaml +0 -0
  321. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_missing_successor.yaml +0 -0
  322. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_successor_live.yaml +0 -0
  323. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_unrelated_successor.yaml +0 -0
  324. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/unrelated_identity_holder_live.yaml +0 -0
  325. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
  326. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/configs/malformed.yaml +0 -0
  327. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
  328. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
  329. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
  330. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
  331. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
  332. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
  333. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
  334. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
  335. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
  336. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
  337. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
  338. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
  339. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/README.md +0 -0
  340. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/enforce.yaml +0 -0
  341. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/off.yaml +0 -0
  342. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/warn.yaml +0 -0
  343. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_basic__enforce.yaml +0 -0
  344. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__enforce.yaml +0 -0
  345. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__off.yaml +0 -0
  346. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__warn.yaml +0 -0
  347. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +0 -0
  348. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__off.yaml +0 -0
  349. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +0 -0
  350. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +0 -0
  351. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +0 -0
  352. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +0 -0
  353. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +0 -0
  354. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__off.yaml +0 -0
  355. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__warn.yaml +0 -0
  356. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/README.md +0 -0
  357. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/layout.yaml +0 -0
  358. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/README.md +0 -0
  359. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
  360. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
  361. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
  362. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
  363. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
  364. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
  365. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
  366. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
  367. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
  368. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
  369. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
  370. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
  371. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
  372. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
  373. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
  374. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
  375. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
  376. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
  377. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
  378. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
  379. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
  380. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
  381. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/alice.json +0 -0
  382. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/bob.json +0 -0
  383. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/carol.json +0 -0
  384. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
  385. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
  386. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
  387. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
  388. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
  389. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
  390. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
  391. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
  392. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
  393. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
  394. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
  395. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
  396. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
  397. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
  398. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
  399. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
  400. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
  401. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
  402. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
  403. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
  404. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
  405. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
  406. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
  407. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
  408. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
  409. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
  410. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
  411. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
  412. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/regen_fixtures.py +0 -0
  413. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_add_agent.py +0 -0
  414. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_agent_profile.py +0 -0
  415. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_audit_corpus_boundary.py +0 -0
  416. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_audit_record_conformance.py +0 -0
  417. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_ledger_replay.py +0 -0
  418. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_default_envelope.py +0 -0
  419. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_expected_pauses.py +0 -0
  420. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_github_workflows.py +0 -0
  421. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_handoff_schema.py +0 -0
  422. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_inbox_verify.py +0 -0
  423. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_init_project_workspace.py +0 -0
  424. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_intake_conformance.py +0 -0
  425. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_memory_shim.py +0 -0
  426. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_message_signing.py +0 -0
  427. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_message_verify.py +0 -0
  428. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_constants.py +0 -0
  429. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_doctor.py +0 -0
  430. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_env.py +0 -0
  431. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_inbox.py +0 -0
  432. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_watch.py +0 -0
  433. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_package_content.py +0 -0
  434. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_packaged_status_template.py +0 -0
  435. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_policy_signing.py +0 -0
  436. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_review_loop.py +0 -0
  437. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_send_inbox_message.py +0 -0
  438. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_setup_runtime.py +0 -0
  439. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_signing_conformance.py +0 -0
  440. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_spec_version.py +0 -0
  441. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_trust_root.py +0 -0
  442. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_update_workspace.py +0 -0
  443. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_validate_agent_card.py +0 -0
  444. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_validate_message.py +0 -0
  445. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_workspace_discovery.py +0 -0
  446. {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_write_event.py +0 -0
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.5.1] - 2026-09-11
11
+
12
+ ### Added
13
+
14
+ - Attributed work-clock deductions for multiple excluded intervals, including human-directed time away ([contract](docs/protocol/autonomy.md#threshold-exceeded-checkpoint)).
15
+ - Cancellation receipts that close admitted tasks while preserving partial delivery and pause history ([contract](docs/protocol/autonomy.md#terminal-finalization-and-audit-integrity)).
16
+ - Envelope compilation stamps the enforcement it resolved: `hooks` only when the receiver's adapter is present, `none` with a reason otherwise ([contract](docs/protocol/autonomy.md#enforcement-recording)).
17
+
18
+ ### Changed
19
+
20
+ - Protocol contract stamp `spec_version` moves to `0.5.1` ([contract version](docs/protocol/autonomy.md#contract-version)).
21
+ - `oacp retention` no longer prunes: the engine is parked outside the kernel and the subcommand prints where it went until its removal in 0.5.3 ([inbox/outbox](docs/protocol/inbox_outbox.md#message-history-retention)).
22
+ - `oacp write-event` execs `agent-memory event write` when the installed tool serves it, falling back to the bundled script until its removal in 0.5.2 ([README](README.md#commands)).
23
+ - The exec path prints `published:`/`idempotent:` where the bundled script prints `OK:` ([README](README.md#commands)).
24
+ - `oacp session-init --pull-memory` is a no-op that names the memory tool's own SessionStart hook, until its removal in 0.5.3 ([codex](docs/protocol/session_init.md#codex)).
25
+
26
+ ### Fixed
27
+
28
+ - The sync allowlist anchors `.gitignore` and `.oacp-memory-repo` to the home root, matching the memory tool's golden byte for byte ([memory layout](docs/protocol/org_memory.md#the-sync-allowlist)).
29
+ - Preflight's conflict-marker check flags the diff3 `|||||||` base marker ([preflight](scripts/preflight.py)).
30
+
10
31
  ## [0.5.0] - 2026-09-09
11
32
 
12
33
  ### Added
@@ -868,6 +889,7 @@ The central debrief store is the headline change: every agent's full end-of-sess
868
889
  - Checkout step in github-release workflow job (#19)
869
890
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
870
891
 
892
+ [0.5.1]: https://github.com/kiloloop/oacp/compare/v0.5.0...v0.5.1
871
893
  [0.5.0]: https://github.com/kiloloop/oacp/compare/v0.4.6...v0.5.0
872
894
  [0.4.6]: https://github.com/kiloloop/oacp/compare/v0.4.5...v0.4.6
873
895
  [0.4.5]: https://github.com/kiloloop/oacp/compare/v0.4.4...v0.4.5
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oacp-cli
3
- Version: 0.5.0
3
+ Version: 0.5.1
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
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Topic :: Software Development
22
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Requires-Python: >=3.9.2
24
- Requires-Dist: pyyaml>=6.0
24
+ Requires-Dist: pyyaml>=6.0.1
25
25
  Provides-Extra: crypto
26
26
  Requires-Dist: cryptography>=50.0.0; extra == 'crypto'
27
27
  Description-Content-Type: text/markdown
@@ -261,7 +261,7 @@ uv tool install .
261
261
  | `oacp agent` | Manage global agent profiles (init, sync, show, list) |
262
262
  | `oacp inbox` | List pending inbox messages |
263
263
  | `oacp watch` | Emit inbox delta events for Monitor-friendly polling |
264
- | `oacp retention` | Prune project message history by age and count |
264
+ | `oacp retention` | Parked: engine archived outside the kernel; advisory shim until 0.5.3 |
265
265
  | `oacp memory` | Run agent-memory (sync, archive, restore); shim until 0.5.2 |
266
266
  | `oacp session-init` | Verify Codex startup inputs and emit SessionStart context |
267
267
  | `oacp setup` | Generate runtime-specific config files in a repo |
@@ -233,7 +233,7 @@ uv tool install .
233
233
  | `oacp agent` | Manage global agent profiles (init, sync, show, list) |
234
234
  | `oacp inbox` | List pending inbox messages |
235
235
  | `oacp watch` | Emit inbox delta events for Monitor-friendly polling |
236
- | `oacp retention` | Prune project message history by age and count |
236
+ | `oacp retention` | Parked: engine archived outside the kernel; advisory shim until 0.5.3 |
237
237
  | `oacp memory` | Run agent-memory (sync, archive, restore); shim until 0.5.2 |
238
238
  | `oacp session-init` | Verify Codex startup inputs and emit SessionStart context |
239
239
  | `oacp setup` | Generate runtime-specific config files in a repo |
@@ -322,7 +322,7 @@ Every autonomy decision writes one YAML file:
322
322
 
323
323
  ```yaml
324
324
  schema_version: 2
325
- spec_version: "0.4.5"
325
+ spec_version: "0.5.1"
326
326
  created_at_utc: "2026-05-12T13:23:25Z"
327
327
  receiver: codex
328
328
  sender: iris
@@ -470,6 +470,10 @@ terminal finalization. Records, envelopes, and workspaces written between the
470
470
  0.4.4 release (2026-08-28) and the 0.4.5 release are therefore stamped
471
471
  `0.4.3` under a contract that had already moved — readers tolerate that
472
472
  stamp on artifacts dated in the window and read them by the 0.4.5 shape.
473
+ The 0.5.1 contract adds cancellation receipts and attributed clock adjustments. Existing records keep their
474
+ original stamp; new cancellation fixtures use 0.5.1. Schema version remains 2
475
+ because the record container is unchanged; readers must recognize the new
476
+ terminal vocabulary before consuming 0.5.1 receipts.
473
477
 
474
478
  `evaluator` is **gate-emitted, not receiver-composed**: the evaluator
475
479
  self-stamps its provenance into every decision it returns, and receivers
@@ -823,7 +827,7 @@ in place with `--replace`.
823
827
 
824
828
  **Run-state vocabulary.** `result.final_state` splits by lifecycle phase:
825
829
  `pending`, `paused`, and `blocked` are live states; `done`, `superseded`,
826
- and `error` are terminal. Only terminal states can be finalized.
830
+ `error`, and `cancelled` are terminal. Only terminal states can be finalized.
827
831
  `pending` is receiver-written (an admission record picked up for
828
832
  execution) — the evaluator itself never writes it.
829
833
 
@@ -857,11 +861,38 @@ actuals, whichever receiver writes it. Within the envelope, the
857
861
  checkpoint records `within_declared_envelope` (or
858
862
  `continued_with_grant`) and the terminal write proceeds; a breach leaves
859
863
  the record checkpoint-paused (exit code 4) and the §E re-authorization
860
- flow applies before any terminal state can be written. Realized effects
864
+ flow applies before successful completion can be written. Cancellation
865
+ closes the task without resuming or erasing a breached checkpoint. Realized effects
861
866
  use the canonical axis names only: `actual_minutes`,
862
867
  `actual_files_touched`, `side_effects_actual.<capability>`, and
863
868
  `task_profile.<field>` for declared-intent corrections.
864
869
 
870
+ **Cancellation.** Use `cancelled` when the human or sender stops an admitted
871
+ task; use `superseded` when a replacement evaluation inherits its authority.
872
+ `oacp autonomy-finalize <record> --final-state cancelled --cancelled-by human
873
+ --cancelled-at <UTC>` writes `result.cancelled_by` (`human` or `sender`),
874
+ `cancelled_at_utc` (equal to `completed_at_utc`), optional `reason` (`--reason`),
875
+ and `deliverables_landed` (a list of PR/commit reference strings, supplied with
876
+ repeatable `--deliverable-landed`; empty when none landed). Cancellation must
877
+ follow admission approval and any work start. It requires non-negative integer
878
+ `actual_minutes` and `actual_files_touched`; existing work-start and pause stamps
879
+ remain binding. Before work begins, no start is invented: both actuals are zero
880
+ and the landed list is empty.
881
+
882
+ Cancellation accepts live `pending`/`paused`/`blocked` records and the provisional
883
+ `done` shape emitted at auto-admission (no completion stamp). A paused admission
884
+ must have a recorded `approved`/`modified` human outcome. Completed `done`,
885
+ `error`, `superseded`, and `cancelled` records refuse cancellation even with
886
+ `--replace`. Cancelled history cannot be reopened by a checkpoint, another
887
+ outcome, or a done/error correction; linked supersession remains available.
888
+ Cancellation preserves the admission and any unresolved checkpoint evidence,
889
+ including its historical `paused_for_reauthorization` action, but does not
890
+ require an implementation-success checkpoint or manufacture resumed authority.
891
+ Cancellation accepts only clock/count actuals (including `clock_adjustments`): record effects, risks, and
892
+ re-authorization through a checkpoint while still live before cancelling.
893
+ Unsupported actuals are refused rather than silently discarded. The cancelled
894
+ lifecycle is closed for doctor and envelope clear.
895
+
865
896
  **Evaluation identity and supersession.** Every persisted evaluation
866
897
  carries an `evaluation_id` derived from receiver, message id, message
867
898
  bytes, and evaluation time. Re-evaluating a message the evaluator
@@ -1047,7 +1078,55 @@ completion or the current checkpoint, rounded up to a whole minute, excluding
1047
1078
  each represented re-authorization pause from `paused_at_utc` through
1048
1079
  `cleared_paused_at_utc`. If a terminal outcome leaves that pause uncleared,
1049
1080
  active work ends at `paused_at_utc`; the subsequent paused wait does not count.
1050
- The current record shape represents at most its current pause interval.
1081
+ The scalar pair keeps its original meaning. Explicit human-directed exclusions
1082
+ are carried separately in `result.clock_adjustments`, including deductions that
1083
+ were never checkpoint pauses. Supply additions through `--actuals <yaml>`:
1084
+
1085
+ ```yaml
1086
+ actual_files_touched: 2
1087
+ completed_at_utc: "2026-08-01T02:00:00Z"
1088
+ clock_adjustments:
1089
+ - from_utc: "2026-08-01T01:30:00Z"
1090
+ to_utc: "2026-08-01T01:45:00Z"
1091
+ actor: alice
1092
+ decided_at_utc: "2026-08-01T02:00:00Z"
1093
+ reason: "Human directed exclusion for time away"
1094
+ ```
1095
+
1096
+ Each closed interval requires exactly these five input fields; the finalizer
1097
+ adds `recorded_at_utc` as writer provenance. The actor is a stable nonempty
1098
+ handle, the reason is nonempty, and all timestamps use `YYYY-MM-DDTHH:MM:SSZ`.
1099
+ The interval starts at or after work start and finishes after its start, no
1100
+ later than recording and the measurement/completion endpoint. The decision
1101
+ cannot postdate recording. Duration is derived from the interval, so no
1102
+ independently editable minutes field can disagree with it. Only explicit human
1103
+ direction authorizes a deduction; an adjustment neither grants scope nor
1104
+ resumes a checkpoint.
1105
+
1106
+ Additions append to recorded evidence; omission or an empty list preserves it,
1107
+ and identical entries are idempotent. A supplied writer timestamp for a new
1108
+ entry is refused; only an exact replay may carry its existing writer stamp.
1109
+ Rewriting a stored timestamp is refused. Corrections that remove or rewrite history use linked supersession.
1110
+ The list survives checkpoints and metadata-only `--replace`. These rules
1111
+ apply to direct library calls as well as the CLI and to cancellation after
1112
+ work has begun.
1113
+
1114
+ Arithmetic uses the union of the scalar pause and explicit intervals. Sort and
1115
+ merge overlapping or adjacent intervals, subtract their total seconds from
1116
+ elapsed seconds, then round active minutes up once. Every excluded second
1117
+ counts once, including a pause also recorded explicitly before a later
1118
+ checkpoint replaces the scalar pair. A malformed scalar remains invalid even
1119
+ when an explicit list exists. Existing scalar-only receipts keep their original
1120
+ behavior; absent adjustments mean no extra deduction. Read-back validates list
1121
+ shape and provenance even on live records without numeric actuals, and terminal
1122
+ actuals retain the one-minute `actual_minutes_inconsistent` tolerance.
1123
+ Live read-back does not bound `recorded_at_utc` against the reading wall clock;
1124
+ finalization rejects intervals beyond its measurement/completion endpoint.
1125
+
1126
+ For `--final-state done --replace`, automatic scalar-pause derivation reads the
1127
+ stored checkpoint first. When also changing that scalar pause through actuals,
1128
+ supply explicit `actual_minutes`; the final read-back still checks the resulting
1129
+ clock. Newly supplied explicit adjustments participate in derivation immediately.
1051
1130
  Admission-to-start idle time never counts; time waiting on a peer reviewer does
1052
1131
  count because it is part of that task's review loop. Serialized tasks admitted
1053
1132
  together therefore stamp and measure their own starts independently.
@@ -1335,9 +1414,14 @@ and then human-approved), the receiver compiles the profile plus its own
1335
1414
  autonomy config into a runtime envelope:
1336
1415
 
1337
1416
  ```
1338
- oacp envelope compile <message.yaml> --receiver <agent>
1417
+ oacp envelope compile <message.yaml> --receiver <agent> \
1418
+ [--audit <admission-record.yaml>]
1339
1419
  ```
1340
1420
 
1421
+ With `--audit`, the compiler also stamps the admission record with the
1422
+ enforcement state it compiled (see Enforcement recording below); the
1423
+ record and the envelope then tell one story.
1424
+
1341
1425
  **Admitted public-visibility tasks are the one explicit exception.** A
1342
1426
  compiled `public_visibility: true` envelope denies the entire chain the
1343
1427
  human just approved — the runtime adapter has no post-approval carve-out —
@@ -1385,7 +1469,7 @@ The envelope is written to
1385
1469
  ```json
1386
1470
  {
1387
1471
  "envelope_version": 1,
1388
- "spec_version": "0.4.5",
1472
+ "spec_version": "0.5.1",
1389
1473
  "compiler": "envelope_compiler.py",
1390
1474
  "compiled_at_utc": "2026-07-12T02:00:00Z",
1391
1475
  "project": "my-project",
@@ -1412,10 +1496,19 @@ The envelope is written to
1412
1496
  },
1413
1497
  "counters": {"files_touched": []},
1414
1498
  "enforcement": "hooks",
1499
+ "adapter": {
1500
+ "runtime": "claude",
1501
+ "state": "resolved",
1502
+ "console": "oacp-envelope-hook",
1503
+ "detail": "console script 'oacp-envelope-hook' on PATH at …; registered as a PreToolUse hook"
1504
+ },
1415
1505
  "session_id": "sess-…"
1416
1506
  }
1417
1507
  ```
1418
1508
 
1509
+ `enforcement_reason` appears beside `enforcement` exactly when it is
1510
+ `none`, naming the adapter state (below).
1511
+
1419
1512
  Compilation rules:
1420
1513
 
1421
1514
  - **Fail closed.** A missing, unparsable, or invalid profile — or a malformed
@@ -1427,6 +1520,33 @@ Compilation rules:
1427
1520
  runtime enforcement never trusts sender declarations alone.
1428
1521
  - Granular side-effect fields absent from a legacy profile compile to
1429
1522
  `false`. `counters` are runtime state and always start empty.
1523
+ - **Adapter detection.** `enforcement` is earned, not assumed. The
1524
+ compiler resolves the receiver's runtime from its agent card
1525
+ (`agents/<receiver>/agent_card.yaml` → `runtime:`) and detects that
1526
+ runtime's envelope adapter **by console name, never by module path**,
1527
+ so the adapter can move between distributions without touching the
1528
+ compiler. Every compile stamps exactly one of four `adapter.state`
1529
+ values: `resolved` → `enforcement: hooks`; `unsupported`,
1530
+ `expected_missing`, or `failed` → `enforcement: none` plus
1531
+ `enforcement_reason` naming the state (`adapter_unsupported`,
1532
+ `adapter_expected_missing`, `adapter_detection_failed`). Detection
1533
+ inputs, per runtime:
1534
+ - `claude` — the `oacp-envelope-hook` console script resolves on
1535
+ PATH **and** is registered as a `PreToolUse` hook command in the
1536
+ project repo's `.claude/settings.json` (the registration
1537
+ `oacp setup claude` writes, reached through the workspace marker's
1538
+ `repo_path`). Both present → `resolved`; either absent →
1539
+ `expected_missing`; a workspace marker or settings file that cannot
1540
+ be read → `failed`.
1541
+ - `codex`, `cursor`, `gemini`, `human` — no envelope adapter by
1542
+ design → `unsupported`.
1543
+ - `unknown`, a missing or unreadable card, or a value outside the
1544
+ card's runtime enum → `failed`.
1545
+
1546
+ `expected_missing` and `failed` are loud: the compiler prints a stderr
1547
+ advisory naming the reason. The compile still succeeds (exit 0) and the
1548
+ envelope is still written — degradation is named, never silent, and
1549
+ never fail-closed here.
1430
1550
  - **Session binding.** The envelope records which harness session it
1431
1551
  belongs to. The runtime hook — the only party that sees the harness
1432
1552
  session id (it is not present in the command environment) — records a
@@ -1581,7 +1701,7 @@ the active envelope — `message_id` and `receiver` fields in the record
1581
1701
  itself; filenames are never trusted, and the envelope's message id (pinned
1582
1702
  to a safe-id grammar at compile time) never reaches a filesystem glob:
1583
1703
 
1584
- - `result.final_state: done | error` — the lifecycle is over; the clear is
1704
+ - `result.final_state: done | error | cancelled` — the lifecycle is over; the clear is
1585
1705
  allowed and the enforcement window closes from inside the session.
1586
1706
  - `pending` or `paused` (or no matching record at all) — the clear is
1587
1707
  denied: an open task keeps its envelope, and a checkpoint-paused task
@@ -1625,15 +1745,26 @@ grants nothing durable. The envelope itself stays immutable; only `scope`
1625
1745
 
1626
1746
  ### Enforcement recording
1627
1747
 
1628
- The audit `result` block records `envelope_enforcement: hooks | none`.
1629
- Receivers set `hooks` after a successful compile on an adapter-equipped
1630
- runtime; `none` means pickup-gate-only enforcement. Degradation must never
1631
- be silent: when `none` is a **rule** rather than a runtime gap, the record
1632
- carries the named reason alongside it —
1633
- `envelope_enforcement_reason: public_visibility_admission_approved` for
1634
- the admitted-public branch above, stamped by the compiler itself. A bare
1635
- `none` with no reason means an adapterless runtime (the historical
1636
- pickup-gate-only state), distinguishable from the rule-based mode.
1748
+ The audit `result` block records `envelope_enforcement: hooks | none`,
1749
+ and it tells the same story as the envelope. The admission gate writes
1750
+ `none` at admission. A compile run with `--audit <admission-record>`
1751
+ stamps the record with the detected adapter state — under the audit
1752
+ lock, in one locked read, on a record carrying a `schema_version` and
1753
+ content-matched on `message_id` + `receiver` + `message_sha256` (an
1754
+ unbound record is left untouched and the compile warns): `hooks` for a
1755
+ `resolved` adapter, with no reason; otherwise `none` plus
1756
+ `envelope_enforcement_reason` naming the state —
1757
+ `adapter_unsupported` (a runtime with no adapter by design, `codex`
1758
+ today), `adapter_expected_missing` (an adapter-capable runtime whose
1759
+ console or registration did not resolve), or
1760
+ `adapter_detection_failed` (the runtime or a probe could not be
1761
+ determined). Degradation must never be silent: `none` always carries
1762
+ its reason — `public_visibility_admission_approved` for the
1763
+ admitted-public branch above, one of the adapter reasons for a compiled
1764
+ envelope — and `none` means pickup-gate-only enforcement whatever the
1765
+ reason. A record still reading a bare `none` after pickup establishes
1766
+ only that no compiler stamp was recorded — the compile ran without
1767
+ `--audit`, or never ran — never that the runtime is adapterless.
1637
1768
 
1638
1769
  Enforcement boundary: hooks constrain every tool call inside the session,
1639
1770
  including subagent tool calls, and fire before sandbox/permission
@@ -1838,6 +1969,7 @@ Audit `result.final_state` is limited to:
1838
1969
  - `done` (terminal)
1839
1970
  - `superseded` (terminal; see "Terminal finalization and audit integrity")
1840
1971
  - `error` (terminal)
1972
+ - `cancelled` (terminal; admitted task stopped by the human or sender)
1841
1973
 
1842
1974
  `result.completion_kind` is separately pinned to the evaluation-shape enum
1843
1975
  above (see "Pinned completion_kind taxonomy"). Missing-profile messages that
@@ -327,41 +327,21 @@ replacement is a retained error, never permission to overwrite history.
327
327
 
328
328
  ## Message History Retention
329
329
 
330
- `oacp retention <project>` applies one non-recursive pass across every visible
331
- agent's `outbox/`, `dead_letter/`, and `inbox/archive/`. A direct regular file is
332
- eligible when it is older than `max_age_days` **or** falls outside the newest
333
- `max_count` files. Age uses filesystem mtime. Hidden entries, metadata markers,
334
- directories, and symlinks are ignored, and each candidate's identity is
335
- rechecked immediately before unlinking.
336
-
337
- The protocol defaults for all three targets are 30 days and 1,000 files per
338
- agent. Projects may deep-override either dimension in `workspace.json`; `null`
339
- disables that dimension, omitted targets or keys inherit the defaults, and
340
- values otherwise must be positive integers:
341
-
342
- ```json
343
- {
344
- "retention": {
345
- "outbox": {"max_age_days": 30, "max_count": 1000},
346
- "dead_letter": {"max_age_days": 30, "max_count": 1000},
347
- "inbox_archive": {"max_age_days": 30, "max_count": 1000}
348
- }
349
- }
350
- ```
351
-
352
- Run `oacp retention <project> --dry-run --json` before an interactive cleanup;
353
- omit `--dry-run` to apply the exact reported policy.
354
-
355
- Quarantine evidence is outside automatic retention by construction. Files
356
- written by the intake quarantine format
357
- `<original>.<sha256-prefix>.<UTC-stamp>[.<counter>]` never count toward age or
358
- count pruning. A manually managed dead-letter fixture can opt into the same
359
- protection with an adjacent empty `<filename>.retain` marker. Retention never
360
- parses dead-letter contents and never bulk-cleans protected evidence.
361
-
362
- Dispatcher cleanup archives completed inbound dispatch traffic under the same
363
- rule. Intermediate WIP/ack notifications are ordinary archived messages and
364
- expire through `inbox_archive` retention rather than runtime-specific deletion.
330
+ Pruning `outbox/`, `dead_letter/`, and `inbox/archive/` is an operator concern
331
+ outside the kernel. Two invariants bind whatever does it, both scoped to
332
+ `dead_letter/`: quarantine evidence written there by intake
333
+ (`<original>.<sha256-prefix>.<UTC-stamp>[.<counter>]`) is outside automatic
334
+ retention by construction, and a manually managed dead-letter file opts into
335
+ the same protection with an adjacent empty `<filename>.retain` marker.
336
+ Retention never parses dead-letter contents and never touches protected
337
+ evidence.
338
+
339
+ The reference engine (`<project> --dry-run --json`, workspace `retention`
340
+ override) is parked, unwired to any runtime, at
341
+ `shared/archive/oacp-retention/` in the agent-skills repository; `oacp
342
+ retention` only points there until its removal in 0.5.3. Dispatcher cleanup
343
+ archives completed inbound dispatch traffic like any other message, and
344
+ intermediate WIP/ack notifications are ordinary archived messages.
365
345
 
366
346
  ## Conversation Threading
367
347
 
@@ -396,8 +396,8 @@ verbatim. Syncing is opt-in, so scaffolding a home never creates the marker.
396
396
  ```gitignore
397
397
  *
398
398
  !*/
399
- !.gitignore
400
- !.oacp-memory-repo
399
+ !/.gitignore
400
+ !/.oacp-memory-repo
401
401
  !org-memory/**
402
402
  !projects/*/memory/**
403
403
  projects/*/memory/.cache/
@@ -409,7 +409,9 @@ Line by line:
409
409
 
410
410
  - **Deny everything, then re-allow directories** (`*`, `!*/`) so the tier
411
411
  patterns below can reach into the tree.
412
- - **The synced set** is the ignore file itself, the marker, `org-memory/**`
412
+ - **The synced set** is the ignore file and the marker at the home root
413
+ (anchored: the two explicit name exceptions apply there only, and a deeper
414
+ file of either name follows the ordinary tier rules below), `org-memory/**`
413
415
  in full (the debrief store included), and `projects/*/memory/**` for every
414
416
  project.
415
417
  - **`projects/*/memory/.cache/` never syncs** — the one excluded subtree
@@ -424,7 +426,9 @@ Line by line:
424
426
  The allowlist is also a predicate over home-relative paths, and the predicate,
425
427
  not the ignore file, is what a sync engine trusts:
426
428
 
427
- - `.gitignore` and `.oacp-memory-repo` are allowed.
429
+ - `.gitignore` and `.oacp-memory-repo` at the home root are allowed by name.
430
+ A deeper file of either name is admitted only when the tier rules below
431
+ admit it (`org-memory/.gitignore` is; `other/.gitignore` is not).
428
432
  - A path with any component named `keys` is denied, at any depth, whatever
429
433
  the ignore file says.
430
434
  - A path strictly inside a tier directory (`org-memory/…`,
@@ -193,8 +193,10 @@ Use this manual fallback when the project hook is unavailable or untrusted:
193
193
  oacp session-init --project <project>
194
194
  ```
195
195
 
196
- `--pull-memory` runs `agent-memory pull --home <hub_dir>` first when the tool is
197
- on PATH and reports the pull as `disabled` with the install hint when it is not.
196
+ `--pull-memory` is retired: the flag is accepted as a no-op with a one-line note
197
+ on stderr so a hook generated by an earlier kernel keeps starting, and is removed
198
+ in 0.5.3. The memory pull is the memory tool's own SessionStart hook, installed
199
+ by `agent-memory setup codex`.
198
200
 
199
201
  The script emits a deterministic acknowledgement payload suitable for first-response confirmation:
200
202
 
@@ -10,6 +10,7 @@ import os
10
10
  from pathlib import Path
11
11
  import runpy
12
12
  import shutil
13
+ import subprocess
13
14
  import sys
14
15
  from typing import Dict, List, Optional, Sequence
15
16
 
@@ -26,7 +27,7 @@ Commands:
26
27
  agent Manage global agent profiles (init, sync, show, list)
27
28
  inbox List pending inbox messages
28
29
  watch Emit inbox delta events for Monitor-friendly polling
29
- retention Prune project message history by age and count
30
+ retention Parked: engine archived outside the kernel; advisory shim until 0.5.3
30
31
  memory Run agent-memory (sync, archive, restore); shim until 0.5.2
31
32
  session-init Verify Codex startup inputs and emit SessionStart context
32
33
  setup Generate runtime-specific config files in a repo
@@ -48,7 +49,6 @@ Examples:
48
49
  oacp add-agent my-project alice --runtime claude
49
50
  oacp inbox my-project --agent claude
50
51
  oacp watch --agent claude --project my-project --json
51
- oacp retention my-project --dry-run
52
52
  oacp memory archive my-project research_notes.md # runs: agent-memory archive ...
53
53
  oacp session-init --project my-project
54
54
  oacp setup claude --project my-project
@@ -73,7 +73,6 @@ SCRIPT_NAMES = {
73
73
  "agent": "agent_profile.py",
74
74
  "inbox": "oacp_inbox.py",
75
75
  "watch": "oacp_watch.py",
76
- "retention": "retention.py",
77
76
  "session-init": "codex_session_init.py",
78
77
  "setup": "setup_runtime.py",
79
78
  "send": "send_inbox_message.py",
@@ -136,6 +135,31 @@ DELEGATED_COMMANDS: Dict[str, Sequence[str]] = {
136
135
  _DELEGATED_VERBS: Dict[str, Dict[str, str]] = {"memory": {"init": "enable"}}
137
136
  _HOME_FLAG, _LEGACY_HOME_FLAG = "--home", "--oacp-dir"
138
137
 
138
+ # `oacp write-event` execs `agent-memory event write` when the tool on PATH
139
+ # serves the verb (agent-memory 0.1.1+) and runs the bundled script when the
140
+ # tool is absent or predates it. argv passes through with the same rewrite as
141
+ # the delegated verbs; the exec translates no output, so the verb's
142
+ # `published:` / `idempotent: <path>` line stands where the script printed
143
+ # `OK: <path>`, and its dry-run preview lands on stderr. This shim lasts
144
+ # through 0.5.1 and is removed in 0.5.2.
145
+ SHIMMED_COMMANDS: Dict[str, Sequence[str]] = {"write-event": ("event", "write")}
146
+ VERB_PROBE_TIMEOUT_SECONDS = 10
147
+
148
+ # `oacp retention` left the kernel in 0.5.1. The engine is parked, unwired to
149
+ # any runtime, at `shared/archive/oacp-retention/retention.py` in the
150
+ # agent-skills repository; the subcommand only says so and prunes nothing.
151
+ # This shim lasts through 0.5.2 and is removed in 0.5.3.
152
+ PARKED_COMMANDS: Dict[str, str] = {
153
+ "retention": (
154
+ "`oacp retention` is parked: the engine left the kernel in 0.5.1 and is "
155
+ "archived, unwired to any runtime, at shared/archive/oacp-retention/"
156
+ "retention.py in the agent-skills repository. Run it directly:\n"
157
+ " python3 <agent-skills>/shared/archive/oacp-retention/retention.py "
158
+ "<project> --dry-run --json\n"
159
+ "Nothing was pruned. This shim is removed in 0.5.3."
160
+ ),
161
+ }
162
+
139
163
 
140
164
  def delegated_argv(command: str, argv: Sequence[str]) -> List[str]:
141
165
  """Return the `agent-memory` argv for an `oacp <command> <argv>` call."""
@@ -151,7 +175,8 @@ def delegated_argv(command: str, argv: Sequence[str]) -> List[str]:
151
175
  rewritten.append(_HOME_FLAG + arg[len(_LEGACY_HOME_FLAG) :])
152
176
  else:
153
177
  rewritten.append(arg)
154
- return [MEMORY_TOOL, *DELEGATED_COMMANDS[command], *rewritten]
178
+ verb = DELEGATED_COMMANDS[command] if command in DELEGATED_COMMANDS else SHIMMED_COMMANDS[command]
179
+ return [MEMORY_TOOL, *verb, *rewritten]
155
180
 
156
181
 
157
182
  def _delegate(command: str, argv: Sequence[str]) -> int:
@@ -163,15 +188,49 @@ def _delegate(command: str, argv: Sequence[str]) -> int:
163
188
  file=sys.stderr,
164
189
  )
165
190
  return 127
191
+ return _exec_memory_tool(tool, command, argv)
192
+
193
+
194
+ def _exec_memory_tool(tool: str, command: str, argv: Sequence[str]) -> int:
166
195
  sys.stdout.flush()
167
196
  sys.stderr.flush()
168
197
  os.execvp(tool, delegated_argv(command, argv))
169
198
  return 0 # pragma: no cover - execvp does not return
170
199
 
171
200
 
201
+ def _tool_serves(tool: str, verb: Sequence[str]) -> bool:
202
+ """Whether the memory tool at `tool` serves `verb`: its `--help` exits 0."""
203
+ try:
204
+ completed = subprocess.run(
205
+ [tool, *verb, "--help"],
206
+ capture_output=True,
207
+ timeout=VERB_PROBE_TIMEOUT_SECONDS,
208
+ check=False,
209
+ )
210
+ except (OSError, subprocess.TimeoutExpired):
211
+ return False
212
+ return completed.returncode == 0
213
+
214
+
215
+ def _shim(command: str, argv: Sequence[str]) -> int:
216
+ tool = shutil.which(MEMORY_TOOL)
217
+ if tool is None or not _tool_serves(tool, SHIMMED_COMMANDS[command]):
218
+ return _run_script(SCRIPT_NAMES[command], argv)
219
+ return _exec_memory_tool(tool, command, argv)
220
+
221
+
222
+ def _parked(command: str) -> int:
223
+ print(f"ERROR: {PARKED_COMMANDS[command]}", file=sys.stderr)
224
+ return 2
225
+
226
+
172
227
  def _dispatch(command: str, argv: Sequence[str]) -> int:
228
+ if command in PARKED_COMMANDS:
229
+ return _parked(command)
173
230
  if command in DELEGATED_COMMANDS:
174
231
  return _delegate(command, argv)
232
+ if command in SHIMMED_COMMANDS:
233
+ return _shim(command, argv)
175
234
  script_name = SCRIPT_NAMES.get(command)
176
235
  if script_name is None:
177
236
  print(f"ERROR: unknown command '{command}'", file=sys.stderr)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oacp-cli"
7
- version = "0.5.0"
7
+ version = "0.5.1"
8
8
  description = "Open Agent Coordination Protocol CLI for file-based multi-agent workflows"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -14,7 +14,7 @@ authors = [
14
14
  { name = "Kiloloop" },
15
15
  ]
16
16
  dependencies = [
17
- "PyYAML>=6.0",
17
+ "PyYAML>=6.0.1",
18
18
  ]
19
19
  keywords = ["agents", "cli", "coordination", "oacp", "workflow"]
20
20
  classifiers = [
@@ -50,7 +50,7 @@ dev = [
50
50
  "build==1.5.0",
51
51
  "hatchling==1.27.0",
52
52
  "pytest==9.1.1",
53
- "ruff==0.16.2",
53
+ "ruff==0.16.6",
54
54
  ]
55
55
 
56
56
  [tool.hatch.build.targets.sdist]
@@ -86,7 +86,6 @@ packages = ["oacp"]
86
86
  "scripts/agent_profile.py" = "oacp/_scripts/agent_profile.py"
87
87
  "scripts/oacp_inbox.py" = "oacp/_scripts/oacp_inbox.py"
88
88
  "scripts/oacp_watch.py" = "oacp/_scripts/oacp_watch.py"
89
- "scripts/retention.py" = "oacp/_scripts/retention.py"
90
89
  "scripts/setup_runtime.py" = "oacp/_scripts/setup_runtime.py"
91
90
  "scripts/write_event.py" = "oacp/_scripts/write_event.py"
92
91
  "scripts/check_quality_gate.py" = "oacp/_scripts/check_quality_gate.py"
@@ -17,7 +17,7 @@ REPO_SLUG_RE = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$")
17
17
  # names the contract it was produced under. Moves only under the
18
18
  # contract-version rule (docs/protocol/autonomy.md, "Contract version");
19
19
  # the spec's own literals must agree (tests/test_spec_version.py).
20
- SPEC_VERSION = "0.4.5"
20
+ SPEC_VERSION = "0.5.1"
21
21
  CREATABLE_RUNTIMES = ("claude", "codex", "cursor", "gemini")
22
22
  ALL_RUNTIMES = ("claude", "codex", "cursor", "gemini", "human", "unknown")
23
23
  CODEX_SESSION_START_CONTEXT_LIMIT = 2_500
@@ -113,7 +113,7 @@ DECLARED_RISK_REASONS = (
113
113
  ("public_visibility", "public_visibility_pause"),
114
114
  )
115
115
 
116
- FINAL_STATES = {"done", "paused", "blocked", "superseded", "error"}
116
+ FINAL_STATES = {"done", "paused", "blocked", "superseded", "error", "cancelled"}
117
117
  # `result.completion_kind` names the terminal shape of the EVALUATION only —
118
118
  # one axis, enumerated. The pause cause lives in `reason_codes` (already
119
119
  # pinned), the run state in `result.final_state`, and human decisions in
@@ -135,7 +135,7 @@ OACP_ALWAYS_ALLOWED = {"send", "inbox", "validate", "doctor", "watch", "help", "
135
135
  # `result.final_state` values that mark the task lifecycle over. `paused`
136
136
  # is deliberately absent: a checkpoint-paused task keeps its envelope and
137
137
  # re-authorizes via the §E flow (recompile with --extend), never via clear.
138
- TERMINAL_AUDIT_STATES = {"done", "error"}
138
+ TERMINAL_AUDIT_STATES = {"done", "error", "cancelled"}
139
139
  # Receiver-workspace directories that are protocol bookkeeping, not task
140
140
  # scope: audit records, inbox claims, outbox copies. Deliberately NOT the
141
141
  # receiver's state/ (the active envelope is the policy object — direct
@@ -1094,7 +1094,7 @@ def _classify_envelope_clear(
1094
1094
  "oacp envelope clear before any audit record matches "
1095
1095
  f"message_id {context.message_id!r} and receiver "
1096
1096
  f"{context.receiver!r}; the completion clear is sanctioned once "
1097
- "the record's result.final_state is terminal (done/error)"
1097
+ "the record's result.final_state is terminal (done/error/cancelled)"
1098
1098
  )
1099
1099
  record = max(matches, key=lambda item: item[0])[1]
1100
1100
  result = record.get("result")
@@ -1104,7 +1104,7 @@ def _classify_envelope_clear(
1104
1104
  return _deny(
1105
1105
  f"oacp envelope clear while the audit record for "
1106
1106
  f"{context.message_id} shows result.final_state {state!r}; the "
1107
- "envelope stays active until the task completes (done/error) — a "
1107
+ "envelope stays active until the task completes (done/error/cancelled) — a "
1108
1108
  "paused task re-authorizes via the §E checkpoint, and completion "
1109
1109
  "requires the audit record update first"
1110
1110
  )