oacp-cli 0.5.3__tar.gz → 0.5.4__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 (495) hide show
  1. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/.gitattributes +3 -0
  2. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/CHANGELOG.md +30 -0
  3. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/PKG-INFO +1 -1
  4. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/setup.md +49 -14
  5. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/unified_skill_spec.md +14 -6
  6. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/autonomy.md +126 -9
  7. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/message_signing.md +37 -0
  8. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/oacp/cli.py +6 -0
  9. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/pyproject.toml +2 -1
  10. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/claude_envelope_hook.py +1835 -58
  11. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/envelope_compiler.py +101 -0
  12. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/finalize_autonomy_record.py +105 -3
  13. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/message_verify.py +21 -2
  14. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/oacp_doctor.py +98 -1
  15. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/policy_signing.py +99 -21
  16. oacp_cli-0.5.4/scripts/trust_cli.py +748 -0
  17. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_claude_envelope_hook.py +387 -3
  18. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_envelope_compiler.py +126 -0
  19. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_finalize_autonomy_record.py +154 -0
  20. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_message_verify.py +25 -0
  21. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_cli.py +15 -0
  22. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_doctor.py +115 -0
  23. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_policy_signing.py +28 -0
  24. oacp_cli-0.5.4/tests/test_trust_pin_script.py +478 -0
  25. oacp_cli-0.5.3/scripts/trust_cli.py +0 -372
  26. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/.github/workflows/auto-estimate.yml +0 -0
  27. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/.github/workflows/ci.yml +0 -0
  28. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/.github/workflows/release.yml +0 -0
  29. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/.gitignore +0 -0
  30. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/CONTRIBUTING.md +0 -0
  31. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/LICENSE +0 -0
  32. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/Makefile +0 -0
  33. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/QUICKSTART.md +0 -0
  34. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/README.md +0 -0
  35. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/SECURITY.md +0 -0
  36. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/SPEC.md +0 -0
  37. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/from-claude-p.md +0 -0
  38. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/adoption.md +0 -0
  39. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/batch-verification.md +0 -0
  40. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/command-migration.md +0 -0
  41. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/doctor.md +0 -0
  42. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/memory-cli-migration.md +0 -0
  43. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/memory-context.md +0 -0
  44. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/prompt_caching.md +0 -0
  45. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/versioning.md +0 -0
  46. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/guides/workspace-initialization.md +0 -0
  47. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/img/oacp-cli-demo.png +0 -0
  48. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/img/oacp-filesystem-tree.png +0 -0
  49. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/img/oacp-fleet-thread.png +0 -0
  50. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/agent_profiles.md +0 -0
  51. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/agent_safety_defaults.md +0 -0
  52. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/credential_scoping.md +0 -0
  53. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/dispatch_states.yaml +0 -0
  54. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/inbox_outbox.md +0 -0
  55. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/mcp_integration.md +0 -0
  56. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  57. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/org_memory.md +0 -0
  58. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/packet_states.yaml +0 -0
  59. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/review_loop.md +0 -0
  60. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/runtime_capabilities.md +0 -0
  61. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/session_init.md +0 -0
  62. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/skills_manifest.yaml +0 -0
  63. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/docs/protocol/task_negotiation.md +0 -0
  64. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/README.md +0 -0
  65. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/decisions.md +0 -0
  66. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
  67. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
  68. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
  69. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
  70. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
  71. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
  72. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/recent.md +0 -0
  73. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/org-memory/rules.md +0 -0
  74. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
  75. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
  76. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
  77. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
  78. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
  79. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/examples/quickstart/README.md +0 -0
  80. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/oacp/__init__.py +0 -0
  81. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/oacp/envelope_hook.py +0 -0
  82. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/_oacp_constants.py +0 -0
  83. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/_oacp_env.py +0 -0
  84. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/_oacp_yaml.py +0 -0
  85. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/add_agent.py +0 -0
  86. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/agent_profile.py +0 -0
  87. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/autonomy_gate.py +0 -0
  88. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/codex_session_init.py +0 -0
  89. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/gen_readme_commands.py +0 -0
  90. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/init_project_workspace.py +0 -0
  91. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/key_cli.py +0 -0
  92. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/message_signing.py +0 -0
  93. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/oacp_inbox.py +0 -0
  94. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/oacp_watch.py +0 -0
  95. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/preflight.py +0 -0
  96. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/record_autonomy_outcome.py +0 -0
  97. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/send_inbox_message.py +0 -0
  98. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/setup_runtime.py +0 -0
  99. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/trust_root.py +0 -0
  100. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/update_workspace.sh +0 -0
  101. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/validate_agent_card.py +0 -0
  102. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/scripts/validate_message.py +0 -0
  103. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/agent_card.template.yaml +0 -0
  104. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/agent_profile.template.yaml +0 -0
  105. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/agent_status.template.yaml +0 -0
  106. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/checkpoint.template.md +0 -0
  107. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/claude/agents/role_agent.template.md +0 -0
  108. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/claude/rules/guardrail.template.md +0 -0
  109. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/findings_packet.template.yaml +0 -0
  110. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/guardrails/coding_standards.template.md +0 -0
  111. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/guardrails/safe_commands.template.md +0 -0
  112. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/guardrails/secrets_rules.template.md +0 -0
  113. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/inbox_message.template.yaml +0 -0
  114. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/manual_validation.template.md +0 -0
  115. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/receiver_config.template.yaml +0 -0
  116. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/roles/role_baseline.template.md +0 -0
  117. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/roles/role_definition.template.yaml +0 -0
  118. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/runtime_capabilities.yaml +0 -0
  119. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/skills_manifest.template.yaml +0 -0
  120. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/templates/test_packet.template.md +0 -0
  121. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/README.md +0 -0
  122. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
  123. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
  124. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
  125. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
  126. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
  127. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_boundary_action.yaml +0 -0
  128. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_conflict.yaml +0 -0
  129. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_cross_channel.yaml +0 -0
  130. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_reuse.yaml +0 -0
  131. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_same_channel.yaml +0 -0
  132. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/reauth_scopeless_boundary.yaml +0 -0
  133. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
  134. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_generic_grant_addressed_types.yaml +0 -0
  135. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_generic_grant_approved.yaml +0 -0
  136. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_generic_grant_denied_later.yaml +0 -0
  137. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_generic_grant_denied_postmessage.yaml +0 -0
  138. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
  139. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/audits/prior_thread_invocation.yaml +0 -0
  140. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
  141. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
  142. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
  143. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
  144. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
  145. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  146. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  147. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  148. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
  149. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +0 -0
  150. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
  151. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
  152. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_boundary_action_resumes.yaml +0 -0
  153. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_conflict_declines.yaml +0 -0
  154. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_cross_channel_resumes.yaml +0 -0
  155. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_reuse_stays_paused.yaml +0 -0
  156. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_same_channel_resumes.yaml +0 -0
  157. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/checkpoint_reauth_scopeless_boundary_resumes.yaml +0 -0
  158. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
  159. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
  160. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
  161. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
  162. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
  163. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
  164. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_credential_rotation_hard_stops.yaml +0 -0
  165. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_dependency_install_hard_stops.yaml +0 -0
  166. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_sensitive_auth_hard_stops.yaml +0 -0
  167. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_sensitive_config_hard_stops.yaml +0 -0
  168. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_sensitive_credentials_hard_stops.yaml +0 -0
  169. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/contradictory_sensitive_secret_hard_stops.yaml +0 -0
  170. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declaration_error_admission_pauses.yaml +0 -0
  171. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
  172. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
  173. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_credential_rotation_granular_pauses.yaml +0 -0
  174. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_dependency_install_granular_pauses.yaml +0 -0
  175. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
  176. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_external_default_branch_push_hard_stops.yaml +0 -0
  177. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_merge_default_branch_push_hard_stops.yaml +0 -0
  178. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/declared_reply_task_auto_accepts.yaml +0 -0
  179. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/default_envelope_credential_rotation_hard_stops.yaml +0 -0
  180. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/default_envelope_dependency_install_hard_stops.yaml +0 -0
  181. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
  182. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
  183. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  184. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  185. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  186. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
  187. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  188. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
  189. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  190. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
  191. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
  192. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
  193. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
  194. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
  195. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
  196. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  197. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
  198. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
  199. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
  200. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
  201. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  202. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
  203. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
  204. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  205. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
  206. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
  207. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/pause_classification_declared_capability.yaml +0 -0
  208. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/pause_classification_designed.yaml +0 -0
  209. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/pause_classification_mixed.yaml +0 -0
  210. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/pause_classification_undeclared.yaml +0 -0
  211. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/pause_classification_unplanned.yaml +0 -0
  212. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
  213. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
  214. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
  215. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/profileless_credential_rotation_pauses.yaml +0 -0
  216. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/profileless_dependency_install_pauses.yaml +0 -0
  217. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
  218. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
  219. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/sensitive_content_reply_only_advisory.yaml +0 -0
  220. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
  221. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_accepted_auto_continues.yaml +0 -0
  222. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_disabled_pauses.yaml +0 -0
  223. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_drift_pauses.yaml +0 -0
  224. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_expired_pauses.yaml +0 -0
  225. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_later_round_pauses.yaml +0 -0
  226. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_missing_approval_pauses.yaml +0 -0
  227. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_repeated_addressed_round_exceeded.yaml +0 -0
  228. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_revoke_before_processing_pauses.yaml +0 -0
  229. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/thread_grant_revoked_pauses.yaml +0 -0
  230. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
  231. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
  232. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
  233. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/undeclared_credential_rotation_hard_stops.yaml +0 -0
  234. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/undeclared_dependency_install_hard_stops.yaml +0 -0
  235. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  236. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/ledger_replay/corpus.yaml +0 -0
  237. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  238. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
  239. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
  240. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  241. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  242. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
  243. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
  244. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
  245. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_credential_rotation.yaml +0 -0
  246. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_dependency_install.yaml +0 -0
  247. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_sensitive_auth.yaml +0 -0
  248. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_sensitive_config.yaml +0 -0
  249. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_sensitive_credentials.yaml +0 -0
  250. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/contradictory_sensitive_secret.yaml +0 -0
  251. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declaration_error_admission.yaml +0 -0
  252. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_credential_rotation.yaml +0 -0
  253. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_dependency_install.yaml +0 -0
  254. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
  255. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_external_default_branch_push.yaml +0 -0
  256. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_merge_default_branch_push.yaml +0 -0
  257. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/declared_reply_task.yaml +0 -0
  258. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/default_envelope_credential_rotation.yaml +0 -0
  259. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/default_envelope_dependency_install.yaml +0 -0
  260. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
  261. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
  262. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  263. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
  264. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  265. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
  266. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  267. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
  268. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  269. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
  270. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
  271. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
  272. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
  273. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
  274. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  275. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/negated_guardrails.yaml +0 -0
  276. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
  277. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/pause_classification_declared_capability.yaml +0 -0
  278. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/pause_classification_designed.yaml +0 -0
  279. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/pause_classification_mixed.yaml +0 -0
  280. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/pause_classification_undeclared.yaml +0 -0
  281. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/pause_classification_unplanned.yaml +0 -0
  282. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
  283. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
  284. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
  285. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/profileless_credential_rotation.yaml +0 -0
  286. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/profileless_dependency_install.yaml +0 -0
  287. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
  288. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
  289. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
  290. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
  291. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_content_reply_only.yaml +0 -0
  292. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
  293. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
  294. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
  295. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
  296. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
  297. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
  298. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
  299. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/thread_grant_addressed_round3.yaml +0 -0
  300. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/thread_grant_effect_expansion.yaml +0 -0
  301. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/thread_grant_request.yaml +0 -0
  302. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/thread_grant_round4.yaml +0 -0
  303. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/thread_grant_unapproved.yaml +0 -0
  304. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  305. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/undeclared_credential_rotation.yaml +0 -0
  306. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/undeclared_dependency_install.yaml +0 -0
  307. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  308. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/README.md +0 -0
  309. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/admission_outcome_replaced_by_clear.yaml +0 -0
  310. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/breach_basis_source_mismatch.yaml +0 -0
  311. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/breached_empty_fields.yaml +0 -0
  312. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/cancelled_missing_actor.yaml +0 -0
  313. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/clean_terminal_cancelled.yaml +0 -0
  314. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/clean_terminal_done.yaml +0 -0
  315. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/declined_checkpoint_marked_done.yaml +0 -0
  316. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/duplicate_live_a.yaml +0 -0
  317. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/duplicate_live_b.yaml +0 -0
  318. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/duplicate_yaml_key_logged_notes.yaml +0 -0
  319. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/expected_findings.yaml +0 -0
  320. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/final_state_superseded_valid.yaml +0 -0
  321. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/inconsistent_work_clock.yaml +0 -0
  322. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/invalid_live_clock_adjustment.yaml +0 -0
  323. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/invalid_pause_intervals.yaml +0 -0
  324. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/legacy_born_done_unfinalized.yaml +0 -0
  325. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/noncanonical_axis_names.yaml +0 -0
  326. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/off_enum_final_state_completed.yaml +0 -0
  327. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/off_enum_kind_completed_after_human_approval.yaml +0 -0
  328. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/off_enum_kind_executed.yaml +0 -0
  329. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/off_enum_kind_human_approved_completed.yaml +0 -0
  330. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/off_enum_kind_review_round_delivered.yaml +0 -0
  331. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/pause_and_clock_adjustment.yaml +0 -0
  332. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/paused_terminal_action_unreconciled.yaml +0 -0
  333. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/paused_terminal_completed_stamp.yaml +0 -0
  334. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/serialized_wave_item.yaml +0 -0
  335. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/superseded_legacy_kind_repaired.yaml +0 -0
  336. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/superseded_legacy_successor_live.yaml +0 -0
  337. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/superseded_missing_successor.yaml +0 -0
  338. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/superseded_successor_live.yaml +0 -0
  339. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/superseded_unrelated_successor.yaml +0 -0
  340. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/terminal_time_clear_precedes_pause.yaml +0 -0
  341. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/terminal_time_pause_after_completion.yaml +0 -0
  342. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/terminal_time_pause_cleared.yaml +0 -0
  343. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/two_cleared_pauses.yaml +0 -0
  344. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/two_clock_adjustments.yaml +0 -0
  345. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/two_pauses_first_answer_human_outcome.yaml +0 -0
  346. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/records/unrelated_identity_holder_live.yaml +0 -0
  347. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/autonomy/thread_grants/corpus.yaml +0 -0
  348. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/README.md +0 -0
  349. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
  350. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/configs/malformed.yaml +0 -0
  351. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/adapter_detection_failed.yaml +0 -0
  352. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/adapter_expected_missing.yaml +0 -0
  353. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
  354. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
  355. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +0 -0
  356. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
  357. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
  358. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
  359. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
  360. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/expected/unsupported_runtime_codex.yaml +0 -0
  361. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
  362. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
  363. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
  364. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
  365. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
  366. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
  367. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/README.md +0 -0
  368. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/body_schema.yaml +0 -0
  369. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/configs/enforce.yaml +0 -0
  370. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/configs/off.yaml +0 -0
  371. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/configs/warn.yaml +0 -0
  372. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff__enforce.yaml +0 -0
  373. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff__off.yaml +0 -0
  374. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff__warn.yaml +0 -0
  375. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff_complete__enforce.yaml +0 -0
  376. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff_complete__off.yaml +0 -0
  377. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/body_schema/handoff_complete__warn.yaml +0 -0
  378. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/signed_basic__enforce.yaml +0 -0
  379. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/signed_revoked__enforce.yaml +0 -0
  380. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/signed_revoked__off.yaml +0 -0
  381. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/signed_revoked__warn.yaml +0 -0
  382. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +0 -0
  383. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_body_flip__off.yaml +0 -0
  384. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +0 -0
  385. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +0 -0
  386. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +0 -0
  387. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +0 -0
  388. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +0 -0
  389. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/unsigned_notification__off.yaml +0 -0
  390. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/intake/expected/unsigned_notification__warn.yaml +0 -0
  391. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/memory_layout/README.md +0 -0
  392. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/memory_layout/canonical_memory_gitignore.txt +0 -0
  393. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/memory_layout/layout.yaml +0 -0
  394. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/README.md +0 -0
  395. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
  396. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
  397. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
  398. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
  399. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
  400. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
  401. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
  402. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
  403. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
  404. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
  405. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
  406. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
  407. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
  408. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
  409. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
  410. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
  411. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
  412. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
  413. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
  414. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
  415. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
  416. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
  417. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/keys/alice.json +0 -0
  418. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/keys/bob.json +0 -0
  419. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/keys/carol.json +0 -0
  420. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
  421. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
  422. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
  423. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
  424. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
  425. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
  426. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
  427. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
  428. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
  429. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
  430. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
  431. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
  432. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
  433. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
  434. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
  435. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
  436. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
  437. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
  438. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
  439. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
  440. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
  441. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
  442. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
  443. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
  444. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
  445. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
  446. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
  447. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
  448. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/conformance/signing/regen_fixtures.py +0 -0
  449. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_add_agent.py +0 -0
  450. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_agent_profile.py +0 -0
  451. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_audit_corpus_boundary.py +0 -0
  452. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_audit_directory_warning.py +0 -0
  453. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_audit_example.py +0 -0
  454. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_audit_record_conformance.py +0 -0
  455. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_autonomy_conformance_fixtures.py +0 -0
  456. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_autonomy_gate.py +0 -0
  457. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_autonomy_ledger_replay.py +0 -0
  458. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_codex_session_init.py +0 -0
  459. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_command_groups.py +0 -0
  460. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_default_envelope.py +0 -0
  461. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_envelope_conformance_fixtures.py +0 -0
  462. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_envelope_public_admission.py +0 -0
  463. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_expected_pauses.py +0 -0
  464. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_github_workflows.py +0 -0
  465. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_inbox_verify.py +0 -0
  466. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_init_plan.py +0 -0
  467. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_init_project_workspace.py +0 -0
  468. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_intake_conformance.py +0 -0
  469. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_memory_layout_fixture.py +0 -0
  470. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_memory_shim.py +0 -0
  471. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_message_signing.py +0 -0
  472. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_message_supersession.py +0 -0
  473. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_constants.py +0 -0
  474. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_env.py +0 -0
  475. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_inbox.py +0 -0
  476. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_watch.py +0 -0
  477. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_oacp_yaml.py +0 -0
  478. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_package_content.py +0 -0
  479. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_packaged_status_template.py +0 -0
  480. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_preflight.py +0 -0
  481. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_readme_commands.py +0 -0
  482. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_record_autonomy_outcome.py +0 -0
  483. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_review_loop.py +0 -0
  484. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_send_inbox_message.py +0 -0
  485. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_setup_runtime.py +0 -0
  486. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_signing_conformance.py +0 -0
  487. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_spec_version.py +0 -0
  488. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_trust_root.py +0 -0
  489. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_update_workspace.py +0 -0
  490. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_validate_agent_card.py +0 -0
  491. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_validate_message.py +0 -0
  492. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_verify_batch.py +0 -0
  493. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_version_convention.py +0 -0
  494. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tests/test_workspace_discovery.py +0 -0
  495. {oacp_cli-0.5.3 → oacp_cli-0.5.4}/tools/generate_audit_example.py +0 -0
