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.
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/CHANGELOG.md +22 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/PKG-INFO +3 -3
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/README.md +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/autonomy.md +148 -16
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/inbox_outbox.md +15 -35
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/org_memory.md +8 -4
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/session_init.md +4 -2
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/cli.py +63 -4
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/pyproject.toml +3 -4
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/_oacp_constants.py +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/autonomy_gate.py +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/claude_envelope_hook.py +3 -3
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/codex_session_init.py +14 -84
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/envelope_compiler.py +446 -37
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/finalize_autonomy_record.py +279 -17
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/preflight.py +3 -6
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/record_autonomy_outcome.py +1 -1
- oacp_cli-0.5.1/tests/conformance/autonomy/records/cancelled_missing_actor.yaml +45 -0
- oacp_cli-0.5.1/tests/conformance/autonomy/records/clean_terminal_cancelled.yaml +46 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/expected_findings.yaml +7 -0
- oacp_cli-0.5.1/tests/conformance/autonomy/records/invalid_live_clock_adjustment.yaml +54 -0
- oacp_cli-0.5.1/tests/conformance/autonomy/records/pause_and_clock_adjustment.yaml +85 -0
- oacp_cli-0.5.1/tests/conformance/autonomy/records/two_clock_adjustments.yaml +100 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/README.md +24 -2
- oacp_cli-0.5.1/tests/conformance/envelope/expected/adapter_detection_failed.yaml +27 -0
- oacp_cli-0.5.1/tests/conformance/envelope/expected/adapter_expected_missing.yaml +28 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +8 -0
- oacp_cli-0.5.1/tests/conformance/envelope/expected/unsupported_runtime_codex.yaml +27 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/canonical_memory_gitignore.txt +2 -2
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_conformance_fixtures.py +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_gate.py +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_claude_envelope_hook.py +1 -1
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_codex_session_init.py +17 -104
- oacp_cli-0.5.1/tests/test_envelope_compiler.py +1142 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_envelope_conformance_fixtures.py +56 -3
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_envelope_public_admission.py +20 -3
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_finalize_autonomy_record.py +333 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_memory_layout_fixture.py +12 -3
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_cli.py +80 -2
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_preflight.py +16 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_readme_commands.py +2 -2
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_record_autonomy_outcome.py +2 -1
- oacp_cli-0.5.0/scripts/retention.py +0 -407
- oacp_cli-0.5.0/tests/test_envelope_compiler.py +0 -490
- oacp_cli-0.5.0/tests/test_retention.py +0 -268
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.gitattributes +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/auto-estimate.yml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/.gitignore +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/LICENSE +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/Makefile +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/QUICKSTART.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/SECURITY.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/SPEC.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/from-claude-p.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/memory-context.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/setup.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/agent_safety_defaults.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/credential_scoping.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/dispatch_states.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/message_signing.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/review_loop.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/runtime_capabilities.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/skills_manifest.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/decisions.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
- {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
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
- {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
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
- {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
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/recent.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/org-memory/rules.md +0 -0
- {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
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/__init__.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/oacp/envelope_hook.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/add_agent.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/agent_profile.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/gen_readme_commands.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/init_project_workspace.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/key_cli.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/message_signing.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/message_verify.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_doctor.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/policy_signing.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/send_inbox_message.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/setup_runtime.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/trust_cli.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/trust_root.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/update_workspace.sh +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/validate_message.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/scripts/write_event.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_card.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_profile.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/agent_status.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/guardrails/secrets_rules.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/inbox_message.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/receiver_config.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/roles/role_baseline.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/runtime_capabilities.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/skills_manifest.template.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_boundary_action.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_conflict.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_cross_channel.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_reuse.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_same_channel.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/reauth_scopeless_boundary.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/review_live_head_mismatch.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/review_live_head_prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_addressed_accepted.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_addressed_types.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_approved.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_denied_later.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_review_grant_denied_postmessage.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_boundary_action_resumes.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_conflict_declines.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_cross_channel_resumes.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_reuse_stays_paused.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_same_channel_resumes.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/checkpoint_reauth_scopeless_boundary_resumes.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_error_admission_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_designed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_mixed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_undeclared.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/pause_classification_unplanned.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_accepted_auto_continues.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_disabled_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_drift_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_expired_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_head_mismatch_records.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_later_round_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_missing_approval_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_prefix_head_records.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_repeated_addressed_round_exceeded.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_revoke_before_processing_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/review_continuation_revoked_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/sensitive_content_reply_only_advisory.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/ledger_replay/corpus.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/declaration_error_admission.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/negated_guardrails.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_designed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_mixed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_undeclared.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/pause_classification_unplanned.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_addressed_round3.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_cross_pr.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_head_mismatch.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_prefix_head.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_request.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_round4.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/review_continuation_unapproved.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_content_reply_only.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/admission_outcome_replaced_by_clear.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/breach_basis_source_mismatch.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/breached_empty_fields.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/clean_terminal_done.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_live_a.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_live_b.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/duplicate_yaml_key_logged_notes.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/final_state_superseded_valid.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/inconsistent_work_clock.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/noncanonical_axis_names.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_final_state_completed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_completed_after_human_approval.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_executed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_human_approved_completed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/off_enum_kind_review_round_delivered.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/paused_terminal_action_unreconciled.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/paused_terminal_completed_stamp.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/serialized_wave_item.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_legacy_kind_repaired.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_legacy_successor_live.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_missing_successor.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_successor_live.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/superseded_unrelated_successor.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/autonomy/records/unrelated_identity_holder_live.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/configs/malformed.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/off.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/configs/warn.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_basic__enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__off.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/signed_revoked__warn.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__off.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__off.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/intake/expected/unsigned_notification__warn.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/memory_layout/layout.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/README.md +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/alice.json +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/bob.json +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/keys/carol.json +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/conformance/signing/regen_fixtures.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_add_agent.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_agent_profile.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_audit_corpus_boundary.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_audit_record_conformance.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_autonomy_ledger_replay.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_default_envelope.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_expected_pauses.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_inbox_verify.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_init_project_workspace.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_intake_conformance.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_memory_shim.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_message_signing.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_message_verify.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_doctor.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_package_content.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_packaged_status_template.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_policy_signing.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_send_inbox_message.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_setup_runtime.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_signing_conformance.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_spec_version.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_trust_root.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_validate_agent_card.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_validate_message.py +0 -0
- {oacp_cli-0.5.0 → oacp_cli-0.5.1}/tests/test_workspace_discovery.py +0 -0
- {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.
|
|
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` |
|
|
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` |
|
|
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.
|
|
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 `
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
`
|
|
1634
|
-
|
|
1635
|
-
`
|
|
1636
|
-
|
|
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
|
-
`
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
`
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
|
|
400
|
-
|
|
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
|
|
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`
|
|
197
|
-
on
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
)
|