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.
Files changed (474) hide show
  1. {deviatdd-2.23.0 → deviatdd-2.23.1}/CHANGELOG.md +2 -0
  2. {deviatdd-2.23.0 → deviatdd-2.23.1}/PKG-INFO +6 -6
  3. {deviatdd-2.23.0 → deviatdd-2.23.1}/README.md +5 -5
  4. {deviatdd-2.23.0 → deviatdd-2.23.1}/pyproject.toml +1 -1
  5. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/DeviaTDD-api.md +35 -29
  6. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/DeviaTDD-architecture.md +27 -20
  7. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/issues.jsonl +11 -0
  8. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/__init__.py +96 -31
  9. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/meso.py +3 -3
  10. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/agent.py +14 -3
  11. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/commands.py +7 -4
  12. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/config.py +3 -3
  13. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_init.py +28 -83
  14. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_meso.py +5 -4
  15. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_micro.py +2 -2
  16. deviatdd-2.23.1/tests/test_cli/test_setup.py +104 -0
  17. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_agent.py +73 -1
  18. {deviatdd-2.23.0 → deviatdd-2.23.1}/uv.lock +1 -1
  19. {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/.gitignore +0 -0
  20. {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/config.toml +0 -0
  21. {deviatdd-2.23.0 → deviatdd-2.23.1}/.deviate/evaluations/deviate-flows-skill-2026-06-26.json +0 -0
  22. {deviatdd-2.23.0 → deviatdd-2.23.1}/.env.example +0 -0
  23. {deviatdd-2.23.0 → deviatdd-2.23.1}/.gitattributes +0 -0
  24. {deviatdd-2.23.0 → deviatdd-2.23.1}/.githooks/pre-commit +0 -0
  25. {deviatdd-2.23.0 → deviatdd-2.23.1}/.githooks/pre-push +0 -0
  26. {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  27. {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  28. {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/workflows/ci.yml +0 -0
  30. {deviatdd-2.23.0 → deviatdd-2.23.1}/.github/workflows/release.yml +0 -0
  31. {deviatdd-2.23.0 → deviatdd-2.23.1}/.gitignore +0 -0
  32. {deviatdd-2.23.0 → deviatdd-2.23.1}/.opencode/opencode.json +0 -0
  33. {deviatdd-2.23.0 → deviatdd-2.23.1}/AGENTS.md +0 -0
  34. {deviatdd-2.23.0 → deviatdd-2.23.1}/CLAUDE.md +0 -0
  35. {deviatdd-2.23.0 → deviatdd-2.23.1}/CODE_OF_CONDUCT.md +0 -0
  36. {deviatdd-2.23.0 → deviatdd-2.23.1}/CONTRIBUTING.md +0 -0
  37. {deviatdd-2.23.0 → deviatdd-2.23.1}/LICENSE +0 -0
  38. {deviatdd-2.23.0 → deviatdd-2.23.1}/SECURITY.md +0 -0
  39. {deviatdd-2.23.0 → deviatdd-2.23.1}/deviatdd.png +0 -0
  40. {deviatdd-2.23.0 → deviatdd-2.23.1}/mise.toml +0 -0
  41. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/001-deviate-cli-python/008-meso-macro-automated-orchestration.md +0 -0
  42. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/adhoc/006-context-cli-integration.md +0 -0
  43. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat/adhoc/017-optional-push-as-lock.md +0 -0
  44. {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
  45. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-003-meso-layer-specification-task-decomposition.md +0 -0
  46. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-004-micro-layer-tdd-sandbox-execution.md +0 -0
  47. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-005-cli-architecture-realignment-skill-integration.md +0 -0
  48. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-001-deviate-cli-python-007-macro-meso-parity-backward-compatibility.md +0 -0
  49. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-001-foundation-cli-infrastructure.md +0 -0
  50. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-003-fast-path-commands.md +0 -0
  51. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-002-deviatdd-gap-analysis-004-governance-inspection.md +0 -0
  52. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-001-streaming-pipeline-monitor.md +0 -0
  53. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-008-ast-phase-prioritization.md +0 -0
  54. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat-adhoc-017-two-counter-tdd-retry.md +0 -0
  55. {deviatdd-2.23.0 → deviatdd-2.23.1}/pr_descriptions/feat_002-deviatdd-gap-analysis_001-foundation-cli-infrastructure.md +0 -0
  56. {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/benchmark_lmstudio.py +0 -0
  57. {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/next_version.py +0 -0
  58. {deviatdd-2.23.0 → deviatdd-2.23.1}/scripts/verify_install.py +0 -0
  59. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t001.json +0 -0
  60. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t002.json +0 -0
  61. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t004.json +0 -0
  62. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/spec.md +0 -0
  63. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/tasks.md +0 -0
  64. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/spec.md +0 -0
  65. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/tasks.md +0 -0
  66. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/spec.md +0 -0
  67. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/tasks.md +0 -0
  68. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/spec.md +0 -0
  69. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.jsonl +0 -0
  70. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.md +0 -0
  71. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/spec.md +0 -0
  72. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/tasks.md +0 -0
  73. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/spec.md +0 -0
  74. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/tasks.md +0 -0
  75. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/spec.md +0 -0
  76. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.jsonl +0 -0
  77. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.md +0 -0
  78. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/data-model.md +0 -0
  79. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/design.md +0 -0
  80. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/explore.md +0 -0
  81. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/001-cli-initialization-governance-provisioning.md +0 -0
  82. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/002-macro-layer-state-ledger-management.md +0 -0
  83. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/003-meso-layer-specification-task-decomposition.md +0 -0
  84. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/004-micro-layer-tdd-sandbox-execution.md +0 -0
  85. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/005-cli-architecture-realignment-skill-integration.md +0 -0
  86. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/006-state-persistence-concurrency-safety.md +0 -0
  87. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/007-macro-meso-parity-backward-compatibility.md +0 -0
  88. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/issues/008-meso-macro-automated-orchestration.md +0 -0
  89. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/001-deviate-cli-python/prd.md +0 -0
  90. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/spec.md +0 -0
  91. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.jsonl +0 -0
  92. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.md +0 -0
  93. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/spec.md +0 -0
  94. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.jsonl +0 -0
  95. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.md +0 -0
  96. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/spec.md +0 -0
  97. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.jsonl +0 -0
  98. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.md +0 -0
  99. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/spec.md +0 -0
  100. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.jsonl +0 -0
  101. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.md +0 -0
  102. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/data-model.md +0 -0
  103. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/design.md +0 -0
  104. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/explore.md +0 -0
  105. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/001-foundation-cli-infrastructure.md +0 -0
  106. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/002-context-pipeline.md +0 -0
  107. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/003-fast-path-commands.md +0 -0
  108. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/004-governance-inspection.md +0 -0
  109. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/issues/005-micro-layer-integrity.md +0 -0
  110. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/plan-tdd-integration-gap.md +0 -0
  111. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/002-deviatdd-gap-analysis/prd.md +0 -0
  112. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/003-graphite-cli-integration/explore.md +0 -0
  113. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/004-per-task-security-profile/issues/001-security-profile-and-judge-checks.md +0 -0
  114. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/plan.md +0 -0
  115. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.jsonl +0 -0
  116. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.md +0 -0
  117. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/plan.md +0 -0
  118. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.jsonl +0 -0
  119. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.md +0 -0
  120. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/data-model.md +0 -0
  121. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/design.md +0 -0
  122. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/explore.md +0 -0
  123. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/001-verification-mode-metadata.md +0 -0
  124. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/002-task-acceptance-traceability.md +0 -0
  125. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/003-micro-phase-gates-red-green.md +0 -0
  126. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/004-refactor-regression-gate.md +0 -0
  127. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/issues/005-prompt-spec-alignment.md +0 -0
  128. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/005-acceptance-gates/prd.md +0 -0
  129. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/architecture.md +0 -0
  130. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/domain-model.md +0 -0
  131. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/flows-product.md +0 -0
  132. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/flows-streaming.md +0 -0
  133. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows/index.md +0 -0
  134. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/flows.jsonl +0 -0
  135. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-current-system.md +0 -0
  136. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-gap-register.md +0 -0
  137. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-git-state-model.md +0 -0
  138. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-rewrite.md +0 -0
  139. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/guildwright-rust-tui-requirements.md +0 -0
  140. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/_product/release-next.md +0 -0
  141. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/spec.md +0 -0
  142. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/tasks.jsonl +0 -0
  143. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/001-streaming-pipeline-monitor/tasks.md +0 -0
  144. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/spec.md +0 -0
  145. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/tasks.jsonl +0 -0
  146. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/003-meso-layer-restructuring/tasks.md +0 -0
  147. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/spec.md +0 -0
  148. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/tasks.jsonl +0 -0
  149. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/004-deviate-review-skill/tasks.md +0 -0
  150. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/plan.md +0 -0
  151. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/tasks.jsonl +0 -0
  152. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/005-per-phase-model-configuration/tasks.md +0 -0
  153. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/plan.md +0 -0
  154. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/tasks.jsonl +0 -0
  155. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/006-context-cli-integration/tasks.md +0 -0
  156. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/plan.md +0 -0
  157. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/tasks.jsonl +0 -0
  158. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/007-graphite-cli/tasks.md +0 -0
  159. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/plan.md +0 -0
  160. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/tasks.jsonl +0 -0
  161. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/008-ast-phase-prioritization/tasks.md +0 -0
  162. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/plan.md +0 -0
  163. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/tasks.jsonl +0 -0
  164. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/009-pi-agent-backend-integration/tasks.md +0 -0
  165. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/plan.md +0 -0
  166. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/tasks.jsonl +0 -0
  167. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/010-deviate-setup-product-layer/tasks.md +0 -0
  168. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/plan.md +0 -0
  169. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.jsonl +0 -0
  170. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.md +0 -0
  171. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/015-narrow-product-flow-scope/plan.md +0 -0
  172. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/015-narrow-product-flow-scope/tasks.md +0 -0
  173. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/plan.md +0 -0
  174. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/tasks.jsonl +0 -0
  175. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/016-single-source-prompt-templates/tasks.md +0 -0
  176. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/plan.md +0 -0
  177. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/tasks.jsonl +0 -0
  178. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-optional-push-as-lock/tasks.md +0 -0
  179. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/plan.md +0 -0
  180. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/tasks.jsonl +0 -0
  181. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/017-two-counter-tdd-retry/tasks.md +0 -0
  182. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/018-one-behavior-rgr-granularity/plan.md +0 -0
  183. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/018-one-behavior-rgr-granularity/tasks.md +0 -0
  184. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/plan.md +0 -0
  185. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.jsonl +0 -0
  186. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.md +0 -0
  187. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/plan.md +0 -0
  188. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/tasks.jsonl +0 -0
  189. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/020-judge-compliance-pass-evidence/tasks.md +0 -0
  190. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/plan.md +0 -0
  191. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.jsonl +0 -0
  192. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.md +0 -0
  193. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/plan.md +0 -0
  194. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.jsonl +0 -0
  195. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.md +0 -0
  196. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/plan.md +0 -0
  197. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.jsonl +0 -0
  198. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.md +0 -0
  199. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/plan.md +0 -0
  200. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/tasks.jsonl +0 -0
  201. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/024-worktree-session-stale-issue-id/tasks.md +0 -0
  202. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/plan.md +0 -0
  203. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.jsonl +0 -0
  204. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.md +0 -0
  205. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/plan.md +0 -0
  206. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.jsonl +0 -0
  207. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.md +0 -0
  208. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/plan.md +0 -0
  209. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/tasks.jsonl +0 -0
  210. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/027-red-hang-timeout-rollback/tasks.md +0 -0
  211. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/plan.md +0 -0
  212. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.jsonl +0 -0
  213. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.md +0 -0
  214. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/plan.md +0 -0
  215. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/tasks.jsonl +0 -0
  216. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/031-judge-revert-boundary-no-failing-test/tasks.md +0 -0
  217. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/001-streaming-pipeline-monitor.md +0 -0
  218. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/002-aider-agent-backend-integration.md +0 -0
  219. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/003-meso-layer-restructuring.md +0 -0
  220. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/004-deviate-review-skill.md +0 -0
  221. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/005-per-phase-model-configuration.md +0 -0
  222. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/006-context-cli-integration.md +0 -0
  223. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/007-graphite-cli.md +0 -0
  224. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/008-ast-phase-prioritization.md +0 -0
  225. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/009-pi-agent-backend-integration.md +0 -0
  226. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/010-deviate-setup-product-layer.md +0 -0
  227. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/012-rpc-streaming-tui-renderer.md +0 -0
  228. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/013-flow-ledger-canonical-source-of-truth.md +0 -0
  229. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/014-cwe-mapping-security-findings.md +0 -0
  230. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/015-narrow-product-flow-scope.md +0 -0
  231. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/016-single-source-prompt-templates.md +0 -0
  232. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/017-optional-push-as-lock.md +0 -0
  233. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/017-two-counter-tdd-retry.md +0 -0
  234. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/018-one-behavior-rgr-granularity.md +0 -0
  235. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/019-remote-aware-ordinal-allocation.md +0 -0
  236. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/020-judge-compliance-pass-evidence.md +0 -0
  237. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/021-no-failing-test-escalate-invokes-green.md +0 -0
  238. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/022-already-satisfied-red-requires-tests.md +0 -0
  239. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/023-pinned-micro-run-issue-scoped.md +0 -0
  240. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/024-worktree-session-stale-issue-id.md +0 -0
  241. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/025-green-stderr-noise-stall-detector.md +0 -0
  242. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/026-pi-spawn-lean-tool-schema.md +0 -0
  243. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/027-red-hang-timeout-rollback.md +0 -0
  244. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/028-task-scoped-judge-review-coverage.md +0 -0
  245. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/029-ponytail-pruning-in-review.md +0 -0
  246. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/030-config-rework.md +0 -0
  247. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/031-judge-revert-boundary-no-failing-test.md +0 -0
  248. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/issues/032-judge-feedback-injection-fail-close.md +0 -0
  249. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc/prd.md +0 -0
  250. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/adhoc.jsonl +0 -0
  251. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/constitution.md +0 -0
  252. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/ast-tree-sitter.md +0 -0
  253. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/config-rework.md +0 -0
  254. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/flow-ledger.md +0 -0
  255. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/graphite-cli.md +0 -0
  256. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/pi-agent-backend.md +0 -0
  257. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/ponytail-pruning.md +0 -0
  258. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/product-layer.md +0 -0
  259. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/rpc-streaming-tui.md +0 -0
  260. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/rpc-streaming.md +0 -0
  261. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/explore/security-hardening-cwe.md +0 -0
  262. {deviatdd-2.23.0 → deviatdd-2.23.1}/specs/implementation-gap.md +0 -0
  263. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/__init__.py +0 -0
  264. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_common.py +0 -0
  265. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_html.py +0 -0
  266. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/_safe_commands.py +0 -0
  267. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/adhoc.py +0 -0
  268. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/constitution.py +0 -0
  269. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/feature.py +0 -0
  270. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/flow_commands.py +0 -0
  271. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/init.py +0 -0
  272. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/inspect.py +0 -0
  273. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/macro.py +0 -0
  274. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/micro.py +0 -0
  275. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/review.py +0 -0
  276. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/cli/walkthrough.py +0 -0
  277. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/__init__.py +0 -0
  278. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/_shared.py +0 -0
  279. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/cache_discipline.py +0 -0
  280. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/commit.py +0 -0
  281. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/complexity.py +0 -0
  282. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/constitution.py +0 -0
  283. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/contract.py +0 -0
  284. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/convention.py +0 -0
  285. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/epic.py +0 -0
  286. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/issues.py +0 -0
  287. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/judge_evidence.py +0 -0
  288. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/prd.py +0 -0
  289. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/profile.py +0 -0
  290. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/repo.py +0 -0
  291. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/review_coverage.py +0 -0
  292. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/run_logger.py +0 -0
  293. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/tasks_ledger.py +0 -0
  294. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/validation.py +0 -0
  295. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/core/worktree.py +0 -0
  296. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/__init__.py +0 -0
  297. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/architecture.html.tmpl +0 -0
  298. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/domain-model.html.tmpl +0 -0
  299. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/flows.html.tmpl +0 -0
  300. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/plan.html.tmpl +0 -0
  301. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/html_templates/prd.html.tmpl +0 -0
  302. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/main.py +0 -0
  303. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/__init__.py +0 -0
  304. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/assembly.py +0 -0
  305. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/__init__.py +0 -0
  306. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/execute.md +0 -0
  307. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/explore.md +0 -0
  308. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/green.md +0 -0
  309. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/judge.md +0 -0
  310. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/plan.md +0 -0
  311. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/prd.md +0 -0
  312. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/red.md +0 -0
  313. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/refactor.md +0 -0
  314. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/research.md +0 -0
  315. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/shard.md +0 -0
  316. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/specify.md +0 -0
  317. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/auto/tasks.md +0 -0
  318. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-adhoc.md +0 -0
  319. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-architecture.md +0 -0
  320. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-constitution.md +0 -0
  321. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-e2e.md +0 -0
  322. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-execute.md +0 -0
  323. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-explore.md +0 -0
  324. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-flows.md +0 -0
  325. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-green.md +0 -0
  326. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-hotfix.md +0 -0
  327. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-html.md +0 -0
  328. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-init.md +0 -0
  329. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-judge.md +0 -0
  330. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-merge.md +0 -0
  331. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-plan.md +0 -0
  332. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-pr.md +0 -0
  333. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-prd.md +0 -0
  334. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-prune.md +0 -0
  335. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-red.md +0 -0
  336. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-refactor.md +0 -0
  337. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-release.md +0 -0
  338. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-research.md +0 -0
  339. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-review.md +0 -0
  340. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-shard.md +0 -0
  341. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-tasks.md +0 -0
  342. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-triage.md +0 -0
  343. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/commands/deviate-walkthrough.md +0 -0
  344. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/constitution_seed.md +0 -0
  345. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/core.md +0 -0
  346. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/lifecycle-auto.md +0 -0
  347. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/lifecycle-manual.md +0 -0
  348. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/macro-shared.md +0 -0
  349. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/meso-shared.md +0 -0
  350. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/micro-shared.md +0 -0
  351. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/product-shared.md +0 -0
  352. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/core/style-ste.md +0 -0
  353. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/__init__.py +0 -0
  354. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/agents_seed.md +0 -0
  355. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/claudemd_seed.md +0 -0
  356. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/governance/libref_seed.md +0 -0
  357. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/prompts/skills/deviatdd/SKILL.md +0 -0
  358. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/__init__.py +0 -0
  359. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/state/ledger.py +0 -0
  360. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/__init__.py +0 -0
  361. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/monitor.py +0 -0
  362. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/pipeline.py +0 -0
  363. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/ui/render.py +0 -0
  364. {deviatdd-2.23.0 → deviatdd-2.23.1}/src/deviate/visual/__init__.py +0 -0
  365. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/__init__.py +0 -0
  366. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/conftest.py +0 -0
  367. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/__init__.py +0 -0
  368. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/test_agent.py +0 -0
  369. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/core/test_smart_stall.py +0 -0
  370. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_derived_command_install.bats +0 -0
  371. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_green_stderr_stall.bats +0 -0
  372. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_macro_workflow.bats +0 -0
  373. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_optional_push_as_lock.bats +0 -0
  374. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_pi_spawn_lean_tool_schema.bats +0 -0
  375. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_red_hang_timeout_rollback.bats +0 -0
  376. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_review_plan_ac_coverage.bats +0 -0
  377. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/e2e/test_worktree_session_stale_issue.bats +0 -0
  378. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/__init__.py +0 -0
  379. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_adhoc.py +0 -0
  380. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_common.py +0 -0
  381. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_constitution.py +0 -0
  382. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_feature.py +0 -0
  383. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_flows_sync.py +0 -0
  384. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_help.py +0 -0
  385. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_html.py +0 -0
  386. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_inspect.py +0 -0
  387. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_macro_contracts.py +0 -0
  388. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_main_entrypoint.py +0 -0
  389. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_merge.py +0 -0
  390. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_meso_contracts.py +0 -0
  391. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_real_descendant_kill.py +0 -0
  392. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_review.py +0 -0
  393. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_safe_commands.py +0 -0
  394. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_test_command_resolution.py +0 -0
  395. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_timeout_safe_command.py +0 -0
  396. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_cli/test_top_level_run.py +0 -0
  397. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_cache_discipline.py +0 -0
  398. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_commands.py +0 -0
  399. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_commit.py +0 -0
  400. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_complexity.py +0 -0
  401. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_constitution.py +0 -0
  402. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_contract.py +0 -0
  403. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_convention.py +0 -0
  404. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_epic.py +0 -0
  405. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_flow_confirmation.py +0 -0
  406. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_issues.py +0 -0
  407. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_judge_evidence.py +0 -0
  408. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_ledger.py +0 -0
  409. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_prd.py +0 -0
  410. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_profile.py +0 -0
  411. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_repo.py +0 -0
  412. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_run_logger.py +0 -0
  413. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_tasks_ledger.py +0 -0
  414. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_validation.py +0 -0
  415. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_core/test_worktree.py +0 -0
  416. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_init.py +0 -0
  417. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/__init__.py +0 -0
  418. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/conftest.py +0 -0
  419. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_command_installation.py +0 -0
  420. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_init_export_cycle.py +0 -0
  421. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_full_cycle.py +0 -0
  422. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_layer.py +0 -0
  423. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_macro_orchestration.py +0 -0
  424. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_layer.py +0 -0
  425. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_orchestration.py +0 -0
  426. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_meso_task_ledger.py +0 -0
  427. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_parity.py +0 -0
  428. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_integration/test_skill_installation.py +0 -0
  429. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/__init__.py +0 -0
  430. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_explore.py +0 -0
  431. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_macro_model_routing.py +0 -0
  432. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_macro_orchestration.py +0 -0
  433. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_prd.py +0 -0
  434. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_research.py +0 -0
  435. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_macro/test_shard.py +0 -0
  436. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/__init__.py +0 -0
  437. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_auto_prompt_templates.py +0 -0
  438. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_model_routing.py +0 -0
  439. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_orchestration.py +0 -0
  440. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_meso_resume.py +0 -0
  441. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_plan_structure_injection.py +0 -0
  442. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_pr_platform.py +0 -0
  443. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_prompt_assembly.py +0 -0
  444. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_specify.py +0 -0
  445. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_meso/test_tasks.py +0 -0
  446. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/__init__.py +0 -0
  447. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/conftest.py +0 -0
  448. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_commit_failure.py +0 -0
  449. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_completed_evidence.py +0 -0
  450. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_e2e.py +0 -0
  451. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_execute.py +0 -0
  452. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_green.py +0 -0
  453. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_hotfix.py +0 -0
  454. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_judge.py +0 -0
  455. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_orchestration.py +0 -0
  456. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_output_filter.py +0 -0
  457. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_red.py +0 -0
  458. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_refactor.py +0 -0
  459. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_review_pause.py +0 -0
  460. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_rollback_safety.py +0 -0
  461. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_run.py +0 -0
  462. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_task_label.py +0 -0
  463. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_micro/test_two_counter_retry.py +0 -0
  464. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_release/test_next_version.py +0 -0
  465. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/__init__.py +0 -0
  466. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_config.py +0 -0
  467. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_ledger.py +0 -0
  468. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_security_profile.py +0 -0
  469. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_state/test_session.py +0 -0
  470. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/__init__.py +0 -0
  471. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_monitor.py +0 -0
  472. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_pipeline.py +0 -0
  473. {deviatdd-2.23.0 → deviatdd-2.23.1}/tests/test_ui/test_render.py +0 -0
  474. {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.0
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 every
78
- # supported agent. The --agent flag picks the default backend persisted
79
- # to .deviate/config.toml (slash commands themselves are installed to all
80
- # supported agent directories regardless).
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 every
45
- # supported agent. The --agent flag picks the default backend persisted
46
- # to .deviate/config.toml (slash commands themselves are installed to all
47
- # supported agent directories regardless).
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.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deviatdd"
3
- version = "2.23.0"
3
+ version = "2.23.1"
4
4
  description = "DeviaTDD CLI — agent orchestration framework"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -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 all agent
35
- directories — `.claude/commands/`, `.opencode/commands/`,
36
- `.factory/commands/`, `.pi/prompts/`, `.omp/prompts/` — in a single invocation, regardless of which agent was passed
37
- via `--agent`. Each command is a flat `<name>.md` file with a minimal YAML
38
- frontmatter (`name:` + `description:`). The agent backend selected via `--agent`
39
- (`opencode`, `claude`, `droid`, `factory`, `pi`, `omp`) is persisted to `[agent].backend` in
40
- `config.toml` for use by the meso/micro layers; it does **not** gate which agent
41
- directories receive commands.
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
- auto-detect. If omitted, the persisted value is reused; if no persisted value exists and
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 auto-detect)
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
- * `.claude/commands/`, `.opencode/commands/`, `.factory/commands/`,
138
- supported agent (24 `deviate-*` + 1 standalone `tools-mcp-servers`
139
- for Factory = 25 flat `.md` files total in that one directory)
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 targets (all five `active_agents`):** the skill is written
151
- to `<workdir>/.<agent>/skills/deviatdd/SKILL.md` for every agent
152
- platform that `setup` provisions commands for, regardless of whether
153
- each platform documents a project-local skills convention. Mirrors
154
- `_install_commands_to_agents`'s write-everywhere policy — every
155
- operator using `--agent <platform>` gets the skill at the canonical
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 all five agent platforms
222
- (`.claude/`, `.opencode/`, `.factory/`, `.pi/`, `.omp/`) with one
223
- pattern. The single-level prefix (`*/`, not `**/`) is critical: it
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` (8 tests) in
228
- `tests/test_cli/test_init.py` covers install-to-all-five-agents,
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 all four agent directories 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.
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, Write-Everywhere)
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 every agent platform
967
- in `active_agents` (`claude`, `opencode`, `factory`, `pi`, `omp`).
968
- This mirrors `_install_commands_to_agents`'s write-everywhere policy:
969
- the skill body is identical across platforms, only the destination
970
- directory differs, and the write is unconditional — every operator
971
- using `--agent <platform>` gets the skill at the canonical skills
972
- directory for their platform.
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 all five agent platforms (`.claude/`,
1048
- `.opencode/`, `.factory/`, `.pi/`, `.omp/`) with one pattern. The
1049
- single-level prefix (`*/`, not `**/`) is critical: it scopes the
1050
- pattern to the project root, never matching the deviatdd project's
1051
- own source at `src/deviate/prompts/skills/deviatdd/` (three
1052
- directories deep).
1053
-
1054
- **Tests:** `TestInstallDeviatddSkill` (8 tests) in
1055
- `tests/test_cli/test_init.py` covers install-to-all-five-agents,
1056
- idempotence, gitignore entry presence + idempotence, the safety-gate
1057
- fragments in the SKILL.md body, well-formed frontmatter, and the
1058
- dispatch table's canonical slash-command references.
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
- AGENT_CHOICES: tuple[str, ...] = ("factory", "droid", "claude", "opencode", "pi", "omp")
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 every supported agent directory.
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 four agent directories
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
- Mirrors ``_install_commands_to_agents``'s "write everywhere" pattern:
670
- every agent platform that ``deviate setup`` provisions commands
671
- for also receives the ``deviatdd`` skill at
672
- ``<workdir>/.<agent>/skills/deviatdd/SKILL.md``. The skill body is
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`` for consistency with
694
- the other four platforms; operators can register it via
695
- OMP's ``skills`` array in settings or copy it to the user-level
696
- path.
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`` only for unknown agent names not in the
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="Override auto-detected agent platform",
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
- # DeviaTDD commands are installed into ALL agent directories regardless
808
- # of ``--agent``. ``--agent`` only drives the ``[agent].backend`` value
809
- # written to ``.deviate/config.toml`` — that value is consumed by the
810
- # meso/micro layers to dispatch agent invocations, never to gate which
811
- # agents receive commands. ``droid`` is normalised to ``factory`` —
812
- # both names map to the Factory Droid IDE commands directory
813
- # (``.factory/commands/``); ``droid`` is the underlying backend binary.
814
- # ``pi`` uses ``.pi/prompts/`` per the platform's documented convention;
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
- active_agents = ("claude", "opencode", "factory", "pi", "omp")
820
- _install_commands_to_agents(workdir, list(active_agents))
821
- _install_deviatdd_skill(workdir, list(active_agents))
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
- Three artifact families are installed and must not be committed:
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 main
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. Already-canonical names (``opencode``, ``claude``,
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