@@ -9,3 +9,6 @@ tests/conformance/signing/messages/** -text
9
9
  tests/conformance/signing/messages/tamper_crlf_trailer.yaml whitespace=-trailing-space
10
10
  tests/conformance/signing/messages/tamper_trailing_space.yaml whitespace=-trailing-space
11
11
  tests/conformance/signing/messages/tamper_trailing_blank_line.yaml whitespace=-blank-at-eof
12
+
13
+ # Not part of source exports; the sdist excludes it in pyproject.toml.
14
+ tests/dev_only export-ignore
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.5.4] - 2026-10-27
11
+
12
+ Scripts run under an envelope by sha256 pin only, and the Claude envelope hook judges more shell shapes instead of asking on them or passing them unjudged.
13
+
14
+ ### Added
15
+
16
+ - Receiver config `envelope.trusted_scripts` pins the scripts the envelope hook may run ([config](docs/protocol/autonomy.md#receiver-config)).
17
+ - `oacp trust pin-script` records a script's pin and re-signs the receiver config ([signing](docs/protocol/message_signing.md#policy-file-signing)).
18
+ - `oacp doctor --project <name>` reports malformed, missing and stale script pins ([config](docs/protocol/autonomy.md#receiver-config)).
19
+ - The envelope hook logs asks and denies to `envelope_decisions.jsonl` ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
20
+
21
+ ### Changed
22
+
23
+ - The envelope hook runs a pinned script and asks on an unpinned one ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
24
+ - The envelope hook judges an App-token `gh` chain by its final command ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
25
+ - The envelope hook passes more read-only shell forms as reads ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
26
+ - The envelope hook stops denying a destructive word in a search pattern ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
27
+ - The envelope hook allows `--attach-audit` stamps on the task's record ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
28
+ - `oacp verify --attach-audit` refuses another message's record ([spec](docs/protocol/message_signing.md#receiver-audit-stamping---attach-audit)).
29
+ - The finalizer refuses an uncovered `--realized` grant-only effect ([contract](docs/protocol/autonomy.md#terminal-finalization-and-audit-integrity)).
30
+ - Audit sweeps report the legacy work-clock advisory as one line ([validation](docs/protocol/autonomy.md#terminal-finalization-and-audit-integrity)).
31
+
32
+ ### Fixed
33
+
34
+ - `oacp trust sign-policy` locks the policy and keeps it whole when a run fails ([signing](docs/protocol/message_signing.md#policy-file-signing)).
35
+ - The envelope hook judges commands nested in shell compound commands ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
36
+ - The envelope hook asks on a program name built by shell expansion ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
37
+ - The envelope hook judges `/usr/bin/env gh …` like `env gh …` ([adapter](docs/protocol/autonomy.md#delivery-static-shim-dynamic-envelope)).
38
+
10
39
  ## [0.5.3] - 2026-10-20
11
40
 
12
41
  Kernel commands regroup under `agent`, `trust`, and `autonomy`, and the retired memory, packet, and findings surfaces leave the kernel.
@@ -959,6 +988,7 @@ The central debrief store is the headline change: every agent's full end-of-sess
959
988
  - Checkout step in github-release workflow job (#19)
960
989
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
961
990
 
991
+ [0.5.4]: https://github.com/kiloloop/oacp/compare/v0.5.3...v0.5.4
962
992
  [0.5.3]: https://github.com/kiloloop/oacp/compare/v0.5.2...v0.5.3
963
993
  [0.5.2]: https://github.com/kiloloop/oacp/compare/v0.5.1...v0.5.2
964
994
  [0.5.1]: https://github.com/kiloloop/oacp/compare/v0.5.0...v0.5.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oacp-cli
3
- Version: 0.5.3
3
+ Version: 0.5.4
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
@@ -42,7 +42,8 @@ oacp init <project>
42
42
  ```
43
43
 
44
44
  By default, `oacp init` creates `claude`, `codex`, and `cursor` agents.
45
- Use `--agents` to include Gemini or custom agent names.
45
+ Use `--agents` to include Gemini or custom agent names, and `--dry-run` to
46
+ preview the plan without writing anything.
46
47
 
47
48
  Cursor support is scaffold-only until Cursor-owned rules land. Cursor sessions
48
49
  must set `OACP_RUNTIME=cursor` or pass `--from` explicitly when sending messages.
@@ -53,12 +54,23 @@ With artifact symlinks from a repo checkout:
53
54
  oacp init <project> --repo /path/to/repo
54
55
  ```
55
56
 
57
+ `workspace.json` is generated in the project workspace directory. Symlink it
58
+ into the repo root so the CLI and runtime hooks discover the workspace from
59
+ inside the repo without `OACP_HOME` set (`oacp init` prints this hint):
60
+
61
+ ```bash
62
+ ln -sf $OACP_HOME/projects/<project>/workspace.json /path/to/repo/.oacp
63
+ ```
64
+
56
65
  ## 3) Set up templates (source checkout only)
57
66
 
58
- If you installed from source, copy and customize the templates you need:
67
+ `oacp init` does not create role, guardrail or skills-manifest files, and the
68
+ package does not ship their templates. They are optional project conventions;
69
+ seed them from a source checkout:
59
70
 
60
71
  ```bash
61
72
  # From the oacp repo root:
73
+ mkdir -p $OACP_HOME/projects/<project>/roles $OACP_HOME/projects/<project>/guardrails
62
74
 
63
75
  # Roles
64
76
  cp templates/roles/role_baseline.template.md $OACP_HOME/projects/<project>/roles/baseline.md
@@ -73,15 +85,36 @@ cp templates/skills_manifest.template.yaml $OACP_HOME/projects/<project>/skills_
73
85
 
74
86
  Edit each file and fill in the `# CUSTOMIZE:` points.
75
87
 
76
- > **Packaged install?** Templates are bundled inside the package. You can find them by running `python3 -c "import oacp; print(oacp.__path__)"` and looking in the `_templates/` directory, or browse them on [GitHub](https://github.com/kiloloop/oacp/tree/main/templates).
88
+ > **Packaged install?** The wheel bundles only the templates the CLI itself
89
+ > uses (inbox message, agent card, agent profile, agent status, receiver config,
90
+ > runtime capabilities, and the Claude role agent) under the package's
91
+ > `_templates/` directory. Browse the rest on
92
+ > [GitHub](https://github.com/kiloloop/oacp/tree/main/templates).
93
+
94
+ ## 4) Runtime setup
95
+
96
+ `oacp setup <runtime>` generates the runtime's configuration files in the repo.
97
+ Run it from the repo the agent works in; the project is read from the `.oacp`
98
+ marker when `--project` is omitted:
77
99
 
78
- ## 4) Claude-specific setup (source checkout only)
100
+ ```bash
101
+ oacp setup claude --project <project>
102
+ ```
79
103
 
80
- For Claude Code projects, copy templates into the repo's `.claude/` directory:
104
+ For Claude Code this creates `.claude/agents/<project>.md` from the bundled
105
+ role agent template and `.claude/skills/`, and registers the
106
+ `oacp-envelope-hook` PreToolUse hook in `.claude/settings.json`. The agent file
107
+ and skills directory are created only when missing and `settings.json` is
108
+ merged, so re-running after an upgrade is safe. `codex`, `cursor`, and `gemini`
109
+ take the same shape; the [Quick Start](../../QUICKSTART.md#4-connect-your-runtime)
110
+ lists what each writes.
111
+
112
+ **Source checkout only:** the Claude guardrail rules file is not generated and
113
+ its template is not bundled. Copy it from the repo:
81
114
 
82
115
  ```bash
83
116
  # From the oacp repo root:
84
- cp templates/claude/agents/role_agent.template.md /path/to/repo/.claude/agents/<role>.md
117
+ mkdir -p /path/to/repo/.claude/rules
85
118
  cp templates/claude/rules/guardrail.template.md /path/to/repo/.claude/rules/guardrails.md
86
119
  ```
87
120
 
@@ -92,9 +125,11 @@ bundles a packet initializer or review, merge-decision and handoff templates.
92
125
  See the [migration notes](command-migration.md#packet-and-handoff-templates)
93
126
  and [review workflow documentation](../protocol/review_loop.md).
94
127
 
95
- ## 6) Update existing workspaces (source checkout only)
128
+ ## 6) Update existing workspaces
96
129
 
97
- After pulling new standards, sync your workspace structure:
130
+ `oacp init` refuses an existing workspace (exit 3). After upgrading, bring a
131
+ workspace up to the current directory layout with the idempotent sync script.
132
+ From a source checkout:
98
133
 
99
134
  ```bash
100
135
  make update PROJECT=<project>
@@ -102,12 +137,12 @@ make update PROJECT=<project>
102
137
  make update PROJECT=<project> ARGS="--dry-run"
103
138
  ```
104
139
 
105
- **Note:** `workspace.json` is generated in the project workspace directory. Runtimes should symlink it into the repo root:
106
-
107
- ```bash
108
- ln -sf $OACP_HOME/projects/<project>/workspace.json /path/to/repo/.oacp
109
- ```
140
+ Packaged installs ship the same script as `_scripts/update_workspace.sh` inside
141
+ the installed `oacp` package; run it with `bash <path> <project> [--dry-run]`.
142
+ There is no `oacp` subcommand for it.
110
143
 
111
144
  ## 7) Wire project-local helpers (optional)
112
145
 
113
- Project-local wrappers can call these scripts using the `OACP_HOME` environment variable (defaults to `$HOME/oacp`).
146
+ Project-local wrappers should resolve the workspace the way the CLI does: an
147
+ explicit `--oacp-dir`, else `OACP_HOME`, else the repo's `.oacp` marker, else
148
+ `$HOME/oacp`.
@@ -89,7 +89,7 @@ One-line summary.
89
89
 
90
90
  ## Learned from Runs
91
91
 
92
- - Dated entries capturing bugs and fixes discovered during use
92
+ See [references/learned-from-runs.md](references/learned-from-runs.md).
93
93
  ```
94
94
 
95
95
  ## Conventions
@@ -150,12 +150,20 @@ Safety rules (user confirmation, scope gates, delete-only-after-processing) appl
150
150
 
151
151
  ### 6. Learned from Runs section
152
152
 
153
- Both runtimes should append to the same `## Learned from Runs` section with dated, tagged entries:
153
+ The SKILL.md body loads on every trigger, so dated run notes do not live in it. Both runtimes record what a run taught in the same way:
154
154
 
155
- ```markdown
156
- - **Feb 14 (claude)**: Haiku subagent can't sleep in sandbox. Use background Bash.
157
- - **Feb 14 (codex)**: gh auth requires escalated sandbox permissions.
158
- ```
155
+ 1. The entry goes to `references/learned-from-runs.md` beside the skill, dated and tagged with the runtime that hit it:
156
+
157
+ ```markdown
158
+ - **Feb 14 (claude)**: subagents can't sleep in the sandbox; wait with a background Bash poll instead.
159
+ - **Feb 14 (codex)**: gh auth requires escalated sandbox permissions.
160
+ ```
161
+
162
+ 2. `## Learned from Runs` in SKILL.md keeps a one-line link to that file and nothing else.
163
+
164
+ 3. The lasting rule behind the entry is folded into `## Instructions` (or the relevant `## Runtime Adapters` subsection) as a present-tense statement — "Wait with a background Bash poll; subagents cannot sleep in the sandbox" — so the skill carries the rule without the history. The reference file keeps the dated provenance.
165
+
166
+ An entry that does not yield a durable rule stays in the reference file only.
159
167
 
160
168
  ## Migration Path
161
169
 
@@ -39,8 +39,36 @@ autonomy:
39
39
  - example-org/private-repo
40
40
  continuation_grants:
41
41
  enabled: false
42
+ envelope:
43
+ trusted_scripts:
44
+ - path: ~/skills/example/scripts/finish_task.sh
45
+ sha256: <sha256 of the file's bytes>
46
+ env: [OACP_DONE_TYPE]
42
47
  ```
43
48
 
49
+ `envelope.trusted_scripts` (optional) pins scripts the receiver's runtime
50
+ adapter may run as `bash <script>` under an active envelope without
51
+ escalating. Each entry names a script by absolute or `~/`-rooted `path`, the
52
+ `sha256` of its bytes, and optionally `env`, the assignment names a caller
53
+ may prefix (`OACP_DONE_TYPE=… bash <script>`); names that retarget a script
54
+ are refused: the script shells' startup files and function or module paths
55
+ (`ENV`, `BASH_ENV`, `ZDOTDIR`, `FPATH`, `MODULE_PATH`, …), loader and
56
+ interpreter paths (`LD_*`, `DYLD_*`, `PYTHON*`, …), the programs a tool execs
57
+ (`PAGER`, `EDITOR`, `*_ASKPASS`, …) and the homes, identities and
58
+ configuration a tool reads (`PATH`, `HOME`, `TMPDIR`, `XDG_*`, `GH_*`,
59
+ `GIT_*`, `OACP_HOME`, …; the compiler's `RETARGETING_ENV_NAMES` and
60
+ `RETARGETING_ENV_PREFIXES` are the list). A pin is the human's review of
61
+ those exact bytes: the compiler carries the list into the envelope, the
62
+ adapter allows the call only while the file still hashes to its pin, and a
63
+ malformed entry fails compilation (`envelope_compile_error`). A literal
64
+ script that carries no pin asks as not registered: the adapter never reads
65
+ an unpinned script's text, so the pin is the one review a script version
66
+ gets, and `oacp trust pin-script <path> --project <p> --agent <r>` records
67
+ it (appending or refreshing the entry) and re-signs the config. The
68
+ admission gate ignores the block; `oacp doctor --project <p>` reports a
69
+ malformed entry, a pinned file that is missing, and a pin whose digest no
70
+ longer matches the file.
71
+
44
72
  When config is absent, receivers behave as `always_pause`. A present config
45
73
  that omits the `autonomy` block entirely, such as a signing-only config,
46
74
  resolves the same way: `always_pause`, not `config_malformed`. An explicit but
@@ -934,6 +962,15 @@ oacp autonomy finalize <audit.yaml> --final-state done \
934
962
  --reply-message-id <msg-id>
935
963
  ```
936
964
 
965
+ `--realized` names only effects the record's admission covers. A grant-only
966
+ effect — `sends_oacp_reply`, `submits_github_review`,
967
+ `writes_findings_packet` — is refused at call time (exit 2, nothing
968
+ written) unless the scope envelope declares it, an accepted continuation
969
+ grant or a recorded re-authorization scope names it, or an answered
970
+ checkpoint already recorded it realized; the completion reply is recorded
971
+ through `--reply-message-id`. A `--checkpoint` still presents such an
972
+ effect for re-authorization.
973
+
937
974
  Hand-edited terminal blocks are what produced off-enum vocabulary,
938
975
  duplicate live evaluations, and terminal records still carrying a paused
939
976
  checkpoint action; the finalizer enforces the pinned enums and
@@ -1154,7 +1191,11 @@ reports pinned finding codes (`off_enum_completion_kind`,
1154
1191
  `noncanonical_checkpoint_axis`, `terminal_missing_actuals`,
1155
1192
  `terminal_missing_work_started_at`, `legacy_born_done_unfinalized`), and
1156
1193
  `oacp doctor` sweeps every receiver's audit directory with the same
1157
- checks. Duplicate YAML keys are refused
1194
+ checks. A directory sweep (`--sweep`, and doctor) reports the repeated
1195
+ legacy `terminal_missing_work_started_at` advisories as one aggregated
1196
+ line per code — the records stay byte-preserved and `--json` keeps the
1197
+ per-record detail — so advisories of every other code surface
1198
+ individually. Duplicate YAML keys are refused
1158
1199
  outright — plain YAML loading silently keeps the later value. The
1159
1200
  fixture set lives in `tests/conformance/autonomy/records/`.
1160
1201
 
@@ -1756,7 +1797,8 @@ The envelope is written to
1756
1797
  "touches_auth_config_or_secrets": false,
1757
1798
  "touches_dependencies": false,
1758
1799
  "public_visibility": false,
1759
- "private_repo_allowlist": ["example-org/private-repo"]
1800
+ "private_repo_allowlist": ["example-org/private-repo"],
1801
+ "trusted_scripts": []
1760
1802
  },
1761
1803
  "counters": {"files_touched": []},
1762
1804
  "enforcement": "hooks",
@@ -1780,8 +1822,9 @@ Compilation rules:
1780
1822
  reason code `envelope_compile_error` instead of executing unenforced.
1781
1823
  - The compiler reuses the gate evaluator's normalization and pattern
1782
1824
  constants directly, so admission spec and runtime enforcement cannot drift.
1783
- - The receiver-side `private_repo_allowlist` is embedded at compile time;
1784
- runtime enforcement never trusts sender declarations alone.
1825
+ - The receiver-side `private_repo_allowlist` and `envelope.trusted_scripts`
1826
+ pins are embedded at compile time; runtime enforcement never trusts sender
1827
+ declarations alone.
1785
1828
  - Granular side-effect fields absent from a legacy profile compile to
1786
1829
  `false`. `counters` are runtime state and always start empty.
1787
1830
  - **Adapter detection.** `enforcement` is earned, not assumed. The
@@ -1854,7 +1897,15 @@ abbreviations and help flags, while unknown options continue to fail closed.
1854
1897
  Runtime decisions:
1855
1898
 
1856
1899
  - **deny** — the call breaches a declared-false capability (destructive
1857
- tokens, undeclared commits/pushes/PR mutations, undeclared merges or
1900
+ tokens — except one inside a literal quoted pattern operand of `grep`,
1901
+ `rg`, `awk` or `sed -n` (single quotes, or double quotes carrying no live
1902
+ expansion), directly or under `xargs` / `find -exec`, judged at that
1903
+ operand's own position: data the program matches against its input. The
1904
+ token in command position, in an unquoted word, in a heredoc body, inside
1905
+ a `$(…)` within the quotes, in an awk program with a redirect, pipe,
1906
+ `system`, `getline` or `@` directive, in a sed script outside the
1907
+ print-only grammar, or in any other program's operand still denies —
1908
+ undeclared commits/pushes/PR mutations, undeclared merges or
1858
1909
  issue filing, secret-class or dependency-manifest writes — including
1859
1910
  determinable Bash write targets such as redirects and common writer
1860
1911
  programs), targets a repo outside the embedded allowlist or pinned
@@ -1888,7 +1939,65 @@ Runtime decisions:
1888
1939
  review; unenforceable never silently degrades to allowed. The read-only
1889
1940
  `gh` verbs (`view`, `list`, `status`, `checks`, `diff`, `download`), `gh api`
1890
1941
  GET requests, and the `gh search` group (a read in every subcommand) pass
1891
- without escalation.
1942
+ without escalation. So do `xargs` and `find -exec`/`-execdir` runs whose
1943
+ nested program is a plain read-only utility (`cat`, `grep`, `hash`, `head`,
1944
+ `jq`, `ls`, `pwd`, `rg` without `--pre`, `stat`, `tail`, `test`, `type`,
1945
+ `wc`, `which`), the lookups `command -v NAME` / `command -V NAME` (they run
1946
+ nothing; any other wrapper flag still asks), and the write-free
1947
+ `oacp autonomy finalize` forms (`--validate`, `--dry-run`); every other
1948
+ `oacp autonomy` invocation edits the task's own audit record and is
1949
+ escalated. Inline Python code (`python3 -c`) is admitted through a
1950
+ positive read-only grammar judged on its syntax tree: every free name a
1951
+ listed builtin or a name the code binds, every import a listed module and
1952
+ member, every attribute of a module alias in that module's member set,
1953
+ every other attribute in the read-only attribute set, every open-like
1954
+ call carrying a literal read mode — behind read-only interpreter options,
1955
+ in a static segment (no `$` or backtick outside single quotes anywhere in
1956
+ it) that redirects to no file. Otherwise the ask names the first construct
1957
+ outside the grammar (a module, an attribute, a mode, an option, a shell
1958
+ expansion inside the code, a redirect, …). `node -e`, `perl -e` and
1959
+ `ruby -e` bodies have no read-only grammar and keep the ask.
1960
+ `oacp verify <message> --attach-audit <record>` passes exactly when the
1961
+ record is the active envelope's own admission record — a `.yaml` directly
1962
+ inside the canonical `audit/autonomy_decisions/` directory whose
1963
+ `message_id`, `receiver` and `message_sha256` match the envelope — and the
1964
+ message file named on the command hashes to that `message_sha256`, in a
1965
+ standalone command with no `OACP_HOME=` override and with selectors that
1966
+ match the envelope; it is the canonical writer of the receiver's own
1967
+ verification stamp (the `--attach-audit` grammar of `message_signing.md`,
1968
+ which refuses other message bytes on its own). Any other record, other
1969
+ message bytes, `--quarantine` or an abbreviation keeps the ask.
1970
+ A literal `bash <script>` (or `sh`, `zsh`, `dash`, `ksh`) is trusted by
1971
+ pin when the shell is named bare or by a path in a system bin directory
1972
+ (`/bin`, `/usr/bin`, `/usr/local/bin`, Homebrew's or MacPorts' `bin`)
1973
+ that resolves inside the system trees: a path pinned in the receiver's
1974
+ `envelope.trusted_scripts` passes with any arguments while the file
1975
+ hashes to its pin, under an env prefix limited to the pin's `env` names;
1976
+ any other literal script asks as not registered under `trusted_scripts`,
1977
+ wherever it lives and whatever it does — the adapter never reads an
1978
+ unpinned script's text, so the pin (the human's review of the bytes,
1979
+ recorded in the signed receiver config) is the one review a script
1980
+ version gets, once, at registration. A shell flag, a `-c` body, a
1981
+ variable path, an executable elsewhere that merely shares a shell's
1982
+ name, or a changed pinned file keeps the ask. A
1983
+ parenthesised subshell group (`( gh pr merge 7 )`), inline or in a script,
1984
+ is judged by the words inside it, and so is the command after shell
1985
+ syntax at a segment's head — a keyword (`if true; then gh pr merge 7;
1986
+ fi`, `! gh …`, `{ gh …; }`), a function header (`f() { gh …; }`), a
1987
+ `case WORD in pattern)` opener, a `coproc` — with the syntax and the
1988
+ wrappers dropped in turns until the head is a program (`time ! git
1989
+ commit` drops `time`, then `!`); a program name the shell
1990
+ would produce by brace expansion, a glob, a variable or a command
1991
+ substitution (`{gh,pr,merge,7}`, `$(echo gh) pr …`) asks, while `[`,
1992
+ `[[` and an arithmetic command head a segment without naming a program;
1993
+ a wrapper spelled by its system path (`/usr/bin/env gh …`) is dropped
1994
+ like the bare wrapper, and a wrapper-named executable elsewhere asks.
1995
+ The App-identity token-minting
1996
+ compound — `T=$(<path>/<token-helper> <app>) && GH_TOKEN="$T" gh …`,
1997
+ every earlier segment such a mint and every join `&&` — is judged as the
1998
+ standalone `gh` command it ends in, under the allow classes and repository
1999
+ gate above; a `;`, a `cd`, any other assignment or helper keeps the
2000
+ compound ask.
1892
2001
  - **allow** — emitted as *no output*: the envelope can only narrow the
1893
2002
  harness's own permission surface, never widen or bypass it.
1894
2003
  - Every emitted **ask** or **deny** reason starts with the stable
@@ -1896,6 +2005,13 @@ Runtime decisions:
1896
2005
  the reason also includes `[task <message-id>]`; operators can therefore
1897
2006
  distinguish an envelope decision from the harness's native permission
1898
2007
  prompt and identify the task that caused it.
2008
+ - Every emitted **ask** or **deny** under an active envelope is also
2009
+ appended as one JSON line to
2010
+ `agents/<receiver>/audit/envelope_decisions.jsonl` — `ts`, `message_id`,
2011
+ `session_id`, `tool`, `decision`, `reason` — so a receiver can count the
2012
+ escalations a task cost. The ledger is best-effort instrumentation beside
2013
+ the audit records (never a record itself: sweeps read only `*.yaml`), and
2014
+ a write failure never changes the decision.
1899
2015
  - Compound Bash classification is quote-aware: separators inside quoted
1900
2016
  arguments remain argument data, backslash-newline continuations stay in the
1901
2017
  same segment, and top-level or command-substitution segments are still
@@ -1955,9 +2071,10 @@ Runtime decisions:
1955
2071
  and mutator operands or Bash write targets bearing shell expansion syntax
1956
2072
  escalate to **ask** — the shell expands patterns after classification, so
1957
2073
  a literal spelling proves nothing about the effective target. The
1958
- canonical audit writers (`oacp autonomy finalize`,
1959
- `oacp autonomy outcome`, `oacp verify --attach-audit`) reach the record
1960
- as classified commands that escalate for review, never as file writes.
2074
+ canonical audit writers reach the record as classified commands, never as
2075
+ file writes: `oacp autonomy finalize` and `oacp autonomy outcome` escalate
2076
+ for review, and `oacp verify --attach-audit` passes only against the
2077
+ envelope's own admission record (above).
1961
2078
  The boundary is deliberately scoped to the session the envelope binds: it
1962
2079
  is the *self*-authorization path that must close, and a concurrent
1963
2080
  session is already outside that envelope's reach.
@@ -214,6 +214,13 @@ inference), so pass the record's canonical runtime path — audit records
214
214
  live under `$OACP_HOME`, not the source checkout. The record must already
215
215
  exist: write the autonomy decision record first, then stamp it.
216
216
 
217
+ The stamp binds to the record's accepted snapshot: when the record carries
218
+ a `message_sha256`, the message file being verified must hash to it, or
219
+ the attach is refused (`attach-audit failed: message bytes do not match the
220
+ audit record's accepted snapshot`, exit 2) and the record is left as it
221
+ was. Verify the bytes the gate admitted, never a re-read of a file that may
222
+ have changed since.
223
+
217
224
  This is the one supported stamping path. It writes the block under the
218
225
  shared audit lock, atomically, and refuses to overwrite a recorded block —
219
226
  hand-writing a `message_auth` block (or free-text prose about the
@@ -282,6 +289,25 @@ can never authenticate a message.
282
289
  verifies them. Unlike messages (append-once, immutable), policy files
283
290
  are long-lived and edited: signing strips any existing trailer and signs
284
291
  the current content — run it again after every policy edit.
292
+ - **Pin a script** the runtime adapter may run under an envelope:
293
+
294
+ ```bash
295
+ oacp trust pin-script <path> --project <name> --agent <receiver> [--env NAME] [--all-projects]
296
+ ```
297
+
298
+ records the script under the receiver's `envelope.trusted_scripts` — the
299
+ path as spelled (absolute or `~/`-rooted), the sha256 of the file's bytes
300
+ and the `--env` names a caller may prefix — appending the entry or
301
+ refreshing the one that names the same file, validates the block with the
302
+ envelope compiler's loader, writes `config.yaml` with every other key
303
+ unchanged, and re-signs it as `sign-policy` would (enrolling the config
304
+ target). A signed or enrolled config is never written while the
305
+ receiver's key is unavailable; an unsigned bootstrap config is written
306
+ unsigned. The pin is the human's review of those bytes: run it once per
307
+ script version, and again after every edit to a pinned file, or the
308
+ adapter asks `does not match its pinned sha256` until it is refreshed.
309
+ `oacp doctor --project <name>` reports a malformed block, a missing file
310
+ or a stale digest.
285
311
  - **Enrollment (downgrade resistance)**: the first successful
286
312
  `sign-policy` run enrolls each target in the machine-local registry
287
313
  `$OACP_HOME/keys/policy_enrollment.json` (part of the keystore trust
@@ -298,6 +324,17 @@ can never authenticate a message.
298
324
  written — a writer never strips an enrolled file's signature as a side
299
325
  effect, and a fleet-wide revoke either fully lands signed or leaves
300
326
  zero pins changed.
327
+ - **Writers lock, then commit only what verifies**: `sign-policy` and
328
+ `pin-script` hold a policy file's sibling lock (`<name>.lock`) from
329
+ their read to their atomic replace, so overlapping runs serialize
330
+ instead of the later one discarding the earlier, and a signed
331
+ candidate is verified against the keystore before it replaces the
332
+ file, so a failed run leaves the previous bytes on disk — an enrolled
333
+ file is never on disk with a stale signature. An editor that bypasses
334
+ the lock is refused when the compare before staging or the one at the
335
+ commit boundary sees its write; that is best-effort detection, not
336
+ compare-and-swap (a portable replace offers none), so the lock is the
337
+ contract between writers.
301
338
  - **One authorized read path**: consumers load policy files through a
302
339
  single loader that reads the file once (bounded at 1 MiB), verifies
303
340
  those bytes, and parses the policy from the same snapshot — the bytes
@@ -46,6 +46,7 @@ Examples:
46
46
  oacp trust keygen --agent claude
47
47
  oacp trust import /path/to/<kid>.pub.json --project my-project --agent claude
48
48
  oacp trust revoke <kid> --project my-project --agent claude
49
+ oacp trust pin-script ~/tools/finish.sh --project my-project --agent claude
49
50
  oacp autonomy outcome /path/to/audit.yaml --decision approved
50
51
  oacp autonomy finalize /path/to/audit.yaml --final-state done --started-at 2026-08-30T10:05:00Z --actual-files-touched 3
51
52
  oacp envelope compile /path/to/message.yaml --receiver claude
@@ -86,6 +87,11 @@ COMMAND_GROUPS = {
86
87
  "list": ("trust_cli.py", ("list",), "List project catalog entries and receiver pins"),
87
88
  "revoke": ("trust_cli.py", ("revoke",), "Revoke a receiver pin"),
88
89
  "sign-policy": ("trust_cli.py", ("sign-policy",), "Sign receiver policy files"),
90
+ "pin-script": (
91
+ "trust_cli.py",
92
+ ("pin-script",),
93
+ "Pin a script under a receiver's envelope.trusted_scripts and re-sign",
94
+ ),
89
95
  },
90
96
  "autonomy": {
91
97
  "outcome": ("record_autonomy_outcome.py", (), "Record a human approval or decline"),
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oacp-cli"
7
- version = "0.5.3"
7
+ version = "0.5.4"
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"
@@ -57,6 +57,7 @@ dev = [
57
57
  exclude = [
58
58
  "/.claude",
59
59
  "/.codex",
60
+ "/tests/dev_only",
60
61
  ]
61
62
 
62
63
  [tool.hatch.build.targets.wheel]