deviatdd 2.23.0__tar.gz → 2.23.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deviatdd-2.23.0 → deviatdd-2.23.1}/CHANGELOG.md +2 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/PKG-INFO +6 -6
- {deviatdd-2.23.0 → deviatdd-2.23.1}/README.md +5 -5
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pyproject.toml +1 -1
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/DeviaTDD-api.md +35 -29
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/DeviaTDD-architecture.md +27 -20
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/issues.jsonl +11 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/__init__.py +96 -31
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/meso.py +3 -3
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/agent.py +14 -3
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/commands.py +7 -4
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/config.py +3 -3
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_init.py +28 -83
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_meso.py +5 -4
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_micro.py +2 -2
- deviatdd-2.23.1/tests/test_cli/test_setup.py +104 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_agent.py +73 -1
- {deviatdd-2.23.0 → deviatdd-2.23.1}/uv.lock +1 -1
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/.gitignore +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/config.toml +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/evaluations/deviate-flows-skill-2026-06-26.json +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.env.example +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.gitattributes +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.githooks/pre-commit +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.githooks/pre-push +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/workflows/ci.yml +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/workflows/release.yml +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.gitignore +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/.opencode/opencode.json +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/AGENTS.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/CLAUDE.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/CODE_OF_CONDUCT.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/CONTRIBUTING.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/LICENSE +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/SECURITY.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/deviatdd.png +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/mise.toml +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/001-deviate-cli-python/008-meso-macro-automated-orchestration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/adhoc/006-context-cli-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/adhoc/017-optional-push-as-lock.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-001-cli-initialization-governance-provisioning-pr-11.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-003-meso-layer-specification-task-decomposition.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-004-micro-layer-tdd-sandbox-execution.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-005-cli-architecture-realignment-skill-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-007-macro-meso-parity-backward-compatibility.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-001-foundation-cli-infrastructure.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-003-fast-path-commands.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-004-governance-inspection.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-001-streaming-pipeline-monitor.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-008-ast-phase-prioritization.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-017-two-counter-tdd-retry.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat_002-deviatdd-gap-analysis_001-foundation-cli-infrastructure.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/benchmark_lmstudio.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/next_version.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/verify_install.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t001.json +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t002.json +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t004.json +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/data-model.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/design.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/001-cli-initialization-governance-provisioning.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/002-macro-layer-state-ledger-management.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/003-meso-layer-specification-task-decomposition.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/004-micro-layer-tdd-sandbox-execution.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/005-cli-architecture-realignment-skill-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/006-state-persistence-concurrency-safety.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/007-macro-meso-parity-backward-compatibility.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/008-meso-macro-automated-orchestration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/data-model.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/design.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/001-foundation-cli-infrastructure.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/002-context-pipeline.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/003-fast-path-commands.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/004-governance-inspection.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/005-micro-layer-integrity.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/plan-tdd-integration-gap.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/003-graphite-cli-integration/explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/004-per-task-security-profile/issues/001-security-profile-and-judge-checks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/data-model.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/design.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/001-verification-mode-metadata.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/002-task-acceptance-traceability.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/003-micro-phase-gates-red-green.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/004-refactor-regression-gate.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/005-prompt-spec-alignment.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/architecture.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/domain-model.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/flows-product.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/flows-streaming.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/index.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-current-system.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-gap-register.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-git-state-model.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-rewrite.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-rust-tui-requirements.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/release-next.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/spec.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/015-narrow-product-flow-scope/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/015-narrow-product-flow-scope/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/018-one-behavior-rgr-granularity/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/018-one-behavior-rgr-granularity/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/tasks.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/001-streaming-pipeline-monitor.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/002-aider-agent-backend-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/003-meso-layer-restructuring.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/004-deviate-review-skill.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/005-per-phase-model-configuration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/006-context-cli-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/007-graphite-cli.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/008-ast-phase-prioritization.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/009-pi-agent-backend-integration.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/010-deviate-setup-product-layer.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/012-rpc-streaming-tui-renderer.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/013-flow-ledger-canonical-source-of-truth.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/014-cwe-mapping-security-findings.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/015-narrow-product-flow-scope.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/016-single-source-prompt-templates.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/017-optional-push-as-lock.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/017-two-counter-tdd-retry.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/018-one-behavior-rgr-granularity.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/019-remote-aware-ordinal-allocation.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/020-judge-compliance-pass-evidence.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/021-no-failing-test-escalate-invokes-green.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/022-already-satisfied-red-requires-tests.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/023-pinned-micro-run-issue-scoped.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/024-worktree-session-stale-issue-id.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/025-green-stderr-noise-stall-detector.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/026-pi-spawn-lean-tool-schema.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/027-red-hang-timeout-rollback.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/028-task-scoped-judge-review-coverage.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/029-ponytail-pruning-in-review.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/030-config-rework.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/031-judge-revert-boundary-no-failing-test.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/032-judge-feedback-injection-fail-close.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc.jsonl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/constitution.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/ast-tree-sitter.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/config-rework.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/flow-ledger.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/graphite-cli.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/pi-agent-backend.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/ponytail-pruning.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/product-layer.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/rpc-streaming-tui.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/rpc-streaming.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/security-hardening-cwe.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/implementation-gap.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_common.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_html.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_safe_commands.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/adhoc.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/constitution.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/feature.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/flow_commands.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/init.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/inspect.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/macro.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/micro.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/review.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/walkthrough.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/_shared.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/cache_discipline.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/commit.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/complexity.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/constitution.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/contract.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/convention.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/epic.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/issues.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/judge_evidence.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/prd.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/profile.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/repo.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/review_coverage.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/run_logger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/tasks_ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/validation.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/worktree.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/architecture.html.tmpl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/domain-model.html.tmpl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/flows.html.tmpl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/plan.html.tmpl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/prd.html.tmpl +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/main.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/assembly.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/execute.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/green.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/judge.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/red.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/refactor.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/research.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/shard.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/specify.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-adhoc.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-architecture.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-constitution.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-e2e.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-execute.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-explore.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-flows.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-green.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-hotfix.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-html.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-init.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-judge.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-merge.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-plan.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-pr.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-prd.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-prune.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-red.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-refactor.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-release.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-research.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-review.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-shard.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-tasks.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-triage.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-walkthrough.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/constitution_seed.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/core.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/lifecycle-auto.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/lifecycle-manual.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/macro-shared.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/meso-shared.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/micro-shared.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/product-shared.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/style-ste.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/agents_seed.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/claudemd_seed.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/libref_seed.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/skills/deviatdd/SKILL.md +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/monitor.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/pipeline.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/render.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/visual/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/conftest.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/test_agent.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/test_smart_stall.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_derived_command_install.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_green_stderr_stall.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_macro_workflow.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_optional_push_as_lock.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_pi_spawn_lean_tool_schema.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_red_hang_timeout_rollback.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_review_plan_ac_coverage.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_worktree_session_stale_issue.bats +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_adhoc.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_common.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_constitution.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_feature.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_flows_sync.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_help.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_html.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_inspect.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_macro_contracts.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_main_entrypoint.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_merge.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_meso_contracts.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_real_descendant_kill.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_review.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_safe_commands.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_test_command_resolution.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_timeout_safe_command.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_top_level_run.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_cache_discipline.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_commands.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_commit.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_complexity.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_constitution.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_contract.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_convention.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_epic.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_flow_confirmation.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_issues.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_judge_evidence.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_prd.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_profile.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_repo.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_run_logger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_tasks_ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_validation.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_worktree.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_init.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/conftest.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_command_installation.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_init_export_cycle.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_full_cycle.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_layer.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_orchestration.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_layer.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_orchestration.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_task_ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_parity.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_skill_installation.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_explore.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_macro_model_routing.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_macro_orchestration.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_prd.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_research.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_shard.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_auto_prompt_templates.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_model_routing.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_orchestration.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_resume.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_plan_structure_injection.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_pr_platform.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_prompt_assembly.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_specify.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_tasks.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/conftest.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_commit_failure.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_completed_evidence.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_e2e.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_execute.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_green.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_hotfix.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_judge.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_orchestration.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_output_filter.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_red.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_refactor.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_review_pause.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_rollback_safety.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_run.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_task_label.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_two_counter_retry.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_release/test_next_version.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_config.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_ledger.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_security_profile.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_session.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/__init__.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_monitor.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_pipeline.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_render.py +0 -0
- {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_visual_demo/test_tsk_001_01.py +0 -0
|
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
|
+
- **ChatGPT Codex is a first-class setup + meso/micro backend.** `--agent codex` (and the interactive prompt) is a valid install target. Setup writes packaged skills to `.agents/skills/deviatdd/SKILL.md` plus one `.agents/skills/<command>/SKILL.md` per slash command (Codex CLI 0.117+ dropped `.codex/prompts`). `[agent].backend = "codex"` is persisted. Dispatch uses `codex exec --sandbox workspace-write --ask-for-approval never` with the existing stdin prompt path and `--model` injection. Transport stays `cli`. Pinned by `tests/test_cli/test_setup.py::TestSetupCodex` and `tests/test_core/test_agent.py::TestCodexBackendRegistration`.
|
|
11
12
|
- **On-demand GitHub Actions Release workflow (`workflow_dispatch`).** A maintainer runs Actions → Release → Run workflow. The job computes the next SemVer from conventional commits since the current `pyproject.toml` version (`feat` → minor, `fix` → patch, `BREAKING CHANGE` / `feat!` / `fix!` → major; chore/docs/test/ci/style/refactor still bump patch), writes `pyproject.toml` + the `deviatdd` version in `uv.lock`, commits `chore(release): version X.Y.Z` on the default branch, tags `vX.Y.Z`, and publishes with `uv build` / `uv publish --trusted-publishing always` (PyPI trusted publishing via GitHub OIDC; `contents: write` + `id-token: write`; no `PYPI_API_TOKEN` and no GitHub secret). Optional inputs: `bump` (`auto` / `patch` / `minor` / `major`) and `dry_run` (print the version; skip commit/tag/publish). Refuses a non-default branch unless `dry_run` is true. Does not rewrite `CHANGELOG.md` (stays `[Unreleased]`). Operator adds a pending PyPI trusted publisher for `wernerbisschoff/deviatdd` workflow `release.yml` (no environment). Local fallback remains `mise run publish`. Pinned by `tests/test_release/test_next_version.py`.
|
|
12
13
|
- **COMPLETED `tasks.jsonl` rows now persist runner-validated JUDGE evidence (GH-84).** After the #65 mechanical gate accepts a TDD completion path (`skip_refactor` / bare `COMPLIANCE_PASS` / post-REFACTOR complete / adjudicated already-exists), `_append_status_transition(..., "COMPLETED")` copies `HandoverManifest.evidence` (`ac`, `test_path`, `test_quote`, `impl_path`, `impl_quote`) onto an optional `TaskRecord.evidence` bundle and stamps `red` (`session.red_commit_sha`) plus `green`/`head` (`HEAD` at the write). TDD complete fail-closes when the plan contract has `AC-PLAN-NNN` tokens and the bundle is missing or does not cover them (`evaluate_judge_evidence`, no new matcher). EXECUTE / IMMEDIATE / DIRECT stay ungated; enabling/infra plans with no AC tokens may complete with empty evidence. `deviate inspect tasks show` prints the field when present. Session files are not the proof store. Pinned by `tests/test_micro/test_completed_evidence.py`, `tests/test_state/test_ledger.py`, and `tests/test_cli/test_inspect.py`.
|
|
13
14
|
- **`deviate micro run --review` pauses before each phase commit (GH-101).** After the agent finishes a phase and tests/lint have run, `--review` (and `--all --review`) halt before `_commit_phase` / `_commit_phase_with_recovery` (`git add -A`), print `REVIEW_PAUSE <phase> <task_id>`, leave the worktree dirty for herdr/hunk, and wait for TTY confirmation (`Enter` / yes). Then the runner commits as today and continues. Pause applies to RED, GREEN, REFACTOR, and EXECUTE — not JUDGE feedback commits. RED is still committed before GREEN so `session.red_commit_sha` remains available for JUDGE `revert_to_red`. Non-TTY / `--json` / missing stdin fail closed with `REVIEW_REQUIRES_TTY` and never auto-commit past the flag. Off by default; no config key. The pause is one helper (`_maybe_review_pause`) in front of `_commit_phase`, not a copy in each phase. Pinned by `tests/test_micro/test_review_pause.py`.
|
|
@@ -55,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
55
56
|
- **`/deviate-merge` no longer auto-pushes after the squash-merge commit; the push gate runs inline and the network push is opt-in.** The slash command previously ran `git push` as its final step. As of v2.4.0 the squash-merge commit lands on `main`, then a new `push_gate` step inlines the body of `.githooks/pre-push` (lint + format-check + testmon-driven affected tests with the warm-cache / full-suite fallback — bash 3.2 portable, `GIT_DIR` reset + trap preserved) so the safety net fires even though no `git push` happens yet. After the gate passes the skill asks the operator whether to `git push` (which fires the real `pre-push` hook and re-runs the same gate) or stop and push manually. The squash-merge commit and the ledger transition inside it are durable on `main` regardless of the push outcome — only the network push is deferred. New failure states: `Push_Gate_Failed` (inline gate non-zero), `Push_Failed` (`git push` non-zero, raw stderr surfaced), `Push_Deferred` (user chose "Stop — I'll push manually"). Inline gate body and `.githooks/pre-push` body must stay byte-equivalent; divergence is pinned by `tests/test_meso/test_auto_prompt_templates.py::TestMergePromptPushGate::test_hook_and_prompt_agree_on_gate_body` (which compares non-blank non-comment lines in both bodies and fails on drift in either direction) plus 3 supporting assertions on the upstream-first logic, the testmon fallback, and the prompt structure. Prompt: `src/deviate/prompts/commands/deviate-merge.md` (v2.3.0 → v2.4.0). Spec mirrors updated: `specs/DeviaTDD-architecture.md` (Merge bullet, new `**Push gate + opt-in push (v2.4.0)**` sub-bullet) and `specs/DeviaTDD-api.md` (new `**/deviate-merge push behavior (v2.4.0)**` entry under the `deviate merge` reference).
|
|
56
57
|
|
|
57
58
|
### Fixed
|
|
59
|
+
- **`deviate setup --agent X` now installs slash commands and the packaged `deviatdd` skill only for X.** Previously setup wrote into all five of `.claude/`, `.opencode/`, `.factory/`, `.pi/`, and `.omp/` regardless of `--agent`; the flag only persisted `[agent].backend`. `droid` still writes `.factory/` only. Unknown `--agent` values stay fail-closed. Pinned by `tests/test_cli/test_setup.py::TestSetupSelectedAgentIsolation`.
|
|
58
60
|
- **JUDGE prompt injection now uses the Judge-Feedback-stripped task card (GH-118).** `_build_auto_prompt("judge")` still reads the raw card via `_task_card_text`, then applies the same `_strip_judge_feedback` pass that `resolve_task_ac_tokens` already used for token resolution (#89). Prior-round `**Judge Feedback**` bullets and their continuation lines (including false ownership claims such as "AC-PLAN-003 belongs to a later task") no longer appear in `<task_card>`. Token resolution, `_append_judge_feedback`, and the COMPLETED evidence gate are unchanged. Specs: `specs/DeviaTDD-api.md`, `specs/DeviaTDD-architecture.md`. Pinned by `tests/test_micro/test_judge.py::TestJudgePromptStripsJudgeFeedback`.
|
|
59
61
|
- **Ledger appenders no longer concatenate a new JSONL record onto a last line that lacks a trailing newline (GH-117).** `_append_record` and `_append_with_compound_key` insert a leading `\n` when the file is non-empty and does not already end in a newline, so `_read_ledger` cannot skip a fused BACKLOG+SPECIFIED line. `claim_issue` now writes through `append_issue_transition` instead of a raw `"a"` append. Pinned by `tests/test_state/test_ledger.py` and `tests/test_core/test_issues.py`.
|
|
60
62
|
- **JUDGE handover parse now recovers unescaped `"` inside evidence quote fields (GH-116).** `AgentBackend.parse_output` retries `yaml.safe_load` after rewriting broken `quote` / `test_quote` / `impl_quote` double-quoted scalars as `|` block scalars, so citations such as `assert "YAGNI" in text` and `== ["AC-PLAN-002"]` no longer raise `MalformedHandoverManifestError`. Well-formed YAML is unchanged. The auto judge prompt also prefers `|` block scalars when a quote contains `"`. Pinned by `tests/test_core/test_agent.py`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deviatdd
|
|
3
|
-
Version: 2.23.
|
|
3
|
+
Version: 2.23.1
|
|
4
4
|
Summary: DeviaTDD CLI — agent orchestration framework
|
|
5
5
|
Project-URL: Homepage, https://github.com/wernerbisschoff/deviatdd
|
|
6
6
|
Project-URL: Repository, https://github.com/wernerbisschoff/deviatdd
|
|
@@ -74,11 +74,11 @@ deviate --version # confirm install
|
|
|
74
74
|
|
|
75
75
|
# Bootstrap a new project + install slash commands into your agent of
|
|
76
76
|
# choice. Does it all in one shot: scaffolds .deviate/, specs/constitution.md,
|
|
77
|
-
# governance blocks, and installs /deviate-* slash commands for
|
|
78
|
-
#
|
|
79
|
-
#
|
|
80
|
-
#
|
|
81
|
-
deviate setup --agent claude # or: opencode | pi | droid | factory | omp
|
|
77
|
+
# governance blocks, and installs /deviate-* slash commands for the
|
|
78
|
+
# selected agent only. The --agent flag picks the backend persisted to
|
|
79
|
+
# .deviate/config.toml and is the only install target (`droid` writes
|
|
80
|
+
# `.factory/`; `codex` writes `.agents/skills/`).
|
|
81
|
+
deviate setup --agent claude # or: opencode | pi | droid | factory | omp | codex
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
Once setup is done, drive the entire lifecycle from inside your agent. Each phase emits a single artifact, commits it, and (at the two gates) pauses for human review.
|
|
@@ -41,11 +41,11 @@ deviate --version # confirm install
|
|
|
41
41
|
|
|
42
42
|
# Bootstrap a new project + install slash commands into your agent of
|
|
43
43
|
# choice. Does it all in one shot: scaffolds .deviate/, specs/constitution.md,
|
|
44
|
-
# governance blocks, and installs /deviate-* slash commands for
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
deviate setup --agent claude # or: opencode | pi | droid | factory | omp
|
|
44
|
+
# governance blocks, and installs /deviate-* slash commands for the
|
|
45
|
+
# selected agent only. The --agent flag picks the backend persisted to
|
|
46
|
+
# .deviate/config.toml and is the only install target (`droid` writes
|
|
47
|
+
# `.factory/`; `codex` writes `.agents/skills/`).
|
|
48
|
+
deviate setup --agent claude # or: opencode | pi | droid | factory | omp | codex
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
Once setup is done, drive the entire lifecycle from inside your agent. Each phase emits a single artifact, commits it, and (at the two gates) pauses for human review.
|
|
@@ -31,14 +31,15 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
31
31
|
constitution. `deviate init pre` continues to scaffold the constitution independently.
|
|
32
32
|
slash commands + 1 standalone `tools-mcp-servers` command (for Factory Droid)
|
|
33
33
|
— 25 flat `.md` files total in the Factory install; 24 in every other agent
|
|
34
|
-
`.{agent}/prompts/` for Pi) during `deviate setup`. Commands land in
|
|
35
|
-
|
|
36
|
-
`.factory/commands
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
`
|
|
41
|
-
|
|
34
|
+
`.{agent}/prompts/` for Pi) during `deviate setup`. Commands land only in the
|
|
35
|
+
selected agent's directory — `.claude/commands/`, `.opencode/commands/`,
|
|
36
|
+
`.factory/commands/` (`--agent factory` and `--agent droid`), `.pi/prompts/`,
|
|
37
|
+
`.omp/prompts/`, or Codex skills under `.agents/skills/<name>/SKILL.md`.
|
|
38
|
+
Each command is a flat `<name>.md` file (or a Codex `SKILL.md`) with a
|
|
39
|
+
minimal YAML frontmatter (`name:` + `description:`). The agent selected via
|
|
40
|
+
`--agent` (`opencode`, `claude`, `droid`, `factory`, `pi`, `omp`, `codex`)
|
|
41
|
+
is persisted to `[agent].backend` in `config.toml` and is the only install
|
|
42
|
+
target.
|
|
42
43
|
|
|
43
44
|
**Single-source prompt derivation:** for each of the 11 overlapping phases
|
|
44
45
|
(`explore`, `research`, `prd`, `shard`, `plan`, `tasks`, `red`, `green`,
|
|
@@ -84,8 +85,8 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
84
85
|
duplicates rules), preserves user-authored `.gitattributes` content,
|
|
85
86
|
and stages the file via `deviate init post` alongside the other
|
|
86
87
|
scaffolded artifacts.
|
|
87
|
-
* **Agent Selection:** Accepts `--agent [claude|opencode|droid|factory|pi]` to override
|
|
88
|
-
|
|
88
|
+
* **Agent Selection:** Accepts `--agent [claude|opencode|droid|factory|pi|omp|codex]` to override
|
|
89
|
+
the persisted backend. If omitted, the persisted value is reused; if no persisted value exists and
|
|
89
90
|
the session is interactive, a Rich `Prompt.ask` menu is shown. In non-interactive mode
|
|
90
91
|
the command halts with `NO_AGENT_SELECTED` and a directive to re-run with `--agent`.
|
|
91
92
|
* **Execution Modes:**
|
|
@@ -106,7 +107,7 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
106
107
|
`${VARIABLE}` resolver described in earlier revisions of this spec has been removed.
|
|
107
108
|
* **Input Parameters:**
|
|
108
109
|
* `--agent-export-mode [local|global]` (Defaults to `local`)
|
|
109
|
-
* `--agent [claude|opencode|droid|factory|pi]` (Override
|
|
110
|
+
* `--agent [claude|opencode|droid|factory|pi|omp|codex]` (Override persisted backend)
|
|
110
111
|
* `--no-claim-remote` (Disable push-as-lock; merges `claim_remote = false` into
|
|
111
112
|
* `--libref` (Force-enable `libref` CLI integration; merges `use_libref = true` into
|
|
112
113
|
`config.toml`)
|
|
@@ -134,9 +135,10 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
134
135
|
* `specs/constitution.md` — Resolved boilerplate constitution
|
|
135
136
|
* `AGENTS.md` — Symlink to `CLAUDE.md` (or vice-versa if only `AGENTS.md`
|
|
136
137
|
existed pre-setup). Created by `_linkify_governance_files`; idempotent.
|
|
137
|
-
*
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
* Selected-agent command install only: `.claude/commands/`,
|
|
139
|
+
`.opencode/commands/`, `.factory/commands/`, `.pi/prompts/`,
|
|
140
|
+
`.omp/prompts/`, or `.agents/skills/<name>/SKILL.md` for Codex.
|
|
141
|
+
Factory also receives the standalone `tools-mcp-servers` command.
|
|
140
142
|
|
|
141
143
|
#### `deviatdd` Skill (Project-Local Single Skill)
|
|
142
144
|
|
|
@@ -147,21 +149,19 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
147
149
|
`src/deviate/cli/__init__.py`, called from `setup()` after
|
|
148
150
|
`_install_commands_to_agents(...)`. Idempotent (content-equality skip
|
|
149
151
|
mirrors `install_command`'s contract).
|
|
150
|
-
* **Install
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
`
|
|
155
|
-
|
|
156
|
-
skills directory for their platform, ready to be picked up if/when
|
|
157
|
-
that platform ships a discovery convention.
|
|
152
|
+
* **Install target (selected agent only):** the skill is written to
|
|
153
|
+
`<workdir>/.<agent>/skills/deviatdd/SKILL.md` for the agent passed to
|
|
154
|
+
`--agent` (or the persisted backend / interactive prompt). `droid`
|
|
155
|
+
normalizes to `factory`. Codex writes
|
|
156
|
+
`<workdir>/.agents/skills/deviatdd/SKILL.md` and does **not** write
|
|
157
|
+
`.codex/prompts` or `.codex/commands`.
|
|
158
158
|
* `claude` -> `<workdir>/.claude/skills/deviatdd/SKILL.md`
|
|
159
159
|
(verified — same form as user-level `~/.claude/skills/<name>/SKILL.md`).
|
|
160
160
|
* `opencode` -> `<workdir>/.opencode/skills/deviatdd/SKILL.md`
|
|
161
161
|
(no documented project-local skills convention; file on disk for
|
|
162
162
|
forward-compat).
|
|
163
163
|
* `factory` -> `<workdir>/.factory/skills/deviatdd/SKILL.md`
|
|
164
|
-
(same as opencode).
|
|
164
|
+
(same as opencode; `--agent droid` uses this path).
|
|
165
165
|
* `pi` -> `<workdir>/.pi/skills/deviatdd/SKILL.md`
|
|
166
166
|
(verified — `pi@latest` docs at
|
|
167
167
|
`packages/coding-agent/docs/skills.md` list `.pi/skills/` as a
|
|
@@ -171,6 +171,9 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
171
171
|
`~/.omp/agent/managed-skills/<name>/SKILL.md` and via a
|
|
172
172
|
settings-driven `skills` array; operators can register the
|
|
173
173
|
project-local file via OMP's settings).
|
|
174
|
+
* `codex` -> `<workdir>/.agents/skills/deviatdd/SKILL.md`
|
|
175
|
+
(Codex CLI 0.117+ official project-local discovery). Each packaged
|
|
176
|
+
slash command is also installed as `.agents/skills/<name>/SKILL.md`.
|
|
174
177
|
* **Scope:** Unified Meso and Micro orchestration. The skill first runs
|
|
175
178
|
`deviate meso run`. In an existing feature worktree, the runner validates
|
|
176
179
|
`plan.md` and `tasks.md`, skips completed phases, and resumes at Tasks when
|
|
@@ -218,14 +221,17 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
218
221
|
* **`.gitignore` exclusions:** `_ensure_root_gitignore` adds
|
|
219
222
|
`*/skills/deviatdd/` to the entries tuple alongside
|
|
220
223
|
`*/commands/deviate-*.md` and `*/prompts/deviate-*.md`. The
|
|
221
|
-
single-level wildcard covers
|
|
222
|
-
(`.claude/`, `.opencode/`, `.factory/`, `.pi/`, `.omp/`)
|
|
223
|
-
pattern.
|
|
224
|
+
single-level wildcard covers every selected-agent skill install
|
|
225
|
+
(`.claude/`, `.opencode/`, `.factory/`, `.pi/`, `.omp/`, `.agents/`)
|
|
226
|
+
with one pattern. `*/skills/deviate-*/` covers Codex per-command
|
|
227
|
+
skill dirs. The single-level prefix (`*/`, not `**/`) is critical: it
|
|
224
228
|
scopes the pattern to the project root, never matching the
|
|
225
229
|
source-of-truth at `src/deviate/prompts/skills/deviatdd/` (three
|
|
226
230
|
directories deep).
|
|
227
|
-
* **Tests:** `TestInstallDeviatddSkill`
|
|
228
|
-
`tests/test_cli/test_init.py`
|
|
231
|
+
* **Tests:** `TestInstallDeviatddSkill` in
|
|
232
|
+
`tests/test_cli/test_init.py` and `TestSetupSelectedAgentIsolation` /
|
|
233
|
+
`TestSetupCodex` in `tests/test_cli/test_setup.py` cover
|
|
234
|
+
selected-agent-only install, Codex skills + `backend = "codex"`,
|
|
229
235
|
idempotence, gitignore entry presence + idempotence, safety-gate
|
|
230
236
|
fragments in the SKILL.md body, well-formed frontmatter, and the
|
|
231
237
|
dispatch table's canonical slash-command references.
|
|
@@ -257,7 +263,7 @@ scripts. All commands are registered in `src/deviate/cli/__init__.py` using Type
|
|
|
257
263
|
|
|
258
264
|
### 1.5 Product Layer *(optional, sits above Macro)*
|
|
259
265
|
|
|
260
|
-
The Product layer ships as **agent skills** (no dedicated CLI subcommands) — the prompts live at `src/deviate/prompts/commands/deviate-{flows,architecture,release}.md` and are installed to
|
|
266
|
+
The Product layer ships as **agent skills** (no dedicated CLI subcommands) — the prompts live at `src/deviate/prompts/commands/deviate-{flows,architecture,release}.md` and are installed to the selected agent directory alongside the rest. They are **not** wired into the `deviate` CLI's `pre`/`post` subcommand pattern: the agent invokes them directly as `/deviate-flows`, `/deviate-architecture`, `/deviate-release`, and the conversation produces the artifact. The CLI's only involvement is installing the skill files during `deviate setup` and (via `deviate-shard` / `deviate-adhoc`) consuming the `flow_refs:` frontmatter those artifacts emit.
|
|
261
267
|
|
|
262
268
|
| Command | Source skill | Artifact committed | Notes |
|
|
263
269
|
|---------|--------------|--------------------|-------|
|
|
@@ -887,6 +887,7 @@ handing the manifest to the rest of the pipeline:
|
|
|
887
887
|
| `claude` | `claude -p --permission-mode auto` | Commands copied into `.claude/commands/` (flat `.md`) | `--model <id>` flag (may be ignored by host env) | Print mode, auto permission |
|
|
888
888
|
| `droid` | `droid exec` | Commands copied into `.factory/commands/` (flat `.md`) | `--model <id>` flag | Factory Droid IDE-owned commands dir |
|
|
889
889
|
| `pi` | `pi -p` | Commands file-copied into `<workdir>/.pi/prompts/<name>.md` (project-local; flat top-level only per Pi's documented slash-command convention) | `--model <id>` flag (accepts `provider/model` shorthand) | Lean spawn after `pi -p` / RPC `--no-session`: `--no-extensions`, `--tools read,bash,edit,write`, `--no-skills`, optional `--skill`; schema-limit tokens abort as `AGENT_ERROR` |
|
|
890
|
+
| `codex` | `codex exec --sandbox workspace-write --ask-for-approval never` | Skills written to `<workdir>/.agents/skills/<name>/SKILL.md` (Codex CLI 0.117+ dropped `.codex/prompts`). Packaged `deviatdd` skill plus one skill folder per slash command. | `--model <id>` flag | CLI transport only (no Codex RPC). Prompt via stdin. Do not use `--full-auto` or `--dangerously-bypass-approvals-and-sandbox`. |
|
|
890
891
|
|
|
891
892
|
Pi implements slash-command discovery natively — `pi -p` loads commands from
|
|
892
893
|
`~/.pi/agent/`, `.pi/prompts/`, and `.agents/` on startup, parses the
|
|
@@ -958,18 +959,18 @@ standard `AgentBackend.invoke()` contract with these customisations:
|
|
|
958
959
|
the tokens. This path does not wait 900s. It does not treat those
|
|
959
960
|
tokens as stall liveness. EXECUTE stall stays 3600s.
|
|
960
961
|
|
|
961
|
-
### 10.2.5 Project-Local `deviatdd` Skill (Single Skill,
|
|
962
|
+
### 10.2.5 Project-Local `deviatdd` Skill (Single Skill, Selected Agent)
|
|
962
963
|
|
|
963
964
|
In addition to the 25 `deviate-*` slash commands under
|
|
964
965
|
`<workdir>/.<agent>/commands/` and `<workdir>/.pi/prompts/`, `deviate setup`
|
|
965
966
|
provisions exactly **one** project-local skill named `deviatdd` at
|
|
966
|
-
`<workdir>/.<agent>/skills/deviatdd/SKILL.md` for
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
directory
|
|
967
|
+
`<workdir>/.<agent>/skills/deviatdd/SKILL.md` for the selected agent
|
|
968
|
+
only (`claude`, `opencode`, `factory`/`droid`, `pi`, `omp`). Codex
|
|
969
|
+
receives the same skill at `<workdir>/.agents/skills/deviatdd/SKILL.md`
|
|
970
|
+
plus one `.agents/skills/<command>/SKILL.md` per packaged slash command.
|
|
971
|
+
`--agent` gates both command and skill install; `droid` normalizes to
|
|
972
|
+
`.factory/`. The skill body is identical across platforms — only the
|
|
973
|
+
destination directory differs.
|
|
973
974
|
|
|
974
975
|
**Auto-discovery status per platform (informational, does not gate the
|
|
975
976
|
write):**
|
|
@@ -987,6 +988,9 @@ write):**
|
|
|
987
988
|
`~/.omp/agent/managed-skills/<name>/SKILL.md` and via a
|
|
988
989
|
settings-driven `skills` array. Operators register the
|
|
989
990
|
project-local file via OMP's `skills` array in settings.
|
|
991
|
+
- `codex` — official project-local discovery is
|
|
992
|
+
`.agents/skills/<name>/SKILL.md`. Codex CLI 0.117+ dropped
|
|
993
|
+
`.codex/prompts` and `/prompts:`.
|
|
990
994
|
|
|
991
995
|
**Source of truth:** `src/deviate/prompts/skills/deviatdd/SKILL.md`
|
|
992
996
|
(package resource, loaded via `importlib.resources`).
|
|
@@ -1044,18 +1048,21 @@ field schemas live in `micro.py` itself, not duplicated here.
|
|
|
1044
1048
|
**`.gitignore` exclusions:** `_ensure_root_gitignore` adds
|
|
1045
1049
|
`*/skills/deviatdd/` to the entries tuple alongside
|
|
1046
1050
|
`*/commands/deviate-*.md` and `*/prompts/deviate-*.md`. The
|
|
1047
|
-
single-level wildcard covers
|
|
1048
|
-
`.opencode/`, `.factory/`, `.pi/`, `.omp/`)
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
`tests/test_cli/test_init.py`
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1051
|
+
single-level wildcard covers every selected-agent skill install
|
|
1052
|
+
(`.claude/`, `.opencode/`, `.factory/`, `.pi/`, `.omp/`, `.agents/`)
|
|
1053
|
+
with one pattern. `*/skills/deviate-*/` covers Codex per-command
|
|
1054
|
+
skill dirs. The single-level prefix (`*/`, not `**/`) is critical: it
|
|
1055
|
+
scopes the pattern to the project root, never matching the
|
|
1056
|
+
deviatdd project's own source at
|
|
1057
|
+
`src/deviate/prompts/skills/deviatdd/` (three directories deep).
|
|
1058
|
+
|
|
1059
|
+
**Tests:** `TestInstallDeviatddSkill` in `tests/test_cli/test_init.py`
|
|
1060
|
+
and `TestSetupSelectedAgentIsolation` / `TestSetupCodex` in
|
|
1061
|
+
`tests/test_cli/test_setup.py` cover selected-agent-only install,
|
|
1062
|
+
Codex skills + `backend = "codex"`, idempotence, gitignore entry
|
|
1063
|
+
presence + idempotence, the safety-gate fragments in the SKILL.md
|
|
1064
|
+
body, well-formed frontmatter, and the dispatch table's canonical
|
|
1065
|
+
slash-command references.
|
|
1059
1066
|
|
|
1060
1067
|
|
|
1061
1068
|
### 10.3 Pi Sandbox Boundary
|
|
@@ -110,3 +110,14 @@
|
|
|
110
110
|
{"issue_id": "ISS-ADH-032", "type": "adhoc", "title": "Judge prompt must inject the Judge-Feedback-stripped task card so prior feedback cannot mislead the judge into a COMPLETED evidence fail-close loop", "status": "BACKLOG", "source_file": "specs/adhoc/issues/032-judge-feedback-injection-fail-close.md", "blocked_by": [], "coordinates_with": ["ISS-ADH-020", "ISS-ADH-028"], "timestamp": "2026-08-25T12:56:30.723608+00:00", "created_at": "2026-08-25T12:56:30.723608+00:00", "flow_refs": []}
|
|
111
111
|
{"issue_id":"ISS-ADH-031","type":"adhoc","title":"Micro Judge already-exists COMPLIANCE_PASS must complete instead of hard-crashing with ROLLBACK_BOUNDARY_MISSING","status":"SPECIFIED","source_file":"specs/adhoc/issues/031-judge-revert-boundary-no-failing-test.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-08-25T12:04:14.071361Z","created_at":"2026-08-25T12:02:23.091420Z","flow_refs":[]}
|
|
112
112
|
{"issue_id":"ISS-ADH-031","type":"adhoc","title":"Micro Judge already-exists COMPLIANCE_PASS must complete instead of hard-crashing with ROLLBACK_BOUNDARY_MISSING","status":"COMPLETED","source_file":"specs/adhoc/issues/031-judge-revert-boundary-no-failing-test.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-08-26T01:22:58.997447Z","created_at":"2026-08-25T12:02:23.091420Z","flow_refs":[]}
|
|
113
|
+
{"issue_id":"ISS-ADH-005","type":"adhoc","title":"Per-Phase Model Configuration with Configurable Model Routing","status":"COMPLETED","source_file":"specs/adhoc/issues/005-per-phase-model-configuration.md","blocked_by":[],"coordinates_with":["ISS-001-005"],"timestamp":"2026-06-18T08:43:57Z","created_at":"2026-06-16T15:46:44.364472Z","flow_refs":[]}
|
|
114
|
+
{"issue_id":"ISS-ADH-009","type":"adhoc","title":"Pi Agent Backend Integration — First-Class Backend for Micro/Meso Layers","status":"COMPLETED","source_file":"specs/adhoc/issues/009-pi-agent-backend-integration.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-06-26T10:59:37Z","created_at":"2026-06-24T07:44:35.265840Z","flow_refs":[]}
|
|
115
|
+
{"issue_id":"ISS-ADH-021","type":"adhoc","title":"Escalate no_failing_test to RED; never GREEN without red_commit_sha","status":"COMPLETED","source_file":"specs/adhoc/issues/021-no-failing-test-escalate-invokes-green.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-08-21T19:31:47Z","created_at":"2026-08-21T13:11:40.290976Z","flow_refs":[]}
|
|
116
|
+
{"issue_id":"ISS-ADH-022","type":"adhoc","title":"already_satisfied RED cannot COMPLETE without declared regression tests","status":"COMPLETED","source_file":"specs/adhoc/issues/022-already-satisfied-red-requires-tests.md","blocked_by":[],"coordinates_with":["ISS-ADH-020","ISS-ADH-021"],"timestamp":"2026-08-21T21:40:45Z","created_at":"2026-08-21T19:45:40.426802Z","flow_refs":[]}
|
|
117
|
+
{"issue_id":"ISS-ADH-023","type":"adhoc","title":"Scope pinned micro run TASK_ID to the active issue","status":"COMPLETED","source_file":"specs/adhoc/issues/023-pinned-micro-run-issue-scoped.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-08-21T23:42:30Z","created_at":"2026-08-21T22:03:13.828791Z","flow_refs":[]}
|
|
118
|
+
{"issue_id":"ISS-ADH-024","type":"adhoc","title":"Re-key stale worktree session to the claimed branch issue","status":"COMPLETED","source_file":"specs/adhoc/issues/024-worktree-session-stale-issue-id.md","blocked_by":[],"coordinates_with":["ISS-ADH-023"],"timestamp":"2026-08-22T01:41:00Z","created_at":"2026-08-21T23:46:26.071257Z","flow_refs":[]}
|
|
119
|
+
{"issue_id":"ISS-ADH-025","type":"adhoc","title":"Treat stderr as diagnostic so GREEN stall raises AGENT_TIMEOUT","status":"COMPLETED","source_file":"specs/adhoc/issues/025-green-stderr-noise-stall-detector.md","blocked_by":[],"coordinates_with":[],"timestamp":"2026-08-22T03:43:44Z","created_at":"2026-08-22T01:47:07.268593Z","flow_refs":[]}
|
|
120
|
+
{"issue_id":"ISS-ADH-026","type":"adhoc","title":"Constrain Spawned Pi to Lean Tools and Surface tool_count_limit","status":"COMPLETED","source_file":"specs/adhoc/issues/026-pi-spawn-lean-tool-schema.md","blocked_by":[],"coordinates_with":["ISS-ADH-025"],"timestamp":"2026-08-22T05:43:21Z","created_at":"2026-08-22T03:48:03.494286Z","flow_refs":[]}
|
|
121
|
+
{"issue_id":"ISS-ADH-027","type":"adhoc","title":"Raise AGENT_TIMEOUT and roll back dirty RED when the agent never returns a manifest","status":"COMPLETED","source_file":"specs/adhoc/issues/027-red-hang-timeout-rollback.md","blocked_by":[],"coordinates_with":["ISS-ADH-025","ISS-ADH-023"],"timestamp":"2026-08-22T06:42:50Z","created_at":"2026-08-22T05:47:44.342373Z","flow_refs":[]}
|
|
122
|
+
{"issue_id":"ISS-ADH-028","type":"adhoc","title":"Scope TDD JUDGE evidence to this task and fail-close review on uncovered plan ACs","status":"COMPLETED","source_file":"specs/adhoc/issues/028-task-scoped-judge-review-coverage.md","blocked_by":[],"coordinates_with":["ISS-ADH-020"],"timestamp":"2026-08-22T13:36:39Z","created_at":"2026-08-22T11:20:26.754454Z","flow_refs":[]}
|
|
123
|
+
{"issue_id":"ISS-ADH-032","type":"adhoc","title":"Judge prompt must inject the Judge-Feedback-stripped task card so prior feedback cannot mislead the judge into a COMPLETED evidence fail-close loop","status":"COMPLETED","source_file":"specs/adhoc/issues/032-judge-feedback-injection-fail-close.md","blocked_by":[],"coordinates_with":["ISS-ADH-020","ISS-ADH-028"],"timestamp":"2026-08-26T01:55:09Z","created_at":"2026-08-25T12:56:30.723608+00:00","flow_refs":[]}
|
|
@@ -55,8 +55,18 @@ _GOVERNANCE_MODULE = "deviate.prompts.governance"
|
|
|
55
55
|
|
|
56
56
|
# User-facing agent platform choices (selectable via --agent and the
|
|
57
57
|
# interactive init prompt). Order is intentional: factory/droid (Droid
|
|
58
|
-
# ecosystem) come first, then the third-party CLIs.
|
|
59
|
-
|
|
58
|
+
# ecosystem) come first, then the third-party CLIs. ``codex`` is the
|
|
59
|
+
# ChatGPT Codex CLI — a first-class meso/micro backend that installs
|
|
60
|
+
# skills under ``.agents/skills/`` rather than ``.codex/prompts``.
|
|
61
|
+
AGENT_CHOICES: tuple[str, ...] = (
|
|
62
|
+
"factory",
|
|
63
|
+
"droid",
|
|
64
|
+
"claude",
|
|
65
|
+
"opencode",
|
|
66
|
+
"pi",
|
|
67
|
+
"omp",
|
|
68
|
+
"codex",
|
|
69
|
+
)
|
|
60
70
|
|
|
61
71
|
# Map a user-facing agent name to the underlying backend that meso/micro
|
|
62
72
|
# layers invoke. ``factory`` is the Factory Droid IDE — the meso/micro
|
|
@@ -600,12 +610,25 @@ def _apply_governance(workdir: Path) -> None:
|
|
|
600
610
|
_upsert_governance_block(t, libref_content)
|
|
601
611
|
|
|
602
612
|
|
|
613
|
+
def _normalize_install_agent(agent: str) -> str:
|
|
614
|
+
"""Map a user-facing agent name to the install-directory identity.
|
|
615
|
+
|
|
616
|
+
``droid`` and ``factory`` both write ``.factory/``. ``codex`` and
|
|
617
|
+
every other name pass through unchanged.
|
|
618
|
+
"""
|
|
619
|
+
if agent == "droid":
|
|
620
|
+
return "factory"
|
|
621
|
+
return agent
|
|
622
|
+
|
|
623
|
+
|
|
603
624
|
def _get_agent_command_dir(agent_name: str, workdir: Path) -> Path | None:
|
|
604
625
|
"""Resolve the slash-command directory for a given agent platform.
|
|
605
626
|
|
|
606
627
|
Factory, Claude, OpenCode discover slash commands from
|
|
607
628
|
``<workdir>/.{agent}/commands/`` (flat top-level only). Pi and OMP use
|
|
608
629
|
``<workdir>/.{agent}/prompts/`` per their platform conventions.
|
|
630
|
+
Codex CLI 0.117+ dropped custom prompts — return ``None`` so setup
|
|
631
|
+
never writes ``.codex/prompts`` or ``.codex/commands``.
|
|
609
632
|
"""
|
|
610
633
|
if agent_name in ("claude", "opencode", "factory"):
|
|
611
634
|
return workdir / f".{agent_name}" / "commands"
|
|
@@ -617,17 +640,19 @@ def _get_agent_command_dir(agent_name: str, workdir: Path) -> Path | None:
|
|
|
617
640
|
|
|
618
641
|
|
|
619
642
|
def _install_commands_to_agents(workdir: Path, agents: list[str]) -> None:
|
|
620
|
-
"""Install the command library into
|
|
643
|
+
"""Install the command library into the selected agent directories.
|
|
621
644
|
|
|
622
645
|
Output is aggregated per-agent — one summary line per agent instead of
|
|
623
646
|
one line per (command × agent) — to keep ``deviate setup`` output
|
|
624
|
-
readable when 32 commands are written to
|
|
625
|
-
(128 lines per invocation under the legacy per-command format).
|
|
647
|
+
readable when 32 commands are written to a single selected agent.
|
|
626
648
|
"""
|
|
627
649
|
commands = discover_commands()
|
|
628
650
|
if not commands:
|
|
629
651
|
return
|
|
630
652
|
for agent in agents:
|
|
653
|
+
if agent == "codex":
|
|
654
|
+
_install_codex_command_skills(workdir)
|
|
655
|
+
continue
|
|
631
656
|
target_dir = _get_agent_command_dir(agent, workdir)
|
|
632
657
|
if target_dir is None:
|
|
633
658
|
console.print(f" [yellow]SKIP[/] Unknown agent: {agent}")
|
|
@@ -649,6 +674,41 @@ def _install_commands_to_agents(workdir: Path, agents: list[str]) -> None:
|
|
|
649
674
|
)
|
|
650
675
|
|
|
651
676
|
|
|
677
|
+
def _install_codex_command_skills(workdir: Path) -> None:
|
|
678
|
+
"""Install each packaged slash command as a Codex project skill.
|
|
679
|
+
|
|
680
|
+
Codex CLI 0.117+ dropped ``~/.codex/prompts`` and ``/prompts:``.
|
|
681
|
+
Official project-local discovery is ``.agents/skills/<name>/SKILL.md``
|
|
682
|
+
(scanned from CWD up to the repo root). Reuse the composed command
|
|
683
|
+
bodies via :func:`install_command` — do not invent new prompt text.
|
|
684
|
+
"""
|
|
685
|
+
commands = discover_commands()
|
|
686
|
+
if not commands:
|
|
687
|
+
return
|
|
688
|
+
installed = 0
|
|
689
|
+
skipped = 0
|
|
690
|
+
skills_root = workdir / ".agents" / "skills"
|
|
691
|
+
for command_name in commands:
|
|
692
|
+
if install_command(
|
|
693
|
+
command_name,
|
|
694
|
+
skills_root / command_name,
|
|
695
|
+
workdir=workdir,
|
|
696
|
+
agent="codex",
|
|
697
|
+
target_filename="SKILL.md",
|
|
698
|
+
):
|
|
699
|
+
installed += 1
|
|
700
|
+
else:
|
|
701
|
+
skipped += 1
|
|
702
|
+
if installed and not skipped:
|
|
703
|
+
console.print(f" [green]INSTALL[/] {installed} commands → codex")
|
|
704
|
+
elif skipped and not installed:
|
|
705
|
+
console.print(f" [yellow]SKIP[/] {skipped} commands → codex")
|
|
706
|
+
else:
|
|
707
|
+
console.print(
|
|
708
|
+
f" [green]INSTALL[/] {installed}, [yellow]SKIP[/] {skipped} → codex"
|
|
709
|
+
)
|
|
710
|
+
|
|
711
|
+
|
|
652
712
|
def _resolve_skill_source() -> str | None:
|
|
653
713
|
"""Load the deviatdd SKILL.md body from package resources."""
|
|
654
714
|
try:
|
|
@@ -666,11 +726,10 @@ def _resolve_skill_source() -> str | None:
|
|
|
666
726
|
def _get_agent_skill_dir(workdir: Path, agent: str) -> Path | None:
|
|
667
727
|
"""Return the project-local skills directory for *agent*.
|
|
668
728
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
identical across platforms — only the destination directory differs.
|
|
729
|
+
Setup installs the ``deviatdd`` skill only for the selected agent
|
|
730
|
+
(``droid`` is normalized to ``factory`` before this helper runs).
|
|
731
|
+
The skill body is identical across platforms — only the destination
|
|
732
|
+
directory differs.
|
|
674
733
|
|
|
675
734
|
Auto-discovery status per platform:
|
|
676
735
|
|
|
@@ -690,16 +749,19 @@ def _get_agent_skill_dir(workdir: Path, agent: str) -> Path | None:
|
|
|
690
749
|
user-level ``~/.omp/agent/managed-skills/<name>/SKILL.md`` and
|
|
691
750
|
via a settings-driven ``skills`` array, with no project-local
|
|
692
751
|
auto-discovery. The file is still written to
|
|
693
|
-
``<workdir>/.omp/skills/deviatdd/SKILL.md``
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
752
|
+
``<workdir>/.omp/skills/deviatdd/SKILL.md`` so operators can
|
|
753
|
+
register it via OMP's ``skills`` array in settings or copy it
|
|
754
|
+
to the user-level path.
|
|
755
|
+
- ``codex`` — official project-local discovery is
|
|
756
|
+
``<workdir>/.agents/skills/<name>/SKILL.md``. Codex CLI 0.117+
|
|
757
|
+
dropped ``.codex/prompts`` / ``/prompts:``.
|
|
697
758
|
- ``droid`` — normalized to ``factory`` at the command-install
|
|
698
759
|
layer; not iterated separately here.
|
|
699
760
|
|
|
700
|
-
Returns ``None``
|
|
701
|
-
``active_agents`` set.
|
|
761
|
+
Returns ``None`` for unknown agent names.
|
|
702
762
|
"""
|
|
763
|
+
if agent == "codex":
|
|
764
|
+
return workdir / ".agents" / "skills"
|
|
703
765
|
if agent in ("claude", "opencode", "factory", "pi", "omp"):
|
|
704
766
|
return workdir / f".{agent}" / "skills"
|
|
705
767
|
return None
|
|
@@ -713,6 +775,9 @@ def _install_deviatdd_skill(workdir: Path, agents: list[str]) -> None:
|
|
|
713
775
|
return
|
|
714
776
|
for agent in agents:
|
|
715
777
|
target_dir = _get_agent_skill_dir(workdir, agent)
|
|
778
|
+
if target_dir is None:
|
|
779
|
+
console.print(f" [yellow]SKIP[/] Unknown agent: {agent}")
|
|
780
|
+
continue
|
|
716
781
|
target = target_dir / "deviatdd" / "SKILL.md"
|
|
717
782
|
if target.exists() and target.read_text(encoding="utf-8") == body:
|
|
718
783
|
console.print(f" [yellow]SKIP[/] {target.relative_to(workdir)}")
|
|
@@ -756,7 +821,7 @@ def setup(
|
|
|
756
821
|
agent: str | None = typer.Option(
|
|
757
822
|
None,
|
|
758
823
|
"--agent",
|
|
759
|
-
help="
|
|
824
|
+
help="Agent platform to install and persist as [agent].backend",
|
|
760
825
|
callback=_validate_agent_choice,
|
|
761
826
|
),
|
|
762
827
|
no_claim_remote: bool = typer.Option(
|
|
@@ -804,21 +869,19 @@ def setup(
|
|
|
804
869
|
|
|
805
870
|
_apply_governance(workdir)
|
|
806
871
|
|
|
807
|
-
#
|
|
808
|
-
#
|
|
809
|
-
#
|
|
810
|
-
#
|
|
811
|
-
#
|
|
812
|
-
#
|
|
813
|
-
#
|
|
814
|
-
# ``
|
|
815
|
-
# ``omp`` uses ``.omp/prompts/`` per the OMP platform convention; the
|
|
816
|
-
# other three use ``commands/``. No global ``~/.pi/agent/`` writes,
|
|
872
|
+
# Install commands + the packaged skill only for the selected agent.
|
|
873
|
+
# ``--agent`` (or the existing ``[agent].backend``, or the interactive
|
|
874
|
+
# prompt) is the install target as well as the meso/micro backend.
|
|
875
|
+
# ``droid`` is normalised to ``factory`` so both names write
|
|
876
|
+
# ``.factory/``. Codex is a first-class backend that writes skills
|
|
877
|
+
# under ``.agents/skills/`` (Codex CLI 0.117+ dropped custom prompts).
|
|
878
|
+
# ``pi`` uses ``.pi/prompts/``; ``omp`` uses ``.omp/prompts/``; the
|
|
879
|
+
# remaining CLIs use ``commands/``. No global ``~/.pi/agent/`` writes,
|
|
817
880
|
# no ``settings.json`` generation — the operator's Pi config is out of
|
|
818
881
|
# scope.
|
|
819
|
-
|
|
820
|
-
_install_commands_to_agents(workdir,
|
|
821
|
-
_install_deviatdd_skill(workdir,
|
|
882
|
+
install_agent = _normalize_install_agent(selected_agent)
|
|
883
|
+
_install_commands_to_agents(workdir, [install_agent])
|
|
884
|
+
_install_deviatdd_skill(workdir, [install_agent])
|
|
822
885
|
|
|
823
886
|
_ensure_gitignore(workdir)
|
|
824
887
|
_ensure_root_gitignore(workdir)
|
|
@@ -885,16 +948,18 @@ def _ensure_root_gitattributes(workdir: Path) -> None:
|
|
|
885
948
|
def _ensure_root_gitignore(workdir: Path) -> None:
|
|
886
949
|
"""Update the project-root ``.gitignore`` to exclude DeviaTDD-installed
|
|
887
950
|
artifacts and worktrees across all agent platforms.
|
|
888
|
-
|
|
951
|
+
Artifact families are installed and must not be committed:
|
|
889
952
|
- ``deviate-*`` commands under ``<agent>/commands/`` and
|
|
890
953
|
``<agent>/prompts/`` — the core DeviaTDD command library.
|
|
891
954
|
- The ``deviatdd`` skill under ``<agent>/skills/deviatdd/``.
|
|
955
|
+
- Codex per-command skills under ``.agents/skills/deviate-*/``.
|
|
892
956
|
- ``.worktrees/`` — isolated task worktrees managed by DeviaTDD.
|
|
893
957
|
"""
|
|
894
958
|
entries = (
|
|
895
959
|
"*/commands/deviate-*.md",
|
|
896
960
|
"*/prompts/deviate-*.md",
|
|
897
961
|
"*/skills/deviatdd/",
|
|
962
|
+
"*/skills/deviate-*/",
|
|
898
963
|
".worktrees/",
|
|
899
964
|
)
|
|
900
965
|
gitignore_path = workdir / ".gitignore"
|
|
@@ -430,7 +430,7 @@ def _setup_mise(worktree_path: Path | None = None) -> None:
|
|
|
430
430
|
console.print(f"[yellow]MISE_WARN[/] setup step failed — {e}")
|
|
431
431
|
|
|
432
432
|
|
|
433
|
-
_AGENT_DIRS = (".claude", ".opencode", ".factory", ".pi", ".omp")
|
|
433
|
+
_AGENT_DIRS = (".claude", ".opencode", ".factory", ".pi", ".omp", ".agents")
|
|
434
434
|
|
|
435
435
|
_WORKTREE_SYNC_FILES = (".env",)
|
|
436
436
|
|
|
@@ -439,8 +439,8 @@ def _sync_worktree_assets(repo_root: Path, worktree_path: Path) -> None:
|
|
|
439
439
|
"""Copy agent skill directories and config files from repo root to worktree.
|
|
440
440
|
|
|
441
441
|
This ensures worktrees have the same skills (.claude/, .opencode/,
|
|
442
|
-
.factory/, .pi/, .omp/) and environment files (.env) as the
|
|
443
|
-
repository so deviate commands work inside the worktree without
|
|
442
|
+
.factory/, .pi/, .omp/, .agents/) and environment files (.env) as the
|
|
443
|
+
main repository so deviate commands work inside the worktree without
|
|
444
444
|
re-running ``deviate setup`` or losing local configuration.
|
|
445
445
|
"""
|
|
446
446
|
for agent_dir in _AGENT_DIRS:
|
|
@@ -45,7 +45,7 @@ def _truncate_prompt(prompt: str) -> str:
|
|
|
45
45
|
return f"{prompt[:head_size]}{marker}{prompt[-tail_size:]}"
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
BackendName = Literal["opencode", "claude", "droid", "pi", "omp", "stub"]
|
|
48
|
+
BackendName = Literal["opencode", "claude", "droid", "pi", "omp", "codex", "stub"]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class EvidenceItem(BaseModel):
|
|
@@ -170,6 +170,15 @@ BACKEND_COMMANDS: dict[str, str] = {
|
|
|
170
170
|
# as a first-class backend, not an alias for ``pi`` — model flag,
|
|
171
171
|
# timeout, and YAML manifest extraction all apply.
|
|
172
172
|
"omp": "omp -p",
|
|
173
|
+
# ChatGPT Codex CLI (non-interactive). Official ``codex exec`` reads
|
|
174
|
+
# the prompt from stdin when no positional prompt is given — omit the
|
|
175
|
+
# ``-`` sentinel so ``MODEL_FLAGS`` can append ``--model`` at the end
|
|
176
|
+
# without it being swallowed as prompt text. Default ``codex exec``
|
|
177
|
+
# sandbox is read-only; ``--sandbox workspace-write`` plus
|
|
178
|
+
# ``--ask-for-approval never`` is the documented unattended analog of
|
|
179
|
+
# ``claude -p --permission-mode auto``. Do not use ``--full-auto``
|
|
180
|
+
# (deprecated) or ``--dangerously-bypass-approvals-and-sandbox``.
|
|
181
|
+
"codex": "codex exec --sandbox workspace-write --ask-for-approval never",
|
|
173
182
|
"stub": "stub",
|
|
174
183
|
}
|
|
175
184
|
|
|
@@ -186,6 +195,7 @@ AGENT_TO_BACKEND: dict[str, str] = {
|
|
|
186
195
|
"opencode": "opencode",
|
|
187
196
|
"pi": "pi",
|
|
188
197
|
"omp": "omp",
|
|
198
|
+
"codex": "codex",
|
|
189
199
|
}
|
|
190
200
|
|
|
191
201
|
|
|
@@ -193,8 +203,8 @@ def resolve_agent_to_backend(agent: str) -> str:
|
|
|
193
203
|
"""Return the canonical backend for *agent*.
|
|
194
204
|
|
|
195
205
|
User-facing aliases (``factory``) are mapped to their underlying
|
|
196
|
-
backend binary.
|
|
197
|
-
``droid``, ``pi``, ``omp``) pass through unchanged. Unknown values
|
|
206
|
+
backend binary. Already-canonical names (``opencode``, ``claude``,
|
|
207
|
+
``droid``, ``pi``, ``omp``, ``codex``) pass through unchanged. Unknown values
|
|
198
208
|
are returned unchanged so the caller can surface a validation error
|
|
199
209
|
against :class:`~deviate.state.config.AgentConfig`'s ``backend``
|
|
200
210
|
Literal.
|
|
@@ -283,6 +293,7 @@ MODEL_FLAGS: dict[str, list[str] | None] = {
|
|
|
283
293
|
"opencode": ["--model"],
|
|
284
294
|
"droid": ["--model"],
|
|
285
295
|
"omp": ["--model"],
|
|
296
|
+
"codex": ["--model"],
|
|
286
297
|
}
|
|
287
298
|
|
|
288
299
|
# Backends whose CLI expects the prompt as a positional argument rather
|