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