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