devflow-cli 3.0.1__tar.gz → 6.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. devflow_cli-6.0.0/.github/workflows/release.yml +88 -0
  2. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.gitignore +1 -0
  3. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/CHANGELOG.md +122 -0
  4. devflow_cli-6.0.0/CLAUDE.md +20 -0
  5. devflow_cli-6.0.0/FEEDBACK.md +224 -0
  6. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/PKG-INFO +11 -9
  7. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/README.md +10 -8
  8. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.md +8 -4
  9. devflow_cli-6.0.0/docs/activity-contracts.md +443 -0
  10. devflow_cli-6.0.0/docs/adr/0001-v4-workflow-compatibility.md +49 -0
  11. devflow_cli-6.0.0/docs/adr/0002-v5-rupture-and-provenance.md +84 -0
  12. devflow_cli-6.0.0/docs/cli-reference.md +187 -0
  13. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/commands-reference.md +3 -2
  14. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/guides/brownfield.md +1 -0
  15. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/guides/greenfield.md +1 -0
  16. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/guides/microservices.md +1 -0
  17. devflow_cli-6.0.0/docs/pipeline-reference.generated.md +31 -0
  18. devflow_cli-6.0.0/docs/pipeline.md +52 -0
  19. devflow_cli-6.0.0/docs/releases/4.0.0.md +53 -0
  20. devflow_cli-6.0.0/docs/releases/4.0.1.md +17 -0
  21. devflow_cli-6.0.0/docs/releases/4.0.3.md +26 -0
  22. devflow_cli-6.0.0/docs/releases/4.0.4.md +26 -0
  23. devflow_cli-6.0.0/docs/releases/4.0.5.md +28 -0
  24. devflow_cli-6.0.0/docs/releases/4.0.6.md +31 -0
  25. devflow_cli-6.0.0/docs/releases/5.0.0.md +77 -0
  26. devflow_cli-6.0.0/docs/releases/6.0.0.md +100 -0
  27. devflow_cli-6.0.0/docs/v5-decisions.md +80 -0
  28. devflow_cli-6.0.0/docs/v6-decisions.md +97 -0
  29. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/pyproject.toml +1 -1
  30. devflow_cli-6.0.0/scripts/check_release.py +77 -0
  31. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/__init__.py +4 -2
  32. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/adapters/agents.py +177 -28
  33. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/cli.py +0 -2
  34. devflow_cli-6.0.0/src/devflow_cli/commands/adaptive.py +1094 -0
  35. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/check.py +41 -0
  36. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/feature.py +25 -3
  37. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/status.py +3 -3
  38. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/upgrade_cmd.py +14 -8
  39. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/verify.py +30 -0
  40. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/activity_contracts.py +277 -29
  41. devflow_cli-6.0.0/src/devflow_cli/core/adaptive_runner.py +896 -0
  42. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/adaptive_workflow.py +90 -34
  43. devflow_cli-6.0.0/src/devflow_cli/core/agent_failure.py +113 -0
  44. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/assessment.py +15 -4
  45. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/automatic_evidence.py +249 -41
  46. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/contract_schemas.py +21 -4
  47. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/docgen.py +4 -3
  48. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/manifest.py +9 -1
  49. devflow_cli-6.0.0/src/devflow_cli/core/omissions.py +168 -0
  50. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/operational.py +6 -2
  51. devflow_cli-6.0.0/src/devflow_cli/core/remediation.py +347 -0
  52. devflow_cli-6.0.0/src/devflow_cli/core/validation_approvals.py +220 -0
  53. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/validators.py +59 -9
  54. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/verification.py +95 -8
  55. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/worklog.py +32 -3
  56. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/worktree_snapshot.py +17 -0
  57. devflow_cli-6.0.0/src/devflow_cli/schemas/activity-contract-v3.schema.json +32 -0
  58. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/schemas/activity-result-v1.schema.json +13 -1
  59. devflow_cli-3.0.1/src/devflow_cli/schemas/assessment-v1.schema.json → devflow_cli-6.0.0/src/devflow_cli/schemas/assessment-v3.schema.json +8 -32
  60. devflow_cli-6.0.0/src/devflow_cli/schemas/workflow-state-v4.schema.json +55 -0
  61. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/utils/paths.py +17 -2
  62. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/plan-template.md +4 -4
  63. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_activity_contracts.py +330 -36
  64. devflow_cli-6.0.0/tests/test_adaptive_runner.py +1998 -0
  65. devflow_cli-6.0.0/tests/test_adaptive_workflow.py +349 -0
  66. devflow_cli-6.0.0/tests/test_agent_adapters.py +521 -0
  67. devflow_cli-6.0.0/tests/test_agent_failure.py +129 -0
  68. devflow_cli-6.0.0/tests/test_automatic_evidence.py +1385 -0
  69. devflow_cli-6.0.0/tests/test_cmd_adaptive.py +1783 -0
  70. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_assess.py +2 -1
  71. devflow_cli-6.0.0/tests/test_cmd_check.py +269 -0
  72. devflow_cli-6.0.0/tests/test_cmd_feature.py +227 -0
  73. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_status.py +3 -3
  74. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_upgrade.py +26 -0
  75. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_verify.py +51 -0
  76. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_contract_schemas.py +32 -1
  77. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_integration.py +18 -10
  78. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_manifest.py +12 -0
  79. devflow_cli-6.0.0/tests/test_omissions.py +312 -0
  80. devflow_cli-6.0.0/tests/test_release.py +80 -0
  81. devflow_cli-6.0.0/tests/test_remediation.py +173 -0
  82. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_validators.py +49 -0
  83. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_verification.py +99 -1
  84. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_waivers.py +5 -3
  85. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_wheel_adaptive_acceptance.py +32 -11
  86. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_wheel_install.py +3 -3
  87. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_worklog.py +33 -12
  88. devflow_cli-6.0.0/tests/test_worktree_snapshot.py +112 -0
  89. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/uv.lock +1 -1
  90. devflow_cli-3.0.1/.github/workflows/release.yml +0 -52
  91. devflow_cli-3.0.1/.idea/.gitignore +0 -10
  92. devflow_cli-3.0.1/.idea/devflow.iml +0 -9
  93. devflow_cli-3.0.1/.idea/misc.xml +0 -5
  94. devflow_cli-3.0.1/.idea/modules.xml +0 -8
  95. devflow_cli-3.0.1/.idea/vcs.xml +0 -6
  96. devflow_cli-3.0.1/.idea/workspace.xml +0 -250
  97. devflow_cli-3.0.1/CLAUDE.md +0 -20
  98. devflow_cli-3.0.1/docs/activity-contracts.md +0 -281
  99. devflow_cli-3.0.1/docs/cli-reference.md +0 -105
  100. devflow_cli-3.0.1/docs/pipeline-reference.generated.md +0 -30
  101. devflow_cli-3.0.1/docs/pipeline.md +0 -28
  102. devflow_cli-3.0.1/src/devflow_cli/commands/adaptive.py +0 -600
  103. devflow_cli-3.0.1/src/devflow_cli/commands/migrate_cmd.py +0 -200
  104. devflow_cli-3.0.1/src/devflow_cli/core/adaptive_runner.py +0 -364
  105. devflow_cli-3.0.1/src/devflow_cli/core/remediation.py +0 -169
  106. devflow_cli-3.0.1/src/devflow_cli/schemas/activity-contract-v1.schema.json +0 -76
  107. devflow_cli-3.0.1/src/devflow_cli/schemas/workflow-state-v2.schema.json +0 -66
  108. devflow_cli-3.0.1/tests/test_adaptive_runner.py +0 -576
  109. devflow_cli-3.0.1/tests/test_adaptive_workflow.py +0 -185
  110. devflow_cli-3.0.1/tests/test_agent_adapters.py +0 -224
  111. devflow_cli-3.0.1/tests/test_automatic_evidence.py +0 -755
  112. devflow_cli-3.0.1/tests/test_cmd_adaptive.py +0 -791
  113. devflow_cli-3.0.1/tests/test_cmd_check.py +0 -112
  114. devflow_cli-3.0.1/tests/test_cmd_feature.py +0 -113
  115. devflow_cli-3.0.1/tests/test_cmd_migrate.py +0 -185
  116. devflow_cli-3.0.1/tests/test_worktree_snapshot.py +0 -59
  117. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.ai/mcp/mcp.json +0 -0
  118. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.analyze.md +0 -0
  119. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.checklist.md +0 -0
  120. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.clarify.md +0 -0
  121. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.constitution.md +0 -0
  122. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.implement.md +0 -0
  123. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.plan.md +0 -0
  124. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.specify.md +0 -0
  125. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.tasks.md +0 -0
  126. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.claude/commands/speckit.taskstoissues.md +0 -0
  127. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.githooks/post-checkout +0 -0
  128. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.githooks/post-merge +0 -0
  129. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.github/workflows/ci.yml +0 -0
  130. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/init-options.json +0 -0
  131. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/memory/constitution.md +0 -0
  132. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  133. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/scripts/bash/common.sh +0 -0
  134. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
  135. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/scripts/bash/setup-plan.sh +0 -0
  136. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
  137. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
  138. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
  139. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/data-model.md +0 -0
  140. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/plan.md +0 -0
  141. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/research.md +0 -0
  142. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/spec.md +0 -0
  143. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/001-cli-init-options/tasks.md +0 -0
  144. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
  145. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
  146. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
  147. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/data-model.md +0 -0
  148. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/plan.md +0 -0
  149. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/research.md +0 -0
  150. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/spec.md +0 -0
  151. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/002-cascade-regen/tasks.md +0 -0
  152. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
  153. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/data-model.md +0 -0
  154. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/plan.md +0 -0
  155. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
  156. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/research.md +0 -0
  157. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/spec.md +0 -0
  158. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/003-usecase-guides/tasks.md +0 -0
  159. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
  160. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
  161. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
  162. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/plan.md +0 -0
  163. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
  164. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/research.md +0 -0
  165. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/spec.md +0 -0
  166. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
  167. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
  168. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/plan.md +0 -0
  169. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
  170. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/research.md +0 -0
  171. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/spec.md +0 -0
  172. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/005-implement-subphases/tasks.md +0 -0
  173. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
  174. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
  175. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/data-model.md +0 -0
  176. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/plan.md +0 -0
  177. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
  178. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/research.md +0 -0
  179. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/spec.md +0 -0
  180. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/006-template-upgrade/tasks.md +0 -0
  181. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
  182. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/data-model.md +0 -0
  183. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/plan.md +0 -0
  184. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/quickstart.md +0 -0
  185. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/research.md +0 -0
  186. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/spec.md +0 -0
  187. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/007-project-documentation/tasks.md +0 -0
  188. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
  189. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/plan.md +0 -0
  190. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
  191. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/research.md +0 -0
  192. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/spec.md +0 -0
  193. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
  194. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
  195. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/plan.md +0 -0
  196. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
  197. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/research.md +0 -0
  198. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/spec.md +0 -0
  199. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/009-ci-pypi/tasks.md +0 -0
  200. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
  201. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
  202. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
  203. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/research.md +0 -0
  204. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
  205. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
  206. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
  207. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/plan.md +0 -0
  208. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/quickstart.md +0 -0
  209. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/research.md +0 -0
  210. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/spec.md +0 -0
  211. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/011-cursor-support/tasks.md +0 -0
  212. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
  213. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
  214. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
  215. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
  216. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
  217. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
  218. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/013-align-truth-sources/plan.md +0 -0
  219. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
  220. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/013-align-truth-sources/spec.md +0 -0
  221. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
  222. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
  223. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
  224. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
  225. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
  226. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
  227. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
  228. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
  229. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
  230. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
  231. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
  232. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
  233. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/016-harden-state-machine/plan.md +0 -0
  234. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/016-harden-state-machine/research.md +0 -0
  235. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/016-harden-state-machine/spec.md +0 -0
  236. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
  237. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
  238. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
  239. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
  240. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
  241. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
  242. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
  243. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
  244. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/data-model.md +0 -0
  245. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/plan.md +0 -0
  246. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/research.md +0 -0
  247. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/spec.md +0 -0
  248. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/019-quality-hardening/tasks.md +0 -0
  249. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
  250. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
  251. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/plan.md +0 -0
  252. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
  253. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/research.md +0 -0
  254. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/spec.md +0 -0
  255. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
  256. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
  257. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/021-review-iterations/plan.md +0 -0
  258. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/021-review-iterations/research.md +0 -0
  259. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/021-review-iterations/spec.md +0 -0
  260. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/021-review-iterations/tasks.md +0 -0
  261. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
  262. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/022-fix-regen-command/plan.md +0 -0
  263. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/022-fix-regen-command/research.md +0 -0
  264. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/022-fix-regen-command/spec.md +0 -0
  265. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
  266. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
  267. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/023-add-logging/plan.md +0 -0
  268. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/023-add-logging/research.md +0 -0
  269. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/023-add-logging/spec.md +0 -0
  270. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/023-add-logging/tasks.md +0 -0
  271. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
  272. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/024-validate-constants/plan.md +0 -0
  273. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/024-validate-constants/research.md +0 -0
  274. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/024-validate-constants/spec.md +0 -0
  275. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/024-validate-constants/tasks.md +0 -0
  276. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
  277. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/025-harden-tests/plan.md +0 -0
  278. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/025-harden-tests/research.md +0 -0
  279. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/025-harden-tests/spec.md +0 -0
  280. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/025-harden-tests/tasks.md +0 -0
  281. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +0 -0
  282. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +0 -0
  283. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/data-model.md +0 -0
  284. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/plan.md +0 -0
  285. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/quickstart.md +0 -0
  286. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/research.md +0 -0
  287. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/spec.md +0 -0
  288. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/specs/027-pipeline-auto-execution/tasks.md +0 -0
  289. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/agent-file-template.md +0 -0
  290. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/checklist-template.md +0 -0
  291. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/constitution-template.md +0 -0
  292. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/plan-template.md +0 -0
  293. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/spec-template-brownfield.md +0 -0
  294. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/spec-template-greenfield.md +0 -0
  295. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/spec-template-microservices.md +0 -0
  296. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/spec-template.md +0 -0
  297. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/.specify/templates/tasks-template.md +0 -0
  298. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/CONTRIBUTING.md +0 -0
  299. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/LICENSE +0 -0
  300. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.context.md +0 -0
  301. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.extension.md +0 -0
  302. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.init.md +0 -0
  303. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.regen.md +0 -0
  304. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/commands/devflow.status.md +0 -0
  305. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/cursor-guide.md +0 -0
  306. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/index.md +0 -0
  307. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/docs/spec-driven.md +0 -0
  308. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  309. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/extensions/catalog.community.json +0 -0
  310. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/extensions/catalog.json +0 -0
  311. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/extensions/template/example-command.md +0 -0
  312. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/extensions/template/example-extension.json +0 -0
  313. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/adapters/__init__.py +0 -0
  314. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/adapters/linear.py +0 -0
  315. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/__init__.py +0 -0
  316. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/assess.py +0 -0
  317. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/context.py +0 -0
  318. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/docs_sync.py +0 -0
  319. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/export_cmd.py +0 -0
  320. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/extension.py +0 -0
  321. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/hooks_cmd.py +0 -0
  322. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/init_cmd.py +0 -0
  323. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/linear.py +0 -0
  324. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/stale.py +0 -0
  325. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/commands/traceability.py +0 -0
  326. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/__init__.py +0 -0
  327. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/catalog.py +0 -0
  328. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/git.py +0 -0
  329. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/hooks.py +0 -0
  330. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/installer.py +0 -0
  331. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/redaction.py +0 -0
  332. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/scanner.py +0 -0
  333. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/staleness.py +0 -0
  334. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/traceability.py +0 -0
  335. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/core/waivers.py +0 -0
  336. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/utils/__init__.py +0 -0
  337. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/utils/console.py +0 -0
  338. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/utils/logging.py +0 -0
  339. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/src/devflow_cli/utils/strings.py +0 -0
  340. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/agent-context-template.md +0 -0
  341. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/constitution-template.md +0 -0
  342. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts/README-template.md +0 -0
  343. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts/api-template.md +0 -0
  344. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts/components-template.md +0 -0
  345. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts/interfaces-template.md +0 -0
  346. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts/services-template.md +0 -0
  347. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/contracts-template.md +0 -0
  348. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/data-model-template.md +0 -0
  349. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/devflow-hooks-template.yml +0 -0
  350. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/extension-manifest-template.json +0 -0
  351. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/quickstart-template.md +0 -0
  352. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/research-template.md +0 -0
  353. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/spec-template.md +0 -0
  354. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/templates/tasks-template.md +0 -0
  355. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/conftest.py +0 -0
  356. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/fixtures/agents/mock-agent.md +0 -0
  357. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/fixtures/commands/mock-command.md +0 -0
  358. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/fixtures/mock-catalog.json +0 -0
  359. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/run-tests.sh +0 -0
  360. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test-helpers.sh +0 -0
  361. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test-template-variants.sh +0 -0
  362. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_assessment.py +0 -0
  363. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_bash_runner.py +0 -0
  364. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_catalog.py +0 -0
  365. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_context.py +0 -0
  366. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_docs_sync.py +0 -0
  367. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_extension.py +0 -0
  368. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_hooks.py +0 -0
  369. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_init.py +0 -0
  370. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_linear.py +0 -0
  371. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_stale.py +0 -0
  372. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_cmd_traceability.py +0 -0
  373. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_constants.py +0 -0
  374. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_context.py +0 -0
  375. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_docgen.py +0 -0
  376. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_git.py +0 -0
  377. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_hooks.py +0 -0
  378. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_installer.py +0 -0
  379. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_linear_adapter.py +0 -0
  380. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_linear_order.py +0 -0
  381. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_logging.py +0 -0
  382. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_paths.py +0 -0
  383. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_paths_project_root.py +0 -0
  384. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_scanner.py +0 -0
  385. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_staleness.py +0 -0
  386. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_traceability.py +0 -0
  387. {devflow_cli-3.0.1 → devflow_cli-6.0.0}/tests/test_version.py +0 -0
