devflow-cli 2.3.0__tar.gz → 2.8.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 (370) hide show
  1. devflow_cli-2.8.0/.githooks/post-checkout +26 -0
  2. devflow_cli-2.8.0/.githooks/post-merge +15 -0
  3. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.github/workflows/ci.yml +3 -0
  4. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.gitignore +1 -0
  5. devflow_cli-2.8.0/.idea/.gitignore +10 -0
  6. devflow_cli-2.8.0/.idea/devflow.iml +9 -0
  7. devflow_cli-2.8.0/.idea/misc.xml +6 -0
  8. devflow_cli-2.8.0/.idea/modules.xml +8 -0
  9. devflow_cli-2.8.0/.idea/vcs.xml +6 -0
  10. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +35 -0
  11. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +77 -0
  12. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/data-model.md +54 -0
  13. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/plan.md +187 -0
  14. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/quickstart.md +49 -0
  15. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/research.md +41 -0
  16. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/spec.md +211 -0
  17. devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/tasks.md +187 -0
  18. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CHANGELOG.md +22 -1
  19. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CLAUDE.md +28 -9
  20. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/PKG-INFO +15 -7
  21. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/README.md +13 -5
  22. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/agents/devflow-review.md +2 -1
  23. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.clarify.md +5 -9
  24. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.contracts.md +3 -8
  25. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.docs.md +4 -9
  26. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.implement.md +6 -24
  27. devflow_cli-2.8.0/commands/devflow.md +351 -0
  28. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.plan.md +3 -8
  29. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.research.md +3 -8
  30. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-impl.md +15 -12
  31. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-spec.md +4 -7
  32. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-tasks.md +4 -7
  33. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.spec.md +3 -8
  34. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.tasks.md +4 -16
  35. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/cli-reference.md +154 -0
  36. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/commands-reference.md +1 -1
  37. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/index.md +1 -0
  38. devflow_cli-2.8.0/docs/pipeline-reference.generated.md +23 -0
  39. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/pipeline.md +6 -0
  40. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/pyproject.toml +1 -1
  41. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/__init__.py +26 -1
  42. devflow_cli-2.8.0/src/devflow_cli/adapters/__init__.py +19 -0
  43. devflow_cli-2.8.0/src/devflow_cli/adapters/agents.py +148 -0
  44. devflow_cli-2.8.0/src/devflow_cli/adapters/linear.py +79 -0
  45. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/cli.py +16 -0
  46. devflow_cli-2.8.0/src/devflow_cli/commands/docs_sync.py +33 -0
  47. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/extension.py +3 -1
  48. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/feature.py +4 -4
  49. devflow_cli-2.8.0/src/devflow_cli/commands/hooks_cmd.py +193 -0
  50. devflow_cli-2.8.0/src/devflow_cli/commands/linear.py +30 -0
  51. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/migrate_speckit.py +139 -22
  52. devflow_cli-2.8.0/src/devflow_cli/commands/review.py +54 -0
  53. devflow_cli-2.8.0/src/devflow_cli/commands/run.py +123 -0
  54. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/status.py +24 -29
  55. devflow_cli-2.8.0/src/devflow_cli/commands/step.py +118 -0
  56. devflow_cli-2.8.0/src/devflow_cli/commands/traceability.py +47 -0
  57. devflow_cli-2.8.0/src/devflow_cli/commands/verify.py +78 -0
  58. devflow_cli-2.8.0/src/devflow_cli/core/docgen.py +93 -0
  59. devflow_cli-2.8.0/src/devflow_cli/core/hooks.py +235 -0
  60. devflow_cli-2.8.0/src/devflow_cli/core/orchestrator.py +170 -0
  61. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/state.py +207 -6
  62. devflow_cli-2.8.0/src/devflow_cli/core/state_store.py +45 -0
  63. devflow_cli-2.8.0/src/devflow_cli/core/traceability.py +81 -0
  64. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/validators.py +25 -5
  65. devflow_cli-2.8.0/src/devflow_cli/core/verification.py +296 -0
  66. devflow_cli-2.8.0/src/devflow_cli/schemas/state.schema.json +39 -0
  67. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/paths.py +78 -8
  68. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/devflow-hooks-template.yml +4 -3
  69. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/plan-template.md +8 -0
  70. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-impl-template.md +6 -0
  71. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/run-tests.sh +27 -8
  72. devflow_cli-2.8.0/tests/test_agent_adapters.py +76 -0
  73. devflow_cli-2.8.0/tests/test_bash_runner.py +63 -0
  74. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_catalog.py +52 -0
  75. devflow_cli-2.8.0/tests/test_cmd_docs_sync.py +35 -0
  76. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_extension.py +31 -0
  77. devflow_cli-2.8.0/tests/test_cmd_hooks.py +178 -0
  78. devflow_cli-2.8.0/tests/test_cmd_linear.py +18 -0
  79. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_migrate_speckit.py +191 -2
  80. devflow_cli-2.8.0/tests/test_cmd_review.py +95 -0
  81. devflow_cli-2.8.0/tests/test_cmd_run.py +39 -0
  82. devflow_cli-2.8.0/tests/test_cmd_step.py +141 -0
  83. devflow_cli-2.8.0/tests/test_cmd_traceability.py +45 -0
  84. devflow_cli-2.8.0/tests/test_cmd_verify.py +86 -0
  85. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_constants.py +9 -0
  86. devflow_cli-2.8.0/tests/test_docgen.py +41 -0
  87. devflow_cli-2.8.0/tests/test_hooks.py +160 -0
  88. devflow_cli-2.8.0/tests/test_linear_adapter.py +55 -0
  89. devflow_cli-2.8.0/tests/test_linear_order.py +70 -0
  90. devflow_cli-2.8.0/tests/test_orchestrator.py +105 -0
  91. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_paths.py +32 -4
  92. devflow_cli-2.8.0/tests/test_paths_project_root.py +30 -0
  93. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_state.py +98 -0
  94. devflow_cli-2.8.0/tests/test_state_schema.py +14 -0
  95. devflow_cli-2.8.0/tests/test_traceability.py +63 -0
  96. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_validators.py +50 -0
  97. devflow_cli-2.8.0/tests/test_verification.py +207 -0
  98. devflow_cli-2.8.0/tests/test_version.py +28 -0
  99. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/uv.lock +1 -1
  100. devflow_cli-2.3.0/commands/devflow.md +0 -140
  101. devflow_cli-2.3.0/src/devflow_cli/core/hooks.py +0 -94
  102. devflow_cli-2.3.0/tests/test-community-catalog.sh +0 -150
  103. devflow_cli-2.3.0/tests/test_hooks.py +0 -67
  104. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.analyze.md +0 -0
  105. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.checklist.md +0 -0
  106. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.clarify.md +0 -0
  107. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.constitution.md +0 -0
  108. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.implement.md +0 -0
  109. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.plan.md +0 -0
  110. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.specify.md +0 -0
  111. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.tasks.md +0 -0
  112. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.taskstoissues.md +0 -0
  113. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.github/workflows/release.yml +0 -0
  114. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/init-options.json +0 -0
  115. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/memory/constitution.md +0 -0
  116. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  117. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/common.sh +0 -0
  118. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
  119. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/setup-plan.sh +0 -0
  120. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
  121. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
  122. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
  123. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/data-model.md +0 -0
  124. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/plan.md +0 -0
  125. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/research.md +0 -0
  126. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/spec.md +0 -0
  127. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/tasks.md +0 -0
  128. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
  129. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
  130. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
  131. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/data-model.md +0 -0
  132. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/plan.md +0 -0
  133. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/research.md +0 -0
  134. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/spec.md +0 -0
  135. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/tasks.md +0 -0
  136. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
  137. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/data-model.md +0 -0
  138. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/plan.md +0 -0
  139. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
  140. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/research.md +0 -0
  141. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/spec.md +0 -0
  142. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/tasks.md +0 -0
  143. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
  144. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
  145. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
  146. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/plan.md +0 -0
  147. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
  148. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/research.md +0 -0
  149. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/spec.md +0 -0
  150. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
  151. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
  152. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/plan.md +0 -0
  153. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
  154. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/research.md +0 -0
  155. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/spec.md +0 -0
  156. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/tasks.md +0 -0
  157. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
  158. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
  159. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/data-model.md +0 -0
  160. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/plan.md +0 -0
  161. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
  162. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/research.md +0 -0
  163. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/spec.md +0 -0
  164. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/tasks.md +0 -0
  165. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
  166. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/data-model.md +0 -0
  167. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/plan.md +0 -0
  168. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/quickstart.md +0 -0
  169. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/research.md +0 -0
  170. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/spec.md +0 -0
  171. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/tasks.md +0 -0
  172. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
  173. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/plan.md +0 -0
  174. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
  175. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/research.md +0 -0
  176. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/spec.md +0 -0
  177. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
  178. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
  179. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/plan.md +0 -0
  180. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
  181. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/research.md +0 -0
  182. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/spec.md +0 -0
  183. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/tasks.md +0 -0
  184. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
  185. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
  186. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
  187. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/research.md +0 -0
  188. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
  189. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
  190. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
  191. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/plan.md +0 -0
  192. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/quickstart.md +0 -0
  193. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/research.md +0 -0
  194. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/spec.md +0 -0
  195. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/tasks.md +0 -0
  196. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
  197. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
  198. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
  199. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
  200. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
  201. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
  202. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/plan.md +0 -0
  203. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
  204. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/spec.md +0 -0
  205. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
  206. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
  207. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
  208. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
  209. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
  210. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
  211. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
  212. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
  213. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
  214. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
  215. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
  216. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
  217. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/plan.md +0 -0
  218. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/research.md +0 -0
  219. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/spec.md +0 -0
  220. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
  221. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
  222. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
  223. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
  224. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
  225. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
  226. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
  227. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
  228. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/data-model.md +0 -0
  229. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/plan.md +0 -0
  230. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/research.md +0 -0
  231. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/spec.md +0 -0
  232. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/tasks.md +0 -0
  233. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
  234. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
  235. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/plan.md +0 -0
  236. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
  237. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/research.md +0 -0
  238. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/spec.md +0 -0
  239. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
  240. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
  241. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/plan.md +0 -0
  242. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/research.md +0 -0
  243. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/spec.md +0 -0
  244. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/tasks.md +0 -0
  245. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
  246. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/plan.md +0 -0
  247. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/research.md +0 -0
  248. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/spec.md +0 -0
  249. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
  250. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
  251. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/plan.md +0 -0
  252. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/research.md +0 -0
  253. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/spec.md +0 -0
  254. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/tasks.md +0 -0
  255. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
  256. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/plan.md +0 -0
  257. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/research.md +0 -0
  258. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/spec.md +0 -0
  259. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/tasks.md +0 -0
  260. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
  261. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/plan.md +0 -0
  262. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/research.md +0 -0
  263. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/spec.md +0 -0
  264. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/tasks.md +0 -0
  265. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/agent-file-template.md +0 -0
  266. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/checklist-template.md +0 -0
  267. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/constitution-template.md +0 -0
  268. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/plan-template.md +0 -0
  269. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-brownfield.md +0 -0
  270. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-greenfield.md +0 -0
  271. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-microservices.md +0 -0
  272. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template.md +0 -0
  273. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/tasks-template.md +0 -0
  274. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CONTRIBUTING.md +0 -0
  275. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/LICENSE +0 -0
  276. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/agents/devflow-autofix.md +0 -0
  277. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.analyze.md +0 -0
  278. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.checklist.md +0 -0
  279. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.constitution.md +0 -0
  280. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.context.md +0 -0
  281. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.extension.md +0 -0
  282. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.init.md +0 -0
  283. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.metrics.md +0 -0
  284. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.regen.md +0 -0
  285. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.status.md +0 -0
  286. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.sync-linear.md +0 -0
  287. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.tasks-to-issues.md +0 -0
  288. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/cursor-guide.md +0 -0
  289. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/brownfield.md +0 -0
  290. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/greenfield.md +0 -0
  291. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/microservices.md +0 -0
  292. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/spec-driven.md +0 -0
  293. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  294. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  295. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/README.md +0 -0
  296. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/catalog.community.json +0 -0
  297. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/catalog.json +0 -0
  298. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/template/example-command.md +0 -0
  299. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/template/example-extension.json +0 -0
  300. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/__init__.py +0 -0
  301. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/check.py +0 -0
  302. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/context.py +0 -0
  303. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/export_cmd.py +0 -0
  304. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/init_cmd.py +0 -0
  305. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/migrate_cmd.py +0 -0
  306. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/rollback.py +0 -0
  307. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/stale.py +0 -0
  308. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/upgrade_cmd.py +0 -0
  309. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/__init__.py +0 -0
  310. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/catalog.py +0 -0
  311. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/git.py +0 -0
  312. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/installer.py +0 -0
  313. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/manifest.py +0 -0
  314. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/scanner.py +0 -0
  315. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/staleness.py +0 -0
  316. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/__init__.py +0 -0
  317. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/console.py +0 -0
  318. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/logging.py +0 -0
  319. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/strings.py +0 -0
  320. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/agent-context-template.md +0 -0
  321. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/analyze-template.md +0 -0
  322. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklist-template.md +0 -0
  323. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/api.md +0 -0
  324. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/requirements.md +0 -0
  325. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/security.md +0 -0
  326. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/ux.md +0 -0
  327. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/clarify-template.md +0 -0
  328. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/constitution-template.md +0 -0
  329. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/README-template.md +0 -0
  330. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/api-template.md +0 -0
  331. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/components-template.md +0 -0
  332. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/interfaces-template.md +0 -0
  333. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/services-template.md +0 -0
  334. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts-template.md +0 -0
  335. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/data-model-template.md +0 -0
  336. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/docs-template.md +0 -0
  337. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/export/copilot-instructions-template.md +0 -0
  338. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/export/cursor-rules-template.md +0 -0
  339. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/extension-manifest-template.json +0 -0
  340. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/quickstart-template.md +0 -0
  341. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/research-template.md +0 -0
  342. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-spec-template.md +0 -0
  343. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-tasks-template.md +0 -0
  344. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/spec-template.md +0 -0
  345. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/tasks-template.md +0 -0
  346. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/conftest.py +0 -0
  347. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/agents/mock-agent.md +0 -0
  348. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/commands/mock-command.md +0 -0
  349. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/mock-catalog.json +0 -0
  350. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/mock-state.json +0 -0
  351. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test-helpers.sh +0 -0
  352. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test-template-variants.sh +0 -0
  353. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_check.py +0 -0
  354. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_context.py +0 -0
  355. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_feature.py +0 -0
  356. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_init.py +0 -0
  357. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_migrate.py +0 -0
  358. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_stale.py +0 -0
  359. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_status.py +0 -0
  360. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_upgrade.py +0 -0
  361. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_context.py +0 -0
  362. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_e2e_pipeline.py +0 -0
  363. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_git.py +0 -0
  364. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_installer.py +0 -0
  365. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_integration.py +0 -0
  366. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_logging.py +0 -0
  367. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_manifest.py +0 -0
  368. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_rollback.py +0 -0
  369. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_scanner.py +0 -0
  370. {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_staleness.py +0 -0
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ # Hook devflow — promotion automatique vers ~/.claude/ sur checkout develop.
3
+ # Déclenché uniquement pour un checkout de branche (flag $3 = 1).
4
+
5
+ set -u
6
+
7
+ prev_ref=$1
8
+ new_ref=$2
9
+ branch_checkout=$3
10
+
11
+ # Ignore les checkout de fichiers (ex: git checkout -- file)
12
+ [ "$branch_checkout" = "1" ] || exit 0
13
+
14
+ # Ignore si la HEAD n'a pas changé (no-op rebase steps)
15
+ [ "$prev_ref" != "$new_ref" ] || exit 0
16
+
17
+ branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
18
+ [ "$branch" = "develop" ] || exit 0
19
+
20
+ if ! command -v devflow >/dev/null 2>&1; then
21
+ echo "[devflow hooks] devflow CLI introuvable dans le PATH — promotion ignorée." >&2
22
+ exit 0
23
+ fi
24
+
25
+ echo "[devflow hooks] checkout develop → devflow init --here --force"
26
+ devflow init --here --force
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+ # Hook devflow — promotion automatique vers ~/.claude/ sur merge develop.
3
+
4
+ set -u
5
+
6
+ branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
7
+ [ "$branch" = "develop" ] || exit 0
8
+
9
+ if ! command -v devflow >/dev/null 2>&1; then
10
+ echo "[devflow hooks] devflow CLI introuvable dans le PATH — promotion ignorée." >&2
11
+ exit 0
12
+ fi
13
+
14
+ echo "[devflow hooks] merge sur develop → devflow init --here --force"
15
+ devflow init --here --force
@@ -32,5 +32,8 @@ jobs:
32
32
  - name: Run pytest
33
33
  run: uv run pytest tests/ -v
34
34
 
35
+ - name: Check generated documentation
36
+ run: uv run devflow docs-sync --check
37
+
35
38
  - name: Run bash tests
36
39
  run: ./tests/run-tests.sh
@@ -12,3 +12,4 @@ venv/
12
12
  .DS_Store
13
13
  .coverage
14
14
  .devflow/
15
+ .state.lock
@@ -0,0 +1,10 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Ignored default folder with query files
7
+ /queries/
8
+ # Datasource local storage ignored files
9
+ /dataSources/
10
+ /dataSources.local.xml
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="JAVA_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
5
+ <content url="file://$MODULE_DIR$" />
6
+ <orderEntry type="inheritedJdk" />
7
+ <orderEntry type="sourceFolder" forTests="false" />
8
+ </component>
9
+ </module>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="corretto-21" project-jdk-type="JavaSDK">
4
+ <output url="file://$PROJECT_DIR$/out" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/devflow.iml" filepath="$PROJECT_DIR$/.idea/devflow.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,35 @@
1
+ # Specification Quality Checklist: Pipeline Auto-Execution
2
+
3
+ **Purpose**: Validate specification completeness and quality before proceeding to planning
4
+ **Created**: 2026-03-24
5
+ **Feature**: [spec.md](../spec.md)
6
+
7
+ ## Content Quality
8
+
9
+ - [x] No implementation details (languages, frameworks, APIs)
10
+ - [x] Focused on user value and business needs
11
+ - [x] Written for non-technical stakeholders
12
+ - [x] All mandatory sections completed
13
+
14
+ ## Requirement Completeness
15
+
16
+ - [x] No [NEEDS CLARIFICATION] markers remain
17
+ - [x] Requirements are testable and unambiguous
18
+ - [x] Success criteria are measurable
19
+ - [x] Success criteria are technology-agnostic (no implementation details)
20
+ - [x] All acceptance scenarios are defined
21
+ - [x] Edge cases are identified
22
+ - [x] Scope is clearly bounded
23
+ - [x] Dependencies and assumptions identified
24
+
25
+ ## Feature Readiness
26
+
27
+ - [x] All functional requirements have clear acceptance criteria
28
+ - [x] User scenarios cover primary flows
29
+ - [x] Feature meets measurable outcomes defined in Success Criteria
30
+ - [x] No implementation details leak into specification
31
+
32
+ ## Notes
33
+
34
+ - All items pass validation. Spec is ready for `/speckit.clarify` or `/speckit.plan`.
35
+ - La spec fait reference a des composants existants (fichiers, constantes) dans la section "Comportement existant" et "Impact sur l'existant" car c'est un projet brownfield — ceci est attendu pour documenter le delta, pas pour prescrire l'implementation.
@@ -0,0 +1,77 @@
1
+ # Contract: Orchestrateur /devflow
2
+
3
+ **Feature**: 027-pipeline-auto-execution
4
+ **Date**: 2026-03-25
5
+
6
+ ## Interface — commande `/devflow`
7
+
8
+ ### Arguments (mis a jour)
9
+
10
+ ```
11
+ /devflow <ISSUE_ID> [STEP] [--step] [--recover]
12
+ ```
13
+
14
+ | Argument | Type | Requis | Description |
15
+ |----------|------|--------|-------------|
16
+ | ISSUE_ID | string | oui | Identifiant de l'issue (ex: KS-123) |
17
+ | STEP | string | non | Force la reprise a une etape specifique |
18
+ | --step | flag | non | Mode une-etape-a-la-fois (desactive le chainage) |
19
+ | --recover | flag | non | Reconstruit state.json depuis les artefacts |
20
+
21
+ ### Comportement par defaut (chainage)
22
+
23
+ ```
24
+ ENTREE: ISSUE_ID
25
+ SORTIE: Pipeline execute jusqu'a un point d'arret naturel
26
+
27
+ 1. Creer/checkout branche git (si necessaire)
28
+ 2. Lire state.json → currentStep
29
+ 3. BOUCLE (max 15 iterations):
30
+ a. Si currentStep == "done" → afficher resume, SORTIE
31
+ b. Si etape optionnelle:
32
+ - mode fast → skip automatique
33
+ - mode full → demander a l'utilisateur
34
+ c. Executer /devflow.{currentStep} ISSUE_ID
35
+ d. Relire state.json
36
+ e. Verifier progression (anti-boucle)
37
+ f. Si review gate:
38
+ - PASS → continuer
39
+ - WARNING → afficher, demander confirmation
40
+ - BLOQUANT → ARRET
41
+ g. Si --step → ARRET
42
+ 4. SORTIE
43
+ ```
44
+
45
+ ### Points d'arret du chainage
46
+
47
+ | Condition | Action |
48
+ |-----------|--------|
49
+ | `currentStep == "done"` | Afficher resume final |
50
+ | Review gate BLOQUANT | Arreter, afficher les blockers |
51
+ | Review gate WARNING | Pause, demander confirmation |
52
+ | Etape optionnelle (mode full) | Pause, demander skip/execute |
53
+ | Flag `--step` | Arreter apres 1 etape |
54
+ | Compteur >= 15 | Arreter avec avertissement de securite |
55
+ | currentStep n'a pas progresse | Arreter avec erreur (anti-boucle) |
56
+
57
+ ## Interface — sync Linear (toutes commandes)
58
+
59
+ ### Protocole de non-regression
60
+
61
+ ```
62
+ ENTREE: issue_id, statut_cible (depuis STEP_LINEAR_MAPPING)
63
+ SORTIE: statut Linear mis a jour ou conserve
64
+
65
+ 1. get_issue(issue_id) → statut_actuel
66
+ 2. Si erreur (API down, issue inexistante) → warning, SORTIE sans modification
67
+ 3. index_actuel = STEP_LINEAR_ORDER.index(statut_actuel) ou -1 si inconnu
68
+ 4. index_cible = STEP_LINEAR_ORDER.index(statut_cible)
69
+ 5. Si index_actuel >= index_cible → log "conserve", SORTIE sans modification
70
+ 6. save_issue(issue_id, statut_cible)
71
+ ```
72
+
73
+ ### Cas limites
74
+
75
+ - Statut Linear inconnu (custom/non-mappe) : traiter index comme -1 → toujours mettre a jour
76
+ - API Linear indisponible : continuer sans sync, logger warning
77
+ - Issue inexistante : continuer sans sync, logger warning
@@ -0,0 +1,54 @@
1
+ # Data Model: Pipeline Auto-Execution
2
+
3
+ **Feature**: 027-pipeline-auto-execution
4
+ **Date**: 2026-03-25
5
+
6
+ ## Entites existantes (inchangees)
7
+
8
+ ### FeatureState (state.json)
9
+
10
+ Aucun changement de schema. Les champs existants suffisent :
11
+ - `currentStep` : etape courante (utilise par la boucle de chainage)
12
+ - `completedSteps` : etapes terminees (utilise pour detecter la progression)
13
+ - `skippedSteps` : etapes sautees (utilise pour l'auto-skip)
14
+ - `mode` : "full" ou "fast" (determine le comportement des etapes optionnelles)
15
+ - `reviewIterations` : compteur par gate (utilise pour les verdicts)
16
+
17
+ ### STEP_LINEAR_MAPPING (existant)
18
+
19
+ Inchange. Mapping complet etape → statut Linear.
20
+
21
+ ## Nouvelle constante
22
+
23
+ ### STEP_LINEAR_ORDER
24
+
25
+ **Fichier**: `src/devflow_cli/__init__.py`
26
+
27
+ Liste ordonnee des statuts Linear par progression croissante :
28
+
29
+ ```python
30
+ STEP_LINEAR_ORDER = [
31
+ "Backlog",
32
+ "Spec",
33
+ "Research",
34
+ "Plan",
35
+ "Tasks",
36
+ "Review",
37
+ "In Progress",
38
+ "Doc",
39
+ "Done",
40
+ ]
41
+ ```
42
+
43
+ **Usage**: Permet de comparer deux statuts Linear pour determiner si une mise a jour constituerait une regression.
44
+
45
+ **Regle**: `statut_actuel_index >= statut_cible_index` → ne pas mettre a jour.
46
+
47
+ **Coherence**: Doit etre maintenu en parallele avec `STEP_LINEAR_MAPPING`. Un assert de coherence sera ajoute (meme pattern que les asserts existants dans `__init__.py`).
48
+
49
+ ## Relations
50
+
51
+ ```
52
+ STEP_LINEAR_MAPPING --mappe vers--> STEP_LINEAR_ORDER (statuts)
53
+ FeatureState.currentStep --determine--> STEP_LINEAR_MAPPING[currentStep] --compare avec--> statut actuel Linear
54
+ ```
@@ -0,0 +1,187 @@
1
+ # Implementation Plan: Pipeline Auto-Execution
2
+
3
+ **Branch**: `027-pipeline-auto-execution` | **Date**: 2026-03-25 | **Spec**: [spec.md](spec.md)
4
+ **Input**: Feature specification from `/specs/027-pipeline-auto-execution/spec.md`
5
+
6
+ ## Summary
7
+
8
+ Trois ameliorations au pipeline devflow : (1) creation automatique de branche git par l'orchestrateur `/devflow`, (2) synchronisation Linear systematique a chaque transition d'etape, avec regle de non-regression du statut, (3) chainage automatique des etapes avec flag `--step` pour opt-out. Les modifications portent principalement sur les commandes markdown Claude Code (`commands/devflow.md` et `commands/devflow.clarify.md`) et marginalement sur le code Python CLI.
9
+
10
+ ## Technical Context
11
+
12
+ **Language/Version**: Python 3.11 (CLI) + Markdown (commandes Claude Code)
13
+ **Primary Dependencies**: Typer >=0.12, Rich >=13 (CLI), MCP Linear plugin (sync)
14
+ **Storage**: Fichiers locaux (state.json, markdown)
15
+ **Testing**: pytest (Python, 244+ tests), bash tests (41 tests via `tests/run-tests.sh`)
16
+ **Target Platform**: macOS/Linux CLI + extension Claude Code
17
+ **Project Type**: CLI + Claude Code extensions (hybride)
18
+ **Performance Goals**: N/A (outil CLI interactif)
19
+ **Constraints**: Retrocompatibilite avec state.json et commandes existantes
20
+ **Scale/Scope**: Utilisateur unique par session Claude Code
21
+
22
+ ## Constitution Check
23
+
24
+ *GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
25
+
26
+ | Principe | Statut | Justification |
27
+ |----------|--------|---------------|
28
+ | I. Spec-Driven Development | PASS | spec.md complete avec 4 US, 10 FR, 5 SC, clarifications resolues |
29
+ | II. Pipeline Sequentiel | PASS | Le chainage automatique respecte l'ordre du pipeline — il automatise le dispatch, pas la sequence |
30
+ | III. Gates de Review (NON-NEGOCIABLE) | PASS | Les review gates restent bloquantes : BLOQUANT = arret, WARNING = pause + confirmation, PASS = continue |
31
+ | IV. Retrocompatibilite | PASS | Changements additifs — commandes individuelles inchangees, `--step` preserve le comportement actuel |
32
+ | V. Simplicite (YAGNI) | PASS | Modifications minimales : 1 commande reecrite (devflow.md), 1 commande amendee (devflow.clarify.md), ajout de logique dans la commande existante sans nouvelle abstraction |
33
+ | VI. Testabilite | PASS | Tests Python pour la logique de non-regression Linear (compare_linear_status), tests bash inchanges |
34
+ | VII. Integration Linear | PASS | Cette feature renforce directement ce principe — sync systematique a chaque etape |
35
+
36
+ Aucune violation detectee. Pas de Complexity Tracking necessaire.
37
+
38
+ ## Project Structure
39
+
40
+ ### Documentation (this feature)
41
+
42
+ ```text
43
+ specs/027-pipeline-auto-execution/
44
+ ├── spec.md # Specification (complete)
45
+ ├── plan.md # This file
46
+ ├── research.md # Phase 0 output
47
+ ├── data-model.md # Phase 1 output
48
+ ├── contracts/ # Phase 1 output
49
+ │ └── orchestrator-contract.md
50
+ ├── quickstart.md # Phase 1 output
51
+ └── tasks.md # Phase 2 output (/speckit.tasks)
52
+ ```
53
+
54
+ ### Source Code (repository root)
55
+
56
+ ```text
57
+ commands/
58
+ ├── devflow.md # MODIFIE — chainage, branche git, --step
59
+ ├── devflow.clarify.md # MODIFIE — ajout sync Linear en fin d'etape
60
+ └── devflow.*.md # MODIFIE — ajout regle non-regression Linear
61
+
62
+ src/devflow_cli/
63
+ ├── __init__.py # MODIFIE — ajout STEP_LINEAR_ORDER pour comparaison
64
+ └── core/
65
+ └── git.py # INCHANGE — fonctions existantes reutilisees
66
+
67
+ tests/
68
+ ├── test_linear_order.py # NOUVEAU — tests comparaison statuts Linear
69
+ └── fixtures/ # INCHANGE
70
+ ```
71
+
72
+ **Structure Decision**: Projet existant brownfield. Aucun nouveau module ou package. Les modifications sont localisees dans les fichiers existants. Un seul nouveau fichier de test.
73
+
74
+ ## Phase 0: Research
75
+
76
+ ### Analyse des commandes existantes — couverture Linear sync
77
+
78
+ **Decision**: La quasi-totalite des commandes d'etape ont deja la sync Linear.
79
+
80
+ | Commande | Sync Linear | Statut cible | Action |
81
+ |----------|-------------|--------------|--------|
82
+ | devflow.spec | Oui | "Spec" | Ajouter regle non-regression |
83
+ | devflow.clarify | **Non** | "Spec" | **Ajouter sync** + non-regression |
84
+ | devflow.review-spec | Oui | "Review" | Ajouter regle non-regression |
85
+ | devflow.research | Oui | "Research" | Ajouter regle non-regression |
86
+ | devflow.plan | Oui | "Plan" | Ajouter regle non-regression |
87
+ | devflow.contracts | Oui | "Plan" | Ajouter regle non-regression |
88
+ | devflow.tasks | Oui | "Tasks" | Ajouter regle non-regression |
89
+ | devflow.review-tasks | Oui | "Review" | Ajouter regle non-regression |
90
+ | devflow.implement | Oui | "In Progress" | Ajouter regle non-regression |
91
+ | devflow.review-impl | Oui | "Review" | Ajouter regle non-regression |
92
+ | devflow.docs | Oui | "Doc" | Ajouter regle non-regression |
93
+ | devflow.md (transition done) | Non | "Done" | Ajouter sync finale |
94
+
95
+ **Rationale**: Seule `devflow.clarify` manque completement la sync. Les autres ont besoin uniquement de la regle de non-regression (comparer le statut actuel avant d'ecraser).
96
+
97
+ ### Ordre des statuts Linear pour la non-regression
98
+
99
+ **Decision**: Definir un ordre de progression des statuts Linear pour pouvoir comparer "plus avance" vs "moins avance".
100
+
101
+ Ordre derive du pipeline :
102
+ ```
103
+ Backlog < Spec < Research < Plan < Tasks < Review < In Progress < Doc < Done
104
+ ```
105
+
106
+ **Rationale**: Le mapping `STEP_LINEAR_MAPPING` mappe plusieurs etapes vers le meme statut Linear (ex: `clarify` et `spec` → "Spec", `review-spec` et `review-tasks` et `review-impl` → "Review"). L'ordre ci-dessus suit la progression logique. Un statut ne doit jamais regresser.
107
+
108
+ **Alternative rejetee**: Comparer par index d'etape devflow plutot que par statut Linear — rejete car les statuts Linear sont le domaine de reference pour Linear, et un utilisateur pourrait avoir change manuellement vers un statut custom.
109
+
110
+ ### Mecanisme de chainage dans les commandes Claude Code
111
+
112
+ **Decision**: Le chainage est implemente directement dans `commands/devflow.md` comme une boucle dans les instructions markdown. Apres l'execution d'une sous-commande, l'orchestrateur relit `state.json`, verifie la progression, et relance la commande suivante.
113
+
114
+ **Rationale**: Les commandes Claude Code sont des instructions en markdown interpetees par le modele. L'orchestrateur `/devflow` peut boucler en relisant l'etat apres chaque etape — pas besoin d'outil programmatique de chainage.
115
+
116
+ **Alternative rejetee**: Utiliser le Skill tool pour chainer — rejete car l'orchestrateur est deja le point d'entree et peut simplement boucler dans son propre workflow.
117
+
118
+ ## Phase 1: Design & Contracts
119
+
120
+ ### Data Model
121
+
122
+ Pas de nouvelles entites. Extension mineure de la constante `STEP_LINEAR_ORDER` dans `__init__.py` :
123
+
124
+ ```python
125
+ # Ordre de progression des statuts Linear (pour non-regression)
126
+ STEP_LINEAR_ORDER = [
127
+ "Backlog",
128
+ "Spec",
129
+ "Research",
130
+ "Plan",
131
+ "Tasks",
132
+ "Review",
133
+ "In Progress",
134
+ "Doc",
135
+ "Done",
136
+ ]
137
+ ```
138
+
139
+ Cette liste est utilisee par les commandes pour determiner si le statut Linear actuel est "plus avance" que le statut cible. Si oui, ne pas mettre a jour.
140
+
141
+ ### Contracts
142
+
143
+ #### Orchestrateur `/devflow` — nouveaux comportements
144
+
145
+ **Nouveau flag** : `--step`
146
+ - Syntaxe : `/devflow KS-123 --step`
147
+ - Effet : execute une seule etape puis s'arrete (comportement actuel)
148
+ - Par defaut (sans `--step`) : chainage automatique
149
+
150
+ **Branche git automatique** (avant etape 7 du workflow actuel) :
151
+ - Detecter le nom de la feature depuis le dossier `.specify/specs/`
152
+ - Si la branche correspondante n'existe pas → la creer et checkout
153
+ - Si elle existe → checkout
154
+ - Si changements non commites → avertir et demander confirmation
155
+
156
+ **Boucle de chainage** (remplace l'etape 7 actuelle) :
157
+ ```
158
+ TANT QUE currentStep != "done" ET compteur < 15 ET pas --step:
159
+ 1. Lire state.json → currentStep
160
+ 2. Si etape optionnelle en mode full → demander skip/execute
161
+ 3. Si etape optionnelle en mode fast → skip automatique
162
+ 4. Executer la commande correspondante
163
+ 5. Relire state.json
164
+ 6. Verifier que currentStep a progresse (anti-boucle)
165
+ 7. Si review gate → verifier verdict:
166
+ - PASS → continuer
167
+ - WARNING → afficher, demander confirmation
168
+ - BLOQUANT → STOP
169
+ 8. Incrementer compteur
170
+ ```
171
+
172
+ #### Regle de non-regression Linear (toutes commandes)
173
+
174
+ Instruction ajoutee a chaque commande qui fait un `save_issue` :
175
+
176
+ ```
177
+ Avant de mettre a jour le statut Linear :
178
+ 1. Lire le statut actuel de l'issue via get_issue
179
+ 2. Comparer avec le statut cible selon STEP_LINEAR_ORDER
180
+ 3. Si statut actuel >= statut cible → ne pas mettre a jour, logger "Statut Linear conserve (deja a [statut])"
181
+ 4. Si statut actuel < statut cible → mettre a jour normalement
182
+ 5. Si l'issue n'existe pas ou API indisponible → ignorer avec warning
183
+ ```
184
+
185
+ ### Quickstart
186
+
187
+ Voir `quickstart.md` genere separement.
@@ -0,0 +1,49 @@
1
+ # Quickstart: Pipeline Auto-Execution
2
+
3
+ **Feature**: 027-pipeline-auto-execution
4
+ **Date**: 2026-03-25
5
+
6
+ ## Utilisation
7
+
8
+ ### Lancer le pipeline complet (chainage automatique)
9
+
10
+ ```
11
+ /devflow KS-123
12
+ ```
13
+
14
+ Le pipeline s'execute automatiquement de l'etape courante jusqu'a la fin ou un point d'arret (review bloquante, interruption).
15
+
16
+ ### Mode une-etape-a-la-fois
17
+
18
+ ```
19
+ /devflow KS-123 --step
20
+ ```
21
+
22
+ Comportement identique a l'ancien : execute une seule etape puis s'arrete.
23
+
24
+ ### Forcer une etape specifique
25
+
26
+ ```
27
+ /devflow KS-123 plan --step
28
+ ```
29
+
30
+ Reprend a l'etape `plan` et s'arrete apres.
31
+
32
+ ## Ce qui change
33
+
34
+ | Avant | Apres |
35
+ |-------|-------|
36
+ | Relancer `/devflow KS-123` apres chaque etape | Une seule invocation suffit |
37
+ | Pas de branche git automatique | Branche creee/checkout au lancement |
38
+ | Sync Linear partielle | Sync a chaque transition d'etape |
39
+ | Skip manuel des etapes optionnelles | Proposition de skip avec justification |
40
+
41
+ ## Branche git
42
+
43
+ Au premier lancement, `/devflow` cree automatiquement la branche git correspondant a la feature et effectue le checkout. Si la branche existe deja, il bascule dessus.
44
+
45
+ Si des changements non commites sont detectes, un avertissement est affiche avant le changement de branche.
46
+
47
+ ## Synchronisation Linear
48
+
49
+ A chaque fin d'etape, le statut de l'issue Linear est mis a jour automatiquement. Le statut ne regresse jamais : si quelqu'un l'a avance manuellement dans Linear, il est conserve tel quel.
@@ -0,0 +1,41 @@
1
+ # Research: Pipeline Auto-Execution
2
+
3
+ **Feature**: 027-pipeline-auto-execution
4
+ **Date**: 2026-03-25
5
+
6
+ ## R1: Couverture Linear sync existante
7
+
8
+ **Decision**: Seule `devflow.clarify.md` manque la sync Linear. Toutes les autres commandes d'etape (spec, review-spec, research, plan, contracts, tasks, review-tasks, implement, review-impl, docs) ont deja une instruction `mcp__plugin_linear_linear__save_issue`.
9
+
10
+ **Rationale**: Verification exhaustive par grep sur tous les fichiers `commands/devflow.*.md`. L'effort de sync est minimal — 1 commande a completer, 11 commandes a amender avec la regle de non-regression.
11
+
12
+ **Alternatives considered**: Centraliser la sync dans l'orchestrateur uniquement — rejete car les commandes doivent rester autonomes (FR-010).
13
+
14
+ ## R2: Ordre de progression des statuts Linear
15
+
16
+ **Decision**: Definir `STEP_LINEAR_ORDER` comme constante Python dans `__init__.py` :
17
+ `Backlog < Spec < Research < Plan < Tasks < Review < In Progress < Doc < Done`
18
+
19
+ **Rationale**: Le mapping `STEP_LINEAR_MAPPING` associe plusieurs etapes devflow au meme statut Linear (ex: `clarify` et `spec` → "Spec"). Pour la regle de non-regression, il faut un ordre total sur les statuts Linear eux-memes. L'ordre ci-dessus suit la progression naturelle du pipeline.
20
+
21
+ **Alternatives considered**:
22
+ - Comparer par index d'etape devflow → rejete car un utilisateur pourrait avoir change le statut Linear manuellement vers un statut qui ne correspond a aucune etape devflow.
23
+ - Laisser la comparaison aux commandes markdown → rejete car error-prone, mieux vaut une constante centralisee.
24
+
25
+ ## R3: Mecanisme de chainage dans l'orchestrateur
26
+
27
+ **Decision**: Implementer le chainage comme une boucle dans les instructions markdown de `commands/devflow.md`. L'orchestrateur relit `state.json` apres chaque sous-commande et decide de continuer ou s'arreter.
28
+
29
+ **Rationale**: Les commandes Claude Code sont des instructions interpretees par le modele. L'orchestrateur peut boucler nativement — pas besoin d'API programmatique. Le modele lit state.json, execute la commande, relit state.json, etc.
30
+
31
+ **Alternatives considered**:
32
+ - Skill tool pour chainer les commandes → rejete car A-002 (incertitude sur le chainage programmatique) et complexite inutile.
33
+ - Modifier le code Python pour ajouter un mode "chain" a la CLI → rejete car le point d'entree principal est la commande slash, pas la CLI Python.
34
+
35
+ ## R4: Detection de branche dans l'orchestrateur
36
+
37
+ **Decision**: L'orchestrateur detecte le nom de la feature depuis le dossier `.specify/specs/` (ex: `027-pipeline-auto-execution`) et utilise ce nom comme nom de branche. Il reutilise les fonctions `branch_exists`, `create_branch`, `checkout_branch` de `core/git.py` via des commandes `git` bash equivalentes dans le markdown.
38
+
39
+ **Rationale**: Les commandes markdown n'ont pas acces direct au code Python. Elles utilisent des commandes bash (`git checkout -b`, `git status --porcelain`). Les fonctions Python existantes ont la meme logique.
40
+
41
+ **Alternatives considered**: Appeler la CLI `devflow feature` depuis l'orchestrateur → viable mais surcharge (cree aussi state.json et review-log.md qui existent deja). Mieux vaut juste gerer la branche git.