devflow-cli 6.1.0__tar.gz → 6.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/.gitignore +2 -0
  2. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/activity-contract.json +161 -0
  3. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/agent-execution.json +15 -0
  4. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/assessment.json +33 -0
  5. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/evidence/diff-inspection.json +30 -0
  6. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/evidence/regression-check.json +97 -0
  7. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/evidence/targeted-tests.json +29 -0
  8. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/implement-result.json +42 -0
  9. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/need.md +38 -0
  10. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence-result.json +53 -0
  11. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence.md +100 -0
  12. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/prepare-attempt.json +13 -0
  13. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/prepare-result.json +88 -0
  14. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/workflow-state.json +54 -0
  15. devflow_cli-6.1.1/.specify/specs/028-kks-411-feature-dir-ignored/worklog.md +70 -0
  16. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/CHANGELOG.md +8 -0
  17. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/FEEDBACK.md +113 -5
  18. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/PKG-INFO +1 -1
  19. devflow_cli-6.1.1/docs/releases/6.1.1.md +41 -0
  20. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/pyproject.toml +1 -1
  21. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/__init__.py +1 -1
  22. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/adaptive.py +2 -2
  23. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/adaptive_runner.py +2 -2
  24. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/remediation.py +2 -2
  25. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/worktree_snapshot.py +31 -3
  26. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_adaptive.py +22 -0
  27. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_worktree_snapshot.py +65 -0
  28. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/uv.lock +1 -1
  29. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.ai/mcp/mcp.json +0 -0
  30. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.analyze.md +0 -0
  31. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.checklist.md +0 -0
  32. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.clarify.md +0 -0
  33. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.constitution.md +0 -0
  34. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.implement.md +0 -0
  35. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.plan.md +0 -0
  36. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.specify.md +0 -0
  37. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.tasks.md +0 -0
  38. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.claude/commands/speckit.taskstoissues.md +0 -0
  39. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.githooks/post-checkout +0 -0
  40. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.githooks/post-merge +0 -0
  41. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.github/workflows/ci.yml +0 -0
  42. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.github/workflows/release.yml +0 -0
  43. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.gitignore +0 -0
  44. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/init-options.json +0 -0
  45. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/memory/constitution.md +0 -0
  46. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  47. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/scripts/bash/common.sh +0 -0
  48. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/scripts/bash/create-new-feature.sh +0 -0
  49. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/scripts/bash/setup-plan.sh +0 -0
  50. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/scripts/bash/update-agent-context.sh +0 -0
  51. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
  52. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
  53. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/data-model.md +0 -0
  54. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/plan.md +0 -0
  55. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/research.md +0 -0
  56. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/spec.md +0 -0
  57. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/001-cli-init-options/tasks.md +0 -0
  58. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
  59. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
  60. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
  61. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/data-model.md +0 -0
  62. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/plan.md +0 -0
  63. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/research.md +0 -0
  64. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/spec.md +0 -0
  65. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/002-cascade-regen/tasks.md +0 -0
  66. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
  67. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/data-model.md +0 -0
  68. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/plan.md +0 -0
  69. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
  70. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/research.md +0 -0
  71. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/spec.md +0 -0
  72. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/003-usecase-guides/tasks.md +0 -0
  73. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
  74. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
  75. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
  76. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/plan.md +0 -0
  77. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
  78. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/research.md +0 -0
  79. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/spec.md +0 -0
  80. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
  81. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
  82. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/plan.md +0 -0
  83. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
  84. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/research.md +0 -0
  85. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/spec.md +0 -0
  86. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/005-implement-subphases/tasks.md +0 -0
  87. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
  88. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
  89. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/data-model.md +0 -0
  90. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/plan.md +0 -0
  91. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
  92. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/research.md +0 -0
  93. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/spec.md +0 -0
  94. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/006-template-upgrade/tasks.md +0 -0
  95. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
  96. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/data-model.md +0 -0
  97. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/plan.md +0 -0
  98. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/quickstart.md +0 -0
  99. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/research.md +0 -0
  100. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/spec.md +0 -0
  101. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/007-project-documentation/tasks.md +0 -0
  102. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
  103. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/plan.md +0 -0
  104. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
  105. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/research.md +0 -0
  106. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/spec.md +0 -0
  107. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
  108. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
  109. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/plan.md +0 -0
  110. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
  111. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/research.md +0 -0
  112. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/spec.md +0 -0
  113. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/009-ci-pypi/tasks.md +0 -0
  114. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
  115. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
  116. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
  117. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/research.md +0 -0
  118. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
  119. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
  120. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
  121. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/plan.md +0 -0
  122. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/quickstart.md +0 -0
  123. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/research.md +0 -0
  124. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/spec.md +0 -0
  125. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/011-cursor-support/tasks.md +0 -0
  126. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
  127. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
  128. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
  129. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
  130. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
  131. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
  132. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/013-align-truth-sources/plan.md +0 -0
  133. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
  134. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/013-align-truth-sources/spec.md +0 -0
  135. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
  136. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
  137. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
  138. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
  139. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
  140. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
  141. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
  142. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
  143. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
  144. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
  145. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
  146. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
  147. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/016-harden-state-machine/plan.md +0 -0
  148. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/016-harden-state-machine/research.md +0 -0
  149. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/016-harden-state-machine/spec.md +0 -0
  150. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
  151. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
  152. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
  153. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
  154. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
  155. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
  156. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
  157. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
  158. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/data-model.md +0 -0
  159. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/plan.md +0 -0
  160. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/research.md +0 -0
  161. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/spec.md +0 -0
  162. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/019-quality-hardening/tasks.md +0 -0
  163. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
  164. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
  165. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/plan.md +0 -0
  166. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
  167. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/research.md +0 -0
  168. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/spec.md +0 -0
  169. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
  170. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
  171. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/021-review-iterations/plan.md +0 -0
  172. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/021-review-iterations/research.md +0 -0
  173. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/021-review-iterations/spec.md +0 -0
  174. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/021-review-iterations/tasks.md +0 -0
  175. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
  176. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/022-fix-regen-command/plan.md +0 -0
  177. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/022-fix-regen-command/research.md +0 -0
  178. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/022-fix-regen-command/spec.md +0 -0
  179. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
  180. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
  181. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/023-add-logging/plan.md +0 -0
  182. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/023-add-logging/research.md +0 -0
  183. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/023-add-logging/spec.md +0 -0
  184. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/023-add-logging/tasks.md +0 -0
  185. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
  186. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/024-validate-constants/plan.md +0 -0
  187. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/024-validate-constants/research.md +0 -0
  188. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/024-validate-constants/spec.md +0 -0
  189. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/024-validate-constants/tasks.md +0 -0
  190. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
  191. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/025-harden-tests/plan.md +0 -0
  192. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/025-harden-tests/research.md +0 -0
  193. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/025-harden-tests/spec.md +0 -0
  194. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/025-harden-tests/tasks.md +0 -0
  195. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +0 -0
  196. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +0 -0
  197. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/data-model.md +0 -0
  198. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/plan.md +0 -0
  199. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/quickstart.md +0 -0
  200. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/research.md +0 -0
  201. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/spec.md +0 -0
  202. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/specs/027-pipeline-auto-execution/tasks.md +0 -0
  203. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/agent-file-template.md +0 -0
  204. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/checklist-template.md +0 -0
  205. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/constitution-template.md +0 -0
  206. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/plan-template.md +0 -0
  207. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/spec-template-brownfield.md +0 -0
  208. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/spec-template-greenfield.md +0 -0
  209. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/spec-template-microservices.md +0 -0
  210. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/spec-template.md +0 -0
  211. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/.specify/templates/tasks-template.md +0 -0
  212. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/CLAUDE.md +0 -0
  213. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/CONTRIBUTING.md +0 -0
  214. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/LICENSE +0 -0
  215. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/README.md +0 -0
  216. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.context.md +0 -0
  217. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.extension.md +0 -0
  218. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.init.md +0 -0
  219. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.md +0 -0
  220. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.regen.md +0 -0
  221. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/commands/devflow.status.md +0 -0
  222. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/activity-contracts.md +0 -0
  223. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/adr/0001-v4-workflow-compatibility.md +0 -0
  224. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/adr/0002-v5-rupture-and-provenance.md +0 -0
  225. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/cli-reference.md +0 -0
  226. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/commands-reference.md +0 -0
  227. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/cursor-guide.md +0 -0
  228. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/guides/brownfield.md +0 -0
  229. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/guides/greenfield.md +0 -0
  230. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/guides/microservices.md +0 -0
  231. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/index.md +0 -0
  232. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/pipeline-reference.generated.md +0 -0
  233. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/pipeline.md +0 -0
  234. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.0.md +0 -0
  235. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.1.md +0 -0
  236. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.3.md +0 -0
  237. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.4.md +0 -0
  238. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.5.md +0 -0
  239. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/4.0.6.md +0 -0
  240. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/5.0.0.md +0 -0
  241. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/6.0.0.md +0 -0
  242. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/releases/6.1.0.md +0 -0
  243. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/spec-driven.md +0 -0
  244. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/v5-decisions.md +0 -0
  245. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/docs/v6-decisions.md +0 -0
  246. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  247. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/extensions/catalog.community.json +0 -0
  248. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/extensions/catalog.json +0 -0
  249. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/extensions/template/example-command.md +0 -0
  250. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/extensions/template/example-extension.json +0 -0
  251. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/scripts/check_release.py +0 -0
  252. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/adapters/__init__.py +0 -0
  253. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/adapters/agents.py +0 -0
  254. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/adapters/linear.py +0 -0
  255. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/cli.py +0 -0
  256. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/__init__.py +0 -0
  257. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/assess.py +0 -0
  258. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/check.py +0 -0
  259. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/context.py +0 -0
  260. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/docs_sync.py +0 -0
  261. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/export_cmd.py +0 -0
  262. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/extension.py +0 -0
  263. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/feature.py +0 -0
  264. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/hooks_cmd.py +0 -0
  265. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/init_cmd.py +0 -0
  266. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/linear.py +0 -0
  267. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/stale.py +0 -0
  268. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/status.py +0 -0
  269. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/traceability.py +0 -0
  270. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/upgrade_cmd.py +0 -0
  271. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/usage.py +0 -0
  272. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/commands/verify.py +0 -0
  273. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/__init__.py +0 -0
  274. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/activity_contracts.py +0 -0
  275. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/adaptive_workflow.py +0 -0
  276. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/agent_failure.py +0 -0
  277. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/assessment.py +0 -0
  278. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/automatic_evidence.py +0 -0
  279. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/catalog.py +0 -0
  280. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/contract_schemas.py +0 -0
  281. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/docgen.py +0 -0
  282. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/git.py +0 -0
  283. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/hooks.py +0 -0
  284. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/installer.py +0 -0
  285. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/manifest.py +0 -0
  286. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/omissions.py +0 -0
  287. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/operational.py +0 -0
  288. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/redaction.py +0 -0
  289. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/scanner.py +0 -0
  290. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/staleness.py +0 -0
  291. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/telemetry.py +0 -0
  292. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/traceability.py +0 -0
  293. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/validation_approvals.py +0 -0
  294. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/validators.py +0 -0
  295. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/verification.py +0 -0
  296. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/waivers.py +0 -0
  297. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/core/worklog.py +0 -0
  298. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/schemas/activity-contract-v3.schema.json +0 -0
  299. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/schemas/activity-result-v1.schema.json +0 -0
  300. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/schemas/assessment-v3.schema.json +0 -0
  301. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/schemas/workflow-state-v4.schema.json +0 -0
  302. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/utils/__init__.py +0 -0
  303. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/utils/console.py +0 -0
  304. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/utils/logging.py +0 -0
  305. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/utils/paths.py +0 -0
  306. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/src/devflow_cli/utils/strings.py +0 -0
  307. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/agent-context-template.md +0 -0
  308. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/constitution-template.md +0 -0
  309. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts/README-template.md +0 -0
  310. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts/api-template.md +0 -0
  311. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts/components-template.md +0 -0
  312. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts/interfaces-template.md +0 -0
  313. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts/services-template.md +0 -0
  314. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/contracts-template.md +0 -0
  315. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/data-model-template.md +0 -0
  316. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/devflow-hooks-template.yml +0 -0
  317. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/extension-manifest-template.json +0 -0
  318. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/plan-template.md +0 -0
  319. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/quickstart-template.md +0 -0
  320. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/research-template.md +0 -0
  321. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/spec-template.md +0 -0
  322. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/templates/tasks-template.md +0 -0
  323. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/conftest.py +0 -0
  324. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/fixtures/agents/mock-agent.md +0 -0
  325. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/fixtures/commands/mock-command.md +0 -0
  326. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/fixtures/mock-catalog.json +0 -0
  327. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/run-tests.sh +0 -0
  328. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test-helpers.sh +0 -0
  329. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test-template-variants.sh +0 -0
  330. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_activity_contracts.py +0 -0
  331. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_adaptive_runner.py +0 -0
  332. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_adaptive_workflow.py +0 -0
  333. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_agent_adapters.py +0 -0
  334. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_agent_failure.py +0 -0
  335. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_assessment.py +0 -0
  336. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_automatic_evidence.py +0 -0
  337. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_bash_runner.py +0 -0
  338. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_catalog.py +0 -0
  339. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_assess.py +0 -0
  340. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_check.py +0 -0
  341. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_context.py +0 -0
  342. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_docs_sync.py +0 -0
  343. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_extension.py +0 -0
  344. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_feature.py +0 -0
  345. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_hooks.py +0 -0
  346. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_init.py +0 -0
  347. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_linear.py +0 -0
  348. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_stale.py +0 -0
  349. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_status.py +0 -0
  350. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_traceability.py +0 -0
  351. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_upgrade.py +0 -0
  352. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_cmd_verify.py +0 -0
  353. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_constants.py +0 -0
  354. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_context.py +0 -0
  355. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_contract_schemas.py +0 -0
  356. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_docgen.py +0 -0
  357. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_git.py +0 -0
  358. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_hooks.py +0 -0
  359. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_installer.py +0 -0
  360. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_integration.py +0 -0
  361. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_linear_adapter.py +0 -0
  362. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_linear_order.py +0 -0
  363. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_logging.py +0 -0
  364. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_manifest.py +0 -0
  365. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_omissions.py +0 -0
  366. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_paths.py +0 -0
  367. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_paths_project_root.py +0 -0
  368. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_release.py +0 -0
  369. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_remediation.py +0 -0
  370. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_scanner.py +0 -0
  371. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_staleness.py +0 -0
  372. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_telemetry.py +0 -0
  373. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_traceability.py +0 -0
  374. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_validators.py +0 -0
  375. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_verification.py +0 -0
  376. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_version.py +0 -0
  377. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_waivers.py +0 -0
  378. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_wheel_adaptive_acceptance.py +0 -0
  379. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_wheel_install.py +0 -0
  380. {devflow_cli-6.1.0 → devflow_cli-6.1.1}/tests/test_worklog.py +0 -0
