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