amicus 0.1.0__tar.gz → 0.3.0__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.
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/SKILL.md +6 -2
- {amicus-0.1.0 → amicus-0.3.0}/.claude-plugin/plugin.json +3 -3
- {amicus-0.1.0 → amicus-0.3.0}/.codex-plugin/plugin.json +3 -3
- amicus-0.3.0/.github/copilot-instructions.md +42 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/workflows/publish.yml +2 -2
- {amicus-0.1.0 → amicus-0.3.0}/.github/workflows/test.yml +1 -1
- {amicus-0.1.0 → amicus-0.3.0}/.mcp.json +1 -1
- {amicus-0.1.0 → amicus-0.3.0}/AGENTS.md +17 -8
- amicus-0.3.0/CHANGELOG.md +538 -0
- {amicus-0.1.0 → amicus-0.3.0}/PKG-INFO +30 -11
- {amicus-0.1.0 → amicus-0.3.0}/README.md +28 -9
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/adversarial.md +4 -3
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/consult.md +4 -3
- amicus-0.3.0/commands/amicus/delegate-async.md +36 -0
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/delegate.md +4 -4
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/dry-run.md +1 -1
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/jobs.md +12 -2
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/review.md +5 -4
- {amicus-0.1.0 → amicus-0.3.0}/commands/amicus/status.md +3 -1
- {amicus-0.1.0 → amicus-0.3.0}/docs/MIGRATION.md +89 -7
- {amicus-0.1.0 → amicus-0.3.0}/docs/RELEASING.md +40 -6
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0002-backend-options-is-a-closed-superset.md +2 -1
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0004-tasks-and-jobs.md +1 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0006-fingerprint-and-surface-digest.md +4 -1
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0007-m1-codex-port-decisions.md +3 -1
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0008-m2-jobs-surface-decisions.md +4 -2
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0011-m5-tasks-decisions.md +1 -0
- amicus-0.3.0/docs/adr/0015-mcp-json-pins-an-already-published-release.md +104 -0
- amicus-0.3.0/docs/adr/0016-skill-rules-are-a-complete-contract.md +75 -0
- amicus-0.3.0/docs/adr/0017-an-unreadable-machine-enum-falls-to-its-own-floor.md +71 -0
- amicus-0.3.0/docs/adr/0018-the-catalog-carries-a-ttl-and-resource-reads-do-not.md +94 -0
- amicus-0.3.0/docs/adr/0019-review-results-disclose-coverage-as-a-field.md +60 -0
- amicus-0.3.0/docs/adr/0020-idempotency-keys-on-the-sync-tools.md +70 -0
- amicus-0.3.0/docs/adr/0021-repair-arguments-are-a-complete-call.md +53 -0
- amicus-0.3.0/docs/adr/0022-consume-reports-its-discard-outcome.md +70 -0
- amicus-0.3.0/docs/adr/0023-dependency-loggers-are-owned-at-a-warning-floor.md +61 -0
- amicus-0.3.0/docs/adr/0024-prose-list-loss-is-disclosed-never-folded.md +70 -0
- amicus-0.3.0/docs/adr/0025-success-meta-is-sparse-on-every-tool.md +46 -0
- amicus-0.3.0/docs/adr/0026-a-not-run-review-carries-no-confidence-rating.md +45 -0
- amicus-0.3.0/docs/adr/0027-every-instructions-rule-fits-the-shown-prefix.md +61 -0
- amicus-0.3.0/docs/adr/0028-a-deprecated-tool-keeps-its-record-beside-one-marker.md +65 -0
- amicus-0.3.0/docs/kimi-help/0.42.0/FINDINGS.md +25 -0
- amicus-0.3.0/docs/kimi-help/0.42.0/kimi-help.txt +50 -0
- amicus-0.3.0/docs/kimi-help/0.42.0/kimi-version.txt +1 -0
- amicus-0.3.0/docs/kimi-help/0.42.0/provider-list-shape.json +18 -0
- amicus-0.3.0/docs/kimi-help/0.43.1/FINDINGS.md +35 -0
- amicus-0.3.0/docs/kimi-help/0.43.1/kimi-help.txt +50 -0
- amicus-0.3.0/docs/kimi-help/0.43.1/kimi-version.txt +1 -0
- amicus-0.3.0/docs/kimi-help/0.43.1/provider-list-shape.json +18 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/superpowers/specs/2026-09-04-amicus-design.md +24 -24
- {amicus-0.1.0 → amicus-0.3.0}/pyproject.toml +8 -2
- amicus-0.3.0/scripts/check_release_state.py +712 -0
- amicus-0.3.0/skills/collaborating-with-amicus/SKILL.md +289 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/active-workflows.md +119 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/choosing-a-backend.md +124 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/independent-attempt.md +108 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/options-and-errors.md +102 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/reading-results.md +203 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/review-revise.md +70 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/reviewing-a-returned-diff.md +119 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/server-down-fallback.md +104 -0
- amicus-0.3.0/skills/collaborating-with-amicus/references/sync-vs-async.md +94 -0
- {amicus-0.1.0 → amicus-0.3.0}/skills/collaborating-with-amicus/tests/scenarios.md +277 -24
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/__init__.py +1 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/_worker.py +2 -2
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/adapter.py +13 -3
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/adversarial.py +11 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/config.py +3 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/contract.py +11 -4
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/options.py +19 -2
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/contract.py +10 -7
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/normalize.py +6 -8
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/contract.py +4 -4
- amicus-0.3.0/src/amicus/compaction.py +53 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/config/__init__.py +3 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/config/envspec.py +6 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/errors.py +68 -15
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/jobs/delivery.py +47 -21
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/jobs/lifecycle.py +236 -45
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/jobs/lookup.py +5 -2
- amicus-0.3.0/src/amicus/jobs/polling.py +36 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/jobs/taskmap.py +5 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/manifest.py +160 -9
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/middleware.py +61 -3
- amicus-0.3.0/src/amicus/obs.py +512 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/finalize.py +166 -33
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/review.py +100 -20
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/run.py +20 -15
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/workspace.py +5 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/plugin.py +3 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/result_format_snapshot.py +8 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/envelope.py +116 -8
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/fingerprint.py +11 -2
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/params.py +127 -57
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/publish.py +7 -10
- amicus-0.3.0/src/amicus/schemas/results.py +737 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/structured.py +19 -2
- amicus-0.3.0/src/amicus/server.py +305 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/__init__.py +5 -1
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/_guard.py +17 -8
- amicus-0.3.0/src/amicus/tools/_meta.py +114 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/_prepare.py +8 -7
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/consult.py +6 -2
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/delegate.py +7 -3
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/discovery.py +93 -36
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/dry_run.py +83 -16
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/jobs.py +27 -15
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/resources.py +77 -30
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/review.py +13 -5
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/wire_shape_snapshot.py +46 -9
- {amicus-0.1.0 → amicus-0.3.0}/tests/conftest.py +77 -2
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/manifest_snapshot.all.json +2170 -559
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/manifest_snapshot.claude.json +2170 -559
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/manifest_snapshot.codex-kimi.json +2170 -559
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/result_format_snapshot.json +1244 -26
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/wire_shape_snapshot.json +115 -72
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/claudefixtures.py +15 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_adversarial.py +21 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_async_tools.py +2 -2
- amicus-0.3.0/tests/test_cache_hints.py +197 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_adapter.py +36 -12
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_cli.py +11 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_contract.py +1 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_golden_envelope.py +12 -4
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_live.py +66 -5
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_plugin.py +16 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_sync_tools.py +103 -4
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codes.py +2 -2
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_adapter.py +10 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_config.py +2 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_contract.py +12 -2
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_normalize.py +8 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_commands.py +57 -4
- amicus-0.3.0/tests/test_compaction.py +154 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_delivery.py +98 -2
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_discovery.py +158 -16
- amicus-0.3.0/tests/test_discovery_cost.py +191 -0
- amicus-0.3.0/tests/test_dry_run.py +304 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_envelope.py +45 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_errors.py +108 -0
- amicus-0.3.0/tests/test_fastmcp_argument_log.py +448 -0
- amicus-0.3.0/tests/test_finalize.py +743 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_fingerprint.py +3 -3
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_guard.py +23 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_job_tools.py +243 -11
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_contract.py +61 -12
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_live.py +6 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_sync_tools.py +4 -2
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_lifecycle.py +520 -4
- amicus-0.3.0/tests/test_log_redaction.py +579 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_lookup.py +18 -1
- amicus-0.3.0/tests/test_manifest.py +386 -0
- amicus-0.3.0/tests/test_meta.py +138 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_middleware.py +75 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_migration_doc.py +54 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_packaging.py +64 -14
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_paid_tools.py +47 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_params.py +35 -1
- amicus-0.3.0/tests/test_poll_hint.py +38 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_prepare.py +9 -0
- amicus-0.3.0/tests/test_release_state.py +887 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_resources.py +22 -6
- amicus-0.3.0/tests/test_results.py +265 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_review.py +86 -9
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_server.py +94 -14
- amicus-0.3.0/tests/test_skill_contract.py +360 -0
- amicus-0.3.0/tests/test_structured.py +44 -0
- amicus-0.3.0/tests/test_surface_honesty.py +326 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_sync_tools.py +95 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_tasks_client.py +7 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_wire_shape.py +32 -1
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_worker.py +11 -9
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_workspace.py +5 -0
- {amicus-0.1.0 → amicus-0.3.0}/uv.lock +420 -53
- amicus-0.1.0/CHANGELOG.md +0 -33
- amicus-0.1.0/scripts/check_release_state.py +0 -359
- amicus-0.1.0/skills/collaborating-with-amicus/SKILL.md +0 -137
- amicus-0.1.0/skills/collaborating-with-amicus/references/choosing-a-backend.md +0 -51
- amicus-0.1.0/skills/collaborating-with-amicus/references/reviewing-a-returned-diff.md +0 -61
- amicus-0.1.0/skills/collaborating-with-amicus/references/sync-vs-async.md +0 -55
- amicus-0.1.0/src/amicus/obs.py +0 -51
- amicus-0.1.0/src/amicus/schemas/results.py +0 -392
- amicus-0.1.0/src/amicus/server.py +0 -227
- amicus-0.1.0/src/amicus/tools/_meta.py +0 -70
- amicus-0.1.0/tests/test_discovery_cost.py +0 -50
- amicus-0.1.0/tests/test_dry_run.py +0 -127
- amicus-0.1.0/tests/test_finalize.py +0 -193
- amicus-0.1.0/tests/test_manifest.py +0 -193
- amicus-0.1.0/tests/test_meta.py +0 -53
- amicus-0.1.0/tests/test_release_state.py +0 -452
- amicus-0.1.0/tests/test_results.py +0 -128
- amicus-0.1.0/tests/test_structured.py +0 -10
- amicus-0.1.0/tests/test_surface_honesty.py +0 -44
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/SKILL.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/references/design-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/references/docs-checklist.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/references/examples.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/references/review-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-docs/tests/scenarios.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/SKILL.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/decisions/001-github-fact-sheet.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/audit-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/config-checklist.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/README.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/codeowners.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/harness-deny.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/identity.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/repo-files.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/required-checks.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/rulesets.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/examples/workflows.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/operating-playbook.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/setup-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/references/threat-model.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/tests/check_authority.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-github/tests/scenarios.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/SKILL.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/decisions/001-mcp-2026-07-28-rebase.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/decisions/002-machine-code-rename-rationale.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/decisions/003-offending-value-omission.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/decisions/004-ownership-boundaries.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/contract-checklist.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/design-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/examples.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/mcp-2025-11-25-compat.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/mcp-vs-cli.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/native-wire-shapes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/review-workflow.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/references/vocabulary.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/check_fact_sync.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/check_rule_ids.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/check_stale_terms.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/fixtures/github_issues.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/fixtures/github_repo_resource.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/rule-ids.txt +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-outputschema-error.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario2-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario2-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario3-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario3-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario4-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario4-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario5-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario5-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario6-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario6-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario7-trigger.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario1-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario3-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario3-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario5-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario5-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-30-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-30-scenario8-severity-calibration.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/scenarios.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/test_check_fact_sync.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/test_check_rule_ids.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/test_validate_fixture.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/agent-friendly-mcp/tests/validate_fixture.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/agents/openai.yaml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/references/example-audit.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/rescore-2026-08-06/preregistration.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/rescore-2026-08-06/results.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario1-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario2-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario2-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario3-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario3-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario4-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario4-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario5-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario5-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario6-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario6-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario7-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario7-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario8-baseline.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario8-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario9-trigger.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-06-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-06-scenario6-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-confirmation-r1-both-directions.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario1-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario2-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario5-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario6-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario7-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario8-with-skill.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.agents/skills/separating-context-from-constraints/tests/scenarios.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.claude-plugin/marketplace.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.gitattributes +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/CODEOWNERS +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/dependabot.yml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/workflows/ci.yml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/workflows/codeql.yml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.github/workflows/dependency-review.yml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/.gitignore +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/CLAUDE.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/LICENSE +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/2026-09-04-naming-and-scoping-notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/DEPRECATING-SIBLINGS.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0001-annotations-follow-the-worst-enabled-backend.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0003-workspace-resolution.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0005-error-envelope-and-repair-precedence.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0009-m3-kimi-port-decisions.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0010-m4-claude-port-decisions.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0012-m6-packaging-decisions.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0013-proceed-without-trademark-clearance.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/0014-release-predicate-on-the-tag.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/adr/README.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/claude-help/2.1.263/FINDINGS.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/claude-help/2.1.263/claude-help.txt +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/claude-help/2.1.263/claude-version.txt +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/claude-help/2.1.263/envelope-shape.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/claude-code/2.1.263/FINDINGS.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/claude-code/2.1.263/connection.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/claude-code/2.1.263/host-output.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/codex/0.153.4/FINDINGS.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/codex/0.153.4/connection.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/codex/0.153.4/host-output.jsonl +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/claude-code/2.1.263/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/codex/0.153.4/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/codex/0.153.4/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/install-smoke/codex/0.153.4/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/notes.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/server.log +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/transcript.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/kimi-help/0.41.0/FINDINGS.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/kimi-help/0.41.0/kimi-help.txt +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/kimi-help/0.41.0/kimi-version.txt +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/kimi-help/0.41.0/provider-list-shape.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/reviews/2026-09-07-agent-friendly-mcp-walk.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/docs/superpowers/plans/2026-09-04-amicus-execution-model.md +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/prek.toml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/capture_claude_differentials.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/capture_codex_differentials.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/capture_kimi_differentials.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/check_commit_message.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/check_github_actions_pinning.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/scripts/record_live_gate_evidence.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/appstate.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/cli.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/normalize.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/claude/status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/adapter.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/cli.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/config.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/options.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/codex/status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/adapter.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/cli.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/config.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/normalize.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/options.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/backends/kimi/status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/jobs/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/isolation.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/orchestration/prompts.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/packaging.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/py.typed +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/registry.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/request.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/codes.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/field_policy.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/instructions.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/schemas/options.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/surface.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/src/amicus/tools/_resolve.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/claude_differentials.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/claude_golden_envelope.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/codex_differentials.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/fakebackend/pyproject.toml +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/fakebackend/src/fakebackend/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/fixtures/kimi_differentials.json +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/__init__.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/codexfixtures.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/fake_claude.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/fake_codex.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/fake_kimi.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/fakeplugin.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/support/kimifixtures.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_check_commit_message.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_check_github_actions_pinning.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_argv_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_config.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_normalize.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_result_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_claude_status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_argv_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_cli.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_live.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_plugin.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_result_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_codex_status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_config.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_conftest_guards.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_envspec.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_field_policy.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_host_captures.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_import_contracts.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_instructions.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_isolation.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_job_durability.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_adapter.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_argv_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_binary.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_cli.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_config.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_models.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_normalize.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_plugin.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_result_differential.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_kimi_status.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_live_gate_report.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_live_suite_hygiene.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_obs.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_options.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_plugin.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_prompts.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_publish.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_registry.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_release_evidence.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_request.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_result_format.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_review_artifact.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_run.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_surface.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_taskmap.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_tasks_spike.py +0 -0
- {amicus-0.1.0 → amicus-0.3.0}/tests/test_wheel_seam.py +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: separating-context-from-constraints
|
|
3
2
|
description: Use when auditing or reviewing a skill, system prompt, CLAUDE.md/AGENTS.md, MCP tool or resource description, slash-command prompt, or any document an AI agent consumes as instructions, to check that binding rules are separated from background context. Symptoms include rules buried mid-paragraph in narrative prose, hedged statements ("generally", "try to") that leave unclear whether they bind, untestable directives like "be concise", compound rules bundling several obligations, rule sections padded with explanation, and agents that follow a document's flavor text but miss its requirements. Produces findings with two-level severity and semantic-preserving suggested rewrites; does not score documents, analyze conflicts with parent instruction layers, or review general prose quality.
|
|
3
|
+
metadata:
|
|
4
|
+
github-path: separating-context-from-constraints
|
|
5
|
+
github-ref: refs/heads/main
|
|
6
|
+
github-repo: https://github.com/briandconnelly/skills
|
|
7
|
+
github-tree-sha: 967a99232de22bc967c12a7aefcf272cfe2fb938
|
|
8
|
+
name: separating-context-from-constraints
|
|
4
9
|
---
|
|
5
|
-
|
|
6
10
|
# Separating Context from Constraints
|
|
7
11
|
|
|
8
12
|
Audit agent-consumed instruction documents — skills, system prompts, CLAUDE.md/AGENTS.md, MCP tool and resource descriptions, slash-command prompts — for separation of binding rules from context.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amicus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "One MCP server for every second-opinion model: consult, review, and delegate with the backend as a parameter.",
|
|
5
|
-
"author": { "name": "Brian Connelly" },
|
|
5
|
+
"author": { "name": "Brian Connelly", "url": "https://github.com/briandconnelly" },
|
|
6
6
|
"homepage": "https://github.com/briandconnelly/amicus",
|
|
7
7
|
"repository": "https://github.com/briandconnelly/amicus",
|
|
8
8
|
"license": "MIT",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"interface": {
|
|
14
14
|
"displayName": "amicus",
|
|
15
15
|
"shortDescription": "Consult, review, and delegate to Codex, Kimi, or Claude — one server, backend as a parameter.",
|
|
16
|
-
"longDescription": "amicus gives Claude Code one tool surface for every second-opinion model. Pick the backend as a parameter instead of installing a server per model. Delegation runs in a throwaway git worktree and returns a reviewable diff that is never applied to your working tree. Long jobs run asynchronously with a job id you can poll, cancel, and recover. Enabling a backend that can write makes every tool carry that backend's approval annotations — see docs/MIGRATION.md.",
|
|
16
|
+
"longDescription": "amicus gives Claude Code one tool surface for every second-opinion model. Pick the backend as a parameter instead of installing a server per model. Delegation runs in a throwaway git worktree and returns a reviewable diff that is never applied to your working tree. Long jobs run asynchronously with a job id you can poll, cancel, and recover. Enabling a backend that can write makes every tool carry that backend's approval annotations — see https://github.com/briandconnelly/amicus/blob/main/docs/MIGRATION.md.",
|
|
17
17
|
"developerName": "Brian Connelly",
|
|
18
18
|
"category": "Developer Tools",
|
|
19
19
|
"capabilities": ["MCP", "Skills"],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amicus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "One MCP server for every second-opinion model: consult, review, and delegate with the backend as a parameter.",
|
|
5
|
-
"author": { "name": "Brian Connelly" },
|
|
5
|
+
"author": { "name": "Brian Connelly", "url": "https://github.com/briandconnelly" },
|
|
6
6
|
"homepage": "https://github.com/briandconnelly/amicus",
|
|
7
7
|
"repository": "https://github.com/briandconnelly/amicus",
|
|
8
8
|
"license": "MIT",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"interface": {
|
|
13
13
|
"displayName": "amicus (for Codex)",
|
|
14
14
|
"shortDescription": "Consult, review, and delegate to Codex, Kimi, or Claude — one server, backend as a parameter.",
|
|
15
|
-
"longDescription": "amicus gives Codex one tool surface for every second-opinion model. Pick the backend as a parameter instead of installing a server per model. Delegation runs in a throwaway git worktree and returns a reviewable diff that is never applied to your working tree. Long jobs run asynchronously with a job id you can poll, cancel, and recover. Enabling a backend that can write makes every tool carry that backend's approval annotations — see docs/MIGRATION.md.",
|
|
15
|
+
"longDescription": "amicus gives Codex one tool surface for every second-opinion model. Pick the backend as a parameter instead of installing a server per model. Delegation runs in a throwaway git worktree and returns a reviewable diff that is never applied to your working tree. Long jobs run asynchronously with a job id you can poll, cancel, and recover. Enabling a backend that can write makes every tool carry that backend's approval annotations — see https://github.com/briandconnelly/amicus/blob/main/docs/MIGRATION.md.",
|
|
16
16
|
"developerName": "Brian Connelly",
|
|
17
17
|
"category": "Developer Tools",
|
|
18
18
|
"capabilities": ["MCP", "Skills"],
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Copilot code review instructions
|
|
2
|
+
|
|
3
|
+
Review guidance for GitHub Copilot code review in this repository.
|
|
4
|
+
`AGENTS.md` holds the rules every contributor and reviewer works under; this file adds what a reviewer needs on top of it and does not restate it.
|
|
5
|
+
Rule numbers below refer to the numbered list under "Rules" in `AGENTS.md`.
|
|
6
|
+
Copilot reads this file from a pull request's head branch, so the pull request that changes it is reviewed under the changed version.
|
|
7
|
+
|
|
8
|
+
## Rules
|
|
9
|
+
|
|
10
|
+
1. When a comment enforces a numbered `AGENTS.md` rule, name the rule number.
|
|
11
|
+
A convention that only the surrounding code establishes needs no citation; describe the pattern the change breaks instead.
|
|
12
|
+
2. Never propose a new or widened contract as a review fix: a tool name, parameter, description claim, error code, value enum or result envelope the pull request did not already change, or a change to the persisted result shape.
|
|
13
|
+
The surface categories are listed in `FINGERPRINT_COVERS` (`src/amicus/schemas/fingerprint.py`); a change there moves `FINGERPRINT` (rule 10), and a persisted-shape change moves `RESULT_FORMAT` (rule 11); the test that guards each pin states the commit shape it requires.
|
|
14
|
+
A new contract is a design decision, made in a milestone plan or by the maintainer, so state the concern and say that it needs a decision.
|
|
15
|
+
Do ask that a contract the pull request changes match its implementation, its plan and its stated intent; that is a correction, and it still moves the version it touches.
|
|
16
|
+
3. Never propose a hand edit to a generated pin: the `*_snapshot.json` and `*_differentials.json` files under `tests/fixtures/`, or `uv.lock`.
|
|
17
|
+
The test that guards each pin names the command that regenerates it; if a pin looks wrong, say which source of truth it disagrees with.
|
|
18
|
+
`tests/fixtures/fakebackend/` is source for the wheel-seam test and is edited by hand.
|
|
19
|
+
4. Before flagging a rule-18 violation, read rule 18's exemptions from `AGENTS.md` itself and check the path against them; never flag a use of one of those exemptions, and flag every path rule 18 does not exempt.
|
|
20
|
+
5. For every defect, give a concrete input or sequence that produces the wrong outcome; if you cannot, label the comment a question.
|
|
21
|
+
6. Do not report what a gate command reports on its own: a lint, format, type, import-boundary or test failure, or a Markdown claim that a test pins (see Context).
|
|
22
|
+
7. Put one issue in each comment, and say whether it blocks merging or is optional.
|
|
23
|
+
8. When a test is added or changed, check that its assertion can fail: name the change to the code under test that would turn it red, and flag the test if there is none.
|
|
24
|
+
9. When prose describes code (a tool description, a docstring, a README section, `CHANGELOG.md`, an ADR), check the claim against the source in the same pull request and flag any claim the code does not bear out.
|
|
25
|
+
10. Under `docs/`, flag a prose paragraph that wraps one sentence across several lines (rule 16).
|
|
26
|
+
11. Under `.github/workflows/`, check the change against rules 14, 15 and 22 and name the one it breaks.
|
|
27
|
+
|
|
28
|
+
## Context
|
|
29
|
+
|
|
30
|
+
### What the gate already checks
|
|
31
|
+
|
|
32
|
+
Rule 2 in `AGENTS.md` defines the gate; CI runs it, preceded by the Actions-pinning check (rule 3).
|
|
33
|
+
Some tests pin Markdown surfaces against the code, for example `docs/MIGRATION.md`'s tool and parameter names and the README install pin; a claim one of those tests pins is gate-covered.
|
|
34
|
+
Nothing in the gate checks prose style, so rule 16, stale claims no test pins and unpinned drift between documentation and code are reviewer work.
|
|
35
|
+
|
|
36
|
+
### Where the risk concentrates
|
|
37
|
+
|
|
38
|
+
- Rule 18 governs every path a prompt input (`INPUT_FIELDS` in `src/amicus/request.py`) can take.
|
|
39
|
+
Any new log line, error message, argv construction, fixture or committed capture that can carry one of those values is the highest-value place to look.
|
|
40
|
+
- `src/amicus/jobs/delivery.py` is the chokepoint through which every stored result is delivered; a schema gap there reaches every client.
|
|
41
|
+
- `scripts/check_release_state.py`, `scripts/record_live_gate_evidence.py`, `.github/workflows/publish.yml` and `docs/RELEASING.md` implement rules 19 to 24; check that a change to one keeps the others true.
|
|
42
|
+
- `tests/conftest.py` carries the rule-6 guard and `tests/support/fake_codex.py` stands in for the real CLI, so a test that would only pass with a real `codex`, `kimi` or `claude` on `PATH` is a defect.
|
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
23
23
|
with:
|
|
24
24
|
persist-credentials: false
|
|
25
|
-
- uses: astral-sh/setup-uv@
|
|
25
|
+
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
26
26
|
- run: uv build
|
|
27
27
|
- run: uv run --with twine twine check dist/*
|
|
28
28
|
- name: The built wheel's console script must start a real MCP server
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
persist-credentials: false
|
|
71
71
|
# Full history and tags: the check reads the annotated tag OBJECT, not just the ref.
|
|
72
72
|
fetch-depth: 0
|
|
73
|
-
- uses: astral-sh/setup-uv@
|
|
73
|
+
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
74
74
|
- name: The tagged tree and the tag must satisfy the release predicate
|
|
75
75
|
# See scripts/check_release_state.py for what a pass does and does not prove. In
|
|
76
76
|
# short: the tree's release-state coherence is proven; the live-gate record carried in
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
20
|
with:
|
|
21
21
|
persist-credentials: false
|
|
22
|
-
- uses: astral-sh/setup-uv@
|
|
22
|
+
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
23
23
|
with:
|
|
24
24
|
python-version: ${{ matrix.python-version }}
|
|
25
25
|
enable-cache: true
|
|
@@ -33,10 +33,11 @@ The rules bind; the context after them explains and points elsewhere.
|
|
|
33
33
|
Prompt text that a test or capture script assembles entirely from its own literals is exempt, including the `build_*_prompt` output committed in `tests/fixtures/*_differentials.json`; it stays verbatim, because a differential must show what changed and a hash cannot.
|
|
34
34
|
No exemption reaches text that was copied, derived or replayed from a prompt anyone sent: that stays bound however it is later stored or relabelled.
|
|
35
35
|
19. Release in two PRs: the work lands with the version literals untouched, then a `chore(release):` PR moves them together and rolls `## [Unreleased]` in `CHANGELOG.md` into a dated section.
|
|
36
|
-
The literals are `pyproject.toml`, `src/amicus/__init__.py`, `.claude-plugin/plugin.json
|
|
36
|
+
The literals are `pyproject.toml`, `src/amicus/__init__.py`, `.claude-plugin/plugin.json` and `.codex-plugin/plugin.json`.
|
|
37
|
+
`.mcp.json`'s pin is NOT one of them; rule 24 governs it, and a release must not touch it.
|
|
37
38
|
`uv.lock` mirrors the version rather than declaring it: regenerate it in that same PR with `uv lock`, or the `uv lock --check` hook fails.
|
|
38
39
|
Only the maintainer merges that PR, and only the maintainer pushes the tag.
|
|
39
|
-
Push the matching tag
|
|
40
|
+
Push the matching tag before any other work follows that merge: until it exists, `main` declares a version that has no release.
|
|
40
41
|
20. Never push a `v*` tag unless the three live gates — `tests/test_codex_live.py`, `tests/test_kimi_live.py` and `tests/test_claude_live.py`, run under rule 5 — have all PASSED on that exact commit, with those passing outcomes recorded.
|
|
41
42
|
The record is `.release-evidence/live-gates.json`, written by `scripts/record_live_gate_evidence.py`, naming that commit, each suite and its outcome; a terminal transcript or a recollection is not a record.
|
|
42
43
|
A record showing a failed suite does not satisfy this rule; it is a reason not to tag.
|
|
@@ -46,6 +47,9 @@ The rules bind; the context after them explains and points elsewhere.
|
|
|
46
47
|
Never move a release check into the `pypi` job: GitHub holds every step of an environment job behind that environment's required reviewer, so a check placed there runs only after the approval it exists to inform.
|
|
47
48
|
23. Never describe the rule-20 record, in any document or output, as proof that the live gates ran.
|
|
48
49
|
It is the maintainer's assertion, machine-checked for shape and for naming the tagged commit; the runs happen on the maintainer's machine and the record is written there.
|
|
50
|
+
24. `.mcp.json`'s `--from` pin names a release that is already published, never the one being released, and it may never name a version newer than the one the tree declares.
|
|
51
|
+
A release PR under rule 19 leaves it untouched; move it to the new tag in its own `chore(release):` PR after that tag is published and its install has been checked.
|
|
52
|
+
That PR is not a release: it needs no rule-20 evidence, because it moves a pointer to a tag that already exists.
|
|
49
53
|
|
|
50
54
|
## Context
|
|
51
55
|
|
|
@@ -72,21 +76,26 @@ The README's "Where things are" table indexes the rest.
|
|
|
72
76
|
|
|
73
77
|
### Releases
|
|
74
78
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
`.mcp.json` pins `git+https://github.com/briandconnelly/amicus.git@v{version}`, and that pin is what a fresh plugin install actually fetches: users add this repository as a marketplace, so the manifest they read is the one on `main`.
|
|
80
|
+
Rule 24 therefore keeps it naming a release that is already published rather than the one being released.
|
|
81
|
+
A manifest on `main` cannot name an artifact that only exists after `main` has moved, and pinning the version under release meant every release broke a fresh install for the interval between the release merge and the tag push.
|
|
82
|
+
Rule 24 removes that interval rather than shortening it.
|
|
83
|
+
Two facts decided the shape, and both were established by probe rather than argued: a commit SHA resolves over the same git transport a tag does, so the install path can be rehearsed before any tag exists; and `uvx` reuses a cached tool environment without querying any index, so the version in the requirement string is what makes an existing user pick up a new release — which is why an unpinned source was rejected rather than adopted.
|
|
84
|
+
0.1.0 was the bootstrap, tagged and published on 2026-09-09; it named the tag it created because no earlier release existed, and that case cannot recur.
|
|
79
85
|
Rule 20 is a local pre-tag gate rather than a CI job: hosted runners have no authenticated `codex`, `kimi` or `claude`, so the evidence is recorded on the maintainer's machine against the exact commit to be tagged.
|
|
80
86
|
That evidence is an honest-mistake guard, not an attestation; it is a local file its author can write by hand.
|
|
81
87
|
Rule 21 covers creation as well as update and deletion because pushing a `v*` tag is by itself what triggers `.github/workflows/publish.yml`: an identity that can create one can publish a release without rules 19 and 20 ever being satisfied, and a moved tag silently changes what users install under a version they already trust.
|
|
82
|
-
|
|
88
|
+
That ruleset now exists — `release tags`, active, covering `refs/tags/v*` and restricting creation, update and deletion — and 0.1.0 was tagged under it.
|
|
89
|
+
Its bypass list is the part an agent here cannot check: the ruleset response seen from this repository's agent token carries no `bypass_actors` key at all.
|
|
90
|
+
GitHub omits that key from responses to requesters without sufficient permission on the ruleset rather than returning an empty list, so its absence is not evidence that nobody may bypass, and must never be reported as though it were.
|
|
91
|
+
`docs/RELEASING.md` reads that back with the maintainer's own token rather than assuming it.
|
|
83
92
|
The executable procedure — preconditions, the evidence run, the environment approval pause and the post-tag checks — is `docs/RELEASING.md`.
|
|
84
93
|
|
|
85
94
|
Rules 20, 22 and 23 are shaped by what a CI job can and cannot establish, which is the subject of ADR 0014 and of issue #25 before it.
|
|
86
95
|
The `verify` job runs `scripts/check_release_state.py` on the tagged commit, and the two halves of that script are worth different amounts.
|
|
87
96
|
Its release-state coherence half **proves** what it reports: every version literal rule 19 names, the dated `CHANGELOG.md` section, and `uv.lock` are all facts of the tagged tree.
|
|
88
97
|
Its live-gate half checks only that the record carried on the tag is well formed, names this commit and asserts three passing suites — never that those suites ran, which is why rule 23 forbids saying otherwise.
|
|
89
|
-
Everything else rule 19 requires is a convention no CI job can prove: two PRs, an ordinary merge commit rather than a squash, the maintainer merging rather than an agent, and the tag pushed
|
|
98
|
+
Everything else rule 19 requires is a convention no CI job can prove: two PRs, an ordinary merge commit rather than a squash, the maintainer merging rather than an agent, and the tag pushed promptly after the merge.
|
|
90
99
|
Those are held by the platform controls around the release — rule 21's ruleset and the `pypi` environment's required reviewer — and by whoever runs the procedure, and this repository states that plainly rather than implying the workflow checks it.
|
|
91
100
|
|
|
92
101
|
### Siblings
|