@@ -0,0 +1,2 @@
1
+ # Traces brutes d'agent : elles peuvent contenir le contenu des fichiers lus.
2
+ *.raw.txt
@@ -0,0 +1,161 @@
1
+ {
2
+ "schemaVersion": 3,
3
+ "contractId": "KKS-411:standard:implement:v3",
4
+ "issueId": "KKS-411",
5
+ "profile": "standard",
6
+ "activity": "implement",
7
+ "objective": "Observer le dossier de feature meme quand git l'ignore (retour B1)",
8
+ "featurePath": ".specify/specs/028-kks-411-feature-dir-ignored",
9
+ "inputs": [
10
+ ".specify/specs/028-kks-411-feature-dir-ignored/need.md",
11
+ ".specify/specs/028-kks-411-feature-dir-ignored/assessment.json",
12
+ ".specify/specs/028-kks-411-feature-dir-ignored/workflow-state.json",
13
+ ".specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence.md",
14
+ ".specify/specs/028-kks-411-feature-dir-ignored/prepare-result.json"
15
+ ],
16
+ "allowedActions": [
17
+ "read",
18
+ "write",
19
+ "execute"
20
+ ],
21
+ "constraints": [
22
+ "Respecter strictement l'objectif et le perimetre du contrat.",
23
+ "Le besoin de reference est .specify/specs/028-kks-411-feature-dir-ignored/need.md ; en cas d'ecart avec objective, il fait foi.",
24
+ "Preserver les changements utilisateur sans rapport avec cette activite.",
25
+ "Ne pas modifier state.json, workflow-state.json ou assessment.json.",
26
+ "Ne pas creer de commit et ne pas changer de branche.",
27
+ "Signaler tout blocage au lieu de contourner une validation.",
28
+ "Dans checks, status vaut passed si et seulement si exitCode vaut 0. Une commande dont l'absence de resultat constitue le succes attendu doit etre declaree failed, ou remplacee par une commande qui renvoie 0 en cas de succes.",
29
+ "Donner un id stable a chaque objectif de check. Si un check echoue puis est corrige et relance pour le meme objectif, reutiliser cet id : seule la derniere tentative fait foi ; signaler dans remainingRisks toute instabilite encore pertinente.",
30
+ "Limiter les modifications source au changement demande.",
31
+ "Suivre les conventions et les tests existants du depot.",
32
+ "Les preuves de gate sont produites par l'activite locale verify, pas par implement.",
33
+ "Ne pas retourner blocked uniquement parce qu'une validation d'integration exige un service externe inaccessible depuis le sandbox de l'agent (Docker, base de donnees ou reseau) : executer les autres controles, declarer le check echoue et le risque restant, puis retourner completed si le code est coherent et verifiable par verify.",
34
+ "Prendre en compte la preuve de pre-vol archivee et ne pas la presenter comme absente."
35
+ ],
36
+ "completionCriteria": [
37
+ "Le changement demande est implemente dans le depot.",
38
+ "Les fichiers modifies sont listes dans le resultat.",
39
+ "Les risques ou blocages restants sont explicites."
40
+ ],
41
+ "requiredEvidence": [],
42
+ "expectedOutput": {
43
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
44
+ "$id": "https://devflow.dev/schemas/activity-result/v1",
45
+ "title": "Devflow Activity Result v1",
46
+ "type": "object",
47
+ "required": [
48
+ "schemaVersion",
49
+ "contractId",
50
+ "status",
51
+ "summary",
52
+ "changedFiles",
53
+ "checks",
54
+ "evidence",
55
+ "remainingRisks",
56
+ "blockers"
57
+ ],
58
+ "properties": {
59
+ "schemaVersion": {
60
+ "type": "integer",
61
+ "const": 1
62
+ },
63
+ "contractId": {
64
+ "type": "string",
65
+ "minLength": 1
66
+ },
67
+ "status": {
68
+ "type": "string",
69
+ "enum": [
70
+ "completed",
71
+ "blocked"
72
+ ]
73
+ },
74
+ "summary": {
75
+ "type": "string",
76
+ "minLength": 1
77
+ },
78
+ "changedFiles": {
79
+ "type": "array",
80
+ "items": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ }
84
+ },
85
+ "checks": {
86
+ "type": "array",
87
+ "items": {
88
+ "type": "object",
89
+ "required": [
90
+ "command",
91
+ "exitCode",
92
+ "status"
93
+ ],
94
+ "properties": {
95
+ "id": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ },
99
+ "command": {
100
+ "type": "string",
101
+ "minLength": 1
102
+ },
103
+ "exitCode": {
104
+ "type": "integer"
105
+ },
106
+ "status": {
107
+ "type": "string",
108
+ "enum": [
109
+ "passed",
110
+ "failed"
111
+ ]
112
+ }
113
+ },
114
+ "additionalProperties": false
115
+ }
116
+ },
117
+ "evidence": {
118
+ "type": "array",
119
+ "items": {
120
+ "type": "object",
121
+ "required": [
122
+ "id",
123
+ "outcome",
124
+ "report"
125
+ ],
126
+ "properties": {
127
+ "id": {
128
+ "type": "string",
129
+ "minLength": 1
130
+ },
131
+ "outcome": {
132
+ "type": "string",
133
+ "enum": [
134
+ "passed",
135
+ "failed"
136
+ ]
137
+ },
138
+ "report": {
139
+ "type": "string",
140
+ "minLength": 1
141
+ }
142
+ },
143
+ "additionalProperties": false
144
+ }
145
+ },
146
+ "remainingRisks": {
147
+ "type": "array",
148
+ "items": {
149
+ "type": "string"
150
+ }
151
+ },
152
+ "blockers": {
153
+ "type": "array",
154
+ "items": {
155
+ "type": "string"
156
+ }
157
+ }
158
+ },
159
+ "additionalProperties": false
160
+ }
161
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "runId": "dc12e7fd-4e0f-464d-a8bd-c114801034c3",
4
+ "agent": "claude",
5
+ "activity": "implement",
6
+ "returnCode": 0,
7
+ "durationSeconds": 189.276,
8
+ "finalOutputStatus": "present",
9
+ "finalOutputBytes": 3228,
10
+ "finalOutputDiagnostic": "validated",
11
+ "sessionId": null,
12
+ "timedOut": false,
13
+ "worktreeChanged": true,
14
+ "worktreeChangedFileCount": 6
15
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": 3,
3
+ "issueId": "KKS-411",
4
+ "recommendedProfile": "standard",
5
+ "selectedProfile": "standard",
6
+ "confidence": "medium",
7
+ "signals": {
8
+ "scope": "multiple",
9
+ "ambiguity": "low",
10
+ "risk": "medium",
11
+ "contractChange": false,
12
+ "dataOrSecurity": false
13
+ },
14
+ "reasons": [
15
+ "plusieurs composants sont affectes",
16
+ "le risque d'impact est modere"
17
+ ],
18
+ "activities": [
19
+ "assess",
20
+ "prepare",
21
+ "preflight-evidence",
22
+ "implement",
23
+ "verify",
24
+ "done"
25
+ ],
26
+ "requiredEvidence": [
27
+ "targeted-tests",
28
+ "regression-check",
29
+ "diff-inspection"
30
+ ],
31
+ "assessedAt": "2026-09-28T18:11:52Z",
32
+ "summary": "Observer le dossier de feature meme quand git l'ignore (retour B1)"
33
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "diff-inspection",
4
+ "outcome": "passed",
5
+ "generatedAt": "2026-09-28T18:48:40Z",
6
+ "changedFiles": [
7
+ "src/devflow_cli/commands/adaptive.py",
8
+ "src/devflow_cli/core/adaptive_runner.py",
9
+ "src/devflow_cli/core/remediation.py",
10
+ "src/devflow_cli/core/worktree_snapshot.py",
11
+ "tests/test_cmd_adaptive.py",
12
+ "tests/test_worktree_snapshot.py"
13
+ ],
14
+ "findings": [],
15
+ "gitDiffCheck": {
16
+ "id": "AUTO-DIFF",
17
+ "command": [
18
+ "git",
19
+ "diff",
20
+ "--check"
21
+ ],
22
+ "blocking": true,
23
+ "returncode": 0,
24
+ "succeeded": true,
25
+ "timedOut": false,
26
+ "workingDirectory": ".",
27
+ "stdout": "",
28
+ "stderr": ""
29
+ }
30
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "regression-check",
4
+ "outcome": "passed",
5
+ "startedAt": "2026-09-28T18:47:16Z",
6
+ "completedAt": "2026-09-28T18:48:39Z",
7
+ "commands": [
8
+ {
9
+ "id": "AUTO-REGRESSION-PYTHON",
10
+ "command": [
11
+ "python",
12
+ "-m",
13
+ "compileall",
14
+ "-q",
15
+ "src"
16
+ ],
17
+ "blocking": true,
18
+ "returncode": 0,
19
+ "succeeded": true,
20
+ "timedOut": false,
21
+ "workingDirectory": ".",
22
+ "stdout": "",
23
+ "stderr": ""
24
+ },
25
+ {
26
+ "id": "PREP-targeted-tests",
27
+ "command": [
28
+ "uv",
29
+ "run",
30
+ "pytest",
31
+ "-q",
32
+ "tests/test_worktree_snapshot.py",
33
+ "tests/test_adaptive_runner.py",
34
+ "tests/test_cmd_adaptive.py",
35
+ "tests/test_remediation.py",
36
+ "tests/test_automatic_evidence.py"
37
+ ],
38
+ "blocking": true,
39
+ "returncode": 0,
40
+ "succeeded": true,
41
+ "timedOut": false,
42
+ "workingDirectory": ".",
43
+ "stdout": "........................................................................ [ 36%]\n........................................................................ [ 73%]\n................................................... [100%]\n195 passed in 28.30s\n",
44
+ "stderr": ""
45
+ },
46
+ {
47
+ "id": "PREP-regression-check",
48
+ "command": [
49
+ "uv",
50
+ "run",
51
+ "pytest",
52
+ "-q"
53
+ ],
54
+ "blocking": true,
55
+ "returncode": 0,
56
+ "succeeded": true,
57
+ "timedOut": false,
58
+ "workingDirectory": ".",
59
+ "stdout": "........................................................................ [ 10%]\n........................................................................ [ 21%]\n........................................................................ [ 31%]\n........................................................................ [ 42%]\n........................................................................ [ 52%]\n........................................................................ [ 63%]\n........................................................................ [ 73%]\n........................................................................ [ 84%]\n........................................................................ [ 94%]\n..................................... [100%]\n685 passed in 41.67s\n",
60
+ "stderr": ""
61
+ },
62
+ {
63
+ "id": "PREP-docs-sync",
64
+ "command": [
65
+ "uv",
66
+ "run",
67
+ "devflow",
68
+ "docs-sync",
69
+ "--check"
70
+ ],
71
+ "blocking": true,
72
+ "returncode": 0,
73
+ "succeeded": true,
74
+ "timedOut": false,
75
+ "workingDirectory": ".",
76
+ "stdout": "[OK] Documentation déjà synchronisée.\n",
77
+ "stderr": ""
78
+ },
79
+ {
80
+ "id": "PREP-diff-inspection",
81
+ "command": [
82
+ "git",
83
+ "diff",
84
+ "--stat"
85
+ ],
86
+ "blocking": false,
87
+ "returncode": 0,
88
+ "succeeded": true,
89
+ "timedOut": false,
90
+ "workingDirectory": ".",
91
+ "stdout": " src/devflow_cli/commands/adaptive.py | 4 +-\n src/devflow_cli/core/adaptive_runner.py | 4 +-\n src/devflow_cli/core/remediation.py | 4 +-\n src/devflow_cli/core/worktree_snapshot.py | 34 ++++++++++++++--\n tests/test_cmd_adaptive.py | 22 +++++++++++\n tests/test_worktree_snapshot.py | 65 +++++++++++++++++++++++++++++++\n 6 files changed, 124 insertions(+), 9 deletions(-)\n",
92
+ "stderr": ""
93
+ }
94
+ ],
95
+ "worktreeMutations": [],
96
+ "waiversApplied": []
97
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "targeted-tests",
4
+ "outcome": "passed",
5
+ "startedAt": "2026-09-28T18:47:16Z",
6
+ "completedAt": "2026-09-28T18:48:39Z",
7
+ "commands": [
8
+ {
9
+ "id": "AUTO-PYTHON",
10
+ "command": [
11
+ "uv",
12
+ "run",
13
+ "pytest",
14
+ "-q",
15
+ "tests/test_cmd_adaptive.py",
16
+ "tests/test_worktree_snapshot.py"
17
+ ],
18
+ "blocking": true,
19
+ "returncode": 0,
20
+ "succeeded": true,
21
+ "timedOut": false,
22
+ "workingDirectory": ".",
23
+ "stdout": "........................................................................ [ 84%]\n............. [100%]\n85 passed in 10.75s\n",
24
+ "stderr": ""
25
+ }
26
+ ],
27
+ "worktreeMutations": [],
28
+ "waiversApplied": []
29
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "contractId": "KKS-411:standard:implement:v3",
4
+ "status": "completed",
5
+ "summary": "snapshot_worktree() accepte désormais un paramètre optionnel feature_dir (None par défaut, comportement strictement identique). Quand il est fourni, la fonction lance aussi `git ls-files --others --ignored --exclude-standard -z -- <sous-arbre de la feature>` et fusionne ces chemins, sauf les traces *.raw.txt. Elle ne fait rien de plus si le dossier est hors de la racine du projet. Le paramètre est passé seulement aux appels qui décident de l'observation d'une activité : commands/adaptive.py (captures avant et après l'agent), adaptive_runner.py (dérive et fiche de tentative) et remediation.py (reprise et _still_modified). automatic_evidence.py n'a pas changé. Six tests unitaires ont été ajoutés dans test_worktree_snapshot.py : dossier ignoré observé, invisible sans paramètre, fichiers ignorés hors feature (y compris une autre feature) toujours invisibles, *.raw.txt écarté, dossier non ignoré inchangé, dossier hors racine sans effet. Un test de bout en bout a été ajouté dans test_cmd_adaptive.py : en profil standard, dans un dépôt qui ignore /.specify/*, prepare puis preflight-evidence passent. Sans le correctif, ce test échoue bien avec artifact-files-mismatch (vérifié en retirant temporairement le changement dans adaptive.py, puis en le restaurant).",
6
+ "changedFiles": [
7
+ "src/devflow_cli/core/worktree_snapshot.py",
8
+ "src/devflow_cli/commands/adaptive.py",
9
+ "src/devflow_cli/core/adaptive_runner.py",
10
+ "src/devflow_cli/core/remediation.py",
11
+ "tests/test_worktree_snapshot.py",
12
+ "tests/test_cmd_adaptive.py"
13
+ ],
14
+ "checks": [
15
+ {
16
+ "id": "targeted-tests",
17
+ "command": "uv run pytest -q tests/test_worktree_snapshot.py tests/test_adaptive_runner.py tests/test_cmd_adaptive.py tests/test_remediation.py tests/test_automatic_evidence.py",
18
+ "exitCode": 0,
19
+ "status": "passed"
20
+ },
21
+ {
22
+ "id": "regression-check",
23
+ "command": "uv run pytest -q",
24
+ "exitCode": 0,
25
+ "status": "passed"
26
+ },
27
+ {
28
+ "id": "docs-sync",
29
+ "command": "uv run devflow docs-sync --check",
30
+ "exitCode": 0,
31
+ "status": "passed"
32
+ }
33
+ ],
34
+ "evidence": [],
35
+ "remainingRisks": [
36
+ "Le filtrage des traces repose sur une constante locale, TRACE_SUFFIX = \".raw.txt\", dans worktree_snapshot.py. Elle double la convention de TRACE_IGNORE_RULE (commands/feature.py:41). Elle n'est pas importée pour éviter une dépendance de core vers commands. Si la convention change, les deux doivent évoluer ensemble.",
37
+ "Dans un dossier de feature ignoré, tout autre fichier ignoré que Devflow écrirait pendant la fenêtre de l'agent (hors *.raw.txt) entrerait dans observed. Le test de bout en bout standard (prepare puis preflight-evidence) n'en montre aucun. Les profils deep et critical (spec, plan, tasks…) n'ont pas été rejoués de bout en bout sur un dossier ignoré.",
38
+ "Les fiches de tentative enregistrées avant le correctif contiennent des empreintes sans les fichiers ignorés. Leur reprise sur un dépôt qui ignore .specify n'a pas été testée.",
39
+ "La régression complète (685 tests) a été lancée sous la forme `uv run pytest -q | tail`. Le code de sortie relevé est donc celui du pipe, mais la sortie indique 685 passed et aucun échec."
40
+ ],
41
+ "blockers": []
42
+ }
@@ -0,0 +1,38 @@
1
+ # KKS-411 — Observer le dossier de feature même quand git l'ignore
2
+
3
+ Source : retour B1 de `FEEDBACK.md` (commit `0581823`).
4
+
5
+ ## Problème
6
+
7
+ `snapshot_worktree()` (`src/devflow_cli/core/worktree_snapshot.py:31`) liste les fichiers non
8
+ suivis avec `git ls-files --others --exclude-standard`, qui écarte les fichiers ignorés. Quand un
9
+ projet ignore `.specify/*` (cas de k-budget, dépôt public), le dossier de la feature est
10
+ invisible : `observed` reste vide et le contrôle de `adaptive_runner.py:490`
11
+ (`declared == [expected] and observed_with_carried == [expected]`) échoue toujours avec
12
+ `artifact-files-mismatch … observes=[]`.
13
+
14
+ Activités touchées : toutes celles de `DOCUMENT_ARTIFACTS` (risk-assessment, spec, research,
15
+ contracts, plan, tasks, preflight-evidence). Aucun contournement pour les six premières
16
+ (`complete` les refuse, `reconcile` repart d'une empreinte vide). Les profils `deep` et
17
+ `critical` sont bloqués ; `quick` et `standard` ne passent que par un `complete` manuel de
18
+ `preflight-evidence`.
19
+
20
+ Reproduit : dépôt ignorant `/.specify/*`, écriture de `.specify/specs/KKS-1/spec.md` et `src.py`
21
+ → `changed_paths()` rend `['src.py']`.
22
+
23
+ ## Attendu
24
+
25
+ - Les artefacts documentaires écrits dans un dossier de feature ignoré par git sont observés, et
26
+ l'activité passe.
27
+ - L'ajout est limité au dossier de la feature : `snapshot_worktree()` sert aussi
28
+ `automatic_evidence.py`, `remediation.py` et `commands/adaptive.py`, dont le comportement ne
29
+ doit pas changer pour le reste du dépôt.
30
+ - Les fichiers que Devflow écrit lui-même dans ce dossier (`*-result.json`, `*-result.raw.txt`,
31
+ `worklog.md`…) n'entrent pas dans `observed` au point de casser l'égalité stricte avec
32
+ `[expected]`. Point d'attention : le `.gitignore` du dossier de feature ignore déjà `*.raw.txt`.
33
+
34
+ ## Tests attendus
35
+
36
+ - Dossier de feature ignoré : activité documentaire acceptée.
37
+ - Dossier de feature non ignoré : comportement inchangé.
38
+ - Fichiers ignorés hors du dossier de la feature : toujours invisibles.
@@ -0,0 +1,53 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "contractId": "KKS-411:standard:preflight-evidence:v3",
4
+ "status": "completed",
5
+ "summary": "J'ai rédigé preflight-evidence.md. J'ai reproduit le défaut dans un dépôt jetable qui ignore /.specify/* : changed_paths rend ['src.py'] et l'artefact spec.md n'est pas vu. J'ai aussi validé l'approche : git ls-files --others --ignored --exclude-standard -- <sous-arbre> ne voit que le dossier de la feature, sans les fichiers ignorés ailleurs. Il remonte en revanche *.raw.txt et le .gitignore du dossier, qu'il faudra écarter. J'ai recensé les appelants de snapshot_worktree() et vérifié l'état de référence : tests/test_worktree_snapshot.py passe (8 tests).",
6
+ "changedFiles": [
7
+ ".specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence.md"
8
+ ],
9
+ "checks": [
10
+ {
11
+ "id": "repro-snapshot-ignored-feature",
12
+ "command": "uv run python scratchpad/repro.py",
13
+ "exitCode": 0,
14
+ "status": "passed"
15
+ },
16
+ {
17
+ "id": "approach-ls-files-ignored-subtree",
18
+ "command": "git ls-files --others --ignored --exclude-standard -- .specify/specs/KKS-1",
19
+ "exitCode": 0,
20
+ "status": "passed"
21
+ },
22
+ {
23
+ "id": "baseline-worktree-snapshot",
24
+ "command": "uv run pytest -q tests/test_worktree_snapshot.py",
25
+ "exitCode": 0,
26
+ "status": "passed"
27
+ }
28
+ ],
29
+ "evidence": [
30
+ {
31
+ "id": "defect-reproduced",
32
+ "outcome": "passed",
33
+ "report": "Dépôt temporaire qui ignore /.specify/*. On écrit .specify/specs/KKS-1/spec.md et src.py. changed_paths(before, after) rend ['src.py'] : le défaut B1 est confirmé."
34
+ },
35
+ {
36
+ "id": "approach-feasible",
37
+ "outcome": "passed",
38
+ "report": "ls-files --ignored limité au sous-arbre de la feature liste .gitignore, a.raw.txt et spec.md. build/out, ignoré hors du sous-arbre, n'apparaît pas."
39
+ },
40
+ {
41
+ "id": "baseline",
42
+ "outcome": "passed",
43
+ "report": "tests/test_worktree_snapshot.py : 8 tests passent."
44
+ }
45
+ ],
46
+ "remainingRisks": [
47
+ "Le rejet artifact-files-mismatch de bout en bout n'a pas été rejoué. Il est déduit du code.",
48
+ "--ignored fait aussi remonter le .gitignore du dossier de feature et les *.raw.txt. Il faut filtrer les traces, et le test de bout en bout doit confirmer que le .gitignore ne compte pas parmi les fichiers modifiés.",
49
+ "Les fiches de tentative enregistrées avant le correctif ont des empreintes sans les fichiers ignorés. Leur reprise n'a pas été testée.",
50
+ "La suite complète n'a pas été relancée ici. La référence de 678 tests vient de l'activité prepare."
51
+ ],
52
+ "blockers": []
53
+ }
@@ -0,0 +1,100 @@
1
+ # Preflight evidence — KKS-411
2
+
3
+ Objectif : observer le dossier de feature même quand git l'ignore (retour B1).
4
+ Capture faite le 2026-09-28 sur la branche `028-kks-411-feature-dir-ignored`, HEAD `0581823`, git 2.50.1.
5
+
6
+ ## Faits observés
7
+
8
+ 1. **Défaut reproduit.** Dans un dépôt jetable qui ignore `/.specify/*`, on écrit
9
+ `.specify/specs/KKS-1/spec.md` et `src.py` entre deux appels à `snapshot_worktree()`.
10
+ Résultat : `changed_paths` = `['src.py']` et les fichiers de la capture finale = `['src.py']`.
11
+ L'artefact de feature est invisible. C'est ce qui vide `observed` et déclenche
12
+ `artifact-files-mismatch` dans le contrôle strict de `adaptive_runner.py` (l. 480-488 :
13
+ `declared == [expected] and observed_with_carried == [expected]`).
14
+ 2. **Cause localisée.** `src/devflow_cli/core/worktree_snapshot.py:31` liste les fichiers non suivis
15
+ avec `git ls-files --others --exclude-standard -z`, ce qui écarte les fichiers ignorés. Aucun
16
+ autre appel à `ls-files` n'alimente l'observation.
17
+ 3. **Approche validée.** Dans le même type de dépôt jetable, `git ls-files --others --ignored
18
+ --exclude-standard -- .specify/specs/KKS-1` renvoie les fichiers du sous-arbre de la feature :
19
+ `.gitignore`, `a.raw.txt`, `spec.md`. Un fichier ignoré hors de ce sous-arbre (`build/out`)
20
+ n'apparaît pas. La commande standard, elle, n'en liste aucun.
21
+ 4. **Traces à filtrer.** L'option `--ignored` fait aussi remonter `*.raw.txt`, que le `.gitignore`
22
+ du dossier de feature ignore (règle `TRACE_IGNORE_RULE = "*.raw.txt"`,
23
+ `src/devflow_cli/commands/feature.py:41`). Il faut donc écarter explicitement ces traces.
24
+ 5. **Appelants de `snapshot_worktree()`.**
25
+ - `commands/adaptive.py:380` et `:406`, avant et après l'agent.
26
+ - `adaptive_runner.py:299` et `:787`.
27
+ - `remediation.py:211` et `:246`.
28
+ - `automatic_evidence.py:292`, `:352`, `:559`, `:598` et `:855`.
29
+
30
+ Le helper `_feature_subtree()` existe déjà (`automatic_evidence.py:394`).
31
+ 6. **État de référence sain.** `tests/test_worktree_snapshot.py` : 8 tests passent. Selon
32
+ `prepare-result.json`, la suite complète passait aussi (678 tests).
33
+ 7. **Dépôt Devflow non concerné.** Ici, `git check-ignore -v` sur le dossier de la feature
34
+ renvoie 1 (non ignoré). L'activité en cours n'est donc pas bloquée par le défaut.
35
+
36
+ ## Source
37
+
38
+ - `need.md` et `prepare-result.json` de la feature (cause et plan d'approche).
39
+ - Code lu : `worktree_snapshot.py`, `adaptive_runner.py` (l. 470-495) et
40
+ `activity_contracts.py` (contraintes de preflight). Les numéros de ligne des appelants viennent
41
+ de `grep -rn "snapshot_worktree(" src/devflow_cli`.
42
+ - Exécutions locales décrites ci-dessous, faites pendant cette activité.
43
+
44
+ ## Reproductibilité
45
+
46
+ - Reproduction du défaut : script Python lancé par `uv run python <script>`.
47
+ 1. Il crée un dépôt temporaire avec `.gitignore` = `/.specify/*` et un commit initial.
48
+ 2. Il appelle `snapshot_worktree()`.
49
+ 3. Il écrit `.specify/specs/KKS-1/spec.md` et `src.py`.
50
+ 4. Il rappelle `snapshot_worktree()` puis `changed_paths()`.
51
+
52
+ Sortie attendue : `['src.py']`. Code retour 0.
53
+ - Validation de l'approche : dans un dépôt temporaire qui ignore `/.specify/*` et `build/`, lancer
54
+ `git ls-files --others --ignored --exclude-standard -- .specify/specs/KKS-1`. Sortie attendue :
55
+ les fichiers du sous-arbre uniquement. Code retour 0.
56
+ - Référence : `uv run pytest -q tests/test_worktree_snapshot.py` (8 passed, code retour 0).
57
+ - Les dépôts temporaires ont été supprimés après usage. Les scripts utilisent une identité git
58
+ fictive (`t@example.invalid`).
59
+
60
+ ## Périmètre
61
+
62
+ - À modifier : `snapshot_worktree()`. Ajouter un paramètre optionnel pour le sous-arbre de la
63
+ feature, `None` par défaut, qui laisse le comportement strictement identique.
64
+ - Ce paramètre sera passé seulement aux appels qui décident de l'observation d'une activité :
65
+ `commands/adaptive.py`, `adaptive_runner.py` et `remediation.py`. `automatic_evidence.py` garde
66
+ son comportement, conformément à `need.md`.
67
+ - Hors périmètre :
68
+ - les fichiers ignorés en dehors du dossier de la feature ;
69
+ - `worktree_fingerprint()`, qui exclut déjà le dossier de la feature ;
70
+ - la politique de `.gitignore` des projets cibles.
71
+ - Tests attendus :
72
+ - dossier de feature ignoré : activité documentaire acceptée ;
73
+ - dossier non ignoré : comportement inchangé ;
74
+ - fichiers ignorés hors feature : toujours invisibles ;
75
+ - `*.raw.txt` écarté.
76
+
77
+ ## Confidentialité
78
+
79
+ - Aucun secret, jeton ni donnée utilisateur n'a été lu ou recopié.
80
+ - Les preuves portent sur des fichiers fictifs (`spec.md`, `src.py`, `build/out`) dans des dépôts
81
+ temporaires supprimés.
82
+ - Le filtrage des `*.raw.txt` compte aussi pour la confidentialité : ces traces peuvent contenir
83
+ le contenu des fichiers lus par l'agent. Elles ne doivent jamais entrer dans `observed` ni
84
+ dans les empreintes publiées.
85
+
86
+ ## Limites
87
+
88
+ - La reproduction s'arrête à `snapshot_worktree()` et `changed_paths()`. Le rejet complet
89
+ `artifact-files-mismatch` d'une activité sur un dépôt comme k-budget n'a pas été rejoué
90
+ de bout en bout. Il est déduit du code (point 1).
91
+ - Avec `--ignored`, le `.gitignore` propre au dossier de feature apparaît aussi. Il est créé à
92
+ l'initialisation de la feature, avant la fenêtre d'exécution de l'agent, donc il ne devrait pas
93
+ compter parmi les fichiers modifiés. Le test de bout en bout devra le confirmer.
94
+ - D'autres fichiers ignorés que Devflow écrirait pendant la fenêtre de l'agent dans le dossier de
95
+ feature (en dehors de `*.raw.txt`) entreraient dans `observed`. Le code lu n'en montre aucun :
96
+ point à confirmer par le test de bout en bout.
97
+ - Les fiches de tentative enregistrées avant le correctif ont des empreintes sans les fichiers
98
+ ignorés. Leur reprise n'a pas été testée.
99
+ - La suite complète n'a pas été relancée pendant cette activité (seul
100
+ `tests/test_worktree_snapshot.py` l'a été). La référence de 678 tests vient de l'activité prepare.
@@ -0,0 +1,13 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "contractId": "KKS-411:standard:prepare:v3",
4
+ "activity": "prepare",
5
+ "agent": "claude",
6
+ "reason": "agent-failed",
7
+ "recordedAt": "2026-09-28T18:12:01Z",
8
+ "head": "0581823aaacd30b62072a84a9fc4c1d3501a820f",
9
+ "branch": "028-kks-411-feature-dir-ignored",
10
+ "observedFiles": {},
11
+ "carriedChangedFiles": [],
12
+ "rawOutputSha256": "b5fc1eca1ca5a26492f05e2b5162d9f0538bbe1df61665ecfc7ebfa78285ccc9"
13
+ }