@@ -0,0 +1,88 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ jobs:
8
+ validate:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Setup uv
16
+ uses: astral-sh/setup-uv@v4
17
+ with:
18
+ version: "latest"
19
+
20
+ - name: Setup Python
21
+ run: uv python install 3.12
22
+
23
+ - name: Check tag, version and main commit
24
+ env:
25
+ RELEASE_TAG: ${{ github.ref_name }}
26
+ RELEASE_SHA: ${{ github.sha }}
27
+ run: |
28
+ main_sha="$(git ls-remote origin refs/heads/main | cut -f1)"
29
+ uv run --no-project --python 3.12 python scripts/check_release.py \
30
+ --tag "$RELEASE_TAG" --head-sha "$RELEASE_SHA" --main-sha "$main_sha"
31
+
32
+ test:
33
+ needs: validate
34
+ runs-on: ubuntu-latest
35
+ permissions:
36
+ contents: read
37
+ strategy:
38
+ matrix:
39
+ python-version: ["3.11", "3.12"]
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+
43
+ - name: Setup uv
44
+ uses: astral-sh/setup-uv@v4
45
+ with:
46
+ version: "latest"
47
+
48
+ - name: Setup Python ${{ matrix.python-version }}
49
+ run: uv python install ${{ matrix.python-version }}
50
+
51
+ - name: Create venv and install dependencies
52
+ run: |
53
+ uv venv --python ${{ matrix.python-version }}
54
+ uv pip install -e ".[dev]"
55
+
56
+ - name: Run tests
57
+ run: uv run pytest tests/ -v --ignore=tests/test_wheel_adaptive_acceptance.py
58
+
59
+ - name: Run installed-wheel adaptive acceptance
60
+ run: uv run pytest tests/test_wheel_adaptive_acceptance.py -v
61
+
62
+ - name: Check generated documentation
63
+ run: uv run devflow docs-sync --check
64
+
65
+ - name: Run bash tests
66
+ run: ./tests/run-tests.sh
67
+
68
+ publish:
69
+ needs: test
70
+ runs-on: ubuntu-latest
71
+ environment: pypi
72
+ permissions:
73
+ id-token: write
74
+ contents: read
75
+
76
+ steps:
77
+ - uses: actions/checkout@v4
78
+
79
+ - name: Setup uv
80
+ uses: astral-sh/setup-uv@v4
81
+ with:
82
+ version: "latest"
83
+
84
+ - name: Build package
85
+ run: uv build
86
+
87
+ - name: Publish to PyPI
88
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -13,3 +13,4 @@ venv/
13
13
  .coverage
