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.
- devflow_cli-2.8.0/.githooks/post-checkout +26 -0
- devflow_cli-2.8.0/.githooks/post-merge +15 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.github/workflows/ci.yml +3 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.gitignore +1 -0
- devflow_cli-2.8.0/.idea/.gitignore +10 -0
- devflow_cli-2.8.0/.idea/devflow.iml +9 -0
- devflow_cli-2.8.0/.idea/misc.xml +6 -0
- devflow_cli-2.8.0/.idea/modules.xml +8 -0
- devflow_cli-2.8.0/.idea/vcs.xml +6 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +35 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +77 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/data-model.md +54 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/plan.md +187 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/quickstart.md +49 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/research.md +41 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/spec.md +211 -0
- devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/tasks.md +187 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CHANGELOG.md +22 -1
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CLAUDE.md +28 -9
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/PKG-INFO +15 -7
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/README.md +13 -5
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/agents/devflow-review.md +2 -1
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.clarify.md +5 -9
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.contracts.md +3 -8
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.docs.md +4 -9
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.implement.md +6 -24
- devflow_cli-2.8.0/commands/devflow.md +351 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.plan.md +3 -8
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.research.md +3 -8
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-impl.md +15 -12
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-spec.md +4 -7
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.review-tasks.md +4 -7
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.spec.md +3 -8
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.tasks.md +4 -16
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/cli-reference.md +154 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/commands-reference.md +1 -1
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/index.md +1 -0
- devflow_cli-2.8.0/docs/pipeline-reference.generated.md +23 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/pipeline.md +6 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/pyproject.toml +1 -1
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/__init__.py +26 -1
- devflow_cli-2.8.0/src/devflow_cli/adapters/__init__.py +19 -0
- devflow_cli-2.8.0/src/devflow_cli/adapters/agents.py +148 -0
- devflow_cli-2.8.0/src/devflow_cli/adapters/linear.py +79 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/cli.py +16 -0
- devflow_cli-2.8.0/src/devflow_cli/commands/docs_sync.py +33 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/extension.py +3 -1
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/feature.py +4 -4
- devflow_cli-2.8.0/src/devflow_cli/commands/hooks_cmd.py +193 -0
- devflow_cli-2.8.0/src/devflow_cli/commands/linear.py +30 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/migrate_speckit.py +139 -22
- devflow_cli-2.8.0/src/devflow_cli/commands/review.py +54 -0
- devflow_cli-2.8.0/src/devflow_cli/commands/run.py +123 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/status.py +24 -29
- devflow_cli-2.8.0/src/devflow_cli/commands/step.py +118 -0
- devflow_cli-2.8.0/src/devflow_cli/commands/traceability.py +47 -0
- devflow_cli-2.8.0/src/devflow_cli/commands/verify.py +78 -0
- devflow_cli-2.8.0/src/devflow_cli/core/docgen.py +93 -0
- devflow_cli-2.8.0/src/devflow_cli/core/hooks.py +235 -0
- devflow_cli-2.8.0/src/devflow_cli/core/orchestrator.py +170 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/state.py +207 -6
- devflow_cli-2.8.0/src/devflow_cli/core/state_store.py +45 -0
- devflow_cli-2.8.0/src/devflow_cli/core/traceability.py +81 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/validators.py +25 -5
- devflow_cli-2.8.0/src/devflow_cli/core/verification.py +296 -0
- devflow_cli-2.8.0/src/devflow_cli/schemas/state.schema.json +39 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/paths.py +78 -8
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/devflow-hooks-template.yml +4 -3
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/plan-template.md +8 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-impl-template.md +6 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/run-tests.sh +27 -8
- devflow_cli-2.8.0/tests/test_agent_adapters.py +76 -0
- devflow_cli-2.8.0/tests/test_bash_runner.py +63 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_catalog.py +52 -0
- devflow_cli-2.8.0/tests/test_cmd_docs_sync.py +35 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_extension.py +31 -0
- devflow_cli-2.8.0/tests/test_cmd_hooks.py +178 -0
- devflow_cli-2.8.0/tests/test_cmd_linear.py +18 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_migrate_speckit.py +191 -2
- devflow_cli-2.8.0/tests/test_cmd_review.py +95 -0
- devflow_cli-2.8.0/tests/test_cmd_run.py +39 -0
- devflow_cli-2.8.0/tests/test_cmd_step.py +141 -0
- devflow_cli-2.8.0/tests/test_cmd_traceability.py +45 -0
- devflow_cli-2.8.0/tests/test_cmd_verify.py +86 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_constants.py +9 -0
- devflow_cli-2.8.0/tests/test_docgen.py +41 -0
- devflow_cli-2.8.0/tests/test_hooks.py +160 -0
- devflow_cli-2.8.0/tests/test_linear_adapter.py +55 -0
- devflow_cli-2.8.0/tests/test_linear_order.py +70 -0
- devflow_cli-2.8.0/tests/test_orchestrator.py +105 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_paths.py +32 -4
- devflow_cli-2.8.0/tests/test_paths_project_root.py +30 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_state.py +98 -0
- devflow_cli-2.8.0/tests/test_state_schema.py +14 -0
- devflow_cli-2.8.0/tests/test_traceability.py +63 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_validators.py +50 -0
- devflow_cli-2.8.0/tests/test_verification.py +207 -0
- devflow_cli-2.8.0/tests/test_version.py +28 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/uv.lock +1 -1
- devflow_cli-2.3.0/commands/devflow.md +0 -140
- devflow_cli-2.3.0/src/devflow_cli/core/hooks.py +0 -94
- devflow_cli-2.3.0/tests/test-community-catalog.sh +0 -150
- devflow_cli-2.3.0/tests/test_hooks.py +0 -67
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.analyze.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.checklist.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.clarify.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.constitution.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.implement.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.specify.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.claude/commands/speckit.taskstoissues.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.github/workflows/release.yml +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/init-options.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/memory/constitution.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/common.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/setup-plan.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/001-cli-init-options/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/002-cascade-regen/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/003-usecase-guides/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/005-implement-subphases/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/006-template-upgrade/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/007-project-documentation/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/009-ci-pypi/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/011-cursor-support/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/019-quality-hardening/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/021-review-iterations/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/023-add-logging/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/024-validate-constants/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/plan.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/research.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/spec.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/specs/025-harden-tests/tasks.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/agent-file-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/checklist-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/constitution-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/plan-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-brownfield.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-greenfield.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template-microservices.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/spec-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/.specify/templates/tasks-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/CONTRIBUTING.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/LICENSE +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/agents/devflow-autofix.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.analyze.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.checklist.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.constitution.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.context.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.extension.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.init.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.metrics.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.regen.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.status.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.sync-linear.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/commands/devflow.tasks-to-issues.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/cursor-guide.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/brownfield.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/greenfield.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/guides/microservices.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/docs/spec-driven.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/README.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/catalog.community.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/catalog.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/template/example-command.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/extensions/template/example-extension.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/__init__.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/check.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/context.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/export_cmd.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/init_cmd.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/migrate_cmd.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/rollback.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/stale.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/commands/upgrade_cmd.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/__init__.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/catalog.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/git.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/installer.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/manifest.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/scanner.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/core/staleness.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/__init__.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/console.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/logging.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/src/devflow_cli/utils/strings.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/agent-context-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/analyze-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklist-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/api.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/requirements.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/security.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/checklists/ux.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/clarify-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/constitution-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/README-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/api-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/components-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/interfaces-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts/services-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/contracts-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/data-model-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/docs-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/export/copilot-instructions-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/export/cursor-rules-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/extension-manifest-template.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/quickstart-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/research-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-spec-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/review-tasks-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/spec-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/templates/tasks-template.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/conftest.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/agents/mock-agent.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/commands/mock-command.md +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/mock-catalog.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/fixtures/mock-state.json +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test-helpers.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test-template-variants.sh +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_check.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_context.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_feature.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_init.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_migrate.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_stale.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_status.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_cmd_upgrade.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_context.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_e2e_pipeline.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_git.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_installer.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_integration.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_logging.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_manifest.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_rollback.py +0 -0
- {devflow_cli-2.3.0 → devflow_cli-2.8.0}/tests/test_scanner.py +0 -0
- {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
|
|
@@ -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,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.
|
devflow_cli-2.8.0/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md
ADDED
|
@@ -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.
|