devflow-cli 4.0.2__tar.gz → 6.1.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.1.0/.github/workflows/release.yml +88 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.gitignore +1 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/CHANGELOG.md +108 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/CLAUDE.md +1 -1
- devflow_cli-6.1.0/FEEDBACK.md +176 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/PKG-INFO +8 -23
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/README.md +7 -22
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.md +8 -4
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/activity-contracts.md +176 -15
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/adr/0001-v4-workflow-compatibility.md +1 -1
- devflow_cli-6.1.0/docs/adr/0002-v5-rupture-and-provenance.md +84 -0
- devflow_cli-6.1.0/docs/cli-reference.md +196 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/commands-reference.md +3 -2
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/guides/brownfield.md +1 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/guides/greenfield.md +1 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/guides/microservices.md +1 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/pipeline-reference.generated.md +1 -1
- devflow_cli-6.1.0/docs/pipeline.md +52 -0
- devflow_cli-6.1.0/docs/releases/4.0.3.md +26 -0
- devflow_cli-6.1.0/docs/releases/4.0.4.md +26 -0
- devflow_cli-6.1.0/docs/releases/4.0.5.md +28 -0
- devflow_cli-6.1.0/docs/releases/4.0.6.md +31 -0
- devflow_cli-6.1.0/docs/releases/5.0.0.md +77 -0
- devflow_cli-6.1.0/docs/releases/6.0.0.md +100 -0
- devflow_cli-6.1.0/docs/releases/6.1.0.md +54 -0
- devflow_cli-6.1.0/docs/v5-decisions.md +80 -0
- devflow_cli-6.1.0/docs/v6-decisions.md +97 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/pyproject.toml +1 -1
- devflow_cli-6.1.0/scripts/check_release.py +77 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/__init__.py +2 -2
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/adapters/agents.py +274 -19
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/cli.py +2 -2
- devflow_cli-6.1.0/src/devflow_cli/commands/adaptive.py +1155 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/assess.py +0 -1
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/check.py +41 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/feature.py +25 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/status.py +3 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/upgrade_cmd.py +14 -8
- devflow_cli-6.1.0/src/devflow_cli/commands/usage.py +92 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/verify.py +30 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/activity_contracts.py +218 -23
- devflow_cli-6.1.0/src/devflow_cli/core/adaptive_runner.py +896 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/adaptive_workflow.py +90 -50
- devflow_cli-6.1.0/src/devflow_cli/core/agent_failure.py +113 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/assessment.py +17 -19
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/automatic_evidence.py +252 -71
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/contract_schemas.py +21 -31
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/docgen.py +6 -5
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/manifest.py +9 -1
- devflow_cli-6.1.0/src/devflow_cli/core/omissions.py +168 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/operational.py +5 -1
- devflow_cli-6.1.0/src/devflow_cli/core/remediation.py +347 -0
- devflow_cli-6.1.0/src/devflow_cli/core/telemetry.py +168 -0
- devflow_cli-6.1.0/src/devflow_cli/core/validation_approvals.py +220 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/validators.py +59 -9
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/verification.py +95 -8
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/worklog.py +14 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/worktree_snapshot.py +17 -0
- devflow_cli-4.0.2/src/devflow_cli/schemas/activity-contract-v2.schema.json → devflow_cli-6.1.0/src/devflow_cli/schemas/activity-contract-v3.schema.json +3 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/schemas/activity-result-v1.schema.json +13 -1
- devflow_cli-4.0.2/src/devflow_cli/schemas/assessment-v2.schema.json → devflow_cli-6.1.0/src/devflow_cli/schemas/assessment-v3.schema.json +3 -3
- devflow_cli-4.0.2/src/devflow_cli/schemas/workflow-state-v3.schema.json → devflow_cli-6.1.0/src/devflow_cli/schemas/workflow-state-v4.schema.json +23 -4
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/utils/paths.py +17 -2
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/plan-template.md +4 -4
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/conftest.py +10 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_activity_contracts.py +303 -35
- devflow_cli-6.1.0/tests/test_adaptive_runner.py +1998 -0
- devflow_cli-6.1.0/tests/test_adaptive_workflow.py +349 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_agent_adapters.py +230 -0
- devflow_cli-6.1.0/tests/test_agent_failure.py +129 -0
- devflow_cli-6.1.0/tests/test_automatic_evidence.py +1385 -0
- devflow_cli-6.1.0/tests/test_cmd_adaptive.py +1863 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_assess.py +1 -1
- devflow_cli-6.1.0/tests/test_cmd_check.py +269 -0
- devflow_cli-6.1.0/tests/test_cmd_feature.py +227 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_status.py +3 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_upgrade.py +26 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_verify.py +51 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_contract_schemas.py +22 -10
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_docgen.py +2 -2
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_integration.py +7 -4
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_manifest.py +12 -0
- devflow_cli-6.1.0/tests/test_omissions.py +312 -0
- devflow_cli-6.1.0/tests/test_release.py +80 -0
- devflow_cli-6.1.0/tests/test_remediation.py +173 -0
- devflow_cli-6.1.0/tests/test_telemetry.py +278 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_validators.py +49 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_verification.py +99 -1
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_waivers.py +5 -3
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_wheel_adaptive_acceptance.py +11 -7
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_wheel_install.py +3 -6
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_worklog.py +14 -12
- devflow_cli-6.1.0/tests/test_worktree_snapshot.py +112 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/uv.lock +1 -1
- devflow_cli-4.0.2/.github/workflows/release.yml +0 -52
- devflow_cli-4.0.2/.idea/.gitignore +0 -10
- devflow_cli-4.0.2/.idea/devflow.iml +0 -9
- devflow_cli-4.0.2/.idea/misc.xml +0 -5
- devflow_cli-4.0.2/.idea/modules.xml +0 -8
- devflow_cli-4.0.2/.idea/vcs.xml +0 -6
- devflow_cli-4.0.2/.idea/workspace.xml +0 -249
- devflow_cli-4.0.2/docs/cli-reference.md +0 -106
- devflow_cli-4.0.2/docs/pipeline.md +0 -46
- devflow_cli-4.0.2/docs/v4-migration.md +0 -53
- devflow_cli-4.0.2/src/devflow_cli/commands/adaptive.py +0 -681
- devflow_cli-4.0.2/src/devflow_cli/commands/migrate_cmd.py +0 -200
- devflow_cli-4.0.2/src/devflow_cli/core/adaptive_runner.py +0 -378
- devflow_cli-4.0.2/src/devflow_cli/core/remediation.py +0 -170
- devflow_cli-4.0.2/src/devflow_cli/core/v4_migration.py +0 -134
- devflow_cli-4.0.2/src/devflow_cli/schemas/activity-contract-v1.schema.json +0 -76
- devflow_cli-4.0.2/src/devflow_cli/schemas/assessment-v1.schema.json +0 -60
- devflow_cli-4.0.2/src/devflow_cli/schemas/workflow-state-v2.schema.json +0 -66
- devflow_cli-4.0.2/tests/test_adaptive_runner.py +0 -593
- devflow_cli-4.0.2/tests/test_adaptive_workflow.py +0 -185
- devflow_cli-4.0.2/tests/test_automatic_evidence.py +0 -762
- devflow_cli-4.0.2/tests/test_cmd_adaptive.py +0 -919
- devflow_cli-4.0.2/tests/test_cmd_check.py +0 -112
- devflow_cli-4.0.2/tests/test_cmd_feature.py +0 -113
- devflow_cli-4.0.2/tests/test_cmd_migrate.py +0 -185
- devflow_cli-4.0.2/tests/test_v4_migration.py +0 -162
- devflow_cli-4.0.2/tests/test_worktree_snapshot.py +0 -59
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.ai/mcp/mcp.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.analyze.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.checklist.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.clarify.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.constitution.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.implement.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.specify.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.claude/commands/speckit.taskstoissues.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.githooks/post-checkout +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.githooks/post-merge +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.github/workflows/ci.yml +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/init-options.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/memory/constitution.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/scripts/bash/common.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/scripts/bash/setup-plan.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/001-cli-init-options/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/002-cascade-regen/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/003-usecase-guides/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/005-implement-subphases/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/006-template-upgrade/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/007-project-documentation/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/009-ci-pypi/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/011-cursor-support/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/013-align-truth-sources/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/013-align-truth-sources/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/016-harden-state-machine/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/016-harden-state-machine/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/016-harden-state-machine/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/019-quality-hardening/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/021-review-iterations/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/021-review-iterations/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/021-review-iterations/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/021-review-iterations/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/022-fix-regen-command/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/022-fix-regen-command/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/022-fix-regen-command/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/023-add-logging/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/023-add-logging/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/023-add-logging/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/023-add-logging/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/024-validate-constants/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/024-validate-constants/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/024-validate-constants/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/024-validate-constants/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/025-harden-tests/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/025-harden-tests/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/025-harden-tests/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/025-harden-tests/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/data-model.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/plan.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/quickstart.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/research.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/spec.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/specs/027-pipeline-auto-execution/tasks.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/agent-file-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/checklist-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/constitution-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/plan-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/spec-template-brownfield.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/spec-template-greenfield.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/spec-template-microservices.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/spec-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/.specify/templates/tasks-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/CONTRIBUTING.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/LICENSE +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.context.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.extension.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.init.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.regen.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/commands/devflow.status.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/cursor-guide.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/index.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/releases/4.0.0.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/releases/4.0.1.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/docs/spec-driven.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/extensions/catalog.community.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/extensions/catalog.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/extensions/template/example-command.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/extensions/template/example-extension.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/adapters/__init__.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/adapters/linear.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/__init__.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/context.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/docs_sync.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/export_cmd.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/extension.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/hooks_cmd.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/init_cmd.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/linear.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/stale.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/commands/traceability.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/__init__.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/catalog.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/git.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/hooks.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/installer.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/redaction.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/scanner.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/staleness.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/traceability.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/core/waivers.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/utils/__init__.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/utils/console.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/utils/logging.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/src/devflow_cli/utils/strings.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/agent-context-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/constitution-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts/README-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts/api-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts/components-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts/interfaces-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts/services-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/contracts-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/data-model-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/devflow-hooks-template.yml +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/extension-manifest-template.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/quickstart-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/research-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/spec-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/templates/tasks-template.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/fixtures/agents/mock-agent.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/fixtures/commands/mock-command.md +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/fixtures/mock-catalog.json +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/run-tests.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test-helpers.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test-template-variants.sh +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_assessment.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_bash_runner.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_catalog.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_context.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_docs_sync.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_extension.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_hooks.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_init.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_linear.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_stale.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_cmd_traceability.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_constants.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_context.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_git.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_hooks.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_installer.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_linear_adapter.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_linear_order.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_logging.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_paths.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_paths_project_root.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_scanner.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_staleness.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.0}/tests/test_traceability.py +0 -0
- {devflow_cli-4.0.2 → devflow_cli-6.1.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,114 @@ 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.1.0] - 2026-09-24
|
|
9
|
+
|
|
10
|
+
Mesure de consommation des agents : voir [notes de version](docs/releases/6.1.0.md).
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Télémétrie locale de consommation : chaque tentative `adaptive run` ajoute
|
|
15
|
+
une ligne à `~/.devflow/telemetry.jsonl` (tokens, tours, modèle, coût
|
|
16
|
+
équivalent API Claude, deltas de quota Codex), sans prompt ni contenu.
|
|
17
|
+
Désactivable avec `DEVFLOW_TELEMETRY=0`.
|
|
18
|
+
- `devflow usage` résume ces tentatives par activité, profil, agent, modèle ou
|
|
19
|
+
projet, avec `--since`, `--project` et `--json`.
|
|
20
|
+
- `agent-execution.json` porte le `runId` de la tentative correspondante.
|
|
21
|
+
|
|
22
|
+
## [6.0.0] - 2026-09-24
|
|
23
|
+
|
|
24
|
+
Retours d'usage k-review traités : voir [v6-decisions.md](docs/v6-decisions.md).
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- Le parcours adaptatif peut enchaîner les activités jusqu'à un jalon demandé.
|
|
29
|
+
- 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.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- Les résultats d'activité rejetés peuvent être réconciliés après contrôle de la trace et des fichiers.
|
|
34
|
+
- 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.
|
|
35
|
+
- Les diagnostics du runner et de la vérification rendent explicites les causes des refus et des indisponibilités.
|
|
36
|
+
- `adaptive reconcile --result` n'est accepté que si la trace de l'agent ne contient aucune réponse exploitable pour le contrat courant.
|
|
37
|
+
- `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`.
|
|
38
|
+
- `adaptive approve-command` affiche la commande exacte, son répertoire et le motif du plan, puis demande confirmation ; `--yes` approuve sans terminal.
|
|
39
|
+
- 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.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- **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.
|
|
44
|
+
- **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`.
|
|
45
|
+
- 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.
|
|
46
|
+
|
|
47
|
+
## [5.0.0] - 2026-09-13
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- 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.
|
|
52
|
+
- 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.
|
|
53
|
+
- `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`.
|
|
54
|
+
- `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`.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- 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`.
|
|
59
|
+
- `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.
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- 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.
|
|
64
|
+
- `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.
|
|
65
|
+
- `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).
|
|
66
|
+
- `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).
|
|
67
|
+
- 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.
|
|
68
|
+
- Une preuve de source `agent` enregistre le nom de l'agent qui l'a produite, affiché par `adaptive status`.
|
|
69
|
+
- 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).
|
|
70
|
+
|
|
71
|
+
### Removed
|
|
72
|
+
|
|
73
|
+
- **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.
|
|
74
|
+
|
|
75
|
+
## [4.0.8] - 2026-08-29
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- 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.
|
|
80
|
+
|
|
81
|
+
## [4.0.7] - 2026-08-29
|
|
82
|
+
|
|
83
|
+
### Fixed
|
|
84
|
+
|
|
85
|
+
- 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`.
|
|
86
|
+
|
|
87
|
+
## [4.0.6] - 2026-08-28
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
|
|
91
|
+
- 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.
|
|
92
|
+
|
|
93
|
+
## [4.0.5] - 2026-08-27
|
|
94
|
+
|
|
95
|
+
### Fixed
|
|
96
|
+
|
|
97
|
+
- 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.
|
|
98
|
+
- 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.
|
|
99
|
+
|
|
100
|
+
## [4.0.4] - 2026-08-27
|
|
101
|
+
|
|
102
|
+
### Fixed
|
|
103
|
+
|
|
104
|
+
- 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`.
|
|
105
|
+
- 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é.
|
|
106
|
+
|
|
107
|
+
## [4.0.3] - 2026-08-27
|
|
108
|
+
|
|
109
|
+
### Fixed
|
|
110
|
+
|
|
111
|
+
- 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é.
|
|
112
|
+
- 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.
|
|
113
|
+
- Un tour Codex interrompu est catégorisé `agent-turn-failed` et l'identifiant de session provient de l'événement `thread.started`.
|
|
114
|
+
- 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.
|
|
115
|
+
|
|
8
116
|
## [4.0.2] - 2026-08-27
|
|
9
117
|
|
|
10
118
|
### Fixed
|
|
@@ -5,7 +5,7 @@ politique passent par `assessment.json`; les transitions passent par la CLI et
|
|
|
5
5
|
ne doivent jamais être réalisées en éditant les fichiers d’état.
|
|
6
6
|
|
|
7
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
|
|
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
9
|
<!-- devflow:pipeline:end -->
|
|
10
10
|
|
|
11
11
|
## Commandes de développement
|
|
@@ -0,0 +1,176 @@
|
|
|
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`. Ceux de la série suivante en
|
|
7
|
+
6.0.0 : voir `docs/v6-decisions.md`.
|
|
8
|
+
|
|
9
|
+
**Contexte des retours ci-dessous.** Projet k-review, trois parcours conduits les 23 et 24 septembre
|
|
10
|
+
2026 : KKS-368 `deep`, KKS-369 `deep`, KKS-370 `standard`. Point de vue : celui du superviseur
|
|
11
|
+
(Claude), qui enchaîne les activités, rédige lui-même les artefacts, délègue l'implémentation à des
|
|
12
|
+
agents et répare les rejets.
|
|
13
|
+
|
|
14
|
+
**Réserve à lire avant tout.** Ces parcours ont été conduits avec la **CLI v5.0.0** : la 6.0.0 a été
|
|
15
|
+
publiée alors que le dernier se terminait. Chaque entrée ci-dessous a donc été **revérifiée contre le
|
|
16
|
+
code de la 6.0.0** avant d'être écrite, et celles que la 6.0.0 corrige déjà ne figurent pas dans les
|
|
17
|
+
sections de gravité — elles sont rassemblées en fin de document, à titre de confirmation.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Majeur
|
|
22
|
+
|
|
23
|
+
### M1 — Le profil `standard` n'a aucune activité de revue
|
|
24
|
+
|
|
25
|
+
**Ce qui s'est passé.** KKS-370 a été évalué `standard` : `assess → prepare → preflight-evidence →
|
|
26
|
+
implement → verify → done`. Il n'y a **pas d'activité `review`**, et la preuve `implementation-review`
|
|
27
|
+
n'est pas requise — contrairement au profil `deep`, où les deux existent.
|
|
28
|
+
|
|
29
|
+
Or ce lot modifiait `app.html`, le gabarit du **shell partagé par les quatre écrans** de
|
|
30
|
+
l'application, en changeant l'ordre du DOM. Une régression y aurait été visible partout à la fois. Le
|
|
31
|
+
projet impose par ailleurs deux revues d'agent avant chaque commit ; elles ont été jouées, mais
|
|
32
|
+
**hors du parcours**, sans point d'ancrage ni trace dans l'état du workflow.
|
|
33
|
+
|
|
34
|
+
**Pourquoi ça coûte.** La rigueur de revue est indexée sur le profil, donc sur l'ampleur estimée du
|
|
35
|
+
changement, et non sur le **risque de ce qui est touché**. Un lot `standard` qui modifie un composant
|
|
36
|
+
partagé est moins contrôlé qu'un lot `deep` qui ajoute un fichier isolé. Le commit a lieu dans les
|
|
37
|
+
deux cas, et rien dans les artefacts ne dit qu'une revue a eu lieu : `done` se complète sans elle.
|
|
38
|
+
|
|
39
|
+
**Piste.** Permettre au `risk-assessment` de **recommander l'ajout** d'une activité `review` à un
|
|
40
|
+
profil qui ne la porte pas, symétriquement à l'omission introduite en 6.0.0 pour `critical`
|
|
41
|
+
(`adaptive omit`). Ou rendre `implementation-review` exigible dès qu'un fichier du périmètre est
|
|
42
|
+
partagé par plusieurs modules. À défaut, un `adaptive review` accepté en `standard` pour consigner
|
|
43
|
+
une revue qui a eu lieu, même sans activité dédiée.
|
|
44
|
+
|
|
45
|
+
### M2 — Le plafond de dix commandes n'est pas dans la politique injectée
|
|
46
|
+
|
|
47
|
+
**Ce qui s'est passé.** `activity_contracts.py:788` refuse tout `validationPlan` de plus de dix
|
|
48
|
+
commandes : `validationPlan doit contenir entre 1 et 10 commandes`. La politique exposée aux agents
|
|
49
|
+
par `validation_policy_guidance()` (`verification.py:70`) énumère les exécutables autorisés, les
|
|
50
|
+
tâches Maven et Gradle, les opérateurs interdits, l'approbation des exécutables hors liste et la
|
|
51
|
+
consigne sur `git ls-files` — **mais pas ce plafond**.
|
|
52
|
+
|
|
53
|
+
Sur KKS-368, le plan comptait onze validations, toutes légitimes et distinctes. Le refus est arrivé à
|
|
54
|
+
`verify`, après rédaction du plan **et** du document qui le décrit.
|
|
55
|
+
|
|
56
|
+
**Pourquoi ça coûte.** Ce n'est pas seulement une commande à retirer : il faut en **fusionner** deux
|
|
57
|
+
qui portaient des garanties différentes, puis amender le document de plan pour qu'aucun écart ne
|
|
58
|
+
subsiste entre ce qui est écrit et ce qui s'exécute. Le retour de M1 de la série précédente — « la
|
|
59
|
+
politique n'est connue qu'après coup » — a été traité, mais cette contrainte-là y a échappé, alors
|
|
60
|
+
qu'elle est la plus facile à énoncer.
|
|
61
|
+
|
|
62
|
+
**Piste.** Ajouter une ligne à `validation_policy_guidance()` : « le validationPlan contient entre 1
|
|
63
|
+
et 10 commandes ; regrouper plutôt qu'énumérer ». Une seule phrase ferme le sujet.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 2. Mineur
|
|
68
|
+
|
|
69
|
+
### m1 — `adaptive review` complète l'activité, et son nom ne le dit pas
|
|
70
|
+
|
|
71
|
+
**Ce qui s'est passé.** Sur KKS-369, `adaptive review` rend : « Revue humaine de … validée pour
|
|
72
|
+
'review'. **Prochaine : done** ». L'enchaînement naturel, `adaptive complete KKS-369 review`, échoue
|
|
73
|
+
alors avec « activité courante attendue : done ».
|
|
74
|
+
|
|
75
|
+
**Pourquoi ça coûte.** Un aller-retour et un doute : on ne sait pas si la revue a été prise en compte
|
|
76
|
+
ou si l'on a sauté une étape. Le verbe `review` suggère d'enregistrer une revue, pas de terminer
|
|
77
|
+
l'activité.
|
|
78
|
+
|
|
79
|
+
**Piste.** Le message de succès pourrait dire que l'activité est complétée, pas seulement quelle est
|
|
80
|
+
la suivante : « Revue enregistrée, activité 'review' complétée. Prochaine : done ».
|
|
81
|
+
|
|
82
|
+
### m2 — Le format `evidence` des résultats est accepté sans être compris
|
|
83
|
+
|
|
84
|
+
**Ce qui s'est passé.** Les `*-result.json` acceptent un tableau `evidence`. Un objet de la forme
|
|
85
|
+
`{id, kind, summary, path}` passe la validation du résultat **sans erreur**, mais ne compte comme
|
|
86
|
+
aucune preuve : `complete review` a refusé avec « preuves manquantes : implementation-review » alors
|
|
87
|
+
qu'une entrée portant `"id": "implementation-review"` figurait dans le fichier. Le format reconnu est
|
|
88
|
+
`{id, outcome, report}`, et l'`id` doit être le **nom du type de preuve attendu**.
|
|
89
|
+
|
|
90
|
+
**Pourquoi ça coûte.** Le message de refus décrit l'état des preuves, pas ce qui a été lu dans le
|
|
91
|
+
fichier. On corrige le format à l'aveugle, on relance, on échoue encore — jusqu'à aller lire un
|
|
92
|
+
`workflow-state.json` d'un lot précédent pour en déduire la forme attendue.
|
|
93
|
+
|
|
94
|
+
**Piste.** Signaler les entrées `evidence` non reconnues au moment de la complétion, avec la forme
|
|
95
|
+
attendue : « entrée ignorée : clés {kind, summary, path} ; attendu {id, outcome, report} ».
|
|
96
|
+
|
|
97
|
+
### m3 — Le porteur du `validationPlan` change avec le profil, sans être annoncé
|
|
98
|
+
|
|
99
|
+
**Ce qui s'est passé.** En `standard`, le `validationPlan` va dans `prepare-result.json`. En `deep`,
|
|
100
|
+
il n'y a pas d'activité `prepare` : c'est `plan-result.json` qui doit le porter. Son absence ne se
|
|
101
|
+
manifeste qu'à `verify`, par `invalid-preparation-result` — un code dont le nom désigne une activité
|
|
102
|
+
qui n'existe pas dans ce profil.
|
|
103
|
+
|
|
104
|
+
**Pourquoi ça coûte.** Le message n'indique pas quel fichier remplir, et son intitulé oriente vers la
|
|
105
|
+
mauvaise piste. Sur KKS-368, la cause n'a été trouvée qu'en comparant avec le dossier d'un lot
|
|
106
|
+
antérieur conduit sous un autre profil.
|
|
107
|
+
|
|
108
|
+
**Piste.** Nommer le fichier attendu dans le refus : « validationPlan absent de plan-result.json
|
|
109
|
+
(profil deep : pas d'activité prepare) ». Le contrat d'activité pourrait aussi le rappeler, puisqu'il
|
|
110
|
+
demande déjà « un validationPlan exécutable et portable est fourni » sans dire où.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 3. Hors outil, mais rencontré en le pilotant
|
|
115
|
+
|
|
116
|
+
### h1 — Rien n'oblige une conclusion d'absence à se prouver
|
|
117
|
+
|
|
118
|
+
**Ce qui s'est passé.** KKS-370 était un lot d'audit : son premier temps produisait un constat, le
|
|
119
|
+
second corrigeait. Le constat a conclu deux fois à une **absence** — « aucune gestion de mise à jour
|
|
120
|
+
du service worker n'existe », « aucun renvoi au principe de couleur dans le code ». Les deux étaient
|
|
121
|
+
faux. Un service complet existait depuis quatre lots ; il y avait trois renvois. Les deux erreurs
|
|
122
|
+
venaient de recherches dont la sortie avait été tronquée.
|
|
123
|
+
|
|
124
|
+
Ces faux constats sont entrés dans `audit.md`, puis dans le périmètre, puis dans les instructions
|
|
125
|
+
données à un agent d'implémentation — qui a refusé d'écrire le code et a corrigé le superviseur. Un
|
|
126
|
+
arbitrage a été demandé à l'utilisateur pour un travail sans objet.
|
|
127
|
+
|
|
128
|
+
**Pourquoi ça coûte.** L'activité `preflight-evidence` demande des « faits observés » et vérifie que
|
|
129
|
+
les sections existent, mais ne distingue pas un fait **positif** — mesuré, reproductible — d'une
|
|
130
|
+
**absence constatée**, qui n'est un fait que si la recherche était exhaustive. Une absence mal établie
|
|
131
|
+
se propage plus loin qu'une mesure fausse, parce qu'elle justifie de **construire** quelque chose.
|
|
132
|
+
|
|
133
|
+
**Piste.** Dans le contrat de `preflight-evidence`, demander que toute affirmation d'absence cite la
|
|
134
|
+
commande qui l'établit, et que cette commande figure dans la section de reproductibilité. C'est une
|
|
135
|
+
consigne, pas un contrôle — mais elle aurait suffi ici : écrire la commande aurait exposé le `head`
|
|
136
|
+
qui la tronquait.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 4. Ce que la 6.0.0 corrige, vérifié
|
|
141
|
+
|
|
142
|
+
Ces points figuraient dans mes retours précédents ou ont été rencontrés en v5.0.0 pendant ces
|
|
143
|
+
parcours. Ils sont **résolus**, et je les note pour fermer la boucle plutôt que pour demander quoi que
|
|
144
|
+
ce soit.
|
|
145
|
+
|
|
146
|
+
- **m4, preuves `manual` refusées.** `adaptive evidence --help` annonce désormais « Enregistre une
|
|
147
|
+
preuve manuelle informative, **sans ouvrir les gates** ». En v5.0.0, la commande acceptait
|
|
148
|
+
l'enregistrement puis la complétion échouait avec « preuves automatiques valides requises », sans
|
|
149
|
+
jamais nommer `adaptive review`. L'aide actuelle aurait évité l'aller-retour.
|
|
150
|
+
- **M6, messages sans cible.** Le refus `regression-check-failed (PREP-conflit-plus-non-tranche)`
|
|
151
|
+
nomme l'identifiant exact de la validation fautive, en première ligne. J'ai trouvé la cause
|
|
152
|
+
immédiatement — c'était une validation que j'avais moi-même mal conçue.
|
|
153
|
+
- **M1, politique connue après coup.** Les sections requises sont nommées dans le refus : « sections
|
|
154
|
+
de pré-vol manquantes : faits observés, reproductibilité, limites ». Trois mots suffisent à
|
|
155
|
+
corriger.
|
|
156
|
+
- **Le refus de réduire un profil recommandé** reste strict, et c'est bien. Déclarer
|
|
157
|
+
`--contract-change` sur une route ajoutée fait recommander `deep` ; `--profile standard` est
|
|
158
|
+
refusé. Le contourner en retirant le drapeau marcherait, et mentirait sur la nature du changement.
|
|
159
|
+
Le garde-fou tient exactement là où il doit tenir.
|
|
160
|
+
- **`devflow traceability`** joué avant de compléter `tasks` rend la couverture des exigences par les
|
|
161
|
+
tâches en une seconde. Deux écarts rattrapés sur KKS-369 à ce moment-là plutôt qu'à la revue.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Priorités suggérées
|
|
166
|
+
|
|
167
|
+
1. **M2** — une phrase dans `validation_policy_guidance()`. Coût nul, évite un rejet tardif et une
|
|
168
|
+
réécriture de document.
|
|
169
|
+
2. **m3** — nommer le fichier attendu dans le refus `invalid-preparation-result`. Coût nul, supprime
|
|
170
|
+
la recherche à l'aveugle.
|
|
171
|
+
3. **M1** — la revue absente du profil `standard` est le seul point qui touche la qualité du résultat
|
|
172
|
+
plutôt que le confort du pilote. C'est aussi le plus lourd à trancher : il engage la définition des
|
|
173
|
+
profils.
|
|
174
|
+
4. **m2** et **m1** — messages, à traiter quand l'occasion se présente.
|
|
175
|
+
5. **h1** — une consigne de contrat, si l'idée te paraît juste. Elle sort du périmètre habituel de
|
|
176
|
+
l'outil, et je la propose sans insister.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: devflow-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.1.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,7 +74,7 @@ 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
|
|
|
76
|
-
|
|
77
|
+
Chaque profil exécute `preflight-evidence` avant `implement`. Cette
|
|
77
78
|
activité archive des faits externes reproductibles dans
|
|
78
79
|
`preflight-evidence.md`, sans secret ni donnée utilisateur.
|
|
79
80
|
|
|
@@ -85,29 +86,13 @@ devflow adaptive run KS-123 --agent claude
|
|
|
85
86
|
devflow adaptive run KS-123 --agent cursor
|
|
86
87
|
```
|
|
87
88
|
|
|
88
|
-
##
|
|
89
|
+
## Features créées avant devflow 5
|
|
89
90
|
|
|
90
|
-
|
|
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).
|
|
91
95
|
|
|
92
|
-
```bash
|
|
93
|
-
devflow adaptive migrate KS-123 --dry-run
|
|
94
|
-
devflow adaptive migrate KS-123
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
La migration V4 traite ensemble `assessment.json` et `workflow-state.json`,
|
|
98
|
-
conserve une sauvegarde auditée et restaure le couple original en cas d'échec.
|
|
99
|
-
Voir [le guide V4](docs/v4-migration.md).
|
|
100
|
-
|
|
101
|
-
Pour une feature antérieure au moteur adaptatif :
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
devflow migrate KS-123 --dry-run
|
|
105
|
-
devflow migrate KS-123 --profile deep
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
La migration conserve les artefacts, archive `state.json` sous
|
|
109
|
-
`legacy-state.json`, puis redémarre à la première activité vérifiable du profil.
|
|
110
|
-
Sans identifiant, `devflow migrate` traite toutes les anciennes features.
|
|
111
96
|
`devflow init` et `devflow upgrade` déplacent également les anciennes commandes
|
|
112
97
|
Claude connues vers `~/.claude/.devflow-legacy-backup/` sans toucher aux
|
|
113
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,7 +46,7 @@ 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
|
|
|
48
|
-
|
|
49
|
+
Chaque profil exécute `preflight-evidence` avant `implement`. Cette
|
|
49
50
|
activité archive des faits externes reproductibles dans
|
|
50
51
|
`preflight-evidence.md`, sans secret ni donnée utilisateur.
|
|
51
52
|
|
|
@@ -57,29 +58,13 @@ devflow adaptive run KS-123 --agent claude
|
|
|
57
58
|
devflow adaptive run KS-123 --agent cursor
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
##
|
|
61
|
+
## Features créées avant devflow 5
|
|
61
62
|
|
|
62
|
-
|
|
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).
|
|
63
67
|
|
|
64
|
-
```bash
|
|
65
|
-
devflow adaptive migrate KS-123 --dry-run
|
|
66
|
-
devflow adaptive migrate KS-123
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
La migration V4 traite ensemble `assessment.json` et `workflow-state.json`,
|
|
70
|
-
conserve une sauvegarde auditée et restaure le couple original en cas d'échec.
|
|
71
|
-
Voir [le guide V4](docs/v4-migration.md).
|
|
72
|
-
|
|
73
|
-
Pour une feature antérieure au moteur adaptatif :
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
devflow migrate KS-123 --dry-run
|
|
77
|
-
devflow migrate KS-123 --profile deep
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
La migration conserve les artefacts, archive `state.json` sous
|
|
81
|
-
`legacy-state.json`, puis redémarre à la première activité vérifiable du profil.
|
|
82
|
-
Sans identifiant, `devflow migrate` traite toutes les anciennes features.
|
|
83
68
|
`devflow init` et `devflow upgrade` déplacent également les anciennes commandes
|
|
84
69
|
Claude connues vers `~/.claude/.devflow-legacy-backup/` sans toucher aux
|
|
85
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,
|