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