oacp-cli 0.4.4__tar.gz → 0.4.6__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.4.4 → oacp_cli-0.4.6}/CHANGELOG.md +38 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/PKG-INFO +10 -9
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/QUICKSTART.md +5 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/README.md +9 -8
- oacp_cli-0.4.6/docs/guides/memory-context.md +72 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/versioning.md +20 -6
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/agent_safety_defaults.md +1 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/autonomy.md +169 -24
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/cross_runtime_sync.md +7 -5
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/dispatch_states.yaml +2 -2
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/org_memory.md +14 -8
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/runtime_capabilities.md +10 -6
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/session_init.md +25 -15
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/README.md +3 -3
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/recent.md +2 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/oacp/cli.py +1 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/pyproject.toml +4 -2
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/_oacp_constants.py +5 -3
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/add_agent.py +143 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/autonomy_gate.py +105 -3
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/claude_envelope_hook.py +6 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/codex_session_init.py +59 -29
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/finalize_autonomy_record.py +226 -4
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/oacp_doctor.py +27 -6
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/record_autonomy_outcome.py +236 -17
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/setup_runtime.py +58 -4
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/claude/agents/role_agent.template.md +4 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/org-memory/recent.md +2 -1
- oacp_cli-0.4.6/tests/conformance/autonomy/expected/pause_classification_designed.yaml +13 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/expected/pause_classification_mixed.yaml +13 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/expected/pause_classification_undeclared.yaml +13 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/expected/pause_classification_unplanned.yaml +13 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/messages/pause_classification_designed.yaml +20 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/messages/pause_classification_mixed.yaml +20 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/messages/pause_classification_undeclared.yaml +19 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/messages/pause_classification_unplanned.yaml +20 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/README.md +2 -0
- oacp_cli-0.4.6/tests/conformance/autonomy/records/admission_outcome_replaced_by_clear.yaml +65 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/clean_terminal_done.yaml +4 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/expected_findings.yaml +4 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_add_agent.py +53 -1
- oacp_cli-0.4.6/tests/test_audit_corpus_boundary.py +251 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_audit_record_conformance.py +1 -1
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_autonomy_gate.py +69 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_claude_envelope_hook.py +22 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_codex_session_init.py +207 -2
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_envelope_compiler.py +17 -0
- oacp_cli-0.4.6/tests/test_expected_pauses.py +259 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_finalize_autonomy_record.py +557 -10
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_package_content.py +24 -0
- oacp_cli-0.4.6/tests/test_packaged_status_template.py +156 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_record_autonomy_outcome.py +460 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_setup_runtime.py +204 -0
- oacp_cli-0.4.6/tests/test_spec_version.py +39 -0
- oacp_cli-0.4.4/mcp_servers/README.md +0 -8
- oacp_cli-0.4.4/mcp_servers/oacp_coordinator.py +0 -789
- oacp_cli-0.4.4/scripts/session_lifecycle_hooks.py +0 -632
- oacp_cli-0.4.4/tests/test_oacp_coordinator.py +0 -271
- oacp_cli-0.4.4/tests/test_session_lifecycle_hooks.py +0 -384
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/.gitattributes +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/.github/workflows/auto-estimate.yml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/.gitignore +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/LICENSE +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/Makefile +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/SECURITY.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/SPEC.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/from-claude-p.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/setup.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/credential_scoping.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/inbox_outbox.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/message_signing.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/review_loop.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/skills_manifest.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/decisions.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/org-memory/rules.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/oacp/__init__.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/oacp/envelope_hook.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/agent_profile.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/envelope_compiler.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/gen_readme_commands.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/init_project_workspace.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/key_cli.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/memory_sync.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/message_signing.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/message_verify.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/policy_signing.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/preflight.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/retention.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/send_inbox_message.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/trust_cli.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/trust_root.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/update_workspace.sh +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/validate_message.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/scripts/write_event.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/agent_card.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/agent_profile.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/agent_status.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/guardrails/secrets_rules.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/inbox_message.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/receiver_config.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/roles/role_baseline.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/runtime_capabilities.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/skills_manifest.template.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_boundary_action.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_conflict.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_cross_channel.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_reuse.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_same_channel.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/reauth_scopeless_boundary.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/review_live_head_mismatch.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/review_live_head_prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_review_addressed_accepted.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_review_grant_addressed_types.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_review_grant_approved.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_review_grant_denied_later.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_review_grant_denied_postmessage.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_boundary_action_resumes.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_conflict_declines.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_cross_channel_resumes.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_reuse_stays_paused.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_same_channel_resumes.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/checkpoint_reauth_scopeless_boundary_resumes.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/declaration_error_admission_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_accepted_auto_continues.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_disabled_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_drift_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_expired_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_head_mismatch_records.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_later_round_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_missing_approval_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_prefix_head_records.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_repeated_addressed_round_exceeded.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_revoke_before_processing_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/review_continuation_revoked_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/sensitive_content_reply_only_advisory.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/ledger_replay/corpus.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/declaration_error_admission.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/negated_guardrails.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_addressed_round3.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_cross_pr.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_head_mismatch.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_prefix_head.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_request.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_round4.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/review_continuation_unapproved.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_content_reply_only.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/breach_basis_source_mismatch.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/breached_empty_fields.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/duplicate_live_a.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/duplicate_live_b.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/duplicate_yaml_key_logged_notes.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/final_state_superseded_valid.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/inconsistent_work_clock.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/noncanonical_axis_names.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/off_enum_final_state_completed.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/off_enum_kind_completed_after_human_approval.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/off_enum_kind_executed.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/off_enum_kind_human_approved_completed.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/off_enum_kind_review_round_delivered.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/paused_terminal_action_unreconciled.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/paused_terminal_completed_stamp.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/serialized_wave_item.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/superseded_legacy_kind_repaired.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/superseded_legacy_successor_live.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/superseded_missing_successor.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/superseded_successor_live.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/superseded_unrelated_successor.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/autonomy/records/unrelated_identity_holder_live.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/configs/malformed.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/configs/enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/configs/off.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/configs/warn.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/signed_basic__enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/signed_revoked__enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/signed_revoked__off.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/signed_revoked__warn.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_body_flip__off.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/unsigned_notification__off.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/intake/expected/unsigned_notification__warn.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/expected.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/.hidden/2026/08/20260825-alice-abc12345.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/demo-project/2026/08/20260825-alice-1f3a9c2b.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/demo-project/2026/08/20260825-alice-ABCD.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/demo-project/2026/08/20260825_alice_abc12345.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/demo-project/2026/09/20260825-alice-def12345.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/bad_layout/org-memory/debriefs/demo-project/20260825-alice-abc12345.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/empty_store/expected.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/empty_store/org-memory/debriefs/.gitkeep +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/missing_debriefs_dir/expected.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/missing_debriefs_dir/org-memory/recent.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/staging_artifact/expected.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/staging_artifact/org-memory/debriefs/demo-project/2026/08/.stage.20260825-alice-77xx88yy.md.a1b2c3 +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/staging_artifact/org-memory/debriefs/demo-project/2026/08/20260825-alice-1f3a9c2b.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/expected.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/org-memory/debriefs/.gitkeep +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/org-memory/debriefs/Demo_Project/2026/08/20260825-bob-ops-9f00aa11.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/org-memory/debriefs/demo-project/2026/08/20260825-alice-1f3a9c2b.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/org-memory/debriefs/demo.project/2026/07/20260701-Alice_2.dev-00aa11bb.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/org_memory/cases/valid_store/org-memory/debriefs/other-project/2026/12/20261203-bob-9e0d44aa.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/README.md +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/keys/alice.json +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/keys/bob.json +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/keys/carol.json +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/conformance/signing/regen_fixtures.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_agent_profile.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_autonomy_conformance_fixtures.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_autonomy_ledger_replay.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_default_envelope.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_envelope_conformance_fixtures.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_envelope_public_admission.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_inbox_verify.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_init_org_memory.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_init_project_workspace.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_intake_conformance.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_memory_archive.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_memory_sync.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_message_signing.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_message_verify.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_doctor.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_org_memory_doctor.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_policy_signing.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_preflight.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_readme_commands.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_retention.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_send_inbox_message.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_signing_conformance.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_trust_root.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_validate_agent_card.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_validate_message.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.4.4 → oacp_cli-0.4.6}/tests/test_write_event.py +0 -0
|
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.6] - 2026-09-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Autonomy audits distinguish expected pauses from unplanned pauses ([pause classification](docs/protocol/autonomy.md#pause-classification)).
|
|
15
|
+
- Human outcome records can retain the changes made when approving a modified task ([human outcomes](docs/protocol/autonomy.md#human-approval-and-decline-outcomes)).
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Startup safety and dispatch guidance follow the current exact-file archive lifecycle ([inbox lifecycle](docs/protocol/inbox_outbox.md#lifecycle)).
|
|
20
|
+
- Startup guidance preserves project memory reads and retrieves org memory on demand ([memory context](docs/guides/memory-context.md)).
|
|
21
|
+
|
|
22
|
+
## [0.4.5] - 2026-09-02
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Protocol contract stamp `spec_version` moves to `0.4.5` under a pinned bump rule ([contract version](docs/protocol/autonomy.md#contract-version)).
|
|
27
|
+
- `task_profile.estimated_minutes` is the declared admission cap, not an expected duration ([message fields](docs/protocol/autonomy.md#message-fields)).
|
|
28
|
+
|
|
29
|
+
### Removed
|
|
30
|
+
|
|
31
|
+
- Unsupported MCP coordinator prototype (`mcp_servers/`) and the packaged session-telemetry script; session telemetry is runtime-owned ([session telemetry](docs/protocol/runtime_capabilities.md#runtime-startup-and-session-telemetry)).
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- `oacp doctor --fix` creates `status.yaml` from the packaged `agent_status` template on wheel installs ([agent status](docs/guides/doctor.md#7-agent-status)).
|
|
36
|
+
- Autonomy admission prefers an unfenced `task_profile` declaration over fenced examples ([autonomy](docs/protocol/autonomy.md#message-fields)).
|
|
37
|
+
- Claude envelope accounting recognizes dashed and undashed runtime scratchpad roots without exempting sibling paths ([autonomy](docs/protocol/autonomy.md#envelope-compilation-phase-2)).
|
|
38
|
+
- Autonomy finalization requires the receiver's work-start stamp and flags legacy terminal receipts that omit it ([autonomy](docs/protocol/autonomy.md#terminal-finalization-and-audit-integrity)).
|
|
39
|
+
- `oacp autonomy-finalize` resolves the receiver policy from the record, so sender re-authorizations arbitrate under the receiver's verified caps instead of failing closed ([re-authorization channels](docs/protocol/autonomy.md#re-authorization-channels-and-arbitration)).
|
|
40
|
+
- `oacp autonomy-outcome` records a checkpoint clear without overwriting the admission outcome, and refuses writes to records closed by completion evidence ([human outcomes](docs/protocol/autonomy.md#human-approval-and-decline-outcomes)).
|
|
41
|
+
- Codex session initialization preserves configured capabilities across its own rewrites and records an explicit unknown model when hook metadata is unavailable ([runtime capabilities](docs/protocol/runtime_capabilities.md#dynamic-status-schema)).
|
|
42
|
+
- Codex agent setup publishes every message type the Codex inbox workflow handles, leaving other runtime cards unchanged ([agent profiles](docs/protocol/agent_profiles.md#relationship-to-existing-agent-cards)).
|
|
43
|
+
- Claude agent setup publishes every message type the Claude inbox workflow handles, on new and existing project cards ([agent profiles](docs/protocol/agent_profiles.md#relationship-to-existing-agent-cards)).
|
|
44
|
+
- Claude agent scaffolding records an explicit unknown model instead of echoing the runtime name into `status.yaml` ([runtime capabilities](docs/protocol/runtime_capabilities.md#dynamic-status-schema)).
|
|
45
|
+
|
|
10
46
|
## [0.4.4] - 2026-08-28
|
|
11
47
|
|
|
12
48
|
The central debrief store is the headline change: every agent's full end-of-session debrief now lands in the kernel-owned, append-only `org-memory/debriefs/<project>/<YYYY>/<MM>/` layout — one immutable file per session — instead of per-project trees, with `oacp org-memory init` creating the store and `oacp doctor` checking its setup ([org memory](docs/protocol/org_memory.md#debrief-store)).
|
|
@@ -807,6 +843,8 @@ The central debrief store is the headline change: every agent's full end-of-sess
|
|
|
807
843
|
- Checkout step in github-release workflow job (#19)
|
|
808
844
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
809
845
|
|
|
846
|
+
[0.4.6]: https://github.com/kiloloop/oacp/compare/v0.4.5...v0.4.6
|
|
847
|
+
[0.4.5]: https://github.com/kiloloop/oacp/compare/v0.4.4...v0.4.5
|
|
810
848
|
[0.4.4]: https://github.com/kiloloop/oacp/compare/v0.4.3...v0.4.4
|
|
811
849
|
[0.4.3]: https://github.com/kiloloop/oacp/compare/v0.4.2...v0.4.3
|
|
812
850
|
[0.4.2]: https://github.com/kiloloop/oacp/compare/v0.4.1...v0.4.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oacp-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
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
|
|
@@ -48,7 +48,7 @@ $ uv tool install oacp-cli
|
|
|
48
48
|
## See it in action
|
|
49
49
|
|
|
50
50
|
<p align="center">
|
|
51
|
-
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
51
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
52
52
|
</p>
|
|
53
53
|
|
|
54
54
|
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
@@ -56,7 +56,7 @@ The CLI ships structured tasks between agents and lets you watch the conversatio
|
|
|
56
56
|
## Live agent fleet
|
|
57
57
|
|
|
58
58
|
<p align="center">
|
|
59
|
-
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
59
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
60
60
|
</p>
|
|
61
61
|
|
|
62
62
|
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
@@ -84,7 +84,7 @@ PROJECT · my-app ● live
|
|
|
84
84
|
## Filesystem as protocol
|
|
85
85
|
|
|
86
86
|
<p align="center">
|
|
87
|
-
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
87
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
88
88
|
</p>
|
|
89
89
|
|
|
90
90
|
Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
|
|
@@ -115,7 +115,7 @@ $OACP_HOME/projects/my-app/ ● writing
|
|
|
115
115
|
workspace.json metadata [json]
|
|
116
116
|
|
|
117
117
|
$OACP_HOME/org-memory/ org-wide
|
|
118
|
-
recent.md
|
|
118
|
+
recent.md on demand [⌘]
|
|
119
119
|
rules.md 12 rules [⌘]
|
|
120
120
|
decisions.md org decisions [⌘]
|
|
121
121
|
```
|
|
@@ -320,9 +320,6 @@ oacp/
|
|
|
320
320
|
└── SPEC.md # Full protocol specification
|
|
321
321
|
```
|
|
322
322
|
|
|
323
|
-
[`mcp_servers/`](mcp_servers/) contains experimental, unsupported prototypes;
|
|
324
|
-
it is not part of the OACP product surface.
|
|
325
|
-
|
|
326
323
|
## Related
|
|
327
324
|
|
|
328
325
|
- **[agent-estimate](https://github.com/kiloloop/agent-estimate)** — Estimate how long agent tasks take. Pairs with OACP dispatch for task sizing.
|
|
@@ -376,12 +373,16 @@ Optionally, `oacp org-memory init` creates org-level shared memory:
|
|
|
376
373
|
|
|
377
374
|
```
|
|
378
375
|
$OACP_HOME/org-memory/
|
|
379
|
-
├── recent.md #
|
|
376
|
+
├── recent.md # Rolling summary, retrieved on demand
|
|
380
377
|
├── decisions.md # Org-wide decisions
|
|
381
378
|
├── rules.md # Standing conventions
|
|
382
379
|
└── events/ # Timestamped event entries
|
|
383
380
|
```
|
|
384
381
|
|
|
382
|
+
Init loads the four active project memory files. Org memory is retrieved on
|
|
383
|
+
demand; syncing it to disk does not load it into context. See
|
|
384
|
+
[project context and org-memory retrieval](docs/guides/memory-context.md).
|
|
385
|
+
|
|
385
386
|
## Development
|
|
386
387
|
|
|
387
388
|
```bash
|
|
@@ -108,6 +108,11 @@ sequentially. If hooks are unavailable, run the manual fallback:
|
|
|
108
108
|
oacp session-init --pull-memory --project my-first-project
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
Memory pull synchronizes files on disk. The init manifest names the protocol
|
|
112
|
+
files and four project memory files to read into context; org memory is
|
|
113
|
+
retrieved on demand. See [memory context](docs/guides/memory-context.md) for
|
|
114
|
+
retrieval and existing-installation guidance.
|
|
115
|
+
|
|
111
116
|
Runtime setup does not install an automatic memory push. Publish durable memory
|
|
112
117
|
explicitly during wrap-up with `oacp memory push`.
|
|
113
118
|
|
|
@@ -20,7 +20,7 @@ $ uv tool install oacp-cli
|
|
|
20
20
|
## See it in action
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
|
-
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
23
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
24
24
|
</p>
|
|
25
25
|
|
|
26
26
|
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
@@ -28,7 +28,7 @@ The CLI ships structured tasks between agents and lets you watch the conversatio
|
|
|
28
28
|
## Live agent fleet
|
|
29
29
|
|
|
30
30
|
<p align="center">
|
|
31
|
-
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
31
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
@@ -56,7 +56,7 @@ PROJECT · my-app ● live
|
|
|
56
56
|
## Filesystem as protocol
|
|
57
57
|
|
|
58
58
|
<p align="center">
|
|
59
|
-
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
59
|
+
<img src="https://raw.githubusercontent.com/kiloloop/oacp/main/docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
60
60
|
</p>
|
|
61
61
|
|
|
62
62
|
Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
|
|
@@ -87,7 +87,7 @@ $OACP_HOME/projects/my-app/ ● writing
|
|
|
87
87
|
workspace.json metadata [json]
|
|
88
88
|
|
|
89
89
|
$OACP_HOME/org-memory/ org-wide
|
|
90
|
-
recent.md
|
|
90
|
+
recent.md on demand [⌘]
|
|
91
91
|
rules.md 12 rules [⌘]
|
|
92
92
|
decisions.md org decisions [⌘]
|
|
93
93
|
```
|
|
@@ -292,9 +292,6 @@ oacp/
|
|
|
292
292
|
└── SPEC.md # Full protocol specification
|
|
293
293
|
```
|
|
294
294
|
|
|
295
|
-
[`mcp_servers/`](mcp_servers/) contains experimental, unsupported prototypes;
|
|
296
|
-
it is not part of the OACP product surface.
|
|
297
|
-
|
|
298
295
|
## Related
|
|
299
296
|
|
|
300
297
|
- **[agent-estimate](https://github.com/kiloloop/agent-estimate)** — Estimate how long agent tasks take. Pairs with OACP dispatch for task sizing.
|
|
@@ -348,12 +345,16 @@ Optionally, `oacp org-memory init` creates org-level shared memory:
|
|
|
348
345
|
|
|
349
346
|
```
|
|
350
347
|
$OACP_HOME/org-memory/
|
|
351
|
-
├── recent.md #
|
|
348
|
+
├── recent.md # Rolling summary, retrieved on demand
|
|
352
349
|
├── decisions.md # Org-wide decisions
|
|
353
350
|
├── rules.md # Standing conventions
|
|
354
351
|
└── events/ # Timestamped event entries
|
|
355
352
|
```
|
|
356
353
|
|
|
354
|
+
Init loads the four active project memory files. Org memory is retrieved on
|
|
355
|
+
demand; syncing it to disk does not load it into context. See
|
|
356
|
+
[project context and org-memory retrieval](docs/guides/memory-context.md).
|
|
357
|
+
|
|
357
358
|
## Development
|
|
358
359
|
|
|
359
360
|
```bash
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Project context and org-memory retrieval
|
|
2
|
+
|
|
3
|
+
Load the active project memory at init. Retrieve org memory when a task needs
|
|
4
|
+
shared rules, decisions, or recent cross-project context. Org-wide history can
|
|
5
|
+
grow independently of the small project working set.
|
|
6
|
+
|
|
7
|
+
| Store | Context policy |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `projects/<project>/memory/` | Read `project_facts.md`, `decision_log.md`, `open_threads.md`, and `known_debt.md` in order at init. |
|
|
10
|
+
| `projects/<project>/memory/archive/` | Historical detail; follow a relevant reference when needed. |
|
|
11
|
+
| `org-memory/` | Search relevant topical files and read matching sections on demand. |
|
|
12
|
+
|
|
13
|
+
## Initialization and synchronization
|
|
14
|
+
|
|
15
|
+
Step 3 of the session-init protocol requires the four project files. In
|
|
16
|
+
Codex, the init command verifies three
|
|
17
|
+
protocol files and those four project files, then emits a manifest. The agent
|
|
18
|
+
still performs the ordered reads; verification does not inject their contents.
|
|
19
|
+
Missing project files are reported under the existing degraded-init behavior.
|
|
20
|
+
|
|
21
|
+
`oacp memory pull` synchronizes the memory repository on disk, including org
|
|
22
|
+
memory and its history. A successful pull does not add those files to model
|
|
23
|
+
context. Keep any configured pull before project-memory reads so those reads
|
|
24
|
+
use the refreshed files. Sync selection and context selection are independent;
|
|
25
|
+
there is no need to remove org memory from sync to avoid eager loading.
|
|
26
|
+
|
|
27
|
+
Hook enablement remains an adopter choice. This retrieval policy works with a
|
|
28
|
+
trusted startup hook or a manual init invocation. It does not require enabling
|
|
29
|
+
a hook that the project has disabled.
|
|
30
|
+
|
|
31
|
+
## Retrieve org context for a task
|
|
32
|
+
|
|
33
|
+
1. Resolve the configured OACP root and the org's topical filenames. Common
|
|
34
|
+
choices are `rules.md`, `decisions.md`, and `recent.md`; adopters can use
|
|
35
|
+
others. Read applicable standing rules and decisions before the actions
|
|
36
|
+
they govern, such as release, review authority, or architecture work.
|
|
37
|
+
2. If cross-machine sync is configured, the task needs current shared facts,
|
|
38
|
+
and local freshness is unknown, run `oacp memory pull`. A failed pull leaves
|
|
39
|
+
freshness unknown; report that limitation before relying on affected facts.
|
|
40
|
+
3. Search the relevant explicit files with task identifiers and topic terms.
|
|
41
|
+
For example, after confirming that `rules.md` exists:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
OACP_ROOT="${OACP_HOME:-$HOME/oacp}"
|
|
45
|
+
rg -n -- 'release|version' "$OACP_ROOT/org-memory/rules.md"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
4. Read the full matching sections, including qualifications and provenance.
|
|
49
|
+
Follow relevant source links when needed; avoid loading unrelated history
|
|
50
|
+
or recursively reading `events/` and `debriefs/`. Read `recent.md` sections
|
|
51
|
+
when recent org-wide changes matter to the task.
|
|
52
|
+
5. A search miss does not establish that no rule applies. Inspect relevant
|
|
53
|
+
headings or linked topic files when needed. Missing or unreadable files
|
|
54
|
+
are evidence gaps, not permission to bypass a known requirement. Verify
|
|
55
|
+
stale or conflicting claims against their authoritative sources.
|
|
56
|
+
|
|
57
|
+
Runtime/project guidance may explicitly opt into a bounded startup summary.
|
|
58
|
+
The `recent.md` curation budget is a storage-maintenance guideline, not a
|
|
59
|
+
startup context budget. Keep required project reads intact even when org
|
|
60
|
+
retrieval is deferred.
|
|
61
|
+
|
|
62
|
+
## Update an existing installation
|
|
63
|
+
|
|
64
|
+
Updated scaffolds apply to newly created files. Runtime setup and org-memory
|
|
65
|
+
initialization preserve existing guidance and curated content; upgrading does
|
|
66
|
+
not rewrite an old `Always-loaded` comment or a local mandatory-org-read rule.
|
|
67
|
+
|
|
68
|
+
Review existing runtime instructions and summary comments explicitly. Keep the
|
|
69
|
+
four project reads, replace blanket org-memory startup reads with the task-based
|
|
70
|
+
policy above, and retain the underlying rules, decisions, history, and sync
|
|
71
|
+
configuration. Avoid rerunning runtime setup solely to change prose: setup can
|
|
72
|
+
register hooks, including ones an adopter intentionally disabled.
|
|
@@ -17,7 +17,11 @@ The `oacp-cli` package follows semantic versioning:
|
|
|
17
17
|
`__version__` at runtime via `importlib.metadata`, so `oacp --version` always
|
|
18
18
|
reports the installed package version — the version number itself is edited in
|
|
19
19
|
exactly one file (the release-bump PR also adds the matching `CHANGELOG.md`
|
|
20
|
-
section, see below).
|
|
20
|
+
section, see below). The protocol contract carries a separate stamp,
|
|
21
|
+
`SPEC_VERSION` in `scripts/_oacp_constants.py`, which moves only under the
|
|
22
|
+
contract-version rule in
|
|
23
|
+
[`docs/protocol/autonomy.md`](../protocol/autonomy.md#contract-version)
|
|
24
|
+
(step 2 below).
|
|
21
25
|
|
|
22
26
|
## Release Pipeline
|
|
23
27
|
|
|
@@ -32,25 +36,35 @@ itself, which triggers the publish workflow.
|
|
|
32
36
|
then scan for leaks: hardcoded user paths, private repository references,
|
|
33
37
|
secret patterns, and SPDX headers on all tracked Python files. All checks
|
|
34
38
|
must pass before anything is exported.
|
|
35
|
-
2. **
|
|
39
|
+
2. **Contract-version check** — diff `docs/protocol/*.md` and the stamp
|
|
40
|
+
producers (`scripts/autonomy_gate.py`, `scripts/envelope_compiler.py`,
|
|
41
|
+
`scripts/init_project_workspace.py`) against the last release and apply the
|
|
42
|
+
contract-version rule in full: a change every receiver must understand to
|
|
43
|
+
verify or exchange a message, or to produce and finalize an artifact
|
|
44
|
+
another receiver reads, moves `SPEC_VERSION` together with the spec's
|
|
45
|
+
`spec_version` literals and a `CHANGELOG.md` line; additive-and-ignorable
|
|
46
|
+
changes do not, and the release PR then records "no contract change". The
|
|
47
|
+
package version moves on every release, the contract stamp only when the
|
|
48
|
+
contract does.
|
|
49
|
+
3. **Version bump PR** — update the `version` in `pyproject.toml` and add a
|
|
36
50
|
`CHANGELOG.md` section in [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
37
51
|
format. Gather the changes with `git log --oneline <last-tag>..HEAD`.
|
|
38
|
-
|
|
52
|
+
4. **Export to staging** — open a staging PR mirroring the development branch.
|
|
39
53
|
The export copies the tracked tree only (`git archive`), so gitignored
|
|
40
54
|
local files never leave the development machine; rerun the leak audit on
|
|
41
55
|
the staged tree before merging. Non-urgent releases soak here before
|
|
42
56
|
promotion; urgent fixes may skip the soak.
|
|
43
|
-
|
|
57
|
+
5. **Promote to public** — open a promotion PR into `kiloloop/oacp` under the
|
|
44
58
|
release automation identity; a human reviews and merges it. The squash
|
|
45
59
|
commit message becomes permanent public history — keep it free of internal
|
|
46
60
|
references (the PR description alone is not what gets published).
|
|
47
|
-
|
|
61
|
+
6. **Tag and publish** — push an annotated `vX.Y.Z` tag to the public repo
|
|
48
62
|
(a direct tag push, not a PR). The tag-triggered release workflow reruns
|
|
49
63
|
the checks, builds the sdist/wheel, publishes `oacp-cli` to PyPI via
|
|
50
64
|
[Trusted Publishing](https://docs.pypi.org/trusted-publishers/) (OIDC — no
|
|
51
65
|
long-lived API tokens), and creates the GitHub Release with notes from the
|
|
52
66
|
CHANGELOG section.
|
|
53
|
-
|
|
67
|
+
7. **Verify** — check the version-pinned endpoint
|
|
54
68
|
`https://pypi.org/pypi/oacp-cli/<version>/json` first; the unversioned
|
|
55
69
|
"latest" endpoint and the pip simple index can lag a few minutes behind it.
|
|
56
70
|
Then install and confirm `oacp --version` prints the new version. On a
|
|
@@ -18,7 +18,7 @@ Cross-agent baseline safety rules. All agents (Claude, Codex, Cursor, Gemini) fo
|
|
|
18
18
|
|
|
19
19
|
## Inbox Safety
|
|
20
20
|
|
|
21
|
-
- **
|
|
21
|
+
- **Follow the canonical [inbox lifecycle](inbox_outbox.md#lifecycle).** Complete required replies and terminal audit before atomically archiving the exact processed file without overwriting an archive entry. Changed bytes or failed archival leave input pending; a successful reply alone is not permission to delete it.
|
|
22
22
|
- **Never silently consume a message that expects a response** — `task_request`, `question`, and `review_request` always require a reply. `notification` is no-response by default, but requires ack/reply when it reports findings or issues.
|
|
23
23
|
- **Always reply** using `oacp send` with `--parent-message-id` to maintain threading.
|
|
24
24
|
- **Idempotent sends** — before sending a response message (e.g., `review_feedback`, `review_addressed`, `review_request`), check the recipient's inbox and your own outbox for an already-sent message matching the same PR + round + type. Skip the send if a duplicate exists. This prevents retry storms when an agent crashes after sending a message but before completing the full workflow, and is re-invoked.
|
|
@@ -106,6 +106,10 @@ schema-invalid profile pauses with `task_profile_unparsable`; it is not a fatal
|
|
|
106
106
|
message-schema error. Message types listed in `allow_without_task_profile`, such
|
|
107
107
|
as `brainstorm_request`, may auto-accept without the block.
|
|
108
108
|
|
|
109
|
+
| Optional profile field | Meaning |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| `expected_pauses` | List of pause reason codes the sender expects to fire, for example `[estimated_minutes_exceeds_threshold, merges_pr_pause]`. Advisory only: unknown codes or malformed values produce declaration warnings, not new admission reasons. Existing safety checks still apply to the whole message. See [pause classification](#pause-classification). |
|
|
112
|
+
|
|
109
113
|
`expected_files_touched` counts distinct deliverable files only: files created
|
|
110
114
|
or modified as part of the requested outcome or a review-required correction.
|
|
111
115
|
Exclude receiver-local inbox, outbox, audit, memory, cache, and scratch writes
|
|
@@ -115,6 +119,17 @@ receiver also writes an audit record, reply body, and cache entries; a
|
|
|
115
119
|
reply-only analysis that uses scratch files but produces no file deliverable
|
|
116
120
|
declares `0`.
|
|
117
121
|
|
|
122
|
+
`estimated_minutes` is the **declared admission cap**, not an expected-duration
|
|
123
|
+
estimate: it is the value Gate 2 compares against `max_estimated_minutes`, and
|
|
124
|
+
the bound the post-accept checkpoint measures `actual_minutes` against. A
|
|
125
|
+
sender that tracks expected duration separately keeps it out of the profile
|
|
126
|
+
(for example as provenance prose in the brief), and any future
|
|
127
|
+
expected-duration field is a distinct key, so an adapter that maps a caller's
|
|
128
|
+
declared cap onto `estimated_minutes` never inverts. For example, a leg
|
|
129
|
+
expected to take 25 minutes that is declared under a two-round review
|
|
130
|
+
multiplier carries `estimated_minutes: 50`: the gate admits against 50, and
|
|
131
|
+
the checkpoint fires past 50, not 25.
|
|
132
|
+
|
|
118
133
|
### Default scope envelope (profileless admissions)
|
|
119
134
|
|
|
120
135
|
`allow_without_task_profile` is an **admission-only exemption**: the sender
|
|
@@ -307,7 +322,7 @@ Every autonomy decision writes one YAML file:
|
|
|
307
322
|
|
|
308
323
|
```yaml
|
|
309
324
|
schema_version: 2
|
|
310
|
-
spec_version: "0.4.
|
|
325
|
+
spec_version: "0.4.5"
|
|
311
326
|
created_at_utc: "2026-05-12T13:23:25Z"
|
|
312
327
|
receiver: codex
|
|
313
328
|
sender: iris
|
|
@@ -418,23 +433,43 @@ signer_kid, reason}` — the policy-file authorization outcome (see
|
|
|
418
433
|
`policy_sha256` the record commits to an *authorized* policy identity,
|
|
419
434
|
not just which bytes ran. An `invalid` status fails closed with reason
|
|
420
435
|
code `policy_auth_invalid` before any gate consumes the config.
|
|
421
|
-
`
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
the
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
the
|
|
436
|
-
|
|
437
|
-
|
|
436
|
+
Audit `schema_version: 2` adds thread identity and the structured
|
|
437
|
+
`result.human_outcome` block. Recorders may upgrade a v1 audit to v2 when the
|
|
438
|
+
first human outcome is written; standing grants trust only v2 records.
|
|
439
|
+
|
|
440
|
+
| Optional audit evidence | Meaning |
|
|
441
|
+
| --- | --- |
|
|
442
|
+
| `pause_classification`, `expected_pause_codes`, `unplanned_pause_codes` | The paused decision's comparison against the sender's expected reasons; see [pause classification](#pause-classification). Older v2 records may omit all three. |
|
|
443
|
+
| `result.human_outcome.modification` | Free-form YAML mapping recording what the human changed, such as `task_profile: {estimated_minutes: 60}` and `note: "Allow the larger task"`. Written by `--modification-file`; evidence only, with no effect on the scope envelope, standing grants, or checkpoint enforcement. |
|
|
444
|
+
|
|
445
|
+
### Contract version
|
|
446
|
+
|
|
447
|
+
`spec_version` names the protocol contract an artifact was produced under.
|
|
448
|
+
The tooling stamps one value — `SPEC_VERSION` in `scripts/_oacp_constants.py`
|
|
449
|
+
— into audit records, compiled envelopes, and `workspace.json` at workspace
|
|
450
|
+
init, and the `spec_version` literals in this document move with it.
|
|
451
|
+
|
|
452
|
+
The stamp moves by the kernel admission test. A release advances
|
|
453
|
+
`spec_version` when it adds or changes something every receiver must
|
|
454
|
+
understand to verify or exchange a message, or to produce and finalize an
|
|
455
|
+
artifact another receiver reads: a key a receiver must stamp, a changed
|
|
456
|
+
meaning of an existing field, or a block that enforcement or finalization now
|
|
457
|
+
reads. Additive-and-ignorable changes — an advisory, an optional provenance
|
|
458
|
+
key, a value a reader may skip without changing its decision — do not move it,
|
|
459
|
+
and neither do userland or tooling changes. The value is the `oacp-cli`
|
|
460
|
+
version of the release that carries the move, and every release states the
|
|
461
|
+
outcome in its notes: the new stamp, or "no contract change".
|
|
462
|
+
|
|
463
|
+
History: 0.4.3 preserved every autonomy field and rule pinned by 0.4.2 and
|
|
464
|
+
advanced the stamp for the project-wide message-retention policy and the
|
|
465
|
+
processed-inbound archive convention. 0.4.4 added the receiver-stamped
|
|
466
|
+
`work_started_at_utc` work clock and the checkpoint `reauthorization` block
|
|
467
|
+
that enforcement reads, which moved the contract, but shipped with the stamp
|
|
468
|
+
unchanged; 0.4.5 carries that move and makes the work clock mandatory at
|
|
469
|
+
terminal finalization. Records, envelopes, and workspaces written between the
|
|
470
|
+
0.4.4 release (2026-08-28) and the 0.4.5 release are therefore stamped
|
|
471
|
+
`0.4.3` under a contract that had already moved — readers tolerate that
|
|
472
|
+
stamp on artifacts dated in the window and read them by the 0.4.5 shape.
|
|
438
473
|
|
|
439
474
|
`evaluator` is **gate-emitted, not receiver-composed**: the evaluator
|
|
440
475
|
self-stamps its provenance into every decision it returns, and receivers
|
|
@@ -484,6 +519,40 @@ deduplicated against `reason_codes`, and empty on auto-accepted decisions.
|
|
|
484
519
|
Threshold-calibration analytics should read `reason_codes` and
|
|
485
520
|
`co_occurring_reason_codes` together.
|
|
486
521
|
|
|
522
|
+
### Pause classification
|
|
523
|
+
|
|
524
|
+
Every new paused evaluation records `pause_classification`,
|
|
525
|
+
`expected_pause_codes`, and `unplanned_pause_codes` as additive audit evidence.
|
|
526
|
+
The fired set contains only pause reasons in that decision's `reason_codes`.
|
|
527
|
+
Evidence codes such as `message_valid` and `schema_valid`, co-occurring reasons,
|
|
528
|
+
and lexical notes never enter this set.
|
|
529
|
+
|
|
530
|
+
| Declaration and fired reasons | Classification |
|
|
531
|
+
| --- | --- |
|
|
532
|
+
| `expected_pauses` absent | `undeclared` |
|
|
533
|
+
| Every fired pause reason is expected | `designed` |
|
|
534
|
+
| No fired pause reason is expected | `unplanned` |
|
|
535
|
+
| Some, but not all, fired pause reasons are expected | `mixed` |
|
|
536
|
+
|
|
537
|
+
`expected_pause_codes` preserves declared string entries, including unknown
|
|
538
|
+
codes; unknown codes are ignored for comparison and recorded as declaration
|
|
539
|
+
warnings in `logged_notes`.
|
|
540
|
+
An absent or malformed declaration contributes no expected reasons.
|
|
541
|
+
`unplanned_pause_codes` lists the fired reasons minus the recognized expected
|
|
542
|
+
reasons.
|
|
543
|
+
All message text, including the advisory value, remains subject to existing
|
|
544
|
+
lexical safety checks.
|
|
545
|
+
An unknown declaration adds no admission reason of its own, but a destructive
|
|
546
|
+
token inside it still fires the same hard stop as that token elsewhere.
|
|
547
|
+
The declaration cannot authorize work or suppress a fired pause.
|
|
548
|
+
|
|
549
|
+
These fields and `human_outcome.modification` are additive and ignorable within
|
|
550
|
+
audit schema v2: existing records validate unchanged, and readers may ignore the
|
|
551
|
+
fields without changing an admission, finalization, doctor, or enforcement
|
|
552
|
+
decision.
|
|
553
|
+
There is no contract change under the [version rule](#contract-version).
|
|
554
|
+
Historical records are not backfilled.
|
|
555
|
+
|
|
487
556
|
### Lexical provenance
|
|
488
557
|
|
|
489
558
|
`matched_patterns` is a source-ordered list of every autonomy lexical match,
|
|
@@ -612,6 +681,18 @@ pause moment, and locks the full read-modify-write sequence before an atomic
|
|
|
612
681
|
replacement. It refuses to overwrite a recorded outcome unless `--replace` is
|
|
613
682
|
explicit. `decision` is `approved`, `modified`, or `declined`.
|
|
614
683
|
|
|
684
|
+
| Flag | Meaning |
|
|
685
|
+
| --- | --- |
|
|
686
|
+
| `--modification-file <yaml>` | With `--decision modified`, read a free-form YAML mapping into `result.human_outcome.modification`. Without the file, the modified decision still records and prints a one-line `modification unrecorded` warning. |
|
|
687
|
+
|
|
688
|
+
An empty mapping is valid.
|
|
689
|
+
A missing, unreadable, invalid-YAML, or non-mapping file leaves the audit
|
|
690
|
+
unchanged, as does using the flag with a decision other than `modified`.
|
|
691
|
+
The payload records the human's delta without applying it to the original
|
|
692
|
+
scope envelope or creating a standing grant.
|
|
693
|
+
It cannot replace the earlier outcome when the command routes to a checkpoint
|
|
694
|
+
clear; scoped checkpoint changes still use the re-authorization path below.
|
|
695
|
+
|
|
615
696
|
The recorder is state-aware about where the pause moment lives:
|
|
616
697
|
|
|
617
698
|
- **Admission pauses** (`completion_kind: admission_paused`): the record was
|
|
@@ -635,6 +716,32 @@ shape must itself carry `checkpoint_paused` (the checkpoint
|
|
|
635
716
|
re-evaluation is what updated the result block; any other kind there is
|
|
636
717
|
refused as inconsistent).
|
|
637
718
|
|
|
719
|
+
On a checkpoint pause whose record **already carries a recorded human
|
|
720
|
+
outcome** (typically the admission approval), the new decision is a
|
|
721
|
+
checkpoint clear, and the recorder routes it into
|
|
722
|
+
`result.threshold_checkpoint.reauthorization` as a scope-less
|
|
723
|
+
`receiver_human` answer through the same arbitration the checkpoint
|
|
724
|
+
evaluator uses — a fresh approval lands as `disposition: resumed`, a
|
|
725
|
+
decline as `declined` — while the recorded outcome (timestamp, latency,
|
|
726
|
+
reason codes, and any standing grant resolved from its `grant` block)
|
|
727
|
+
survives untouched. `--replace` is refused in that state: it would
|
|
728
|
+
destroy the admission ledger entry, and can revoke a standing
|
|
729
|
+
continuation grant as a side effect. The recorder mutates only **live**
|
|
730
|
+
records, on both of its routes: a record already closed by completion
|
|
731
|
+
evidence (a terminal `final_state`, or `completed_at_utc`) is
|
|
732
|
+
historical evidence and refuses every human-outcome write — checkpoint
|
|
733
|
+
clear and admission answer alike — byte-identically. A historical
|
|
734
|
+
correction is a deliberate finalizer supersession, never a rewrite. A
|
|
735
|
+
recorder-based clear is
|
|
736
|
+
scope-less by construction; a scoped budget or boundary-action grant
|
|
737
|
+
goes through `oacp autonomy-finalize --checkpoint` with
|
|
738
|
+
`reauthorization.receiver_human.scope`. The validator flags the damage
|
|
739
|
+
signature of the pre-routing overwrite (an admission-paused record whose
|
|
740
|
+
only recorded outcome answers a checkpoint pause) as the advisory
|
|
741
|
+
`admission_outcome_replaced_by_checkpoint_clear` — advisory, not error,
|
|
742
|
+
because records written before this routing existed had no
|
|
743
|
+
non-destructive way to record the clear.
|
|
744
|
+
|
|
638
745
|
Latency values on checkpoint records written before `paused_at_utc` existed
|
|
639
746
|
measure from admission and are not comparable with post-fix records.
|
|
640
747
|
|
|
@@ -673,7 +780,7 @@ oacp autonomy-finalize <audit.yaml> --checkpoint --actuals <actuals.yaml>
|
|
|
673
780
|
|
|
674
781
|
# terminal update
|
|
675
782
|
oacp autonomy-finalize <audit.yaml> --final-state done \
|
|
676
|
-
--
|
|
783
|
+
--started-at <YYYY-MM-DDTHH:MM:SSZ> --actual-files-touched 3 \
|
|
677
784
|
--realized creates_or_updates_pr --realized commits_changes \
|
|
678
785
|
--reply-message-id <msg-id>
|
|
679
786
|
```
|
|
@@ -683,6 +790,37 @@ duplicate live evaluations, and terminal records still carrying a paused
|
|
|
683
790
|
checkpoint action; the finalizer enforces the pinned enums and
|
|
684
791
|
cross-field invariants at write time, under the shared audit lock.
|
|
685
792
|
|
|
793
|
+
The finalizer resolves the receiver's admission policy for
|
|
794
|
+
re-authorization arbitration from the record's `policy_path` (override
|
|
795
|
+
with `--config`), so sender_reply answers are capped at the receiver's
|
|
796
|
+
thresholds instead of extending nothing. The read goes through the
|
|
797
|
+
authorized policy path (one bounded snapshot: signature, receiver and
|
|
798
|
+
context binding, and enrollment downgrade resistance verified, then
|
|
799
|
+
parsed from those same bytes) — a policy that fails authorization
|
|
800
|
+
grants nothing. When the policy cannot be resolved or authorized and
|
|
801
|
+
the actuals present a sender answer, the degradation is surfaced on
|
|
802
|
+
stderr and the sender channel stays fail-closed (an explicit `--config`
|
|
803
|
+
that fails is a hard error that leaves the record unchanged); the
|
|
804
|
+
receiver_human channel is unaffected either way.
|
|
805
|
+
|
|
806
|
+
**Work-clock binding and writer provenance.** Canonical checkpoint and
|
|
807
|
+
`done`/`error` writes require `result.work_started_at_utc`. The first write may
|
|
808
|
+
supply it with `--started-at` (or the equivalent actuals field); later writes
|
|
809
|
+
reuse the record stamp automatically. An explicit value that conflicts with
|
|
810
|
+
the existing stamp is refused, and omitting both sources is an error. With a
|
|
811
|
+
stamp present, omitting `actual_minutes` derives it from the active work clock.
|
|
812
|
+
Each successful canonical write stamps `result.finalizer` with
|
|
813
|
+
`name: oacp autonomy-finalize` and `schema_version: 1`; supersession is exempt
|
|
814
|
+
because it transfers authority rather than reporting task execution. The
|
|
815
|
+
marker lets validation enforce the required clock on new receipts without
|
|
816
|
+
rewriting history: an unmarked legacy terminal receipt with no start gets the
|
|
817
|
+
advisory `terminal_missing_work_started_at`, while a marked checkpoint or
|
|
818
|
+
terminal receipt missing it gets the error
|
|
819
|
+
`canonical_writer_missing_work_started_at`. A malformed marker is
|
|
820
|
+
`invalid_finalizer_provenance`. Legacy terminal receipts remain byte-preserved;
|
|
821
|
+
correct one through a linked superseding evaluation rather than rewriting it
|
|
822
|
+
in place with `--replace`.
|
|
823
|
+
|
|
686
824
|
**Run-state vocabulary.** `result.final_state` splits by lifecycle phase:
|
|
687
825
|
`pending`, `paused`, and `blocked` are live states; `done`, `superseded`,
|
|
688
826
|
and `error` are terminal. Only terminal states can be finalized.
|
|
@@ -792,8 +930,10 @@ reports pinned finding codes (`off_enum_completion_kind`,
|
|
|
792
930
|
`terminal_paused_without_outcome`, `superseded_missing_successor`,
|
|
793
931
|
`breached_empty_fields`, `invalid_human_outcome`,
|
|
794
932
|
`decision_kind_incoherent`, `off_enum_breach_basis`,
|
|
795
|
-
`breach_basis_incoherent`, `
|
|
796
|
-
`
|
|
933
|
+
`breach_basis_incoherent`, `canonical_writer_missing_work_started_at`,
|
|
934
|
+
`invalid_finalizer_provenance`, `record_unparsable`; advisory:
|
|
935
|
+
`noncanonical_checkpoint_axis`, `terminal_missing_actuals`,
|
|
936
|
+
`terminal_missing_work_started_at`), and
|
|
797
937
|
`oacp doctor` sweeps every receiver's audit directory with the same
|
|
798
938
|
checks. Duplicate YAML keys are refused
|
|
799
939
|
outright — plain YAML loading silently keeps the later value. The
|
|
@@ -899,7 +1039,10 @@ the hard stop.
|
|
|
899
1039
|
## Threshold-Exceeded Checkpoint
|
|
900
1040
|
|
|
901
1041
|
`result.work_started_at_utc` is the receiver-stamped time of its first action
|
|
902
|
-
on that task.
|
|
1042
|
+
on that task. The canonical finalizer requires that stamp on every checkpoint
|
|
1043
|
+
and `done`/`error` write, reuses the record's value when the caller omits
|
|
1044
|
+
`--started-at`, and rejects a conflicting replacement. `actual_minutes` is
|
|
1045
|
+
active wall-clock time from that stamp to
|
|
903
1046
|
completion or the current checkpoint, rounded up to a whole minute, excluding
|
|
904
1047
|
each represented re-authorization pause from `paused_at_utc` through
|
|
905
1048
|
`cleared_paused_at_utc`. If a terminal outcome leaves that pause uncleared,
|
|
@@ -1057,7 +1200,9 @@ Arbitration rules:
|
|
|
1057
1200
|
visibility) are receiver-side authority only, on the scoped and
|
|
1058
1201
|
scope-less paths alike. The party whose under-declaration caused the
|
|
1059
1202
|
breach cannot self-serve unlimited scope. Without a resolvable receiver
|
|
1060
|
-
policy the sender channel extends nothing (fail closed)
|
|
1203
|
+
policy the sender channel extends nothing (fail closed) — the finalizer
|
|
1204
|
+
resolves the policy from the record's `policy_path`, overridable with
|
|
1205
|
+
`--config`.
|
|
1061
1206
|
- **GH comments never clear a checkpoint.** They sit outside the protocol's
|
|
1062
1207
|
identity and verification boundary; any decision they carry is recorded as
|
|
1063
1208
|
advisory, and a checkpoint answered only by a GH comment stays paused.
|
|
@@ -1240,7 +1385,7 @@ The envelope is written to
|
|
|
1240
1385
|
```json
|
|
1241
1386
|
{
|
|
1242
1387
|
"envelope_version": 1,
|
|
1243
|
-
"spec_version": "0.4.
|
|
1388
|
+
"spec_version": "0.4.5",
|
|
1244
1389
|
"compiler": "envelope_compiler.py",
|
|
1245
1390
|
"compiled_at_utc": "2026-07-12T02:00:00Z",
|
|
1246
1391
|
"project": "my-project",
|