deviatdd 2.20.2__tar.gz → 2.21.2__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 (482) hide show
  1. {deviatdd-2.20.2 → deviatdd-2.21.2}/.deviate/config.toml +8 -1
  2. {deviatdd-2.20.2 → deviatdd-2.21.2}/.gitignore +1 -0
  3. {deviatdd-2.20.2 → deviatdd-2.21.2}/CHANGELOG.md +26 -1
  4. {deviatdd-2.20.2 → deviatdd-2.21.2}/PKG-INFO +1 -1
  5. deviatdd-2.21.2/pr_descriptions/feat/adhoc/017-optional-push-as-lock.md +5 -0
  6. deviatdd-2.21.2/pr_descriptions/feat-adhoc-017-two-counter-tdd-retry.md +5 -0
  7. {deviatdd-2.20.2 → deviatdd-2.21.2}/pyproject.toml +1 -1
  8. deviatdd-2.21.2/scripts/verify_install.py +38 -0
  9. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/DeviaTDD-api.md +261 -93
  10. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/DeviaTDD-architecture.md +135 -55
  11. deviatdd-2.21.2/specs/adhoc/016-single-source-prompt-templates/plan.md +159 -0
  12. deviatdd-2.21.2/specs/adhoc/016-single-source-prompt-templates/tasks.jsonl +9 -0
  13. deviatdd-2.21.2/specs/adhoc/016-single-source-prompt-templates/tasks.md +173 -0
  14. deviatdd-2.21.2/specs/adhoc/017-optional-push-as-lock/plan.md +174 -0
  15. deviatdd-2.21.2/specs/adhoc/017-optional-push-as-lock/tasks.jsonl +16 -0
  16. deviatdd-2.21.2/specs/adhoc/017-optional-push-as-lock/tasks.md +226 -0
  17. deviatdd-2.21.2/specs/adhoc/017-two-counter-tdd-retry/plan.md +199 -0
  18. deviatdd-2.21.2/specs/adhoc/017-two-counter-tdd-retry/tasks.jsonl +15 -0
  19. deviatdd-2.21.2/specs/adhoc/017-two-counter-tdd-retry/tasks.md +168 -0
  20. deviatdd-2.21.2/specs/adhoc/018-one-behavior-rgr-granularity/plan.md +153 -0
  21. deviatdd-2.21.2/specs/adhoc/018-one-behavior-rgr-granularity/tasks.md +67 -0
  22. deviatdd-2.21.2/specs/adhoc/019-remote-aware-ordinal-allocation/plan.md +152 -0
  23. deviatdd-2.21.2/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.jsonl +10 -0
  24. deviatdd-2.21.2/specs/adhoc/019-remote-aware-ordinal-allocation/tasks.md +145 -0
  25. deviatdd-2.21.2/specs/adhoc/020-judge-compliance-pass-evidence/plan.md +176 -0
  26. deviatdd-2.21.2/specs/adhoc/020-judge-compliance-pass-evidence/tasks.jsonl +11 -0
  27. deviatdd-2.21.2/specs/adhoc/020-judge-compliance-pass-evidence/tasks.md +149 -0
  28. deviatdd-2.21.2/specs/adhoc/021-no-failing-test-escalate-invokes-green/plan.md +181 -0
  29. deviatdd-2.21.2/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.jsonl +11 -0
  30. deviatdd-2.21.2/specs/adhoc/021-no-failing-test-escalate-invokes-green/tasks.md +158 -0
  31. deviatdd-2.21.2/specs/adhoc/022-already-satisfied-red-requires-tests/plan.md +186 -0
  32. deviatdd-2.21.2/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.jsonl +7 -0
  33. deviatdd-2.21.2/specs/adhoc/022-already-satisfied-red-requires-tests/tasks.md +122 -0
  34. deviatdd-2.21.2/specs/adhoc/023-pinned-micro-run-issue-scoped/plan.md +177 -0
  35. deviatdd-2.21.2/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.jsonl +7 -0
  36. deviatdd-2.21.2/specs/adhoc/023-pinned-micro-run-issue-scoped/tasks.md +147 -0
  37. deviatdd-2.21.2/specs/adhoc/024-worktree-session-stale-issue-id/plan.md +179 -0
  38. deviatdd-2.21.2/specs/adhoc/024-worktree-session-stale-issue-id/tasks.jsonl +7 -0
  39. deviatdd-2.21.2/specs/adhoc/024-worktree-session-stale-issue-id/tasks.md +155 -0
  40. deviatdd-2.21.2/specs/adhoc/025-green-stderr-noise-stall-detector/plan.md +159 -0
  41. deviatdd-2.21.2/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.jsonl +8 -0
  42. deviatdd-2.21.2/specs/adhoc/025-green-stderr-noise-stall-detector/tasks.md +147 -0
  43. deviatdd-2.21.2/specs/adhoc/026-pi-spawn-lean-tool-schema/plan.md +167 -0
  44. deviatdd-2.21.2/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.jsonl +11 -0
  45. deviatdd-2.21.2/specs/adhoc/026-pi-spawn-lean-tool-schema/tasks.md +176 -0
  46. deviatdd-2.21.2/specs/adhoc/027-red-hang-timeout-rollback/plan.md +174 -0
  47. deviatdd-2.21.2/specs/adhoc/027-red-hang-timeout-rollback/tasks.jsonl +8 -0
  48. deviatdd-2.21.2/specs/adhoc/027-red-hang-timeout-rollback/tasks.md +146 -0
  49. deviatdd-2.21.2/specs/adhoc/028-task-scoped-judge-review-coverage/plan.md +180 -0
  50. deviatdd-2.21.2/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.jsonl +9 -0
  51. deviatdd-2.21.2/specs/adhoc/028-task-scoped-judge-review-coverage/tasks.md +180 -0
  52. deviatdd-2.21.2/specs/adhoc/issues/017-optional-push-as-lock.md +160 -0
  53. deviatdd-2.21.2/specs/adhoc/issues/017-two-counter-tdd-retry.md +137 -0
  54. deviatdd-2.21.2/specs/adhoc/issues/018-one-behavior-rgr-granularity.md +146 -0
  55. deviatdd-2.21.2/specs/adhoc/issues/019-remote-aware-ordinal-allocation.md +138 -0
  56. deviatdd-2.21.2/specs/adhoc/issues/020-judge-compliance-pass-evidence.md +153 -0
  57. deviatdd-2.21.2/specs/adhoc/issues/021-no-failing-test-escalate-invokes-green.md +127 -0
  58. deviatdd-2.21.2/specs/adhoc/issues/022-already-satisfied-red-requires-tests.md +123 -0
  59. deviatdd-2.21.2/specs/adhoc/issues/023-pinned-micro-run-issue-scoped.md +119 -0
  60. deviatdd-2.21.2/specs/adhoc/issues/024-worktree-session-stale-issue-id.md +121 -0
  61. deviatdd-2.21.2/specs/adhoc/issues/025-green-stderr-noise-stall-detector.md +124 -0
  62. deviatdd-2.21.2/specs/adhoc/issues/026-pi-spawn-lean-tool-schema.md +125 -0
  63. deviatdd-2.21.2/specs/adhoc/issues/027-red-hang-timeout-rollback.md +124 -0
  64. deviatdd-2.21.2/specs/adhoc/issues/028-task-scoped-judge-review-coverage.md +135 -0
  65. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/prd.md +200 -0
  66. deviatdd-2.21.2/specs/adhoc.jsonl +13 -0
  67. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/issues.jsonl +33 -0
  68. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/__init__.py +123 -45
  69. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/feature.py +2 -29
  70. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/macro.py +82 -16
  71. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/meso.py +391 -175
  72. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/micro.py +1403 -410
  73. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/review.py +27 -5
  74. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/walkthrough.py +8 -6
  75. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/_shared.py +1 -1
  76. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/agent.py +206 -82
  77. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/commands.py +98 -53
  78. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/epic.py +58 -10
  79. deviatdd-2.21.2/src/deviate/core/judge_evidence.py +321 -0
  80. deviatdd-2.21.2/src/deviate/core/review_coverage.py +154 -0
  81. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/tasks_ledger.py +27 -1
  82. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/worktree.py +25 -2
  83. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/green.md +2 -2
  84. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/judge.md +24 -9
  85. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/red.md +6 -3
  86. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/refactor.md +9 -3
  87. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/shard.md +1 -1
  88. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/tasks.md +4 -4
  89. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-adhoc.md +3 -2
  90. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-execute.md +42 -0
  91. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-explore.md +41 -0
  92. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-green.md +43 -0
  93. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-judge.md +41 -0
  94. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-merge.md +23 -21
  95. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-plan.md +53 -0
  96. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-pr.md +152 -0
  97. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-prd.md +44 -0
  98. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-red.md +47 -0
  99. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-refactor.md +48 -0
  100. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-research.md +59 -0
  101. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-review.md +2 -2
  102. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-shard.md +73 -0
  103. deviatdd-2.21.2/src/deviate/prompts/commands/deviate-tasks.md +53 -0
  104. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/micro-shared.md +1 -1
  105. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/state/config.py +48 -38
  106. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/core/test_agent.py +166 -0
  107. deviatdd-2.21.2/tests/e2e/test_derived_command_install.bats +71 -0
  108. deviatdd-2.21.2/tests/e2e/test_green_stderr_stall.bats +137 -0
  109. deviatdd-2.21.2/tests/e2e/test_optional_push_as_lock.bats +65 -0
  110. deviatdd-2.21.2/tests/e2e/test_pi_spawn_lean_tool_schema.bats +164 -0
  111. deviatdd-2.21.2/tests/e2e/test_red_hang_timeout_rollback.bats +162 -0
  112. deviatdd-2.21.2/tests/e2e/test_review_plan_ac_coverage.bats +110 -0
  113. deviatdd-2.21.2/tests/e2e/test_worktree_session_stale_issue.bats +86 -0
  114. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_feature.py +0 -62
  115. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_init.py +64 -236
  116. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_macro_contracts.py +119 -0
  117. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_merge.py +36 -0
  118. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_meso.py +278 -0
  119. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_micro.py +1346 -18
  120. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_review.py +268 -0
  121. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_top_level_run.py +38 -0
  122. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_agent.py +514 -0
  123. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_commands.py +112 -109
  124. deviatdd-2.21.2/tests/test_core/test_epic.py +148 -0
  125. deviatdd-2.21.2/tests/test_core/test_judge_evidence.py +494 -0
  126. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_tasks_ledger.py +41 -0
  127. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_worktree.py +47 -0
  128. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_command_installation.py +0 -35
  129. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_meso_layer.py +144 -0
  130. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_skill_installation.py +0 -35
  131. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_auto_prompt_templates.py +186 -0
  132. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_meso_orchestration.py +293 -0
  133. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_meso_resume.py +38 -0
  134. deviatdd-2.21.2/tests/test_meso/test_pr_platform.py +52 -0
  135. deviatdd-2.21.2/tests/test_meso/test_prompt_assembly.py +76 -0
  136. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_specify.py +142 -0
  137. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_e2e.py +146 -1
  138. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_green.py +167 -10
  139. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_judge.py +1116 -0
  140. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_orchestration.py +582 -47
  141. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_refactor.py +176 -20
  142. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_run.py +212 -14
  143. deviatdd-2.21.2/tests/test_micro/test_two_counter_retry.py +1211 -0
  144. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_state/test_config.py +120 -29
  145. {deviatdd-2.20.2 → deviatdd-2.21.2}/uv.lock +1 -1
  146. deviatdd-2.20.2/scripts/verify_install.py +0 -29
  147. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-execute.md +0 -223
  148. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-explore.md +0 -252
  149. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-green.md +0 -215
  150. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-judge.md +0 -287
  151. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-plan.md +0 -219
  152. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-pr.md +0 -144
  153. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-prd.md +0 -225
  154. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-red.md +0 -245
  155. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-refactor.md +0 -209
  156. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-research.md +0 -369
  157. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-shard.md +0 -234
  158. deviatdd-2.20.2/src/deviate/prompts/commands/deviate-tasks.md +0 -290
  159. deviatdd-2.20.2/src/deviate/prompts/extras/deviate-pr-graphite-routing.md +0 -20
  160. deviatdd-2.20.2/src/deviate/prompts/governance/graphite_seed.md +0 -18
  161. deviatdd-2.20.2/tests/test_core/test_epic.py +0 -44
  162. deviatdd-2.20.2/tests/test_meso/test_prompt_assembly.py +0 -41
  163. {deviatdd-2.20.2 → deviatdd-2.21.2}/.deviate/.gitignore +0 -0
  164. {deviatdd-2.20.2 → deviatdd-2.21.2}/.deviate/evaluations/deviate-flows-skill-2026-06-26.json +0 -0
  165. {deviatdd-2.20.2 → deviatdd-2.21.2}/.env.example +0 -0
  166. {deviatdd-2.20.2 → deviatdd-2.21.2}/.gitattributes +0 -0
  167. {deviatdd-2.20.2 → deviatdd-2.21.2}/.githooks/pre-commit +0 -0
  168. {deviatdd-2.20.2 → deviatdd-2.21.2}/.githooks/pre-push +0 -0
  169. {deviatdd-2.20.2 → deviatdd-2.21.2}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  170. {deviatdd-2.20.2 → deviatdd-2.21.2}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  171. {deviatdd-2.20.2 → deviatdd-2.21.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  172. {deviatdd-2.20.2 → deviatdd-2.21.2}/.github/workflows/ci.yml +0 -0
  173. {deviatdd-2.20.2 → deviatdd-2.21.2}/.opencode/.gitignore +0 -0
  174. {deviatdd-2.20.2 → deviatdd-2.21.2}/.opencode/opencode.json +0 -0
  175. {deviatdd-2.20.2 → deviatdd-2.21.2}/.worktrees/feat/005-acceptance-gates/003-micro-phase-gates-red-green/.env.example +0 -0
  176. {deviatdd-2.20.2 → deviatdd-2.21.2}/.worktrees/feat/adhoc/012-rpc-streaming-tui-renderer/.env.example +0 -0
  177. {deviatdd-2.20.2 → deviatdd-2.21.2}/.worktrees/feat/adhoc/014-cwe-mapping-security-findings/.env.example +0 -0
  178. {deviatdd-2.20.2 → deviatdd-2.21.2}/.worktrees/feat/adhoc/016-single-source-prompt-templates/.env.example +0 -0
  179. {deviatdd-2.20.2 → deviatdd-2.21.2}/.worktrees/work/.env.example +0 -0
  180. {deviatdd-2.20.2 → deviatdd-2.21.2}/AGENTS.md +0 -0
  181. {deviatdd-2.20.2 → deviatdd-2.21.2}/CLAUDE.md +0 -0
  182. {deviatdd-2.20.2 → deviatdd-2.21.2}/CODE_OF_CONDUCT.md +0 -0
  183. {deviatdd-2.20.2 → deviatdd-2.21.2}/CONTRIBUTING.md +0 -0
  184. {deviatdd-2.20.2 → deviatdd-2.21.2}/LICENSE +0 -0
  185. {deviatdd-2.20.2 → deviatdd-2.21.2}/README.md +0 -0
  186. {deviatdd-2.20.2 → deviatdd-2.21.2}/SECURITY.md +0 -0
  187. {deviatdd-2.20.2 → deviatdd-2.21.2}/deviatdd.png +0 -0
  188. {deviatdd-2.20.2 → deviatdd-2.21.2}/mise.toml +0 -0
  189. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat/001-deviate-cli-python/008-meso-macro-automated-orchestration.md +0 -0
  190. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat/adhoc/006-context-cli-integration.md +0 -0
  191. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-001-deviate-cli-python-001-cli-initialization-governance-provisioning-pr-11.md +0 -0
  192. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-001-deviate-cli-python-003-meso-layer-specification-task-decomposition.md +0 -0
  193. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-001-deviate-cli-python-004-micro-layer-tdd-sandbox-execution.md +0 -0
  194. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-001-deviate-cli-python-005-cli-architecture-realignment-skill-integration.md +0 -0
  195. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-001-deviate-cli-python-007-macro-meso-parity-backward-compatibility.md +0 -0
  196. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-002-deviatdd-gap-analysis-001-foundation-cli-infrastructure.md +0 -0
  197. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-002-deviatdd-gap-analysis-003-fast-path-commands.md +0 -0
  198. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-002-deviatdd-gap-analysis-004-governance-inspection.md +0 -0
  199. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-adhoc-001-streaming-pipeline-monitor.md +0 -0
  200. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat-adhoc-008-ast-phase-prioritization.md +0 -0
  201. {deviatdd-2.20.2 → deviatdd-2.21.2}/pr_descriptions/feat_002-deviatdd-gap-analysis_001-foundation-cli-infrastructure.md +0 -0
  202. {deviatdd-2.20.2 → deviatdd-2.21.2}/scripts/benchmark_lmstudio.py +0 -0
  203. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t001.json +0 -0
  204. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t002.json +0 -0
  205. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/manifest-t004.json +0 -0
  206. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/spec.md +0 -0
  207. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/001-cli-initialization-governance-provisioning/tasks.md +0 -0
  208. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/spec.md +0 -0
  209. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/002-macro-layer-state-ledger-management/tasks.md +0 -0
  210. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/spec.md +0 -0
  211. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/003-meso-layer-specification-task-decomposition/tasks.md +0 -0
  212. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/spec.md +0 -0
  213. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.jsonl +0 -0
  214. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/004-micro-layer-tdd-sandbox-execution/tasks.md +0 -0
  215. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/spec.md +0 -0
  216. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/005-cli-architecture-realignment-skill-integration/tasks.md +0 -0
  217. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/spec.md +0 -0
  218. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/007-macro-meso-parity-backward-compatibility/tasks.md +0 -0
  219. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/spec.md +0 -0
  220. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.jsonl +0 -0
  221. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/008-meso-macro-automated-orchestration/tasks.md +0 -0
  222. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/data-model.md +0 -0
  223. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/design.md +0 -0
  224. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/explore.md +0 -0
  225. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/001-cli-initialization-governance-provisioning.md +0 -0
  226. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/002-macro-layer-state-ledger-management.md +0 -0
  227. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/003-meso-layer-specification-task-decomposition.md +0 -0
  228. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/004-micro-layer-tdd-sandbox-execution.md +0 -0
  229. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/005-cli-architecture-realignment-skill-integration.md +0 -0
  230. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/006-state-persistence-concurrency-safety.md +0 -0
  231. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/007-macro-meso-parity-backward-compatibility.md +0 -0
  232. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/issues/008-meso-macro-automated-orchestration.md +0 -0
  233. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/001-deviate-cli-python/prd.md +0 -0
  234. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/spec.md +0 -0
  235. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.jsonl +0 -0
  236. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/001-foundation-cli-infrastructure/tasks.md +0 -0
  237. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/spec.md +0 -0
  238. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.jsonl +0 -0
  239. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/003-fast-path-commands/tasks.md +0 -0
  240. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/004-governance-inspection/spec.md +0 -0
  241. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.jsonl +0 -0
  242. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/004-governance-inspection/tasks.md +0 -0
  243. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/spec.md +0 -0
  244. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.jsonl +0 -0
  245. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/005-micro-layer-integrity/tasks.md +0 -0
  246. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/data-model.md +0 -0
  247. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/design.md +0 -0
  248. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/explore.md +0 -0
  249. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/issues/001-foundation-cli-infrastructure.md +0 -0
  250. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/issues/002-context-pipeline.md +0 -0
  251. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/issues/003-fast-path-commands.md +0 -0
  252. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/issues/004-governance-inspection.md +0 -0
  253. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/issues/005-micro-layer-integrity.md +0 -0
  254. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/plan-tdd-integration-gap.md +0 -0
  255. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/002-deviatdd-gap-analysis/prd.md +0 -0
  256. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/003-graphite-cli-integration/explore.md +0 -0
  257. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/004-per-task-security-profile/issues/001-security-profile-and-judge-checks.md +0 -0
  258. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/001-verification-mode-metadata/plan.md +0 -0
  259. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.jsonl +0 -0
  260. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/001-verification-mode-metadata/tasks.md +0 -0
  261. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/002-task-acceptance-traceability/plan.md +0 -0
  262. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.jsonl +0 -0
  263. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/002-task-acceptance-traceability/tasks.md +0 -0
  264. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/data-model.md +0 -0
  265. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/design.md +0 -0
  266. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/explore.md +0 -0
  267. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/issues/001-verification-mode-metadata.md +0 -0
  268. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/issues/002-task-acceptance-traceability.md +0 -0
  269. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/issues/003-micro-phase-gates-red-green.md +0 -0
  270. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/issues/004-refactor-regression-gate.md +0 -0
  271. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/issues/005-prompt-spec-alignment.md +0 -0
  272. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/005-acceptance-gates/prd.md +0 -0
  273. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/architecture.md +0 -0
  274. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/domain-model.md +0 -0
  275. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/flows/flows-product.md +0 -0
  276. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/flows/flows-streaming.md +0 -0
  277. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/flows/index.md +0 -0
  278. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/flows.jsonl +0 -0
  279. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/guildwright-current-system.md +0 -0
  280. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/guildwright-gap-register.md +0 -0
  281. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/guildwright-git-state-model.md +0 -0
  282. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/guildwright-rewrite.md +0 -0
  283. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/guildwright-rust-tui-requirements.md +0 -0
  284. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/_product/release-next.md +0 -0
  285. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/001-streaming-pipeline-monitor/spec.md +0 -0
  286. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/001-streaming-pipeline-monitor/tasks.jsonl +0 -0
  287. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/001-streaming-pipeline-monitor/tasks.md +0 -0
  288. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/003-meso-layer-restructuring/spec.md +0 -0
  289. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/003-meso-layer-restructuring/tasks.jsonl +0 -0
  290. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/003-meso-layer-restructuring/tasks.md +0 -0
  291. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/004-deviate-review-skill/spec.md +0 -0
  292. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/004-deviate-review-skill/tasks.jsonl +0 -0
  293. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/004-deviate-review-skill/tasks.md +0 -0
  294. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/005-per-phase-model-configuration/plan.md +0 -0
  295. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/005-per-phase-model-configuration/tasks.jsonl +0 -0
  296. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/005-per-phase-model-configuration/tasks.md +0 -0
  297. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/006-context-cli-integration/plan.md +0 -0
  298. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/006-context-cli-integration/tasks.jsonl +0 -0
  299. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/006-context-cli-integration/tasks.md +0 -0
  300. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/007-graphite-cli/plan.md +0 -0
  301. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/007-graphite-cli/tasks.jsonl +0 -0
  302. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/007-graphite-cli/tasks.md +0 -0
  303. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/008-ast-phase-prioritization/plan.md +0 -0
  304. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/008-ast-phase-prioritization/tasks.jsonl +0 -0
  305. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/008-ast-phase-prioritization/tasks.md +0 -0
  306. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/009-pi-agent-backend-integration/plan.md +0 -0
  307. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/009-pi-agent-backend-integration/tasks.jsonl +0 -0
  308. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/009-pi-agent-backend-integration/tasks.md +0 -0
  309. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/010-deviate-setup-product-layer/plan.md +0 -0
  310. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/010-deviate-setup-product-layer/tasks.jsonl +0 -0
  311. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/010-deviate-setup-product-layer/tasks.md +0 -0
  312. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/plan.md +0 -0
  313. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.jsonl +0 -0
  314. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/013-flow-ledger-canonical-source-of-truth/tasks.md +0 -0
  315. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/015-narrow-product-flow-scope/plan.md +0 -0
  316. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/015-narrow-product-flow-scope/tasks.md +0 -0
  317. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/001-streaming-pipeline-monitor.md +0 -0
  318. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/002-aider-agent-backend-integration.md +0 -0
  319. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/003-meso-layer-restructuring.md +0 -0
  320. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/004-deviate-review-skill.md +0 -0
  321. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/005-per-phase-model-configuration.md +0 -0
  322. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/006-context-cli-integration.md +0 -0
  323. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/007-graphite-cli.md +0 -0
  324. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/008-ast-phase-prioritization.md +0 -0
  325. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/009-pi-agent-backend-integration.md +0 -0
  326. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/010-deviate-setup-product-layer.md +0 -0
  327. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/012-rpc-streaming-tui-renderer.md +0 -0
  328. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/013-flow-ledger-canonical-source-of-truth.md +0 -0
  329. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/014-cwe-mapping-security-findings.md +0 -0
  330. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/015-narrow-product-flow-scope.md +0 -0
  331. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/adhoc/issues/016-single-source-prompt-templates.md +0 -0
  332. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/constitution.md +0 -0
  333. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/ast-tree-sitter.md +0 -0
  334. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/flow-ledger.md +0 -0
  335. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/graphite-cli.md +0 -0
  336. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/pi-agent-backend.md +0 -0
  337. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/product-layer.md +0 -0
  338. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/rpc-streaming-tui.md +0 -0
  339. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/rpc-streaming.md +0 -0
  340. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/explore/security-hardening-cwe.md +0 -0
  341. {deviatdd-2.20.2 → deviatdd-2.21.2}/specs/implementation-gap.md +0 -0
  342. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/__init__.py +0 -0
  343. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/_common.py +0 -0
  344. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/_html.py +0 -0
  345. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/_safe_commands.py +0 -0
  346. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/adhoc.py +0 -0
  347. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/constitution.py +0 -0
  348. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/flow_commands.py +0 -0
  349. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/init.py +0 -0
  350. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/cli/inspect.py +0 -0
  351. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/__init__.py +0 -0
  352. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/cache_discipline.py +0 -0
  353. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/commit.py +0 -0
  354. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/complexity.py +0 -0
  355. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/constitution.py +0 -0
  356. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/contract.py +0 -0
  357. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/convention.py +0 -0
  358. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/issues.py +0 -0
  359. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/prd.py +0 -0
  360. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/profile.py +0 -0
  361. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/repo.py +0 -0
  362. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/run_logger.py +0 -0
  363. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/core/validation.py +0 -0
  364. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/__init__.py +0 -0
  365. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/architecture.html.tmpl +0 -0
  366. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/domain-model.html.tmpl +0 -0
  367. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/flows.html.tmpl +0 -0
  368. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/plan.html.tmpl +0 -0
  369. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/html_templates/prd.html.tmpl +0 -0
  370. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/main.py +0 -0
  371. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/__init__.py +0 -0
  372. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/assembly.py +0 -0
  373. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/__init__.py +0 -0
  374. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/execute.md +0 -0
  375. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/explore.md +0 -0
  376. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/plan.md +0 -0
  377. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/prd.md +0 -0
  378. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/research.md +0 -0
  379. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/auto/specify.md +0 -0
  380. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-architecture.md +0 -0
  381. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-constitution.md +0 -0
  382. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-e2e.md +0 -0
  383. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-flows.md +0 -0
  384. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-hotfix.md +0 -0
  385. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-html.md +0 -0
  386. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-init.md +0 -0
  387. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-prune.md +0 -0
  388. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-release.md +0 -0
  389. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-triage.md +0 -0
  390. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/commands/deviate-walkthrough.md +0 -0
  391. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/constitution_seed.md +0 -0
  392. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/core.md +0 -0
  393. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/lifecycle-auto.md +0 -0
  394. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/lifecycle-manual.md +0 -0
  395. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/macro-shared.md +0 -0
  396. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/meso-shared.md +0 -0
  397. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/product-shared.md +0 -0
  398. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/core/style-ste.md +0 -0
  399. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/governance/__init__.py +0 -0
  400. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/governance/agents_seed.md +0 -0
  401. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/governance/claudemd_seed.md +0 -0
  402. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/governance/libref_seed.md +0 -0
  403. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/prompts/skills/deviatdd/SKILL.md +0 -0
  404. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/state/__init__.py +0 -0
  405. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/state/ledger.py +0 -0
  406. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/ui/__init__.py +0 -0
  407. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/ui/monitor.py +0 -0
  408. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/ui/pipeline.py +0 -0
  409. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/ui/render.py +0 -0
  410. {deviatdd-2.20.2 → deviatdd-2.21.2}/src/deviate/visual/__init__.py +0 -0
  411. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/__init__.py +0 -0
  412. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/conftest.py +0 -0
  413. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/core/__init__.py +0 -0
  414. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/core/test_smart_stall.py +0 -0
  415. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/e2e/test_macro_workflow.bats +0 -0
  416. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/__init__.py +0 -0
  417. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_adhoc.py +0 -0
  418. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_common.py +0 -0
  419. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_constitution.py +0 -0
  420. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_flows_sync.py +0 -0
  421. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_help.py +0 -0
  422. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_html.py +0 -0
  423. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_inspect.py +0 -0
  424. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_main_entrypoint.py +0 -0
  425. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_meso_contracts.py +0 -0
  426. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_real_descendant_kill.py +0 -0
  427. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_safe_commands.py +0 -0
  428. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_test_command_resolution.py +0 -0
  429. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_cli/test_timeout_safe_command.py +0 -0
  430. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_cache_discipline.py +0 -0
  431. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_commit.py +0 -0
  432. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_complexity.py +0 -0
  433. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_constitution.py +0 -0
  434. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_contract.py +0 -0
  435. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_convention.py +0 -0
  436. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_flow_confirmation.py +0 -0
  437. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_issues.py +0 -0
  438. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_ledger.py +0 -0
  439. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_prd.py +0 -0
  440. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_profile.py +0 -0
  441. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_repo.py +0 -0
  442. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_run_logger.py +0 -0
  443. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_core/test_validation.py +0 -0
  444. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_init.py +0 -0
  445. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/__init__.py +0 -0
  446. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/conftest.py +0 -0
  447. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_init_export_cycle.py +0 -0
  448. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_macro_full_cycle.py +0 -0
  449. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_macro_layer.py +0 -0
  450. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_macro_orchestration.py +0 -0
  451. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_meso_orchestration.py +0 -0
  452. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_meso_task_ledger.py +0 -0
  453. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_integration/test_parity.py +0 -0
  454. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/__init__.py +0 -0
  455. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_explore.py +0 -0
  456. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_macro_model_routing.py +0 -0
  457. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_macro_orchestration.py +0 -0
  458. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_prd.py +0 -0
  459. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_research.py +0 -0
  460. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_macro/test_shard.py +0 -0
  461. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/__init__.py +0 -0
  462. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_meso_model_routing.py +0 -0
  463. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_plan_structure_injection.py +0 -0
  464. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_meso/test_tasks.py +0 -0
  465. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/__init__.py +0 -0
  466. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/conftest.py +0 -0
  467. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_commit_failure.py +0 -0
  468. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_execute.py +0 -0
  469. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_hotfix.py +0 -0
  470. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_output_filter.py +0 -0
  471. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_red.py +0 -0
  472. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_rollback_safety.py +0 -0
  473. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_micro/test_task_label.py +0 -0
  474. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_state/__init__.py +0 -0
  475. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_state/test_ledger.py +0 -0
  476. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_state/test_security_profile.py +0 -0
  477. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_state/test_session.py +0 -0
  478. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_ui/__init__.py +0 -0
  479. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_ui/test_monitor.py +0 -0
  480. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_ui/test_pipeline.py +0 -0
  481. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_ui/test_render.py +0 -0
  482. {deviatdd-2.20.2 → deviatdd-2.21.2}/tests/test_visual_demo/test_tsk_001_01.py +0 -0
@@ -1,5 +1,5 @@
1
1
  profile = "default"
2
- timeout_seconds = 300
2
+ timeout_seconds = 1800
3
3
  agent_export_mode = "local"
4
4
 
5
5
  graphite = false
@@ -7,3 +7,10 @@ use_context = true
7
7
  use_libref = true
8
8
  [agent]
9
9
  backend = "pi"
10
+ transport = "cli"
11
+ pi_rpc = false
12
+ timeout = 1800
13
+
14
+ [models]
15
+ default = "grok-4.6"
16
+
@@ -12,6 +12,7 @@ __pycache__/
12
12
  .tdd-session.json
13
13
  .deviate/session.json
14
14
  .opencode/index/
15
+ .codebase-index/
15
16
  .opencode/codebase-index.json
16
17
  node_modules/
17
18
 
@@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  ## [Unreleased]
9
9
 
10
10
  ### Added
11
+ - **`/deviate-pr` now marks the issue COMPLETED before it pushes, and opens a PR/MR only on request.** Rewritten to mirror `/deviate-merge`: `deviate pr run` appends the COMPLETED transition to `specs/issues.jsonl`, stages and commits it with the PR body, pushes the branch, then opens a GitHub PR (`gh pr create`) or a GitLab MR (`git push -o merge_request.create`). Platform is auto-detected from the `origin` remote hostname. `--no-pr` pushes and marks COMPLETED without opening anything; `--merge` / `--auto-merge` apply to GitHub only (GitLab warns and opens for review). `--platform github|gitlab` forces the platform. Pinned by `tests/test_integration/test_meso_layer.py::TestPrRun` and `tests/test_meso/test_pr_platform.py`.
12
+ - **Graphite CLI integration is removed from the active code, prompts, and specs.** The `--graphite` setup flag, the `graphite` config field and `resolve_graphite_config`, the `gt create` / `gt submit` routing in `feature.py` / `micro.py` / `meso.py`, and the `## Graphite Stacked Changes Workflow` governance seed are gone. `deviate pr` no longer has a Graphite path (`git push -o merge_request.create` covers GitLab). Historical spec archives (`specs/adhoc/007-graphite-cli`, `specs/003-graphite-cli-integration`) and the append-only ledgers are left untouched.
13
+ - **Manual slash-command bodies now derive from the canonical `auto/{phase}.md` core at install time.** `install_command`/`compose_command_body` (`src/deviate/core/commands.py`) splice the canonical `auto/{phase}.md` middle verbatim for the 11 overlapping phases (explore, research, prd, shard, plan, tasks, red, green, refactor, judge, execute) plus a per-phase manual overlay (pre/post-script lifecycle, rich handover manifest, `<context><user_input>`). The hand-maintained duplicate middle bodies were deleted from `commands/deviate-{phase}.md`, so the manual and auto modes can no longer drift. The derived RED inherits auto's `status: "PASS"` + `failure_kind` semantics (no `status: "FAIL"`/abort-on-passing-test); the derived GREEN inherits auto's "write ONLY production code" role language. A drift guard pins the identical-middle invariant across all 11 phases. Pinned by `tests/test_core/test_commands.py::TestManualDerivationFromAutoCore` and `tests/test_meso/test_auto_prompt_templates.py::TestManualDerivationDriftGuard`.
11
14
  - **The `deviatdd` skill now prepares Meso before it drains Micro.** It first runs idempotent `deviate meso run`, then runs bare `deviate micro run` per task. Inside a feature worktree, Meso skips valid completed phases. Valid Plan plus Tasks emits `MESO_ALREADY_COMPLETE`. Valid Plan without Tasks resumes at Tasks. Missing artifacts run Plan then Tasks. Invalid existing Plan or empty Tasks stop without overwrite. The separate `deviatdd-meso` skill was removed, so `deviate setup` continues to install one unified skill. Pinned by `tests/test_meso/test_meso_resume.py` and the setup skill tests.
12
15
  - **Acceptance-contract scenarios now require exactly one `**Verification Mode**` line.** Each `AC-PLAN-NNN` scenario in `plan.md` must carry a `**Verification Mode**: automated|manual|deferred` literal (case-insensitive). `validate_acceptance_contract` (`src/deviate/core/validation.py`) reports a named error — `missing Verification Mode`, `duplicate Verification Mode lines`, or `invalid Verification Mode '<value>'; expected one of automated|manual|deferred` — and `deviate plan post` / `deviate meso tasks pre` block with `PLAN_ACCEPTANCE_CONTRACT_INVALID`; meso-run resume blocks with `MESO_PLAN_INVALID`. Manual/deferred modes validate with no `test_ref` in the body. Pinned by `tests/test_core/test_validation.py::TestVerificationModeValidation` and the gate/resume regression tests in `tests/test_cli/test_meso_contracts.py` / `tests/test_meso/test_meso_resume.py`.
13
16
  - **`deviate micro run --auto` spawns the configured agent with the deviatdd skill slash command as the prompt.** Skips the normal RED/GREEN/JUDGE/REFACTOR orchestration and hands the queue off to the agent, which then drives `deviate micro run` per task until the queue drains. Agent-agnostic: the new `_DEVIATDD_SLASH_COMMAND` map resolves the slash command by backend — `/deviatdd` for Claude Code, `/skills:deviatdd` for Pi and OMP. Falls back to `AUTO_NO_SLASH_COMMAND` + exit 1 when the configured backend (e.g. `opencode`, `droid`, `stub`) has no documented slash command form. Pinned by `tests/test_micro/test_run.py::TestAutoFlag` (4 tests: slash command per backend, unknown backend rejection, normal dispatch skipped).
@@ -18,11 +21,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
18
21
  - **Constitution is now prepended to every phase prompt on both the auto and manual paths.** Closes the gap where agents running via `/deviate-*` slash commands never saw the constitution at the top of the prompt and could silently substitute a mandated tech-stack component (e.g., deferring Phoenix LiveView for a framework-free shell — a `lib/meepleinn_web/live/*.ex` module with a moduledoc disclaimer naming the missing LiveView transport for "future wiring"). `compose_command_body(raw, core_dir, constitution_path=...)` (`src/deviate/core/commands.py`) now accepts a constitution path and prepends the file's content as the first tier of the composed body — same parity as the auto path's `deviate.prompts.assembly.load_template`. `install_command(...)` derives `<workdir>/specs/constitution.md` from the workdir argument (already threaded through `_install_commands_to_agents`) and passes it through. Missing constitution is non-fatal (greenfield case: `deviate setup` runs before `deviate research` scaffolds the constitution). The universal invariant `core.md` now carries an explicit `Constitution Compliance Mandate` (#10) that forbids silent omission, deferral, or substitution of a mandated component without an ADR + `constitution.md` amendment + HITL sign-off — a code comment, issue bullet, or GREEN-phase hand-wave is no longer sufficient. Pinned by `tests/test_core/test_commands.py::TestComposeCommandBodyConstitutionInjection` (3 tests: prepended when path provided, no injection when path is None, no injection when file missing) and `tests/test_core/test_commands.py::TestPlatformFrontmatter::test_installed_command_includes_constitution_when_workdir_has_one` / `::test_installed_command_strips_constitution_when_no_constitution_in_workdir`.
19
22
  - **JUDGE phase now treats "Constitution Compliance Violation" as a blocking category.** Adds category #7 (`src/deviate/prompts/auto/judge.md`) and a matching `Constitution Compliance | Critical` evaluation dimension. A diff that substitutes, defers, mocks away, or omits a component the constitution mandates (tech stack, transport, architectural boundary, runtime, framework) is now `COMPLIANCE_VIOLATION` with severity `CRITICAL` — even when the AC-NN's surface behavior appears satisfied and the test passes via a stand-in substrate (socket-shaped map asserting on `:assigns` while the real Phoenix LiveView WebSocket is unwired, REST shim around a LiveView contract, mocked system-under-test to bypass the real transport). STEP_2 of the execution sequence adds a `Constitution scan` hard check that cross-references the constitution (prepended to the JUDGE prompt at tier 1) against the diff. The verdict YAML schema gains `constitution_compliance: "PASS" | "FAIL"`. The "seven Categories" → "eight Categories" tally is updated in STEP_3 and the constraints block. This is a prompt-only change — no production code or test infrastructure changes — so it does not add a runtime regression test; the change is locked by manual prompt review against the MeepleInn/Phoenix scenario from the issue.
20
23
 
21
- - **RED phase that produces no failing test now routes the decision to JUDGE instead of dying in a raw `PhaseFailedError`.** When a task's test command exits 0 (all tests pass) or collects no tests, `deviate micro run` skips GREEN (a vacuous GREEN had nothing to implement and burned the TRAIN budget) and calls JUDGE directly with a new `failure_kind: no_failing_test` discriminator. JUDGE either rules the required behavior already exists (`skip_refactor` / bare `COMPLIANCE_PASS` → task marked COMPLETED, the uncommitted passing test discarded) or rules the test wrong (`revert_before` → RED re-authors a genuinely failing test). JUDGE's diff spans the uncommitted RED test so it can review what the agent actually wrote. The RED agent may declare `failure_kind: already_satisfied` / `test_defect` with a `rationale` to steer the adjudication. Pinned by `tests/test_micro/test_orchestration.py::TestMicroOrchestration::test_micro_red_no_failing_test_routes_to_judge_skip_refactor`.
24
+ - **RED phase that produces no failing test now routes the decision to JUDGE instead of dying in a raw `PhaseFailedError`.** When a task's test command exits 0 (all tests pass) or collects no tests, `deviate micro run` skips GREEN (a vacuous GREEN had nothing to implement and burned the TRAIN budget) and calls JUDGE directly with a new `failure_kind: no_failing_test` discriminator. JUDGE either rules the required behavior already exists (`skip_refactor` / bare `COMPLIANCE_PASS` → task marked COMPLETED, declared regression tests stay on disk) or rules the test wrong (`revert_before` → RED re-authors a genuinely failing test). JUDGE's diff spans the uncommitted RED test so it can review what the agent actually wrote. The RED agent may declare `failure_kind: already_satisfied` / `test_defect` with a `rationale` to steer the adjudication. Pinned by `tests/test_micro/test_orchestration.py::TestMicroOrchestration::test_micro_red_no_failing_test_routes_to_judge_skip_refactor`.
22
25
  - **`deviate specify --local` claims an issue without pushing to the remote.** When `--local` is set, `_try_claim_issue` skips the `branch_exists_on_remote` check and the `git push` step, so the worktree is created, the ledger row is written, and the claim commit is recorded locally only. If the local branch `feat/<epic>/<slug>` already exists, the command short-circuits with `ALREADY_CLAIMED_LOCAL` and reuses the existing worktree, treating branch presence as the claim signal without rewriting the ledger. NOTE: this semantic can false-positive on a manual `git checkout -b feat/<epic>/<slug>` that pre-dated any claim — there is no opt-in to disable it for the no-remote workflow, so prefer `deviate specify <id>` (the default, which checks remote first) when operating against a shared origin. The new option lives at `src/deviate/cli/meso.py::_try_claim_issue(..., local=...)` and the `specify` Typer command forwards it through `_specify_pre`. Pinned by `tests/test_meso/test_specify.py::TestSpecifyLocalFlag` (2 tests: branch-exists short-circuit, kwargs forwarded) and `tests/test_cli/test_meso.py::TestSpecifyLocalFlag` (4 tests: remote check skipped, push skipped, short-circuit dict shape, branch-exists short-circuit).
23
26
  - **`deviate flows sync` — sole owner of `specs/_product/flows.jsonl` creation.** New top-level `flows` Typer group exposes a single `sync` subcommand that parses `specs/_product/flows/index.md` and appends one ``FlowRecord`` identity row plus ``FLOW_DISCOVERED`` and ``FLOW_DOCUMENTED`` events per flow. Re-running on a populated ledger is a no-op (compound-key idempotency on the underlying append helpers). Exits non-zero with ``FLOWS_INDEX_MISSING`` on stderr when the canonical index is absent, and ``FLOWS_INDEX_EMPTY`` when the index parses to zero rows — surfaces authoring defects instead of silently committing a half-baked catalog. New public service `seed_flow_ledger(flows_index, ledger_path)` in `src/deviate/state/ledger.py` plus `FlowIndexEmptyError` for the empty-index contract. `deviate explore post` no longer seeds identity or documentation events; it only renders the coverage report. ``flows.jsonl`` never receives ``FLOW_REFERENCED_BY_ISSUE`` events — the referenced-by relationship is derived read-only from ``specs/issues.jsonl::flow_refs`` at coverage time.
24
27
  - **`deviate html prd --bucket <slug>` targets a specific epic when more than one owns a `prd.md`.** Previously the command hard-failed with `HTML_AMBIGUOUS_PRD` whenever multiple numbered epics had a `prd.md` and offered no flag to disambiguate — the agent was told to "run from within the epic's worktree", which silently yielded `HTML_NO_PRD` because the resolver reads `specs/` from the repo root. The new option resolves `specs/<bucket>/prd.md` directly and bypasses ambiguity detection; the plain form keeps its existing behavior but its ambiguity banner now points at the flag. An unknown/absent bucket exits `PRD_NOT_FOUND`. The `/deviate-html` prompt (`src/deviate/prompts/commands/deviate-html.md`) and spec docs now reference `--bucket` instead of the broken cwd fallback. Pinned by `tests/test_cli/test_html.py::test_html_prd_bucket_targets_specific_epic`, `::test_html_prd_bucket_targets_unnumbered_dir`, and `::test_html_prd_bucket_missing_file_exits_cleanly`.
28
+ - **Optional push-as-lock: `claim_remote` config plus `--local` on `meso run` and `run`.** Standing `.deviate/config.toml` key `claim_remote` defaults to `true` (absent file or absent key still push). `deviate setup --no-claim-remote` writes `claim_remote = false` without dropping `[models]`, `timeout_seconds`, or `[agent]`. Fresh setup without the flag writes `true`. Effective local mode is `--local` OR `claim_remote = false`; explicit `--local` always wins. Local mode still creates `.worktrees/feat/{epic}/{issue}/`, writes SPECIFIED, and commits the claim, and skips `branch_exists_on_remote` plus `git push`. `deviate specify --local` stays; omitted `--local` now honors config. `deviate meso run --local` and `deviate run --local` share that meaning. `--no-setup` remains a distinct skip of worktree plus claim. Local discovery does not treat an origin branch as claimed-elsewhere. Specs: `specs/DeviaTDD-api.md`, `specs/DeviaTDD-architecture.md` (Atomic Concurrency Protocol: push-as-lock is the default, not mandatory). Pinned by `tests/test_state/test_config.py`, `tests/test_cli/test_meso.py`, `tests/test_meso/test_specify.py`, `tests/test_meso/test_meso_orchestration.py`, `tests/test_cli/test_init.py`, and `tests/test_cli/test_top_level_run.py`.
25
29
  ### Changed
30
+ - **`deviate refactor pre` now scopes `files_to_refactor` to the RED+GREEN production set (GH-98).** The command no longer glob()s every `src/**/*.py` or discards `_resolve_task_context`. It lists production files from `HEAD~2..HEAD`, falling back to the task `Files:` list minus tests when that git range is empty or unavailable. Test files are never included. The JSON contract now emits the documented handover fields (`status`, `task_id`, `task_title`, `task_type`, `test_command`, `lint_command`, `spec_dir`, `verification`, `repo_root`, `git_branch`, `timestamp`) alongside `files_to_refactor`. Auto `_build_auto_prompt("refactor")` injects the same scoped list and keeps the `git log -2` / `git diff HEAD~2..HEAD` inspect step. Pinned by `tests/test_micro/test_refactor.py`.
31
+ - **GREEN / REFACTOR / review prompts fold smallest-change into existing lines** (reuse stdlib or an already-installed dep; in-place refactor; Opportunities do not extract helpers). Prompt-only. Pinned by `tests/test_meso/test_auto_prompt_templates.py::TestSmallestChangeFoldedIntoExistingPrompts`.
32
+ - **JUDGE evidence is task-scoped; `deviate review` fail-closes on an unclaimed plan AC.** TDD `_run_judge_phase` resolves required `AC-PLAN-NNN` tokens via `resolve_task_ac_tokens` (non-empty `acceptance_criteria` `criterion_id`s, else this task's `tasks.md` card, else none) and does not fall back to every token in `plan.md`. ISS-ADH-020 exact-substring, path-in-diff, and uniqueness-floor checks still apply to that set. EXECUTE, IMMEDIATE, and DIRECT stay ungated. `deviate review pre` / `post` run a runner-owned Gate 3 scan (`evaluate_review_coverage`) and exit non-zero with `COVERAGE_INCOMPLETE` when any this-issue plan token has no COMPLETED claim. Missing `plan.md` or missing plan tokens stay vacuously READY. PENDING, FAILED, and sibling-issue rows do not claim. Pinned by `tests/test_core/test_judge_evidence.py`, `tests/test_micro/test_judge.py`, and `tests/test_cli/test_review.py`.
33
+ - **TDD JUDGE `COMPLIANCE_PASS` requires mechanical diff evidence.** `_run_judge_phase` fail-closes unmatched PASS: missing, empty, or partial `HandoverManifest.evidence`, hallucinated paths, or quotes that are not exact substrings of the injected RED+GREEN `<diff>` rewrite the action to `revert_to_red` with runner-authored feedback. Unmatched PASS cannot COMPLETE. Auto and manual judge prompts require the `evidence` schema and no longer instruct default-pass. EXECUTE and IMMEDIATE judge stay ungated. Pinned by `tests/test_core/test_judge_evidence.py` and `tests/test_micro/test_judge.py`.
34
+ - **TDD `revert_to_red` is fatal when the RED boundary SHA is missing.** JUDGE no longer prints `ROLLBACK_FAILED` and then trains GREEN. `_run_judge_phase` re-raises `PhaseFailedError` carrying `ROLLBACK_BOUNDARY_MISSING`. `_commit_judge_feedback_and_advance` does not stamp `session.red_commit_sha` onto a `docs(...): add judge feedback` commit when no RED-phase failing-test SHA exists. A real RED SHA still rolls back, advances past the feedback commit, and retries GREEN. Pinned by `tests/test_cli/test_micro.py::test_revert_to_red_missing_red_commit_sha_is_fatal` and `test_judge_revert_to_red_advances_red_commit_sha`.
35
+ - **Remote-aware issue and epic ordinals.** Next issue and epic `NNN` is `max(ordinals) + 1` over the current ledger, the `origin/<base_branch>` ledger, and already-fetched remote `feat/<epic>/<NNN>-*` / `feat/adhoc/<NNN>-*` refs. `ISS-ADH-NNN` and `ISS-NNN` share one adhoc series. Local-only unpushed feat branches do not reserve. When `git push` of `feat/.../NNN-*` rejects because the name exists, the claim path increments and retries (cap 3) and does not fall back to `--local`. Explicit `--local` / `claim_remote = false` stay the optional skip. Specs: `specs/DeviaTDD-api.md`, `specs/DeviaTDD-architecture.md`. Prompt: `src/deviate/prompts/commands/deviate-adhoc.md`.
36
+ - **TDD retry now uses two persisted counters (`green_attempts` / `red_attempts`) instead of a single in-memory train budget.** GREEN trains three times against one RED contract on `revert_to_red`, then escalates. `revert_before` (including `_coerce_judge_action` for `test_defect` / `no_failing_test`) escalates immediately. Three RED escalates print `TRAIN_EXHAUSTED` and stop the infinite `revert_before` loop. Counters live on `SessionState` in `.deviate/session.json` so `git reset --hard` does not zero the budget.
37
+ - **Shard Pass 1.5 drops the 4–8 floor; tasks 30–90 names one fail-to-pass contract.** Pass 1.5 now emits as few independently shippable user-visible verticals as the PRD needs: 1 is legal, hard ceiling 10 and `SLICE_CAP_EXCEEDED` remain. The tasks 30–90 rule names one observable fail-to-pass contract and forbids fake splits of the same AC (test-skeleton vs implement vs add-the-route). Eight real verticals still emit eight issues; a mixed 10-file / >400 LOC GREEN packet still splits. Prompt/spec-only: `deviate-shard` / `auto/shard`, `deviate-tasks` / `auto/tasks`, `micro-shared`, `auto/refactor`, `specs/DeviaTDD-api.md`, `specs/DeviaTDD-architecture.md`.
26
38
  - **Ad-hoc issue creation no longer marks the record COMPLETED at creation time.** `/deviate-adhoc` step 7 previously instructed the agent to “mark the record as completed” via `deviate adhoc post` — but that CLI reads a different ledger (`specs/adhoc.jsonl`) than the `specs/issues.jsonl` ledger the prompt populates, so agents instead appended a raw `COMPLETED` transition to `specs/issues.jsonl` immediately, before any plan/tasks/red-green work ran (visible as instant `BACKLOG → SPECIFIED → COMPLETED` sequences for `ISS-ADH-003/004/013`). Step 7 now commits artifacts with a plain `git commit`, leaves the record at `BACKLOG`, and forbids appending any `COMPLETED` transition at creation — completion is written only by later phase post-scripts. The re-installed mirrors (`.opencode/`, `.claude/`, `.omp/`, `.factory/`) carry the fix via `deviate setup`. Prompt-only change in `src/deviate/prompts/commands/deviate-adhoc.md`; pinned by the existing `TestConsumerRepositoryPromptBoundaries` prompt tests.
27
39
  - **`/deviate-tasks` no longer waits for the removed Gate 2 approval.** The prompt still said the workflow “stops for joint human review” and that “TDD begins only after explicit artifact-bound Gate 2 approval” — but constitution 0.8.0 removed Gate 2, so the agent was being told to wait for an approval that no longer exists. The Meso Workflow Position line and the Tasks/TDD bullets now state that no human-approval gate sits between Tasks and Micro and that `deviate run` chains meso into micro end-to-end. Prompt-only change in `src/deviate/prompts/commands/deviate-tasks.md`, consistent with the constitution's Automated Advance invariant.
28
40
  - **RED phase now hard-fails when it produces no test files (`RED phase produced no test files`), instead of silently committing a vacuous 'failing test' commit.** Previously `_run_red_phase` skipped its test run entirely when `_find_test_files` returned empty, letting GREEN run against nothing and die in `TRAIN_EXHAUSTED` — a real stall. It now raises a `PhaseFailedError` naming `/deviate-execute` (DIRECT) or `/deviate-meso` re-sharding for tasks that legitimately need no code. It also treats a pytest-style exit code 5 (no tests collected) as a RED defect rather than a passing RED. The manual `deviate red post` `RedMustPassError` message now points the agent at the `failure_kind: already_satisfied` escape hatch instead of leading to an opaque crash. Pinned by the updated `_find_test_files`-mocked RED unit tests.
@@ -38,6 +50,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
38
50
  - **`/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).
39
51
 
40
52
  ### Fixed
53
+ - **`resolve_task_ac_tokens` no longer treats runner-appended `**Judge Feedback**` as required AC tokens (GH-89).** Card-text fallback still follows first-hit order (`acceptance_criteria` `criterion_id`s, else the task card, else none) but now drops `**Judge Feedback**` bullets and their continuation lines before scanning for `AC-PLAN-NNN`. A feedback line quoting `AC-PLAN-001` does not add that token when the card body does not name it. `_task_card_text` still returns the full card. Pinned by `tests/test_core/test_judge_evidence.py::TestResolveTaskAcTokens::test_judge_feedback_quote_does_not_add_token`.
54
+ - **JUDGE revert-route `train_feedback` no longer persists discarded `file:line` citations (GH-103).** After `revert_before` / `revert_to_red`, `_judge_feedback_from_manifest` strips `path:line` tokens before writing `session.train_feedback` and `tasks.md`. The durable rewrite contract ("The next RED/GREEN attempt must: …") stays. Rollback SHA selection is unchanged. Auto judge prompt also forbids line citations on those routes. Pinned by `tests/test_micro/test_judge.py::TestRevertFeedbackStripsLineCitations`.
55
+ - **`deviate micro run` now honors `[agent].timeout` from the worktree `.deviate/config.toml` (GH-87).** `_invoke_agent` previously constructed `AgentConfig(backend=...)` with the 600s default, so long GREEN runs died with `AGENT_TIMEOUT` even when the operator set `timeout = 1800`. Meso already read the same key. Unset or invalid values still default to 600. Pinned by `tests/test_cli/test_micro.py::TestInvokeAgentConfigTimeout`.
56
+ - **Failing GREEN no longer reaches REFACTOR or COMPLETED (GH-97).** After GREEN implements and the suite stays red, the runner logs `TEST_FAILURE` and may still call JUDGE. Only `revert_to_red` (TRAIN / retry GREEN) and `revert_before` (escalate RED) change the route. `continue_refactor` / `skip_refactor` / `proceed_to_refactor_no_diff` / bare `COMPLIANCE_PASS` remap to TRAIN with the pytest dump. `_finish_tdd_cycle` refuses REFACTOR and COMPLETED while that TEST_FAILURE is in effect. Mechanical / test_defect GREEN `status: FAILURE` routing is unchanged. Detection is the test-dump prefix plus empty `failure_kind`, not "any `train_feedback` on GREEN". Pinned by `tests/test_micro/test_orchestration.py::TestMicroOrchestration::test_green_test_failure_compliance_pass_continue_refactor_retrains`.
57
+ - **`/deviate-merge` squash-merges onto the configured `base_branch`, not a hardcoded `main`.** The skill (`src/deviate/prompts/commands/deviate-merge.md`) now checks out, logs, diffs, and refuses against `{base_branch}` from `deviate merge pre` (`resolve_base_branch` / `.deviate/config.toml` `base_branch`; default still `main` when unset). Repos whose trunk is `develop` / `wb-dev` / anything else no longer squash onto the wrong branch. The ledger-only `deviate merge` run path (`_merge_run`) is unchanged. Specs: `specs/DeviaTDD-api.md`, `specs/DeviaTDD-architecture.md`. Pinned by `tests/test_meso/test_auto_prompt_templates.py::TestMergePromptBaseBranch` and `tests/test_cli/test_merge.py::test_merge_pre_emits_configured_base_branch`.
58
+ - **Hung RED now logs `AGENT_TIMEOUT` inside the harness budget and rolls the worktree back to `red_baseline` (ISS-ADH-027).** A `pi -p` child that writes files or trickles stdout and never returns a handover manifest raises `AgentTimeoutError` at `AgentConfig.timeout` (default 600s). `_invoke_agent` logs `AGENT_TIMEOUT`. `_run_red_phase` calls `_restore_worktree_to_baseline`. The operator does not wait for an outer ~1800s bash kill. Stderr stays diagnostic (ISS-ADH-025). EXECUTE still passes `stall_timeout=3600`. Specs: `specs/DeviaTDD-api.md` Agent Backend Hardening and `specs/DeviaTDD-architecture.md` §10.0.
59
+ - **Default Pi spawn is lean, and schema-limit tokens surface immediately on `deviate micro run` (ISS-ADH-026).** `AgentBackend.invoke` appends `--no-extensions`, `--tools read,bash,edit,write`, and `--no-skills` after the existing `pi -p` or `pi --mode rpc --no-session` prefix, plus `--skill` to `.pi/skills/deviatdd/SKILL.md` when that file exists. The first `tool_count_limit` / `unsupported_tool_schema` line kills the child. `_invoke_agent` logs `AGENT_ERROR` with those tokens. RED, GREEN, and REFACTOR raise `PhaseFailedError` that includes the tokens instead of only `agent returned no manifest`. Specs: `specs/DeviaTDD-api.md` Agent Backend Hardening and `specs/DeviaTDD-architecture.md` §10 Pi backend. Pinned by `tests/test_core/test_agent.py` lean-spawn and schema-abort tests, `tests/core/test_agent.py` RPC lean pins, and `tests/test_cli/test_micro.py::TestSchemaLimitHarnessSurface`.
60
+ - **Hung GREEN now logs `AGENT_TIMEOUT` inside the 900s stall budget (ISS-ADH-025 / GH-61).** Stderr diagnostics no longer reset the streaming stall clock. Only stdout is liveness. A stdout-silent GREEN raises `AgentTimeoutError` (`STALL_DETECTED`) and `_invoke_agent` logs `AGENT_TIMEOUT` without a second 900s retry. EXECUTE still passes `stall_timeout=3600`. Specs: `specs/DeviaTDD-api.md` Agent Backend Hardening and `specs/DeviaTDD-architecture.md` §10.0.
61
+ - **`deviate micro run` now treats a known feature-branch issue as authoritative even when the leftover session id still has a `tasks.md`, and meso writes that id into the worktree session.** A leftover `session.active_issue_id` no longer owns the queue when the current `feat/{bucket}/{slug}` branch maps to a different issue. `_rekey_session_issue_to_branch` prefers the branch issue, persists it to `.deviate/session.json`, and scopes bare `deviate micro run`, `--all`, and pinned `TSK-NNN-NN` lookup to that issue. `NO_PENDING_TASKS` exit 0 remains only when the branch issue itself has no pending tasks. `deviate meso run` claim/copy and `MESO_ALREADY_COMPLETE` rewrite the worktree session to the claimed issue so a copied main-repo id cannot stick. The earlier GH-54 bullet covers the no-board re-key only. Pinned by `tests/test_cli/test_micro.py::TestResolveTaskContextUsesBranch` leftover-with-board tests and `tests/test_meso/test_meso_resume.py` / `tests/test_meso/test_meso_orchestration.py` session-write tests.
62
+ - **Pinned `deviate micro run <task-id>` no longer treats a sibling COMPLETED same-number TSK as `TASK_ALREADY_DONE` when this issue is still PENDING.** `_run_single` prints `TASK_ALREADY_DONE` only when the resolved record belongs to the active branch or re-keyed session issue. A foreign COMPLETED row re-resolves this issue's PENDING pin from `tasks.md` or exits `TASK_NOT_FOUND`. Same-number `TSK-NNN-NN` ids stay a per-issue namespace. Pinned by `tests/test_micro/test_run.py::TestPinnedRunIssueScopedAlreadyDone`.
63
+ - **Already-exists COMPLETE on a test-bearing TDD task requires named present regression tests.** RED `failure_kind: already_satisfied` with null or empty `files` and `test_file` raises `PhaseFailedError` and writes no COMPLETED row. JUDGE `skip_refactor` / bare `COMPLIANCE_PASS` requires every declared path in the injected `<diff>` or HEAD. `_restore_worktree_to_baseline` keeps those paths on disk. EXECUTE / IMMEDIATE / DIRECT stay ungated. Pinned by `tests/test_micro/test_orchestration.py` already_satisfied pins and `tests/test_micro/test_judge.py::test_already_satisfied_declared_files_missing_from_diff_fails`.
64
+ - **`no_failing_test` / `revert_before` re-invokes RED (or fails) and never GREEN without a RED-phase SHA.** After JUDGE `revert_before` / cycle `no_failing_test_adjudicated`, `deviate micro run` dispatches RED or raises `TRAIN_EXHAUSTED` / `PhaseFailedError`. It never invokes the GREEN agent while `session.red_commit_sha` is empty or a `docs(...): add judge feedback` SHA. Missing-boundary `revert_to_red` is fatal: `_run_judge_phase` raises `PhaseFailedError` carrying `ROLLBACK_BOUNDARY_MISSING` and does not print `ROLLBACK_FAILED` or train GREEN. Pinned by `tests/test_micro/test_orchestration.py::test_no_failing_test_revert_before_invokes_red_not_green`, `tests/test_micro/test_two_counter_retry.py::test_escalate_to_red_does_not_dispatch_green_without_red_sha`, `tests/test_micro/test_green.py` GREEN-entry pins, and `tests/test_cli/test_micro.py::test_revert_to_red_missing_red_commit_sha_is_fatal`.
65
+ - **Meso Tasks planner locks `Verification_Batch` to `Mode: IMMEDIATE` (GH-57).** The decision tree could assign `Mode: TDD` (and Green "No production change") to a `Verification_Batch`, so RED's fail-first gate rejected already-passing tests. Type→mode routing now maps `Verification_Batch` → `IMMEDIATE` in the planner prompts (`deviate-tasks.md` / `auto/tasks.md`) and in `resolve_execution_mode` (`src/deviate/core/tasks_ledger.py`), used by `generate_jsonl_from_md` and the micro pending-task scan. Other types still pick TDD vs IMMEDIATE. Pinned by `tests/test_core/test_tasks_ledger.py::TestResolveExecutionMode` and `::test_verification_batch_maps_to_immediate_even_when_mode_is_tdd`.
41
66
  - **Language-agnostic test discovery: the RED gate no longer globs Python-only `tests/**/test_*.py`.** `_find_test_files` returned `[]` for non-Python projects, so `_run_red_phase` rejected a correctly authored Elixir test (`test/integration/tailwind_pipeline_test.exs`) with "RED phase produced no test files" before any command ran — blocking every task on an Elixir/Phoenix repo. The RED gate now trusts the resolved test command (`_test_command_candidates`: task `verification` → constitution `test_command` → `mise run test` → manifest table `mix.exs`→`mix test` / `Cargo.toml`→`cargo test` / `go.mod`→`go test ./...` / `package.json`→`npm test` / `pyproject.toml`→`pytest`), and a project with no resolvable command (returncode 127) routes to the same JUDGE adjudication as pytest's exit-5 no-tests case instead of dying. `deviate red post`, `deviate green post`, and `deviate refactor post` switched their `TEST_NOT_FOUND`/`NO_TESTS_TO_CHECK` gates from the Python glob to the same resolved-command check. `_find_test_files` remains only as the Python fallback signal. Pinned by `tests/test_micro/test_run.py::TestRunCommand::test_run_elixir_repo_red_accepts_exs_test` (fails on the old gate, passes after).
42
67
  - **Manifest schema recovery now drops out-of-enum fields instead of aborting the phase (GH-52, GH-55).** `AgentBackend.parse_output` re-constructed a `HandoverManifest` with the offending value intact after a `ValidationError`, so an out-of-enum `failure_kind` (RED) or `next_action` (JUDGE COMPLIANCE_PASS) re-raised the identical error unguarded and the phase died with a misleading `agent returned no manifest`. Recovery now deletes every top-level field that failed validation (the model default `None` applies); the JUDGE runner's existing `_coerce_judge_action` then routes an unknown `next_action` through the legacy pass path. Pinned by `test_recovery_drops_invalid_failure_kind` / `test_recovery_drops_invalid_next_action` in `tests/test_core/test_agent.py`.
43
68
  - **`deviate micro run` dedupes latest task records by `(issue_id, task_id)` so a same-numbered task in another issue no longer shadows the active issue's ledger.** `_collect_latest_task_records` previously keyed the latest record by task ID alone. Since every issue reuses the same `TSK-NNN-NN` numbering, a later-sorting ledger (e.g. `specs/adhoc/*` after `specs/005-*`) shadowed the active issue's records — bare `deviate micro run` reported `no ledger entry` against a committed ledger and explicit `<tid>` dispatch hit the wrong issue's task. Latest records are now keyed per issue, and `_find_task_record` prefers the record owned by the current worktree's branch issue. Pinned by `test_find_task_record_prefers_branch_issue` in `tests/test_micro/test_e2e.py`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deviatdd
3
- Version: 2.20.2
3
+ Version: 2.21.2
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
@@ -0,0 +1,5 @@
1
+ Optional push-as-lock for work repos: standing `claim_remote` in `.deviate/config.toml` (default `true`) plus `--local` on `deviate specify`, `deviate meso run`, and `deviate run`. Flag overrides config. Worktree + `feat/{epic}/{issue}` + ledger SPECIFIED stay; only the remote-branch lock and `git push` are skipped when local.
2
+
3
+ `deviate setup --no-claim-remote` persists `claim_remote = false`. Personal projects with no config change still push the claim branch.
4
+
5
+ Closes #64
@@ -0,0 +1,5 @@
1
+ `deviate micro` used a single in-memory `train_attempts` budget. JUDGE `revert_before` / `test_defect` zeroed that counter and re-ran RED, so an always-escalate stub looped (181 scratch restarts) instead of handing off. ISS-ADH-017 persists two session counters so GREEN trains three times, then escalates, and three RED escalates print TRAIN_EXHAUSTED.
2
+
3
+ Session: `SessionState` now stores `green_attempts` / `red_attempts` (default 0) and copies them through `transition_to` / `force_transition_to` via `model_dump()` (`src/deviate/state/config.py`). Loop: `_run_tdd_cycle` seeds from session, trains GREEN on `revert_to_red`, escalates immediately on `revert_before` or GREEN-budget exhaust, injects a short `previous cycle failed because …` note (not the GREEN dump), and stops at 3/3 (`src/deviate/cli/micro.py`). `_coerce_judge_action` and EXECUTE `max_judge_attempts` are unchanged. Specs: API, architecture, and CHANGELOG `[Unreleased]` describe the two-counter contract. Tests: `tests/test_micro/test_two_counter_retry.py` plus orchestration / session / revert_before pins.
4
+
5
+ Closes #59
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deviatdd"
3
- version = "2.20.2"
3
+ version = "2.21.2"
4
4
  description = "DeviaTDD CLI — agent orchestration framework"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from deviate.core.agent import (
4
+ MAX_PROMPT_CHARS,
5
+ STREAM_STALL_TIMEOUT_SECONDS,
6
+ AgentBackend,
7
+ MalformedHandoverManifestError,
8
+ )
9
+
10
+
11
+ def main() -> None:
12
+ assert MAX_PROMPT_CHARS == 80_000
13
+ assert STREAM_STALL_TIMEOUT_SECONDS == 900
14
+
15
+ try:
16
+ AgentBackend.parse_output("task_id: TSK-INSTALL-CHECK\n", "pi")
17
+ raise AssertionError("bare task_id line should not parse as a manifest")
18
+ except MalformedHandoverManifestError as exc:
19
+ assert "No YAML handover manifest" in str(exc)
20
+
21
+ escaped_quote_hint = AgentBackend._yaml_error_hint(
22
+ '```yaml\nphase: "JUDGE"\nstatus: "PASS"\ndetail: "x == \\"y\\""\n```'
23
+ )
24
+ assert "Avoid backslash-escaped quotes" in escaped_quote_hint
25
+
26
+ recovered = AgentBackend.parse_output(
27
+ "```yaml\nphase: RED\nstatus: PASS\ntask_id: TSK-INSTALL-CHECK\n```\n",
28
+ "pi",
29
+ )
30
+ assert recovered.phase == "RED"
31
+ assert recovered.status == "PASS"
32
+ assert recovered.is_success
33
+
34
+ print("INSTALL_VERIFIED")
35
+
36
+
37
+ if __name__ == "__main__":
38
+ main()