devflow-cli 6.1.1__tar.gz → 6.1.2__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.2/.specify/specs/030-kks-416/.gitignore +2 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/activity-contract.json +169 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/agent-execution.json +15 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/assessment.json +41 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/evidence/diff-inspection.json +31 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/evidence/requirements-coverage.json +141 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/evidence/security-or-data-check.json +29 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/evidence/test-suite.json +95 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/implement-result.json +81 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/need.md +59 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/omission-log.json +16 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/plan-result.json +117 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/plan.md +262 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/preflight-evidence-result.json +83 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/preflight-evidence.md +147 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/research-result.json +53 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/research.md +242 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/review-result.json +59 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/risk-assessment-result.json +48 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/risk-assessment.md +115 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/rollback-check-result.json +67 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/spec-result.json +25 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/spec.md +297 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/tasks-result.json +39 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/tasks.md +121 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/workflow-state.json +92 -0
- devflow_cli-6.1.2/.specify/specs/030-kks-416/worklog.md +79 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/CHANGELOG.md +8 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/PKG-INFO +1 -1
- devflow_cli-6.1.2/docs/releases/6.1.2.md +57 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/pyproject.toml +1 -1
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/__init__.py +1 -1
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/verification.py +57 -1
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_verification.py +164 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/uv.lock +1 -1
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.ai/mcp/mcp.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.analyze.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.checklist.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.clarify.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.constitution.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.implement.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.specify.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.claude/commands/speckit.taskstoissues.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.githooks/post-checkout +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.githooks/post-merge +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.github/workflows/ci.yml +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.github/workflows/release.yml +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.gitignore +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/init-options.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/memory/constitution.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/scripts/bash/common.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/scripts/bash/setup-plan.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/contracts/cli-init.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/001-cli-init-options/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/contracts/cli-regen.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/contracts/cli-status-staleness.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/002-cascade-regen/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/003-usecase-guides/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/contracts/cli-commands.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/004-specify-central-directory/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/005-implement-subphases/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/contracts/cli-upgrade.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/006-template-upgrade/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/007-project-documentation/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/008-hardening-bugs/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/009-ci-pypi/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/010-flexible-pipeline/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/011-cursor-support/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/012-fix-critical-bugs/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/012-fix-critical-bugs/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/012-fix-critical-bugs/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/012-fix-critical-bugs/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/012-fix-critical-bugs/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/013-align-truth-sources/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/013-align-truth-sources/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/013-align-truth-sources/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/013-align-truth-sources/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/013-align-truth-sources/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/014-enforce-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/014-enforce-state-machine/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/014-enforce-state-machine/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/014-enforce-state-machine/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/014-enforce-state-machine/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/015-fix-review-contradiction/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/015-fix-review-contradiction/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/015-fix-review-contradiction/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/015-fix-review-contradiction/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/015-fix-review-contradiction/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/016-harden-state-machine/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/016-harden-state-machine/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/016-harden-state-machine/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/016-harden-state-machine/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/016-harden-state-machine/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/017-fix-robustness-issues/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/017-fix-robustness-issues/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/017-fix-robustness-issues/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/017-fix-robustness-issues/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/017-fix-robustness-issues/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/018-fix-final-robustness/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/019-quality-hardening/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/020-migrate-speckit/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/021-review-iterations/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/021-review-iterations/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/021-review-iterations/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/021-review-iterations/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/021-review-iterations/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/022-fix-regen-command/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/022-fix-regen-command/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/022-fix-regen-command/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/022-fix-regen-command/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/022-fix-regen-command/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/023-add-logging/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/023-add-logging/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/023-add-logging/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/023-add-logging/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/023-add-logging/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/024-validate-constants/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/024-validate-constants/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/024-validate-constants/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/024-validate-constants/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/024-validate-constants/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/025-harden-tests/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/025-harden-tests/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/025-harden-tests/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/025-harden-tests/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/025-harden-tests/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/checklists/requirements.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/contracts/orchestrator-contract.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/data-model.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/plan.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/quickstart.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/research.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/spec.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/027-pipeline-auto-execution/tasks.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/.gitignore +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/activity-contract.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/agent-execution.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/assessment.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/evidence/diff-inspection.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/evidence/regression-check.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/evidence/targeted-tests.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/implement-result.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/need.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence-result.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/preflight-evidence.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/prepare-attempt.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/prepare-result.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/workflow-state.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/specs/028-kks-411-feature-dir-ignored/worklog.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/agent-file-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/checklist-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/constitution-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/plan-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/spec-template-brownfield.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/spec-template-greenfield.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/spec-template-microservices.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/spec-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/.specify/templates/tasks-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/CLAUDE.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/CONTRIBUTING.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/FEEDBACK.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/LICENSE +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/README.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.context.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.extension.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.init.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.regen.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/commands/devflow.status.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/activity-contracts.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/adr/0001-v4-workflow-compatibility.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/adr/0002-v5-rupture-and-provenance.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/cli-reference.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/commands-reference.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/cursor-guide.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/guides/brownfield.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/guides/greenfield.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/guides/microservices.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/index.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/pipeline-reference.generated.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/pipeline.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.0.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.1.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.3.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.4.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.5.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/4.0.6.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/5.0.0.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/6.0.0.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/6.1.0.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/releases/6.1.1.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/spec-driven.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/v5-decisions.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/docs/v6-decisions.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/extensions/catalog.community.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/extensions/catalog.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/extensions/template/example-command.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/extensions/template/example-extension.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/scripts/check_release.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/adapters/__init__.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/adapters/agents.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/adapters/linear.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/cli.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/__init__.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/adaptive.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/assess.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/check.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/context.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/docs_sync.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/export_cmd.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/extension.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/feature.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/hooks_cmd.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/init_cmd.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/linear.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/stale.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/status.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/traceability.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/upgrade_cmd.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/usage.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/commands/verify.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/__init__.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/activity_contracts.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/adaptive_runner.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/adaptive_workflow.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/agent_failure.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/assessment.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/automatic_evidence.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/catalog.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/contract_schemas.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/docgen.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/git.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/hooks.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/installer.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/manifest.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/omissions.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/operational.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/redaction.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/remediation.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/scanner.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/staleness.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/telemetry.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/traceability.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/validation_approvals.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/validators.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/waivers.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/worklog.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/core/worktree_snapshot.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/schemas/activity-contract-v3.schema.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/schemas/activity-result-v1.schema.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/schemas/assessment-v3.schema.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/schemas/workflow-state-v4.schema.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/utils/__init__.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/utils/console.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/utils/logging.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/utils/paths.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/src/devflow_cli/utils/strings.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/agent-context-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/constitution-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts/README-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts/api-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts/components-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts/interfaces-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts/services-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/contracts-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/data-model-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/devflow-hooks-template.yml +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/extension-manifest-template.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/plan-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/quickstart-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/research-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/spec-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/templates/tasks-template.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/conftest.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/fixtures/agents/mock-agent.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/fixtures/commands/mock-command.md +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/fixtures/mock-catalog.json +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/run-tests.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test-helpers.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test-template-variants.sh +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_activity_contracts.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_adaptive_runner.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_adaptive_workflow.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_agent_adapters.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_agent_failure.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_assessment.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_automatic_evidence.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_bash_runner.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_catalog.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_adaptive.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_assess.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_check.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_context.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_docs_sync.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_extension.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_feature.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_hooks.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_init.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_linear.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_stale.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_status.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_traceability.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_upgrade.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_cmd_verify.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_constants.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_context.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_contract_schemas.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_docgen.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_git.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_hooks.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_installer.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_integration.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_linear_adapter.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_linear_order.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_logging.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_manifest.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_omissions.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_paths.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_paths_project_root.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_release.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_remediation.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_scanner.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_staleness.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_telemetry.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_traceability.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_validators.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_version.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_waivers.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_wheel_adaptive_acceptance.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_wheel_install.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_worklog.py +0 -0
- {devflow_cli-6.1.1 → devflow_cli-6.1.2}/tests/test_worktree_snapshot.py +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 3,
|
|
3
|
+
"contractId": "KKS-416:critical:rollback-check:v3",
|
|
4
|
+
"issueId": "KKS-416",
|
|
5
|
+
"profile": "critical",
|
|
6
|
+
"activity": "rollback-check",
|
|
7
|
+
"objective": "Accepter une liste explicite d'options de uv dans les validations uv run",
|
|
8
|
+
"featurePath": ".specify/specs/030-kks-416",
|
|
9
|
+
"inputs": [
|
|
10
|
+
".specify/specs/030-kks-416/need.md",
|
|
11
|
+
".specify/specs/030-kks-416/assessment.json",
|
|
12
|
+
".specify/specs/030-kks-416/workflow-state.json",
|
|
13
|
+
".specify/specs/030-kks-416/risk-assessment.md",
|
|
14
|
+
".specify/specs/030-kks-416/spec.md",
|
|
15
|
+
".specify/specs/030-kks-416/plan.md",
|
|
16
|
+
".specify/specs/030-kks-416/tasks.md",
|
|
17
|
+
".specify/specs/030-kks-416/implement-result.json",
|
|
18
|
+
".specify/specs/030-kks-416/evidence/requirements-coverage.json",
|
|
19
|
+
".specify/specs/030-kks-416/evidence/test-suite.json",
|
|
20
|
+
".specify/specs/030-kks-416/evidence/security-or-data-check.json",
|
|
21
|
+
".specify/specs/030-kks-416/review-result.json",
|
|
22
|
+
".specify/specs/030-kks-416/omission-log.json"
|
|
23
|
+
],
|
|
24
|
+
"allowedActions": [
|
|
25
|
+
"read",
|
|
26
|
+
"execute"
|
|
27
|
+
],
|
|
28
|
+
"constraints": [
|
|
29
|
+
"Respecter strictement l'objectif et le perimetre du contrat.",
|
|
30
|
+
"Le besoin de reference est .specify/specs/030-kks-416/need.md ; en cas d'ecart avec objective, il fait foi.",
|
|
31
|
+
"Preserver les changements utilisateur sans rapport avec cette activite.",
|
|
32
|
+
"Ne pas modifier state.json, workflow-state.json ou assessment.json.",
|
|
33
|
+
"Ne pas creer de commit et ne pas changer de branche.",
|
|
34
|
+
"Signaler tout blocage au lieu de contourner une validation.",
|
|
35
|
+
"Dans checks, status vaut passed si et seulement si exitCode vaut 0. Une commande dont l'absence de resultat constitue le succes attendu doit etre declaree failed, ou remplacee par une commande qui renvoie 0 en cas de succes.",
|
|
36
|
+
"Donner un id stable a chaque objectif de check. Si un check echoue puis est corrige et relance pour le meme objectif, reutiliser cet id : seule la derniere tentative fait foi ; signaler dans remainingRisks toute instabilite encore pertinente.",
|
|
37
|
+
"Ne modifier aucun fichier pendant le controle de rollback.",
|
|
38
|
+
"Verifier une procedure de restauration actionnable, les donnees affectees, les validations post-rollback et les declencheurs.",
|
|
39
|
+
"Retourner blocked si un effet irreversible ou une inconnue critique empeche un retour arriere fiable.",
|
|
40
|
+
"Ne produire rollback-plan=passed que si le plan est applicable et verifiable."
|
|
41
|
+
],
|
|
42
|
+
"completionCriteria": [
|
|
43
|
+
"Le plan de rollback precise les etapes, responsables, donnees et controles.",
|
|
44
|
+
"Les declencheurs et limites du rollback sont explicites.",
|
|
45
|
+
"La preuve rollback-plan contient un rapport exploitable."
|
|
46
|
+
],
|
|
47
|
+
"requiredEvidence": [
|
|
48
|
+
"rollback-plan"
|
|
49
|
+
],
|
|
50
|
+
"expectedOutput": {
|
|
51
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
52
|
+
"$id": "https://devflow.dev/schemas/activity-result/v1",
|
|
53
|
+
"title": "Devflow Activity Result v1",
|
|
54
|
+
"type": "object",
|
|
55
|
+
"required": [
|
|
56
|
+
"schemaVersion",
|
|
57
|
+
"contractId",
|
|
58
|
+
"status",
|
|
59
|
+
"summary",
|
|
60
|
+
"changedFiles",
|
|
61
|
+
"checks",
|
|
62
|
+
"evidence",
|
|
63
|
+
"remainingRisks",
|
|
64
|
+
"blockers"
|
|
65
|
+
],
|
|
66
|
+
"properties": {
|
|
67
|
+
"schemaVersion": {
|
|
68
|
+
"type": "integer",
|
|
69
|
+
"const": 1
|
|
70
|
+
},
|
|
71
|
+
"contractId": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"minLength": 1
|
|
74
|
+
},
|
|
75
|
+
"status": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": [
|
|
78
|
+
"completed",
|
|
79
|
+
"blocked"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"summary": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1
|
|
85
|
+
},
|
|
86
|
+
"changedFiles": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"items": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"minLength": 1
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"checks": {
|
|
94
|
+
"type": "array",
|
|
95
|
+
"items": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"required": [
|
|
98
|
+
"command",
|
|
99
|
+
"exitCode",
|
|
100
|
+
"status"
|
|
101
|
+
],
|
|
102
|
+
"properties": {
|
|
103
|
+
"id": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"minLength": 1
|
|
106
|
+
},
|
|
107
|
+
"command": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"minLength": 1
|
|
110
|
+
},
|
|
111
|
+
"exitCode": {
|
|
112
|
+
"type": "integer"
|
|
113
|
+
},
|
|
114
|
+
"status": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"enum": [
|
|
117
|
+
"passed",
|
|
118
|
+
"failed"
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"additionalProperties": false
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"evidence": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"required": [
|
|
130
|
+
"id",
|
|
131
|
+
"outcome",
|
|
132
|
+
"report"
|
|
133
|
+
],
|
|
134
|
+
"properties": {
|
|
135
|
+
"id": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"minLength": 1
|
|
138
|
+
},
|
|
139
|
+
"outcome": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"enum": [
|
|
142
|
+
"passed",
|
|
143
|
+
"failed"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"report": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"minLength": 1
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"additionalProperties": false
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"remainingRisks": {
|
|
155
|
+
"type": "array",
|
|
156
|
+
"items": {
|
|
157
|
+
"type": "string"
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"blockers": {
|
|
161
|
+
"type": "array",
|
|
162
|
+
"items": {
|
|
163
|
+
"type": "string"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"additionalProperties": false
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"runId": "dbd1eedc-2905-4e3e-8fe5-c06d5bebf630",
|
|
4
|
+
"agent": "claude",
|
|
5
|
+
"activity": "rollback-check",
|
|
6
|
+
"returnCode": 0,
|
|
7
|
+
"durationSeconds": 152.85,
|
|
8
|
+
"finalOutputStatus": "present",
|
|
9
|
+
"finalOutputBytes": 6898,
|
|
10
|
+
"finalOutputDiagnostic": "validated",
|
|
11
|
+
"sessionId": null,
|
|
12
|
+
"timedOut": false,
|
|
13
|
+
"worktreeChanged": false,
|
|
14
|
+
"worktreeChangedFileCount": 0
|
|
15
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 3,
|
|
3
|
+
"issueId": "KKS-416",
|
|
4
|
+
"recommendedProfile": "critical",
|
|
5
|
+
"selectedProfile": "critical",
|
|
6
|
+
"confidence": "high",
|
|
7
|
+
"signals": {
|
|
8
|
+
"scope": "local",
|
|
9
|
+
"ambiguity": "low",
|
|
10
|
+
"risk": "medium",
|
|
11
|
+
"contractChange": false,
|
|
12
|
+
"dataOrSecurity": true
|
|
13
|
+
},
|
|
14
|
+
"reasons": [
|
|
15
|
+
"le changement touche aux donnees ou a la securite"
|
|
16
|
+
],
|
|
17
|
+
"activities": [
|
|
18
|
+
"assess",
|
|
19
|
+
"risk-assessment",
|
|
20
|
+
"spec",
|
|
21
|
+
"research",
|
|
22
|
+
"contracts",
|
|
23
|
+
"plan",
|
|
24
|
+
"tasks",
|
|
25
|
+
"preflight-evidence",
|
|
26
|
+
"implement",
|
|
27
|
+
"verify",
|
|
28
|
+
"review",
|
|
29
|
+
"rollback-check",
|
|
30
|
+
"done"
|
|
31
|
+
],
|
|
32
|
+
"requiredEvidence": [
|
|
33
|
+
"requirements-coverage",
|
|
34
|
+
"test-suite",
|
|
35
|
+
"security-or-data-check",
|
|
36
|
+
"rollback-plan",
|
|
37
|
+
"independent-review"
|
|
38
|
+
],
|
|
39
|
+
"assessedAt": "2026-09-28T20:02:26Z",
|
|
40
|
+
"summary": "Accepter une liste explicite d'options de uv dans les validations uv run"
|
|
41
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "diff-inspection",
|
|
4
|
+
"outcome": "passed",
|
|
5
|
+
"generatedAt": "2026-09-28T21:34:02Z",
|
|
6
|
+
"changedFiles": [
|
|
7
|
+
"CHANGELOG.md",
|
|
8
|
+
"docs/releases/6.1.2.md",
|
|
9
|
+
"pyproject.toml",
|
|
10
|
+
"src/devflow_cli/__init__.py",
|
|
11
|
+
"src/devflow_cli/core/verification.py",
|
|
12
|
+
"tests/test_verification.py",
|
|
13
|
+
"uv.lock"
|
|
14
|
+
],
|
|
15
|
+
"findings": [],
|
|
16
|
+
"gitDiffCheck": {
|
|
17
|
+
"id": "AUTO-DIFF",
|
|
18
|
+
"command": [
|
|
19
|
+
"git",
|
|
20
|
+
"diff",
|
|
21
|
+
"--check"
|
|
22
|
+
],
|
|
23
|
+
"blocking": true,
|
|
24
|
+
"returncode": 0,
|
|
25
|
+
"succeeded": true,
|
|
26
|
+
"timedOut": false,
|
|
27
|
+
"workingDirectory": ".",
|
|
28
|
+
"stdout": "",
|
|
29
|
+
"stderr": ""
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "requirements-coverage",
|
|
4
|
+
"outcome": "passed",
|
|
5
|
+
"valid": true,
|
|
6
|
+
"requirements": [
|
|
7
|
+
"FR-001",
|
|
8
|
+
"FR-002",
|
|
9
|
+
"FR-003",
|
|
10
|
+
"FR-004",
|
|
11
|
+
"FR-005",
|
|
12
|
+
"FR-006",
|
|
13
|
+
"FR-007",
|
|
14
|
+
"FR-008",
|
|
15
|
+
"FR-009",
|
|
16
|
+
"FR-010",
|
|
17
|
+
"FR-011",
|
|
18
|
+
"FR-012",
|
|
19
|
+
"FR-013",
|
|
20
|
+
"FR-014",
|
|
21
|
+
"FR-015"
|
|
22
|
+
],
|
|
23
|
+
"taskIds": [
|
|
24
|
+
"T-001",
|
|
25
|
+
"T-002",
|
|
26
|
+
"T-003",
|
|
27
|
+
"T-004",
|
|
28
|
+
"T-005",
|
|
29
|
+
"T-006",
|
|
30
|
+
"T-007",
|
|
31
|
+
"T-008",
|
|
32
|
+
"T-009",
|
|
33
|
+
"T-010",
|
|
34
|
+
"T-011",
|
|
35
|
+
"T-012",
|
|
36
|
+
"T-013",
|
|
37
|
+
"T-014",
|
|
38
|
+
"T-015",
|
|
39
|
+
"T-016",
|
|
40
|
+
"T-017",
|
|
41
|
+
"T-018",
|
|
42
|
+
"T-019",
|
|
43
|
+
"T-020",
|
|
44
|
+
"T-021",
|
|
45
|
+
"T-022",
|
|
46
|
+
"T-023",
|
|
47
|
+
"T-024",
|
|
48
|
+
"T-025",
|
|
49
|
+
"T-026"
|
|
50
|
+
],
|
|
51
|
+
"coverage": {
|
|
52
|
+
"FR-001": [
|
|
53
|
+
"T-005",
|
|
54
|
+
"T-009"
|
|
55
|
+
],
|
|
56
|
+
"FR-002": [
|
|
57
|
+
"T-001",
|
|
58
|
+
"T-009"
|
|
59
|
+
],
|
|
60
|
+
"FR-003": [
|
|
61
|
+
"T-003",
|
|
62
|
+
"T-005",
|
|
63
|
+
"T-009"
|
|
64
|
+
],
|
|
65
|
+
"FR-004": [
|
|
66
|
+
"T-002",
|
|
67
|
+
"T-003",
|
|
68
|
+
"T-005",
|
|
69
|
+
"T-007",
|
|
70
|
+
"T-012"
|
|
71
|
+
],
|
|
72
|
+
"FR-005": [
|
|
73
|
+
"T-006",
|
|
74
|
+
"T-010",
|
|
75
|
+
"T-011",
|
|
76
|
+
"T-023"
|
|
77
|
+
],
|
|
78
|
+
"FR-006": [
|
|
79
|
+
"T-007",
|
|
80
|
+
"T-012"
|
|
81
|
+
],
|
|
82
|
+
"FR-007": [
|
|
83
|
+
"T-008",
|
|
84
|
+
"T-013"
|
|
85
|
+
],
|
|
86
|
+
"FR-008": [
|
|
87
|
+
"T-001",
|
|
88
|
+
"T-007",
|
|
89
|
+
"T-011"
|
|
90
|
+
],
|
|
91
|
+
"FR-009": [
|
|
92
|
+
"T-008",
|
|
93
|
+
"T-013",
|
|
94
|
+
"T-014",
|
|
95
|
+
"T-022"
|
|
96
|
+
],
|
|
97
|
+
"FR-010": [
|
|
98
|
+
"T-006",
|
|
99
|
+
"T-008",
|
|
100
|
+
"T-013",
|
|
101
|
+
"T-023"
|
|
102
|
+
],
|
|
103
|
+
"FR-011": [
|
|
104
|
+
"T-006",
|
|
105
|
+
"T-007",
|
|
106
|
+
"T-010",
|
|
107
|
+
"T-012"
|
|
108
|
+
],
|
|
109
|
+
"FR-012": [
|
|
110
|
+
"T-004",
|
|
111
|
+
"T-014",
|
|
112
|
+
"T-022",
|
|
113
|
+
"T-025",
|
|
114
|
+
"T-026"
|
|
115
|
+
],
|
|
116
|
+
"FR-013": [
|
|
117
|
+
"T-015",
|
|
118
|
+
"T-016",
|
|
119
|
+
"T-017",
|
|
120
|
+
"T-025"
|
|
121
|
+
],
|
|
122
|
+
"FR-014": [
|
|
123
|
+
"T-018",
|
|
124
|
+
"T-019",
|
|
125
|
+
"T-020",
|
|
126
|
+
"T-021",
|
|
127
|
+
"T-024"
|
|
128
|
+
],
|
|
129
|
+
"FR-015": [
|
|
130
|
+
"T-022",
|
|
131
|
+
"T-023",
|
|
132
|
+
"T-024",
|
|
133
|
+
"T-025",
|
|
134
|
+
"T-026"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
"missingRequirements": [],
|
|
138
|
+
"unknownRequirements": [],
|
|
139
|
+
"duplicateTaskIds": [],
|
|
140
|
+
"tasksWithoutRequirement": []
|
|
141
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "security-or-data-check",
|
|
4
|
+
"outcome": "passed",
|
|
5
|
+
"startedAt": "2026-09-28T21:34:01Z",
|
|
6
|
+
"completedAt": "2026-09-28T21:34:02Z",
|
|
7
|
+
"commands": [
|
|
8
|
+
{
|
|
9
|
+
"id": "PLAN-security-policy-tests",
|
|
10
|
+
"command": [
|
|
11
|
+
"uv",
|
|
12
|
+
"run",
|
|
13
|
+
"pytest",
|
|
14
|
+
"-q",
|
|
15
|
+
"tests/test_verification.py"
|
|
16
|
+
],
|
|
17
|
+
"blocking": true,
|
|
18
|
+
"returncode": 0,
|
|
19
|
+
"succeeded": true,
|
|
20
|
+
"timedOut": false,
|
|
21
|
+
"workingDirectory": ".",
|
|
22
|
+
"stdout": "........................................................................ [ 57%]\n..................................................... [100%]\n125 passed in 0.14s\n",
|
|
23
|
+
"stderr": ""
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"executionFindings": [],
|
|
27
|
+
"worktreeMutations": [],
|
|
28
|
+
"waiversApplied": []
|
|
29
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "test-suite",
|
|
4
|
+
"outcome": "passed",
|
|
5
|
+
"startedAt": "2026-09-28T21:34:01Z",
|
|
6
|
+
"completedAt": "2026-09-28T21:34:02Z",
|
|
7
|
+
"commands": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AUTO-PYTHON",
|
|
10
|
+
"command": [
|
|
11
|
+
"uv",
|
|
12
|
+
"run",
|
|
13
|
+
"pytest",
|
|
14
|
+
"-q",
|
|
15
|
+
"tests/test_verification.py"
|
|
16
|
+
],
|
|
17
|
+
"blocking": true,
|
|
18
|
+
"returncode": 0,
|
|
19
|
+
"succeeded": true,
|
|
20
|
+
"timedOut": false,
|
|
21
|
+
"workingDirectory": ".",
|
|
22
|
+
"stdout": "........................................................................ [ 57%]\n..................................................... [100%]\n125 passed in 0.14s\n",
|
|
23
|
+
"stderr": ""
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "AUTO-REGRESSION-PYTHON",
|
|
27
|
+
"command": [
|
|
28
|
+
"python",
|
|
29
|
+
"-m",
|
|
30
|
+
"compileall",
|
|
31
|
+
"-q",
|
|
32
|
+
"src"
|
|
33
|
+
],
|
|
34
|
+
"blocking": true,
|
|
35
|
+
"returncode": 0,
|
|
36
|
+
"succeeded": true,
|
|
37
|
+
"timedOut": false,
|
|
38
|
+
"workingDirectory": ".",
|
|
39
|
+
"stdout": "",
|
|
40
|
+
"stderr": ""
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "PLAN-plan-exists",
|
|
44
|
+
"command": [
|
|
45
|
+
"rg",
|
|
46
|
+
"--files",
|
|
47
|
+
"-g",
|
|
48
|
+
"plan.md",
|
|
49
|
+
".specify/specs/030-kks-416"
|
|
50
|
+
],
|
|
51
|
+
"blocking": true,
|
|
52
|
+
"returncode": 0,
|
|
53
|
+
"succeeded": true,
|
|
54
|
+
"timedOut": false,
|
|
55
|
+
"workingDirectory": ".",
|
|
56
|
+
"stdout": ".specify/specs/030-kks-416/plan.md\n",
|
|
57
|
+
"stderr": ""
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "PLAN-plan-sections",
|
|
61
|
+
"command": [
|
|
62
|
+
"rg",
|
|
63
|
+
"-n",
|
|
64
|
+
"^## (Summary|Validation Commands|Sécurité|Retour arrière)",
|
|
65
|
+
".specify/specs/030-kks-416/plan.md"
|
|
66
|
+
],
|
|
67
|
+
"blocking": true,
|
|
68
|
+
"returncode": 0,
|
|
69
|
+
"succeeded": true,
|
|
70
|
+
"timedOut": false,
|
|
71
|
+
"workingDirectory": ".",
|
|
72
|
+
"stdout": "7:## Summary\n203:## Validation Commands\n222:## Sécurité\n240:## Retour arrière\n",
|
|
73
|
+
"stderr": ""
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "PLAN-release-consistency",
|
|
77
|
+
"command": [
|
|
78
|
+
"uv",
|
|
79
|
+
"run",
|
|
80
|
+
"pytest",
|
|
81
|
+
"-q",
|
|
82
|
+
"tests/test_release.py"
|
|
83
|
+
],
|
|
84
|
+
"blocking": false,
|
|
85
|
+
"returncode": 0,
|
|
86
|
+
"succeeded": true,
|
|
87
|
+
"timedOut": false,
|
|
88
|
+
"workingDirectory": ".",
|
|
89
|
+
"stdout": "........... [100%]\n11 passed in 0.02s\n",
|
|
90
|
+
"stderr": ""
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"worktreeMutations": [],
|
|
94
|
+
"waiversApplied": []
|
|
95
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contractId": "KKS-416:critical:implement:v3",
|
|
4
|
+
"status": "completed",
|
|
5
|
+
"summary": "La branche uv de _validate_allowed_shape() analyse désormais une à une les options placées entre 'uv run' et l'outil. Elle s'appuie sur une allowlist fermée et exacte (UV_RUN_FLAG_OPTIONS, UV_RUN_VALUE_OPTIONS, UV_QUIET_OPTIONS, UV_PYTHON_VERSION_RE, UV_RUN_NAME_RE), puis valide l'outil imbriqué par l'appel récursif existant à _validate_command(), avec le même explicit. Les options ne sont jamais comparées à explicit, ce qui ferme le contournement R7. Une option refusée produit un message qui la nomme comme option de 'uv run', sans sa valeur attachée ni --allow-command. Une valeur manquante ou hors format et une répétition de -q/--quiet sont refusées. 'uv run <options>' sans outil garde le message existant. La guidance agents liste les options acceptées, générées depuis les mêmes constantes. 82 tests uv_run ont été ajoutés sans modifier les tests existants : 78 d'entre eux échouent sur le code 6.1.1. La version passe à 6.1.2 dans pyproject.toml, __init__.py et uv.lock (uv lock --check OK), avec une entrée CHANGELOG et docs/releases/6.1.2.md. T-017 : docs/activity-contracts.md ne décrit pas la politique en détail et docs-sync --check passe, donc aucune mise à jour de doc n'était nécessaire.",
|
|
6
|
+
"changedFiles": [
|
|
7
|
+
"src/devflow_cli/core/verification.py",
|
|
8
|
+
"tests/test_verification.py",
|
|
9
|
+
"src/devflow_cli/__init__.py",
|
|
10
|
+
"pyproject.toml",
|
|
11
|
+
"uv.lock",
|
|
12
|
+
"CHANGELOG.md",
|
|
13
|
+
"docs/releases/6.1.2.md"
|
|
14
|
+
],
|
|
15
|
+
"checks": [
|
|
16
|
+
{
|
|
17
|
+
"id": "VAL-001",
|
|
18
|
+
"command": "uv run pytest -q tests/test_verification.py",
|
|
19
|
+
"exitCode": 0,
|
|
20
|
+
"status": "passed"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "VAL-002",
|
|
24
|
+
"command": "uv run pytest -q tests/test_verification.py -k uv_run",
|
|
25
|
+
"exitCode": 0,
|
|
26
|
+
"status": "passed"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "VAL-003",
|
|
30
|
+
"command": "uv run pytest -q tests/test_release.py",
|
|
31
|
+
"exitCode": 0,
|
|
32
|
+
"status": "passed"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "VAL-004",
|
|
36
|
+
"command": "uv run pytest -q",
|
|
37
|
+
"exitCode": 0,
|
|
38
|
+
"status": "passed"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "VAL-005",
|
|
42
|
+
"command": "uv run devflow docs-sync --check",
|
|
43
|
+
"exitCode": 0,
|
|
44
|
+
"status": "passed"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "uv-lock-check",
|
|
48
|
+
"command": "uv lock --check --offline",
|
|
49
|
+
"exitCode": 0,
|
|
50
|
+
"status": "passed"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "shell-tests",
|
|
54
|
+
"command": "./tests/run-tests.sh",
|
|
55
|
+
"exitCode": 0,
|
|
56
|
+
"status": "passed"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"evidence": [
|
|
60
|
+
{
|
|
61
|
+
"id": "red-before-fix",
|
|
62
|
+
"outcome": "passed",
|
|
63
|
+
"report": "Avec src/devflow_cli/core/verification.py restauré depuis HEAD (6.1.1), 'uv run pytest -q tests/test_verification.py -k uv_run' donne 78 échecs et 4 réussites. Les 4 réussites sont des non-régressions attendues : uv run seul, uv sync, uv --offline run pytest et uv run pytest -q tests/. Le correctif a ensuite été remis en place à l'identique."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "suite-complete",
|
|
67
|
+
"outcome": "passed",
|
|
68
|
+
"report": "767 tests pytest réussis (685 avant le changement, plus 82 nouveaux) et 14 tests shell réussis via ./tests/run-tests.sh, lancé ici hors CLI Devflow. docs-sync --check : documentation synchronisée."
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"remainingRisks": [
|
|
72
|
+
"R11 : la CLI 6.1.1 qui pilote ce parcours garde le défaut. Les validations déclarées en verify ne doivent pas placer d'option entre 'uv run' et l'outil.",
|
|
73
|
+
"./tests/run-tests.sh a été lancé hors CLI pendant implement ; la politique le refuse (chemin hors DEFAULT_ALLOWED_PATHS). Sa relance en verify demande une approbation explicite, sinon il faut déclarer une exécution manuelle.",
|
|
74
|
+
"Forme attachée sans '=' (ex. '-p3.12') : le message reprend le token entier, puisque seule la partie avant '=' est isolée (D9). La valeur reste visible dans ce cas limite, sans enjeu de secret pour une version.",
|
|
75
|
+
"R8 : '--python <version>' peut télécharger un interpréteur géré par uv ; risque accepté, bloqué par --offline.",
|
|
76
|
+
"Hors périmètre : les variables d'environnement et fichiers de configuration de uv (UV_PYTHON, UV_INDEX_URL, uv.toml) ; 'uv run --no-project --python 3.12 python scripts/check_release.py' reste refusée par la politique Python existante.",
|
|
77
|
+
"La guidance ajoutée modifie le texte des contrats d'activité générés ; la suite complète le tolère, aucun fixture textuel n'a dû être ajusté.",
|
|
78
|
+
"Aucun commit créé : il faudra committer les changements après la review (pre-commit-review sur les fichiers staged)."
|
|
79
|
+
],
|
|
80
|
+
"blockers": []
|
|
81
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# KKS-416 — Accepter les options de uv dans les commandes de validation « uv run »
|
|
2
|
+
|
|
3
|
+
Source : relevé en conditions réelles sur KKS-413 (CLI 6.1.1), activité `prepare`.
|
|
4
|
+
|
|
5
|
+
## Problème
|
|
6
|
+
|
|
7
|
+
L'agent déclare la validation `uv run --no-project --python 3.12 python -m pytest -q
|
|
8
|
+
tests/test_release.py`, qui est la forme utilisée par `.github/workflows/release.yml`. Devflow la
|
|
9
|
+
refuse :
|
|
10
|
+
|
|
11
|
+
`script-on-repo: exécutable non approuvé '--no-project'; utilisez --allow-command --no-project
|
|
12
|
+
après audit` → `prepare` rejetée (`invalid-result`).
|
|
13
|
+
|
|
14
|
+
Cause : `_validate_allowed_shape()` (`src/devflow_cli/core/verification.py:352`) valide `uv run`
|
|
15
|
+
en reprenant `args[2:]` comme commande imbriquée. Toute option de `uv run` placée avant l'outil
|
|
16
|
+
est donc prise pour l'exécutable.
|
|
17
|
+
|
|
18
|
+
Deux défauts :
|
|
19
|
+
|
|
20
|
+
- une commande légitime est refusée et brûle une tentative (52 s, 0,57 USD ici) ;
|
|
21
|
+
- le message propose `--allow-command --no-project`, ce qui n'a pas de sens et oriente vers une
|
|
22
|
+
mauvaise piste.
|
|
23
|
+
|
|
24
|
+
## Attendu
|
|
25
|
+
|
|
26
|
+
- Les options de `uv run` placées avant l'outil sont passées, puis l'outil imbriqué est validé
|
|
27
|
+
exactement comme aujourd'hui (même politique, mêmes messages).
|
|
28
|
+
- Liste explicite d'options autorisées, limitée à celles qui ne changent ni le code exécuté ni
|
|
29
|
+
le répertoire ni la source des paquets : `--no-project`, `--frozen`, `--locked`, `--offline`,
|
|
30
|
+
`--no-sync`, `--isolated`, `--extra <nom>`, `--all-extras`, `--group <nom>`, `--all-groups`,
|
|
31
|
+
`--no-dev`, `-q`/`--quiet`, `--python <version>` / `-p <version>`.
|
|
32
|
+
- `--python` / `-p` : la valeur doit être un numéro de version (ex. `3.12`, `3.11.9`), jamais un
|
|
33
|
+
chemin d'interpréteur.
|
|
34
|
+
- Toute autre option reste refusée, notamment celles qui injectent du code ou changent de
|
|
35
|
+
contexte ou de source : `--with`, `--with-editable`, `--with-requirements`, `--directory`,
|
|
36
|
+
`--project`, `--script`, `--env-file`, `--index`, `--index-url`, `--extra-index-url`,
|
|
37
|
+
`--find-links`.
|
|
38
|
+
- Une option refusée donne un message qui la nomme comme option de `uv run`, sans proposer
|
|
39
|
+
`--allow-command <option>`.
|
|
40
|
+
- Aucun changement pour les autres exécutables.
|
|
41
|
+
|
|
42
|
+
## Tests attendus
|
|
43
|
+
|
|
44
|
+
- `uv run --no-project --python 3.12 python -m pytest …` acceptée.
|
|
45
|
+
- `uv run pytest …` : comportement inchangé.
|
|
46
|
+
- `uv run --with x pytest`, `uv run --directory .. pytest`, `uv run --index-url u pytest` :
|
|
47
|
+
refusées, message qui nomme l'option.
|
|
48
|
+
- `uv run --python /tmp/python pytest` : refusée (valeur qui n'est pas une version).
|
|
49
|
+
- `uv run --python` sans valeur, `uv run --no-project` sans outil : refusées.
|
|
50
|
+
- Outil imbriqué non approuvé derrière des options autorisées : toujours refusé.
|
|
51
|
+
|
|
52
|
+
## Livraison
|
|
53
|
+
|
|
54
|
+
La PR augmente la version en 6.1.2 (`pyproject.toml`, `VERSION`, `uv.lock`, `CHANGELOG.md`
|
|
55
|
+
concordants, cf. `scripts/check_release.py`). Le tag est posé à la main après le merge.
|
|
56
|
+
|
|
57
|
+
Contrainte de ce parcours : la CLI qui l'exécute (6.1.1) a encore le défaut. Les commandes de
|
|
58
|
+
validation déclarées ne doivent donc pas mettre d'options entre `uv run` et l'outil
|
|
59
|
+
(ex. `uv run pytest -q tests/…`).
|