14
14
  .devflow/
15
15
  .state.lock
16
+ .idea/
@@ -5,6 +5,128 @@ Tous les changements notables de ce projet sont documentés dans ce fichier.
5
5
  Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
6
6
  et ce projet adhère au [Semantic Versioning](https://semver.org/lang/fr/).
7
7
 
8
+ ## [6.0.0] - 2026-09-24
9
+
10
+ Retours d'usage k-review traités : voir [v6-decisions.md](docs/v6-decisions.md).
11
+
12
+ ### Added
13
+
14
+ - Le parcours adaptatif peut enchaîner les activités jusqu'à un jalon demandé.
15
+ - En profil `critical`, `research` et `contracts` peuvent être omises si `risk-assessment` le recommande, avec décision nominative, motif audité et confirmation obligatoire lors de la revue. Les gates de sécurité, vérification et rollback restent obligatoires.
16
+
17
+ ### Fixed
18
+
19
+ - Les résultats d'activité rejetés peuvent être réconciliés après contrôle de la trace et des fichiers.
20
+ - Les preuves de revue expirent après une modification pertinente, et la fraîcheur des preuves de tests ne dépend plus des seuls changements documentaires.
21
+ - Les diagnostics du runner et de la vérification rendent explicites les causes des refus et des indisponibilités.
22
+ - `adaptive reconcile --result` n'est accepté que si la trace de l'agent ne contient aucune réponse exploitable pour le contrat courant.
23
+ - `devflow upgrade` met à jour les commandes `devflow*.md` installées, jusqu'ici jamais rafraîchies ; une commande modifiée localement ou sans empreinte d'installation n'est remplacée qu'après confirmation, avec une copie `.bak`.
24
+ - `adaptive approve-command` affiche la commande exacte, son répertoire et le motif du plan, puis demande confirmation ; `--yes` approuve sans terminal.
25
+ - Une tentative refusée dont les fichiers ont changé ne bloque plus définitivement l'activité : `run` renvoie `stale-attempt` et `adaptive discard-attempt` l'abandonne avec archive et journal d'audit.
26
+
27
+ ### Changed
28
+
29
+ - **Rupture de compatibilité.** `adaptive complete` refuse `prepare`, les activités documentaires et `implement`, qui ne progressent plus que par `adaptive run` ou `adaptive reconcile` afin que leur résultat et leurs mutations soient validés.
30
+ - **Rupture de compatibilité.** Sur une feature adaptative, `devflow verify` exécute la vérification adaptative et fait progresser l'état ; `--allow-command` y est refusé au profit de `adaptive approve-command`.
31
+ - La publication vérifie la correspondance du tag, des versions distribuées et de la pointe de `main`, puis rejoue la matrice Python, la documentation générée et les tests shell avant PyPI.
32
+
33
+ ## [5.0.0] - 2026-09-13
34
+
35
+ ### Added
36
+
37
+ - Le besoin est un fichier obligatoire, `need.md`, dans le dossier de la feature (F-004). `adaptive start` refuse de démarrer sans lui, le runner le revérifie avant chaque activité, `adaptive contract` refuse de produire un contrat portable sans lui, et chaque contrat le cite en première entrée avec une contrainte le déclarant prioritaire sur le résumé de l'assessment, jusqu'ici seule description du besoin transmise à l'agent.
38
+ - Les preuves collectées par `verify` enregistrent l'empreinte de HEAD et des fichiers modifiés, hors dossier de la feature (F-013). Une preuve dont le code a changé depuis est affichée `passed (stale)` par `adaptive status`, et `review`, `rollback-check` et `done` refusent de se terminer sur elle. `devflow adaptive verify ISSUE_ID --refresh` rejoue la collecte d'un `verify` déjà complété sans changer d'activité. Un état git inobservable ne rend aucune preuve périmée.
39
+ - `devflow adaptive review ISSUE_ID --by NOM --report FICHIER` enregistre une revue humaine pendant `review` ou `rollback-check` (F-012). Le résultat est construit au schéma de la revue agent et soumis à la même validation ; la preuve porte la source `human` et le nom du relecteur. Les preuves de jugement acceptent désormais `agent`, `reconciled` ou `human` ; les preuves mesurées restent réservées à `devflow`.
40
+ - `devflow adaptive reconcile ISSUE_ID` valide sans relancer l'agent le travail d'une tentative échouée (F-002, F-003). À l'échec, Devflow consigne `<activity>-attempt.json` (contrat, agent, HEAD, branche, empreintes des fichiers modifiés, périmètre reporté) ; la réconciliation vérifie que rien n'a changé, extrait la réponse finale de la trace avec l'adaptateur et rejoue la validation de `adaptive run`. Les preuves acceptées portent la source `reconciled`.
41
+
42
+ ### Fixed
43
+
44
+ - Le contrat d'`implement` n'invente plus de remédiation (F-009). Chaque activité écrit désormais son propre `<activity>-result.json` (`implement-result.json`, `verify-result.json`…) au lieu d'un `activity-result.json` partagé et écrasé ; le périmètre reporté n'est lu que depuis un résultat dont le `contractId` provient d'`implement`.
45
+ - `verify` ne reconstruit plus le résultat d'`implement` depuis sa trace brute (F-011) : la trace `*-result.raw.txt` n'est jamais une source de résultat.
46
+
47
+ ### Changed
48
+
49
+ - Un échec agent affiche la dernière erreur émise au lieu de la première, et un échec dû au quota, à l'authentification ou au réseau devient `agent-unavailable` (code de sortie 8, nouveau) : l'activité reste courante et la reprise guidée propose `check --live`, `reconcile` et les autres agents (F-003, F-007, F-008). L'heure de reprise n'est pas extraite : aucun format stable n'est publié par les agents.
50
+ - `devflow check --ai codex|claude-code --live` effectue un appel réel minimal à l'agent : la présence du binaire ne prouve pas qu'il répond. En cas d'échec, la cause affichée est la dernière erreur émise, classée en quota, authentification ou réseau quand elle est reconnue (F-007). L'option consomme du quota et n'est pas active par défaut.
51
+ - `devflow adaptive complete ISSUE_ID` complète l'activité courante quand l'activité n'est pas précisée ; une activité fournie qui diffère de l'activité courante reste refusée (F-005).
52
+ - `devflow feature` génère dans le dossier de la feature un `.gitignore` excluant `*.raw.txt` : les traces brutes d'agent, qui peuvent recopier le contenu des fichiers lus, ne sont plus versionnées par défaut (F-010).
53
+ - Les sources acceptées par chaque preuve sont décrites par une table unique (`accepted_evidence_sources`), appliquée à l'identique par `complete` et par la relecture de l'état.
54
+ - Une preuve de source `agent` enregistre le nom de l'agent qui l'a produite, affiché par `adaptive status`.
55
+ - La commande suggérée après une activité reprend le dernier agent réellement exécuté (`agent-execution.json`) au lieu de `--agent codex` en dur ; sans exécution antérieure, elle affiche `--agent AGENT` (F-006).
56
+
57
+ ### Removed
58
+
59
+ - **Rupture de compatibilité (ADR-0002).** Devflow 5 ne lit plus que ses propres schémas : `assessment` v3, `workflow-state` v4, `activity-contract` v3. Les schémas `assessment` v1/v2, `workflow-state` v2/v3 et `activity-contract` v1/v2, leurs lecteurs, `devflow adaptive migrate` et `devflow migrate` sont supprimés. Un workflow créé par une version antérieure est refusé avec un diagnostic « devflow < 5 » ; il se termine sous devflow 4.x.
60
+
61
+ ## [4.0.8] - 2026-08-29
62
+
63
+ ### Fixed
64
+
65
+ - Une review qui rapporte les preuves de référence qu'elle a contrôlées ne réécrit plus leur origine. Le runner enregistrait toute preuve présente dans le résultat avec `source=agent`, y compris celles produites par `verify` : leur `source=devflow` était écrasée, l'invariant de la gate `verify` rompu, et l'état devenait illisible avec « invariants métier incohérents » — juste après une review pourtant validée. Seule la preuve propre à l'activité est désormais enregistrée. Régression introduite par 4.0.7, qui autorisait ce rapport sans en tirer la conséquence côté écriture.
66
+
67
+ ## [4.0.7] - 2026-08-29
68
+
69
+ ### Fixed
70
+
71
+ - La review peut rapporter les preuves de référence que son propre contrat lui demande de contrôler. Le contrat impose de traiter les preuves `source=devflow` déjà validées par `verify` comme résultats d'exécution de référence et de « contrôler leur contenu, leur actualité et leur adéquation » ; un agent qui s'y conformait voyait ensuite son résultat refusé avec `preuves inattendues`. La règle n'étant évaluée que sur un résultat `completed`, la contradiction restait invisible tant qu'une review continuait à trouver de vrais défauts. Les preuves du profil actif sont désormais acceptées aux côtés de la preuve de review ; celles étrangères au profil restent refusées, et la preuve de review reste requise en `passed`.
72
+
73
+ ## [4.0.6] - 2026-08-28
74
+
75
+ ### Fixed
76
+
77
+ - Le contrat d'activité énonce les deux règles que ses validateurs appliquaient sans les dire : cohérence `status`/`exitCode` des `checks`, et interdiction du mode silencieux sur les commandes de test Maven. Un agent ne pouvait les découvrir que par le refus, qui ne lui est jamais transmis lors d'une relance.
78
+
79
+ ## [4.0.5] - 2026-08-27
80
+
81
+ ### Fixed
82
+
83
+ - Une commande de test Maven silencieuse (`-q`, `--quiet`) est refusée à l'écriture du plan, au lieu de produire une validation que la gate `verify` rejette forcément faute de bilan de tests lisible.
84
+ - Les validations Maven générées automatiquement par Devflow n'utilisent plus `-q` : leur bilan de tests était jusqu'ici illisible, donc systématiquement refusé par la vérification automatique.
85
+
86
+ ## [4.0.4] - 2026-08-27
87
+
88
+ ### Fixed
89
+
90
+ - Le périmètre d'implémentation reporté survit à une réouverture visant une activité située avant `implement`, au lieu d'être perdu et de faire échouer la reprise en `no-worktree-change`.
91
+ - Un fichier reporté n'est retenu que s'il est encore réellement modifié dans le working tree, afin qu'un périmètre devenu fantôme ne valide aucune activité.
92
+
93
+ ## [4.0.3] - 2026-08-27
94
+
95
+ ### Fixed
96
+
97
+ - Codex est exécuté en mode événements : sa réponse finale est récupérée depuis le flux lorsque `--output-last-message` reste absent ou vide, au lieu de bloquer l'activité.
98
+ - Le flux d'événements Codex devient la trace d'exécution conservée dans `*-result.raw.txt`, que la reprise guidée désigne explicitement.
99
+ - Un tour Codex interrompu est catégorisé `agent-turn-failed` et l'identifiant de session provient de l'événement `thread.started`.
100
+ - Les agents n'héritent plus de l'entrée standard, qui pouvait être ajoutée au prompt du contrat ou bloquer l'exécution jusqu'au timeout.
101
+
102
+ ## [4.0.2] - 2026-08-27
103
+
104
+ ### Fixed
105
+
106
+ - La vérification V4 accepte les preuves de plan V1 conservées lors d'une migration V3 vers V4, sans réécrire les artefacts historiques.
107
+ - Une régression couvre la reprise d'un workflow critical migré avec un plan V1 et une implémentation V2.
108
+
109
+ ## [4.0.1] - 2026-08-26
110
+
111
+ ### Fixed
112
+
113
+ - Les échecs de clôture structurée Codex sont catégorisés sans exposer de contenu de dépôt ou de sortie.
114
+ - Les écritures observées sont tracées par indicateur et compteur dans l'audit et le worklog, sans relance automatique.
115
+ - La migration V3 → V4 est couverte pour les quatre profils, y compris une reprise critical avancée.
116
+
117
+ ## [4.0.0] - 2026-08-26
118
+
119
+ ### Added
120
+
121
+ - Activité `preflight-evidence` dédiée avant toute implémentation, avec artefact unique, contrôle de fraîcheur et détection de secrets.
122
+ - Schémas publics `assessment` v2 et `workflow-state` v3, sans modification des schémas V3 publiés.
123
+ - Migration atomique et auditée via `devflow adaptive migrate`, avec dry-run et sauvegarde restaurable.
124
+
125
+ ### Changed
126
+
127
+ - Les quatre profils utilisent une route V4 explicite et transmettent la preuve de pré-vol à `implement`.
128
+ - La version du paquet et de la CLI passe à 4.0.0.
129
+
8
130
  ## [3.0.1] - 2026-08-25
9
131
 
10
132
  ### Fixed
@@ -0,0 +1,20 @@
1
+ # Devflow
2
+
3
+ Ce dépôt implémente exclusivement un workflow adaptatif. Les changements de
4
+ politique passent par `assessment.json`; les transitions passent par la CLI et
5
+ ne doivent jamais être réalisées en éditant les fichiers d’état.
6
+
7
+ <!-- devflow:pipeline:start -->
8
+ Workflow adaptatif à quatre profils, sélectionné par `devflow assess` : quick: assess → preflight-evidence → implement → verify → done; standard: assess → prepare → preflight-evidence → implement → verify → done; deep: assess → spec → plan → tasks → preflight-evidence → implement → verify → review → done; critical: assess → risk-assessment → spec → research → contracts → plan → tasks → preflight-evidence → implement → verify → review → rollback-check → done. `assessment.json` porte la route par défaut et `workflow-state.json` porte la progression, les preuves et les éventuelles omissions justifiées de research ou contracts dans critical.
9
+ <!-- devflow:pipeline:end -->
10
+
11
+ ## Commandes de développement
12
+
13
+ ```bash
14
+ uv run pytest -q
15
+ ./tests/run-tests.sh
16
+ uv run devflow docs-sync --check
17
+ ```
18
+
19
+ Pour un essai réel : `feature`, `assess`, `adaptive start`, puis une activité à
20
+ la fois avec `adaptive run`.
@@ -0,0 +1,224 @@
1
+ # Retours d'usage devflow
2
+
3
+ Observés en conditions réelles. Chaque entrée : ce qui s'est passé, pourquoi ça coûte, une piste.
4
+ Les décisions t'appartiennent. Classement par gravité.
5
+
6
+ Retours précédents traités en 5.0.0 : voir `docs/v5-decisions.md`.
7
+
8
+ Contexte des retours ci-dessous : devflow CLI v5.0.0, projet k-review, six parcours adaptatifs conduits
9
+ entre le 16 et le 18 septembre 2026 (KKS-371 `deep`, KKS-361 `critical`, KKS-362 `deep`, KKS-363
10
+ `critical`, KKS-364 `critical`), avec les agents `codex` puis `claude`. Point de vue : celui du
11
+ superviseur (Claude), qui enchaîne les activités, relit les artefacts et répare les rejets —
12
+ l'utilisateur n'intervient que pour trancher.
13
+
14
+ ---
15
+
16
+ ## 1. Critique
17
+
18
+ ### C1 — Une feature d'infrastructure ne peut pas être close légitimement
19
+
20
+ **Ce qui s'est passé.** KKS-363 (bascule du déploiement derrière nginx) ne modifiait que `app/nginx.conf`,
21
+ `app/Dockerfile`, `compose.yaml` et `deploy/README.md`. `adaptive verify` sélectionne ses commandes à partir
22
+ des modules de stack situés au-dessus des fichiers modifiés (`select_validation_commands`,
23
+ `core/automatic_evidence.py`) : aucun `pom.xml` ni `package.json` au-dessus de ces fichiers, donc aucune
24
+ commande, donc refus `no-safe-validation`. Ajouter `mvn -B verify` au `validationPlan` n'y change rien, la
25
+ sélection ignorant le plan. Les preuves enregistrées avec `adaptive evidence` (193 tests et 10 contrôles
26
+ réellement exécutés) sont marquées `manual`, et la clôture d'un profil `critical` les refuse.
27
+
28
+ **Pourquoi ça coûte.** Il n'existe aucune voie honnête pour terminer le parcours : il reste « actif » pour
29
+ toujours, ou le superviseur est tenté de faire entrer un fichier de code dans le périmètre pour débloquer la
30
+ détection — exactement la dérive que la règle existe pour empêcher. Toute bascule de déploiement à venir
31
+ rencontrera le même mur. Sur KKS-363, clôture manuelle consignée au worklog, sur décision de l'utilisateur.
32
+
33
+ **Piste.** Quand aucun module n'est détecté, accepter le `validationPlan` du plan comme source de preuves
34
+ automatiques. Ou reconnaître des stacks d'infrastructure (`docker compose config`, `nginx -t` dans l'image
35
+ construite, `yamllint`). À défaut, une preuve `manual` auditée, sur le modèle de `waive` : motif obligatoire,
36
+ auteur, trace durable.
37
+
38
+ ### C2 — Un travail terminé est rejeté pour des raisons de forme, et le seul recours contourne le garde-fou
39
+
40
+ **Ce qui s'est passé.** Sept rejets en une semaine, chaque fois avec un agent qui avait fini et des contrôles
41
+ verts :
42
+
43
+ - chemin absolu dans `changedFiles` → « chemin non portable » (KKS-363, spec) ;
44
+ - entrée descriptive au lieu de chemins, `api/src/ (81 fichiers déplacés…)` → échec de l'inspection du diff
45
+ (KKS-362) ;
46
+ - reprise après interruption : les fichiers de la tentative précédente comptent comme déclarés mais non
47
+ attendus → « declares vs attendus » (KKS-371, KKS-363) ;
48
+ - contrôle doublon marqué en échec, alors que sa variante corrigée passe (KKS-362) ;
49
+ - expression `${{ github.sha }}` recopiée dans les contrôles → placeholder (KKS-362) ;
50
+ - `structured_output` absent après une limite d'API, alors que `plan.md` était complet (KKS-361) ;
51
+ - `research.md` complet, dix décisions argumentées chacune sous un `### Décision`, rejeté pour l'absence
52
+ d'un titre de premier niveau `## Décisions` → `invalid-artifact` (KKS-364). Le superviseur a ajouté
53
+ une section de synthèse, sans rien changer sur le fond : exactement le recours décrit ci-dessous.
54
+
55
+ **Pourquoi ça coûte.** Un résultat rejeté n'écrit pas `<activite>-result.json`. Le seul recours a été, à
56
+ chaque fois, de reconstruire ce fichier à la main depuis `<activite>-result.raw.txt`, en corrigeant le champ
57
+ fautif, puis `adaptive complete`. Ça fonctionne, mais c'est le superviseur qui corrige ce que le garde-fou
58
+ est censé vérifier : un superviseur moins attentif validerait n'importe quoi par le même chemin.
59
+
60
+ **Piste.**
61
+ - Normaliser avant de valider : relativiser les chemins, développer une entrée de dossier par
62
+ `git diff --name-only`, ignorer un contrôle en échec quand une variante réussie couvre la même cible.
63
+ - Faire accepter par `reconcile` l'union des mutations de toutes les tentatives de l'activité
64
+ (`carriedChangedFiles` existe mais reste vide).
65
+ - Si un recours manuel doit subsister, en faire une commande explicite — `adaptive accept-raw --reason`, par
66
+ exemple — qui rejoue les contrôles de forme après correction et trace l'intervention dans le worklog.
67
+
68
+ ---
69
+
70
+ ## 2. Majeur
71
+
72
+ ### M1 — La politique de validation n'est connue des agents qu'après coup
73
+
74
+ **Ce qui s'est passé.** L'agent de plan écrit naturellement `mvn -B clean verify` et `docker build` dans son
75
+ `validationPlan`. Le premier est refusé à la complétion du plan (`clean` hors des tâches Maven autorisées),
76
+ le second à `adaptive verify` (exécutable non approuvé). Le message de refus du plan ne nommait ni la commande
77
+ ni le VAL en cause.
78
+
79
+ **Pourquoi ça coûte.** Chaque refus impose de corriger `plan.md` et `plan-result.json` à la main, puis de
80
+ compléter l'activité — voir C2. Sur KKS-362, trois garde-fous différents ont été rencontrés dans la même
81
+ feature.
82
+
83
+ **Piste.** Injecter la politique (exécutables autorisés, tâches Maven admises, motifs interdits comme les
84
+ doubles accolades) dans le contrat d'activité de `plan` et `tasks`, pour que l'agent ne produise pas ce qui
85
+ sera refusé. Même chose pour les **sections requises** de chaque artefact (le `## Décisions` de
86
+ `research.md`, cf. C2) : les nommer dans le contrat, ou accepter une sous-section équivalente.
87
+
88
+ **Constat qui appuie la piste (KKS-364).** Les garde-fous de forme ont été écrits par le superviseur dans
89
+ `need.md` avant le démarrage (chemins relatifs, pas de `clean`, pas de `docker`, pas de doubles
90
+ accolades, `changedFiles` sans entrée descriptive). Résultat : aucun rejet de ce type sur treize
91
+ activités, contre sept la semaine précédente. La politique connue en amont fonctionne ; elle doit venir
92
+ de l'outil, pas de la vigilance du superviseur.
93
+
94
+ ### M2 — Deux moteurs de vérification incohérents
95
+
96
+ **Ce qui s'est passé.** `devflow verify` accepte `--allow-command docker`, mais ne sait pas lire un tableau
97
+ de validation qui porte une colonne « Répertoire » (« Ligne de validation mal formée »). `adaptive verify`
98
+ lit ce plan, mais n'a pas d'`--allow-command`. `adaptive waive` ne s'applique qu'à un contrôle exécuté et en
99
+ échec, pas à un contrôle refusé avant exécution (« aucun échec exécuté trouvé »).
100
+
101
+ **Pourquoi ça coûte.** Une validation légitime (construire une image localement, sans push) ne peut être
102
+ exécutée par aucun des deux chemins. Sur KKS-362, les deux `docker build` ont dû être remplacés par des
103
+ contrôles de contenu des `Dockerfile`, trace consignée au worklog.
104
+
105
+ **Piste.** Un seul moteur. Une approbation d'exécutable enregistrée dans le plan lui-même, avec motif, et
106
+ auditée comme une dérogation.
107
+
108
+ ### M3 — Plus de chaînage en v5, et un skill resté en v4
109
+
110
+ **Ce qui s'est passé.** `devflow run` n'existe plus. Le superviseur a réécrit à chaque feature la même boucle
111
+ shell : lire `currentActivity` dans `workflow-state.json`, lancer `adaptive run`, s'arrêter au premier refus.
112
+ Le skill Claude `/devflow` documente encore `devflow run`, `state.json`, les étapes v4 (`review-spec`,
113
+ `clarify`…) et une synchronisation Linear qui n'existe plus.
114
+
115
+ **Pourquoi ça coûte.** Du bricolage répété, et une documentation de façade qui induit en erreur le premier
116
+ agent qui la suit.
117
+
118
+ **Piste.** `adaptive run --until <activite>|done` : enchaîne, s'arrête au premier refus, affiche un statut
119
+ compact et la commande de reprise. Mettre le skill `/devflow` à jour sur le parcours adaptatif.
120
+
121
+ ### M4 — Les limites d'usage des agents ne sont pas un état géré
122
+
123
+ **Ce qui s'est passé.** Limite Codex jusqu'au 19 septembre en pleine implémentation (KKS-371), limite de
124
+ session Claude deux fois (plan de KKS-361, implémentation de KKS-363). La reprise suggérée, `reconcile`,
125
+ échoue quand le résultat est incomplet ; une relance fraîche avec un autre agent déclare les fichiers de la
126
+ tentative précédente, d'où le rejet décrit en C2.
127
+
128
+ Sur KKS-364, la limite de session a interrompu `rollback-check` : `agent-failed`, avec l'heure de
129
+ réinitialisation dans le message. L'activité étant en lecture seule, une relance à l'identique a suffi —
130
+ preuve que la reprise peut être simple quand rien n'a été écrit.
131
+
132
+ **Pourquoi ça coûte.** Chaque limite se transforme en réparation manuelle, alors que la situation est
133
+ banale et prévisible.
134
+
135
+ **Piste.** Détecter la limite (statut 429, message « usage limit » ou « session limit ») et passer en
136
+ `agent-unavailable` avec l'heure de réinitialisation. La reprise continue la même tentative en reportant ses
137
+ mutations déjà observées, quel que soit le backend.
138
+
139
+ ### M5 — Profil disproportionné pour un petit correctif de sécurité
140
+
141
+ **Ce qui s'est passé.** `--data-security` a placé KKS-361 — une ligne de production — en `critical` :
142
+ 13 activités, dont `research` et `contracts`. La recherche a été réellement utile (dépendance du
143
+ `JSESSIONID` à l'en-tête `Accept`) ; les contrats beaucoup moins.
144
+
145
+ **Pourquoi ça coûte.** Temps et quota d'agent, sur un correctif dont la taille ne justifiait pas toutes les
146
+ étapes.
147
+
148
+ **Piste.** Dissocier le risque de la taille. Laisser `risk-assessment` recommander de sauter une activité,
149
+ avec justification tracée et gardée par la revue.
150
+
151
+ ### M6 — Messages d'erreur tronqués ou sans cible
152
+
153
+ **Ce qui s'est passé.** Le refus du plan de KKS-362 disait seulement « test/check/lint/verify/build sont
154
+ autorisées », sans le VAL ni la commande en cause. Sur les messages longs, le début — souvent la cause — est
155
+ coupé dans la sortie console.
156
+
157
+ **Pourquoi ça coûte.** Le superviseur doit fouiller les JSON pour retrouver l'élément fautif.
158
+
159
+ **Piste.** Première ligne : identifiant du contrôle et élément fautif. Une option `--json` sur `adaptive run`
160
+ et `adaptive verify` pour une lecture outillée.
161
+
162
+ ### M7 — Une écriture du superviseur pendant une activité est imputée à l'agent
163
+
164
+ **Ce qui s'est passé.** Pendant `contracts` (KKS-364), l'utilisateur a tranché un nouvel arbitrage. Le
165
+ superviseur l'a consigné dans `issue-KKS-364.md` et `need.md`, dans le dossier feature, pendant que
166
+ l'agent travaillait. À la complétion : `artifact-files-mismatch` — observés `contracts.md`,
167
+ `issue-KKS-364.md`, `need.md`, déclaré `contracts.md` seul. L'agent n'avait rien fait de mal ; il avait
168
+ même intégré l'arbitrage, lu à la volée.
169
+
170
+ **Pourquoi ça coûte.** Un rejet de plus à réparer depuis le raw (C2). Et la règle implicite — « ne rien
171
+ écrire dans le dossier feature pendant une activité » — n'est écrite nulle part : le superviseur l'a
172
+ découverte en la violant.
173
+
174
+ **Piste.** Exclure de l'observation les entrées déclarées du besoin (`need.md`, `issue-*.md`), ou les
175
+ figer au démarrage de l'activité et signaler leur modification comme un avertissement distinct
176
+ (« entrée modifiée en cours d'activité ») plutôt que comme une mutation de l'agent. À défaut, documenter
177
+ la règle et la faire respecter par un verrou visible (`workflow-state.json` → `running`).
178
+
179
+ ### M8 — Les corrections faites après la revue échappent à la revue
180
+
181
+ **Ce qui s'est passé.** Sur KKS-364, la revue indépendante et `rollback-check` ont relevé quatre défauts
182
+ réels : un test de sécurité qui ne prouvait rien (assertions sous une condition jamais vraie), un contrôle
183
+ shell inversé dans la procédure de retour arrière, une source manquante pour l'image précédente, `spec.md`
184
+ non amendé. Le superviseur les a corrigés à la main, puis `adaptive verify --refresh` a rafraîchi les
185
+ preuves de tests et `done` a été accepté. Les corrections elles-mêmes n'ont été revues par personne.
186
+
187
+ **Pourquoi ça coûte.** La preuve `independent-review` porte sur un diff qui n'est plus celui qui est
188
+ livré. Ici les corrections étaient petites et tracées au worklog ; rien n'empêche qu'elles ne le soient
189
+ pas.
190
+
191
+ **Piste.** Marquer `independent-review` périmée quand du code change après la revue (comme les preuves de
192
+ tests), et offrir un `adaptive review --delta` qui ne relit que le diff postérieur. Ou, a minima, exiger
193
+ une entrée de worklog motivée pour toute modification après `review`.
194
+
195
+ ---
196
+
197
+ ## 3. Mineur
198
+
199
+ - **m1 — Détecteur de placeholders trop large.** Il signale les expressions GitHub Actions (`${{ }}`) et les
200
+ légendes entre crochets (`[USX]`). Ignorer les blocs de code et les spans `code`, et indiquer la ligne.
201
+ - **m2 — Péremption des preuves trop large.** Corriger « 11 variables » en « 12 » dans un README (KKS-371)
202
+ a rendu `test-suite` périmée et imposé un `mvn verify` complet. Une modification purement documentaire ne
203
+ devrait invalider que les preuves documentaires.
204
+ - **m3 — Contrôles fondés sur l'index git.** VAL-001 (`git ls-files --error-unmatch`) a échoué sur KKS-362
205
+ parce que l'implémentation n'indexe pas les fichiers qu'elle crée. Faire indexer les créations par
206
+ l'activité, ou vérifier sur le système de fichiers.
207
+ - **m4 — `adaptive evidence` produit des preuves `manual` que `deep` et `critical` refusent à la clôture.**
208
+ L'aide de la commande devrait le dire.
209
+ - **m5 — Synchronisation Linear absente en v5.** `devflow linear decision` existe mais n'est appelé nulle
210
+ part : le passage en Done se fait à la main. Un crochet à `done` suffirait.
211
+
212
+ ---
213
+
214
+ ## Priorités suggérées
215
+
216
+ 1. **C2** — normaliser et accepter les résultats. Cause de la moitié des interventions manuelles, et la plus
217
+ risquée, parce que le recours actuel contourne le garde-fou.
218
+ 2. **C1** — clôture des features d'infrastructure. Bloquant pour chaque bascule de déploiement à venir.
219
+ 3. **M1 + M2** — politique de validation connue des agents, moteur de vérification unique. Supprime la
220
+ plupart des rejets en amont.
221
+ 4. **M3** — `adaptive run --until`. Petit coût, gain à chaque feature.
222
+ 5. **M4** — reprise après limite d'usage.
223
+ 6. **M7** — ne pas imputer à l'agent les écritures du superviseur. Petit coût, supprime un rejet absurde.
224
+ 7. **M8** — revue du delta après correction. Ferme un trou de traçabilité dans le profil `critical`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: devflow-cli
3
- Version: 3.0.1
3
+ Version: 6.0.0
4
4
  Summary: Spec-Driven Development workflow CLI
5
5
  Project-URL: Homepage, https://github.com/sopequenoteck/devflow
6
6
  Project-URL: Repository, https://github.com/sopequenoteck/devflow
@@ -57,6 +57,7 @@ Python 3.11+ et Git sont requis. `--ai` accepte `codex`, `claude-code` ou
57
57
 
58
58
  ```bash
59
59
  devflow feature KS-123 --short-name user-auth
60
+ # Décrire le besoin dans need.md, dans le dossier de la feature créé
60
61
  devflow assess KS-123 --scope multiple --ambiguity medium --risk medium
61
62
  devflow adaptive start KS-123
62
63
  devflow adaptive run KS-123 --agent codex
@@ -73,6 +74,10 @@ Chaque invocation de `adaptive run` traite une activité. La politique est dans
73
74
  `workflow-state.json`. Les résultats agent sont validés par schéma et les
74
75
  preuves d’exécution sensibles sont produites localement par Devflow.
75
76
 
77
+ Chaque profil exécute `preflight-evidence` avant `implement`. Cette
78
+ activité archive des faits externes reproductibles dans
79
+ `preflight-evidence.md`, sans secret ni donnée utilisateur.
80
+
76
81
  Les trois adaptateurs acceptent les mêmes contrats structurés :
77
82
 
78
83
  ```bash
@@ -81,16 +86,13 @@ devflow adaptive run KS-123 --agent claude
81
86
  devflow adaptive run KS-123 --agent cursor
82
87
  ```
83
88
 
84
- ## Migrer une ancienne feature
89
+ ## Features créées avant devflow 5
85
90
 
86
- ```bash
87
- devflow migrate KS-123 --dry-run
88
- devflow migrate KS-123 --profile deep
89
- ```
91
+ Devflow 5 ne lit que ses propres schémas et ne fournit aucune migration : un
92
+ `assessment.json`, un `workflow-state.json` ou un `state.json` créé par une
93
+ version antérieure est refusé. Terminez ces features avec devflow 4.x avant la
94
+ mise à jour. Voir [ADR-0002](docs/adr/0002-v5-rupture-and-provenance.md).
90
95
 
91
- La migration conserve les artefacts, archive `state.json` sous
92
- `legacy-state.json`, puis redémarre à la première activité vérifiable du profil.
93
- Sans identifiant, `devflow migrate` traite toutes les anciennes features.
94
96
  `devflow init` et `devflow upgrade` déplacent également les anciennes commandes
95
97
  Claude connues vers `~/.claude/.devflow-legacy-backup/` sans toucher aux
96
98
  commandes personnalisées.
@@ -29,6 +29,7 @@ Python 3.11+ et Git sont requis. `--ai` accepte `codex`, `claude-code` ou
29
29
 
30
30
  ```bash
31
31
  devflow feature KS-123 --short-name user-auth
32
+ # Décrire le besoin dans need.md, dans le dossier de la feature créé
32
33
  devflow assess KS-123 --scope multiple --ambiguity medium --risk medium
33
34
  devflow adaptive start KS-123
34
35
  devflow adaptive run KS-123 --agent codex
@@ -45,6 +46,10 @@ Chaque invocation de `adaptive run` traite une activité. La politique est dans
45
46
  `workflow-state.json`. Les résultats agent sont validés par schéma et les
46
47
  preuves d’exécution sensibles sont produites localement par Devflow.
47
48
 
49
+ Chaque profil exécute `preflight-evidence` avant `implement`. Cette
50
+ activité archive des faits externes reproductibles dans
51
+ `preflight-evidence.md`, sans secret ni donnée utilisateur.
52
+
48
53
  Les trois adaptateurs acceptent les mêmes contrats structurés :
49
54
 
50
55
  ```bash
@@ -53,16 +58,13 @@ devflow adaptive run KS-123 --agent claude
53
58
  devflow adaptive run KS-123 --agent cursor
54
59
  ```
55
60
 
56
- ## Migrer une ancienne feature
61
+ ## Features créées avant devflow 5
57
62
 
58
- ```bash
59
- devflow migrate KS-123 --dry-run
60
- devflow migrate KS-123 --profile deep
61
- ```
63
+ Devflow 5 ne lit que ses propres schémas et ne fournit aucune migration : un
64
+ `assessment.json`, un `workflow-state.json` ou un `state.json` créé par une
65
+ version antérieure est refusé. Terminez ces features avec devflow 4.x avant la
66
+ mise à jour. Voir [ADR-0002](docs/adr/0002-v5-rupture-and-provenance.md).
62
67
 
63
- La migration conserve les artefacts, archive `state.json` sous
64
- `legacy-state.json`, puis redémarre à la première activité vérifiable du profil.
65
- Sans identifiant, `devflow migrate` traite toutes les anciennes features.
66
68
  `devflow init` et `devflow upgrade` déplacent également les anciennes commandes
67
69
  Claude connues vers `~/.claude/.devflow-legacy-backup/` sans toucher aux
68
70
  commandes personnalisées.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Pilote le workflow adaptatif Devflow depuis Claude Code
3
- argument-hint: ISSUE_ID [--agent claude|codex|cursor]
3
+ argument-hint: ISSUE_ID [--agent claude|codex|cursor] [--until ACTIVITY|done]
4
4
  allowed-tools: Bash(devflow:*)
5
5
  ---
6
6
 
@@ -9,7 +9,8 @@ allowed-tools: Bash(devflow:*)
9
9
  Utiliser exclusivement la machine adaptative de la CLI. Ne jamais créer ni
10
10
  interpréter de `state.json`.
11
11
 
12
- 1. Lire `$ARGUMENTS` et extraire l'identifiant de feature.
12
+ 1. Lire `$ARGUMENTS` et extraire l'identifiant de feature, l'agent demandé
13
+ (`claude` par défaut) et la cible `--until` (`done` par défaut).
13
14
  2. Exécuter `devflow status ISSUE_ID`.
14
15
  3. Si la feature n'existe pas, demander à l'utilisateur de lancer
15
16
  `devflow feature ISSUE_ID`.
@@ -17,8 +18,11 @@ interpréter de `state.json`.
17
18
  `devflow assess ISSUE_ID` avec des options explicites.
18
19
  5. Si elle est évaluée mais non démarrée, lancer
19
20
  `devflow adaptive start ISSUE_ID`.
20
- 6. Lancer une seule activité avec
21
- `devflow adaptive run ISSUE_ID --agent AGENT`.
21
+ 6. Enchaîner les activités avec
22
+ `devflow adaptive run ISSUE_ID --agent AGENT --until CIBLE`.
23
+ `--until` inclut l'activité ciblée.
24
+ La CLI s'arrête au premier refus : ne pas relancer automatiquement la
25
+ tentative refusée et afficher sa commande de reprise.
22
26
  7. Afficher ensuite `devflow adaptive status ISSUE_ID`.
23
27
 
24
28
  Le contrat produit par Devflow est la seule autorité sur les actions,