pactkit 2.15.2__tar.gz → 2.16.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.
- {pactkit-2.15.2 → pactkit-2.16.1}/CHANGELOG.md +10 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/PKG-INFO +1 -1
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/archive/lessons_archive_202603.md +2 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/lessons.md +2 -2
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/rules.md +1 -1
- pactkit-2.16.1/docs/product/archive/archive_202607.md +28 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/context.md +4 -4
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/sprint_board.md +0 -1
- pactkit-2.16.1/docs/specs/STORY-slim-125.md +72 -0
- pactkit-2.16.1/docs/specs/STORY-slim-133.md +152 -0
- pactkit-2.16.1/docs/specs/STORY-slim-134.md +102 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/pyproject.toml +1 -1
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/__init__.py +1 -1
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/config.py +2 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/commands.py +2 -8
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/rules.py +1 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/workflows.py +145 -3
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_config.py +5 -5
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_pdca_slim.py +10 -10
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_prompt_structural_invariants.py +2 -2
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_selective_deploy.py +6 -7
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_status_command.py +2 -2
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story063_prompt_slimming.py +2 -1
- pactkit-2.16.1/tests/unit/test_story133_debug_skill.py +37 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim063.py +1 -1
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim125.py +34 -39
- pactkit-2.16.1/tests/unit/test_story_slim134_no_model_in_frontmatter.py +126 -0
- pactkit-2.15.2/docs/product/archive/archive_202607.md +0 -13
- pactkit-2.15.2/docs/specs/STORY-slim-125.md +0 -86
- {pactkit-2.15.2 → pactkit-2.16.1}/.codegraph/.gitignore +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/.github/workflows/pactkit.yml +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/.github/workflows/publish.yml +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/.gitignore +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/AGENTS.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/CONTRIBUTING.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/LICENSE +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/README.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/SECURITY.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/harness_audit.json +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/philosophy.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/assets/logo.png +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/e2e/journey.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/archive/archive_202602.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/archive/archive_202603.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/archive/archive_202604.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/archive/archive_202605.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/archive/archive_202606.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/friction-log.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/product/prd.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-089.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/BUG-slim-107.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-023.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-049.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-050.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-051.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-052.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-061.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-062.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-067.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-069.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-070.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-085.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-087.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-096.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-099.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-107.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-117.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-122.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-123.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-126.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-127.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-130.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-131.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/HOTFIX-slim-132.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-001.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-002.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-003.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-004.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-005.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-006.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-007.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-008.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-009.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-010.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-011.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-012.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-013.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-014.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-015.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-016.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-017.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-018.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-019.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-020.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-021.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-022.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-023.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-024.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-025.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-026.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-027.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-028.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-029.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-030.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-031.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-032.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-033.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-034.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-035.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-036.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-037.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-038.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-039.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-040.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-041.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-042.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-043.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-044.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-045.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-046.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-047.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-048.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-049.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-050.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-051.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-052.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-053.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-054.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-055.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-056.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-057.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-058.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-059.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-060.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-061.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-062.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-063.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-064.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-065.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-069.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-070.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-071.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-072.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-073.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-001.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-005.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-006.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-007.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-009.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-010.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-011.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-012.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-013.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-014.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-015.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-016.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-017.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-018.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-019.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-020.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-021.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-022.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-023.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-024.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-028.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-029.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-030.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-031.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-032.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-033.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-034.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-035.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-036.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-037.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-038.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-039.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-040.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-041.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-042.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-043.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-044.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-045.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-046.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-047.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-048.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-049.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-050.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-051.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-052.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-053.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-054.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-055.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-056.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-057.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-058.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-059.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-060.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-063.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-066.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-067.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-068.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-069.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-070.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-071.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-072.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-073.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-074.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-075.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-076.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-077.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-078.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-079.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-080.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-081.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-082.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-083.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-084.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-086.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-088.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-089.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-090.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-091.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-092.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-093.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-094.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-095.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-097.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-098.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-099.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-100.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-101.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-102.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-103.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-104.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-105.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-106.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-107.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-108.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-109.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-110.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-111.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-112.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-113.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-114.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-115.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-116.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-118.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-119.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-120.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-121.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-124.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-126.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-127.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-128.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-129.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/specs/STORY-slim-132.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-028_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-029_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-031_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-032_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-033_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/docs/test_cases/STORY-slim-034_case.md +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/opencode.json +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/__main__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/audit.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/backfill.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/cleaners.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/cli.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/doctor.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/garden.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/generators/adapter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/generators/deploy_base.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/generators/deployer.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/guards.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/invariants.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/lessons.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/observe.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/profiles.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/guides.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/prompts/skills.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/regression.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/schemas.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/scripts.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/analyzers/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/board.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/interface_summary.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/report.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/skills/visualize.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/utils.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/src/pactkit/validators.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/conftest.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/e2e/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/e2e/cli/test_cli_e2e.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/fixtures/api_call_parser/page.tsx +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/integration/__init__.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_audit.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_blast_radius.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_check_extensions_072_073.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_check_playbook_072_073.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_complexity.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_constitution_sharpening.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_context_gen.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_deploy_base.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_deployer_plugin.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_garden.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_init_playbook_074.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_interface_summary.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_layer_violations.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_lessons_rotation_075.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_modular_constitution.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_monorepo_detect.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_observe.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_prompt_cli_refs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_prompt_quality_075.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_release.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_report_parser.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_report_unified.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_session_context.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_slim_deps_088.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_solution_design_rule.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story040_layered_claude_md.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story046_agent_adapter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story049_community_standards.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story058_opencode_extraction.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story059_codex_removal.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story106_lateral_scan.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim011_command_rules.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_clean.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim021.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim026.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim032.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim033.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim034.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim049.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim051.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim052.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim053.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim054.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim055.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim056.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim060_codex_profile.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim065.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim076_multistack.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim078.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim079.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim080.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim081.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim082.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim083.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim084.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim095.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim102_version_marker.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim104_should_semantics.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim107.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim109_journey_spec.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim112_rules_split.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim114_journey_sync.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim119.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim120.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim121.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim126.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim127_managed_block.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim128_engineering_concerns.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_story_slim132.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_tools.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_topology_parsers_066.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_visualize_call_nested.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_visualize_chain_fix.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_visualize_modes.py +0 -0
- {pactkit-2.15.2 → pactkit-2.16.1}/tests/unit/test_visualize_multilang_chain.py +0 -0
|
@@ -4,6 +4,16 @@ All notable changes to PactKit will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## [2.16.1] - 2026-07-23
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **Bedrock VS Code plugin model compatibility** (STORY-slim-134) — Removed `model:` field from all `/project-*` command frontmatter. Claude Code was resolving `model: sonnet/opus` to Anthropic's latest model ID (e.g., `us.anthropic.claude-sonnet-4-5-20250929-v1:0`), bypassing `ANTHROPIC_DEFAULT_SONNET_MODEL` env var in VS Code plugin environments. Commands now inherit the session default model set by the user's provider env vars.
|
|
11
|
+
|
|
12
|
+
## [2.16.0] - 2026-07-13
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **`/project-debug` command** (STORY-slim-133) — Hypothesis-driven troubleshooting skill. Structured loop: Symptom → Hypothesize (≤3) → Verify (executable commands) → Narrow → Root Cause. Enforces evidence-gated file access (no aimless reading) and convergence guarantees (escalates to `/project-plan` if stuck after 3 iterations). Uses sonnet model with structured protocol.
|
|
16
|
+
|
|
7
17
|
## [2.15.2] - 2026-07-02
|
|
8
18
|
|
|
9
19
|
### Changed
|
{pactkit-2.15.2 → pactkit-2.16.1}/docs/architecture/governance/archive/lessons_archive_202603.md
RENAMED
|
@@ -66,3 +66,5 @@
|
|
|
66
66
|
| 2026-03-26 | DeployerBase static methods use lazy imports to avoid circular dependencies between deploy_base.py and deployer.py | deploy_base.py:DeployerBase.render_prompt |
|
|
67
67
|
| 2026-03-26 | Thin adapter conversion: pactkit-codex reduced from 15,356 lines (full fork) to 668 lines (thin adapter) by importing core via DeployerBase. Key: deploy_codex_playbooks needs explicit path replacement for ALL format prefixes (~/.claude/, ~/.config/opencode/ → ~/.codex/) | pactkit_codex/deployer.py:deploy_codex_playbooks |
|
|
68
68
|
| 2026-03-27 | When migrating commands to skills (subdir/SKILL.md format), all path assertions in pre-existing tests must be updated in the same commit — 17 tests broke because they asserted flat commands/*.md paths | deployer.py:_deploy_commands |
|
|
69
|
+
| 2026-03-30 | Frontend API path convention bugs are structurally preventable: ApiCallParser+api_convention_summary in trace phase surfaces prefix/wrapper conventions before implementation, eliminating a class of copy-paste path errors | visualize.py:ApiCallParser |
|
|
70
|
+
| 2026-03-31 | Rendering-only changes to visualize.py can be isolated by extracting a shared render helper (_render_nested_call_graph) that both forward and reverse BFS call — keeps AST parsing untouched | visualize.py:_render_nested_call_graph |
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
| Date | Lesson | Context |
|
|
4
4
|
|------|--------|---------|
|
|
5
|
-
| 2026-03-30 | Frontend API path convention bugs are structurally preventable: ApiCallParser+api_convention_summary in trace phase surfaces prefix/wrapper conventions before implementation, eliminating a class of copy-paste path errors | visualize.py:ApiCallParser |
|
|
6
|
-
| 2026-03-31 | Rendering-only changes to visualize.py can be isolated by extracting a shared render helper (_render_nested_call_graph) that both forward and reverse BFS call — keeps AST parsing untouched | visualize.py:_render_nested_call_graph |
|
|
7
5
|
| 2026-03-31 | dict.update() on call_edges causes last-wins overwrite when scanning same-name functions across files; use extend-merge pattern instead | visualize.py:_build_call_graph |
|
|
8
6
|
| 2026-03-31 | CLI args must mirror visualize.py standalone argparse; feature implemented in visualize.py but not exposed in cli.py is effectively dead code | cli.py:viz_parser |
|
|
9
7
|
| 2026-03-31 | tree-sitter comment nodes are direct children of function body nodes (block/statement_block), enabling scoped dispatch hint queries without parent traversal. Per-language comment query needed: Go/TS use (comment), Java uses [(line_comment)(block_comment)]. | visualize.py:_extract_calls_from_body |
|
|
@@ -53,3 +51,5 @@
|
|
|
53
51
|
| 2026-06-10 | Engineering guides are additive: new GUIDES_FILES entries auto-deploy via _deploy_guides() without deployer changes. Test impact limited to count assertions in test_story_slim128. | src/pactkit/prompts/guides.py:GUIDES_FILES |
|
|
54
52
|
| 2026-06-29 | Large @inject rules (architecture 11KB, solution 8.4KB, engineering 4.3KB) removed from COMMAND_RULES_MAP — loaded on-demand via Read in playbooks. Saves ~12,500 tokens/PDCA session. | src/pactkit/prompts/rules.py:COMMAND_RULES_MAP |
|
|
55
53
|
| 2026-07-02 | Hardcoding external tool CLI commands in SKILL_VISUALIZE_MD and deployer.py creates upgrade coupling — replaced with codegraph --help runtime discovery in _build_claude_md_managed_content() | src/pactkit/generators/deployer.py:_build_claude_md_managed_content |
|
|
54
|
+
| 2026-07-13 | Adding project-debug required updating VALID_COMMANDS in config.py, VALID_SKILLS, COMMANDS_CONTENT registration in commands.py, and COMMAND_RULES_MAP in rules.py — plus 6 test files with hardcoded count assertions | src/pactkit/config.py:VALID_COMMANDS, src/pactkit/prompts/rules.py:COMMAND_RULES_MAP |
|
|
55
|
+
| 2026-07-23 | Removing `model:` from COMMANDS_CONTENT frontmatter fixes Bedrock VS Code plugin errors — Claude Code resolves the alias to Anthropic's latest model ID, bypassing `ANTHROPIC_DEFAULT_SONNET_MODEL`; without it, commands inherit the session default model set by the user's env vars | src/pactkit/prompts/commands.py:COMMANDS_CONTENT |
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
## Invariants
|
|
17
17
|
|
|
18
|
-
1. All
|
|
18
|
+
1. All 4045+ tests must pass before any commit to `main`.
|
|
19
19
|
2. Specs (`docs/specs/`) are the source of truth — code conforms to specs, not the reverse.
|
|
20
20
|
3. CLI entry point is `pactkit` via `src/pactkit/cli.py:main`.
|
|
21
21
|
4. No runtime dependencies beyond `pyyaml`.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
### [STORY-slim-132] Decouple codegraph commands from hardcoded prompt
|
|
3
|
+
> Spec: docs/specs/STORY-slim-132.md
|
|
4
|
+
|
|
5
|
+
- [x] Replace skills.py codegraph block with help fallback
|
|
6
|
+
- [x] Replace deployer.py codegraph section
|
|
7
|
+
- [x] Update global CLAUDE.md
|
|
8
|
+
- [x] Remove MCP tool name list
|
|
9
|
+
|
|
10
|
+
### [HOTFIX-slim-130] Fix skill frontmatter parsing
|
|
11
|
+
> Spec: docs/specs/HOTFIX-slim-130.md
|
|
12
|
+
|
|
13
|
+
- [x] Move @ references below YAML frontmatter block in all project-* skills
|
|
14
|
+
|
|
15
|
+
### [STORY-slim-133] Structured Debug Skill (Hypothesis-Driven Troubleshooting)
|
|
16
|
+
> Spec: docs/specs/STORY-slim-133.md
|
|
17
|
+
|
|
18
|
+
- [x] Create SKILL.md protocol with all phases
|
|
19
|
+
- [x] Add to routing table in pactkit.md
|
|
20
|
+
- [x] Register in available-skills list
|
|
21
|
+
|
|
22
|
+
### [STORY-slim-134] remove model field from command frontmatter
|
|
23
|
+
> Spec: docs/specs/STORY-slim-134.md
|
|
24
|
+
|
|
25
|
+
- [x] 删除 commands.py frontmatter model 字段
|
|
26
|
+
- [x] 删除 workflows.py frontmatter model 字段
|
|
27
|
+
- [x] 运行测试套件
|
|
28
|
+
- [x] redeploy plugin artifact
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Project Context (Auto-generated)
|
|
2
|
-
> Last updated: 2026-07-
|
|
2
|
+
> Last updated: 2026-07-23T18:05:40+08:00 by pactkit context
|
|
3
3
|
|
|
4
4
|
## Sprint Status
|
|
5
|
-
Backlog:
|
|
5
|
+
Backlog: 5 | In Progress: 0 | Done: 0 stories
|
|
6
6
|
|
|
7
7
|
## Current Stories
|
|
8
8
|
None
|
|
@@ -16,11 +16,11 @@ None
|
|
|
16
16
|
* main
|
|
17
17
|
|
|
18
18
|
## Key Decisions
|
|
19
|
-
- codegraph sync must be enforced by code (pactkit visualize/sync), not by prompt instructions — prompt-only enforcement is unreliable for deterministic operations
|
|
20
|
-
- Managed-block pattern (start/end markers + regex replace) is the canonical way to update mixed-ownership files — same pattern for CLAUDE.md and CLAUDE.local.md
|
|
21
19
|
- Engineering guides are additive: new GUIDES_FILES entries auto-deploy via _deploy_guides() without deployer changes. Test impact limited to count assertions in test_story_slim128.
|
|
22
20
|
- Large @inject rules (architecture 11KB, solution 8.4KB, engineering 4.3KB) removed from COMMAND_RULES_MAP — loaded on-demand via Read in playbooks. Saves ~12,500 tokens/PDCA session.
|
|
23
21
|
- Hardcoding external tool CLI commands in SKILL_VISUALIZE_MD and deployer.py creates upgrade coupling — replaced with codegraph --help runtime discovery in _build_claude_md_managed_content()
|
|
22
|
+
- Adding project-debug required updating VALID_COMMANDS in config.py, VALID_SKILLS, COMMANDS_CONTENT registration in commands.py, and COMMAND_RULES_MAP in rules.py — plus 6 test files with hardcoded count assertions
|
|
23
|
+
- Removing `model:` from COMMANDS_CONTENT frontmatter fixes Bedrock VS Code plugin errors — Claude Code resolves the alias to Anthropic's latest model ID, bypassing `ANTHROPIC_DEFAULT_SONNET_MODEL`; without it, commands inherit the session default model set by the user's env vars
|
|
24
24
|
|
|
25
25
|
## Next Recommended Action
|
|
26
26
|
`/project-plan`
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# STORY-slim-125: Add model frontmatter to all PDCA command/skill prompts
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| ID | STORY-slim-125 |
|
|
6
|
+
| Status | Done |
|
|
7
|
+
| Priority | P1 |
|
|
8
|
+
| Release | 2.14.0 |
|
|
9
|
+
|
|
10
|
+
## Background
|
|
11
|
+
|
|
12
|
+
Originally (v2.14.0), all PDCA command frontmatter included a `model:` field to ensure consistent model routing. However, this caused breakage in enterprise Bedrock deployments: Claude Code resolves `model: sonnet` to the latest Anthropic model ID (e.g., `us.anthropic.claude-sonnet-4-5-20250929-v1:0`), which may not be available in a user's Bedrock deployment.
|
|
13
|
+
|
|
14
|
+
Superseded by STORY-slim-134 (v2.17.0): the `model:` field is removed from all command frontmatter. Commands now inherit the user's session-level default model, which is controlled by environment variables (`ANTHROPIC_DEFAULT_SONNET_MODEL`, etc.) that the user configures for their provider.
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
|
|
18
|
+
### R1: No PDCA command has model frontmatter (MUST)
|
|
19
|
+
|
|
20
|
+
No command/skill prompt in `src/pactkit/prompts/commands.py` or `src/pactkit/prompts/workflows.py` MUST include a `model:` field in its frontmatter block. Commands inherit the session default model.
|
|
21
|
+
|
|
22
|
+
### R2: Deploy produces no model field in SKILL.md (MUST)
|
|
23
|
+
|
|
24
|
+
After `pactkit update`, no deployed `~/.claude/skills/project-*/SKILL.md` MUST contain a `model:` line in its YAML frontmatter.
|
|
25
|
+
|
|
26
|
+
## Acceptance Criteria
|
|
27
|
+
|
|
28
|
+
### AC1: No command has model field (R1)
|
|
29
|
+
|
|
30
|
+
- **Given** the source prompts in `commands.py` and `workflows.py`
|
|
31
|
+
- **When** their frontmatter is parsed
|
|
32
|
+
- **Then** no command prompt contains a `model:` field
|
|
33
|
+
|
|
34
|
+
### AC2: Deploy produces no model in SKILL.md (R2)
|
|
35
|
+
|
|
36
|
+
- **Given** `pactkit update` is run
|
|
37
|
+
- **When** deployed SKILL.md files are inspected
|
|
38
|
+
- **Then** no `project-*` skill contains `model:` in frontmatter
|
|
39
|
+
|
|
40
|
+
### AC3: project-design has no model field (R1)
|
|
41
|
+
|
|
42
|
+
- **Given** the `project-design` prompt in `workflows.py`
|
|
43
|
+
- **When** its frontmatter is read
|
|
44
|
+
- **Then** no `model:` field is present
|
|
45
|
+
|
|
46
|
+
## Target Call Chain
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
commands.py / workflows.py (prompt string with frontmatter)
|
|
50
|
+
→ deployer.py _deploy_skills()
|
|
51
|
+
→ writes ~/.claude/skills/project-*/SKILL.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Implementation Steps
|
|
55
|
+
|
|
56
|
+
| Step | File | Action | Dependencies | Risk |
|
|
57
|
+
|------|------|--------|-------------|------|
|
|
58
|
+
| 1 | `src/pactkit/prompts/commands.py` | Add `model: sonnet` to check, done, clarify, init, release, pr frontmatter | None | Low |
|
|
59
|
+
| 2 | `src/pactkit/prompts/workflows.py` | Add `model: sonnet` to sprint, hotfix; `model: opus` to design | None | Low |
|
|
60
|
+
| 3 | `tests/unit/` | Test that all command prompts have model field | Steps 1-2 | Low |
|
|
61
|
+
|
|
62
|
+
## Security Scope
|
|
63
|
+
|
|
64
|
+
| Check | Applicable | Reason |
|
|
65
|
+
|-------|------------|--------|
|
|
66
|
+
| SEC-1 through SEC-8 | N/A | Prompt-only changes, no user input, no external systems |
|
|
67
|
+
|
|
68
|
+
## Out of Scope
|
|
69
|
+
|
|
70
|
+
- Changing embedded skill models (pactkit-trace, pactkit-draw, etc.) — already assigned
|
|
71
|
+
- Validating model availability at runtime (Claude Code handles gracefully)
|
|
72
|
+
- Adding model field to agent definitions (separate mechanism via `agent_models` config)
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# STORY-slim-133: Structured Debug Skill with Hypothesis-Driven Troubleshooting
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| ID | STORY-slim-133 |
|
|
6
|
+
| Status | Done |
|
|
7
|
+
| Priority | P1 |
|
|
8
|
+
| Release | 2.16.0 |
|
|
9
|
+
|
|
10
|
+
## Background
|
|
11
|
+
|
|
12
|
+
当前 troubleshooting 流程存在两个核心问题:
|
|
13
|
+
1. **假设发散不收敛** — AI 列出大量可能原因但不逐个验证排除,导致排查停滞
|
|
14
|
+
2. **信息过载** — 漫无目的地 grep/read 大量文件,消耗 token 但不推进定位
|
|
15
|
+
|
|
16
|
+
现有工具覆盖不了这个场景:
|
|
17
|
+
- `pactkit-trace` 是静态分析工具,前提是"已知要看哪里"
|
|
18
|
+
- `pactkit-doctor` 仅做项目健康检查
|
|
19
|
+
- `system-medic` 仅处理环境/配置问题
|
|
20
|
+
- `project-hotfix` 前提是"已定位到问题"
|
|
21
|
+
|
|
22
|
+
需要一个**从症状到根因**的结构化排查 skill,强制走「假设→验证→缩小」循环,用 opus 模型的强推理能力替代漫无目的的搜索。
|
|
23
|
+
|
|
24
|
+
## Requirements
|
|
25
|
+
|
|
26
|
+
### R1: Hypothesis-Driven Loop (MUST)
|
|
27
|
+
|
|
28
|
+
Skill MUST enforce a structured loop: Observe → Hypothesize (≤3) → Verify (executable command per hypothesis) → Narrow. Each hypothesis MUST have a concrete verification step (a runnable command or code inspection with expected vs actual outcome). Skill MUST NOT proceed to the next hypothesis without executing verification on the current one first.
|
|
29
|
+
|
|
30
|
+
### R2: Evidence-Gated File Access (MUST)
|
|
31
|
+
|
|
32
|
+
Every file read MUST be justified by a stated hypothesis or evidence trail. Skill MUST NOT read files "to get familiar with the codebase" or "to understand the context" without linking to a specific hypothesis being tested — violation of this produces the exact "查不到点子上" problem this skill solves.
|
|
33
|
+
|
|
34
|
+
### R3: Structured Input Protocol (MUST)
|
|
35
|
+
|
|
36
|
+
Skill MUST provide a structured input template that minimizes user typing while capturing critical debugging info:
|
|
37
|
+
- **Symptom**: What's happening (error message, unexpected behavior)
|
|
38
|
+
- **Expected**: What should happen instead
|
|
39
|
+
- **Reproduction**: How to trigger it (command, URL, input)
|
|
40
|
+
- **Context**: What changed recently (optional)
|
|
41
|
+
|
|
42
|
+
When user provides raw text instead of structured input, skill MUST extract and organize into this structure before proceeding.
|
|
43
|
+
|
|
44
|
+
### R4: Convergence Guarantee (MUST)
|
|
45
|
+
|
|
46
|
+
Each loop iteration MUST reduce the hypothesis space. If after 3 iterations no hypothesis is confirmed, skill MUST escalate:
|
|
47
|
+
- **Round 1 escalation**: ask user for more information (additional symptoms, reproduction steps)
|
|
48
|
+
- **Round 2 escalation (still stuck)**: nudge to `/project-plan` — "This looks like a cross-module issue that needs full architectural trace."
|
|
49
|
+
|
|
50
|
+
MUST NOT loop indefinitely on the same hypothesis set. The skill's job is fast triage, not deep surgery.
|
|
51
|
+
|
|
52
|
+
### R5: Model Selection (MUST)
|
|
53
|
+
|
|
54
|
+
Skill MUST specify `model: sonnet` in SKILL.md frontmatter. Sonnet + structured protocol handles 80% of common bugs. For complex cross-module issues that don't converge, the escalation path is `/project-plan` (full PDCA with trace), not model upgrade.
|
|
55
|
+
|
|
56
|
+
### R6: Concluding Report (MUST)
|
|
57
|
+
|
|
58
|
+
Upon locating root cause, skill MUST output a structured conclusion:
|
|
59
|
+
- **Root Cause**: One-sentence statement
|
|
60
|
+
- **Evidence**: The verification step that confirmed it
|
|
61
|
+
- **Fix Path**: Concrete next action (file:line to change, or command to run)
|
|
62
|
+
- **PDCA Nudge**: Recommend `/project-hotfix` or `/project-act` as appropriate
|
|
63
|
+
|
|
64
|
+
### R7: Codegraph Integration (SHOULD)
|
|
65
|
+
|
|
66
|
+
If `.codegraph/` exists, skill SHOULD prefer codegraph for caller/callee analysis over grep during hypothesis verification. Fallback to grep when codegraph is unavailable.
|
|
67
|
+
|
|
68
|
+
## Acceptance Criteria
|
|
69
|
+
|
|
70
|
+
### AC1: Hypothesis Loop Enforced (R1, R4)
|
|
71
|
+
|
|
72
|
+
- **Given** user invokes `/project-debug "tests fail with KeyError on user_id"`
|
|
73
|
+
- **When** the skill starts processing
|
|
74
|
+
- **Then** it outputs: (1) structured symptom summary, (2) ≤3 ranked hypotheses each with a verification command, (3) executes verification commands in order, (4) narrows based on results, (5) converges to root cause within ≤5 iterations
|
|
75
|
+
|
|
76
|
+
### AC2: No Aimless File Reading (R2)
|
|
77
|
+
|
|
78
|
+
- **Given** the skill is in a verification phase
|
|
79
|
+
- **When** it needs to read a file
|
|
80
|
+
- **Then** the read is preceded by a one-line justification linking to a hypothesis (e.g., "H2 verification: checking if `models.py:45` validates user_id before access")
|
|
81
|
+
|
|
82
|
+
### AC3: Structured Input Extraction (R3)
|
|
83
|
+
|
|
84
|
+
- **Given** user provides unstructured text like "部署之后接口报500了"
|
|
85
|
+
- **When** the skill receives this input
|
|
86
|
+
- **Then** it extracts and formats into the 4-field template, asks for missing critical fields (Reproduction), and does NOT start hypothesizing until Symptom is clear
|
|
87
|
+
|
|
88
|
+
### AC4: Convergence Escalation (R4)
|
|
89
|
+
|
|
90
|
+
- **Given** 3 iterations have passed without confirming a hypothesis
|
|
91
|
+
- **When** the skill enters the 4th iteration
|
|
92
|
+
- **Then** it asks user for more info; if still stuck after 1 more round, it nudges `/project-plan` with a summary of what was tried and ruled out
|
|
93
|
+
|
|
94
|
+
### AC5: Sonnet Model with PDCA Escalation (R5)
|
|
95
|
+
|
|
96
|
+
- **Given** the SKILL.md file exists at `~/.claude/skills/project-debug/SKILL.md`
|
|
97
|
+
- **When** inspecting the frontmatter
|
|
98
|
+
- **Then** the `model` field is set to `sonnet`
|
|
99
|
+
|
|
100
|
+
### AC6: Conclusion Report Format (R6)
|
|
101
|
+
|
|
102
|
+
- **Given** root cause has been identified through the verification loop
|
|
103
|
+
- **When** the skill outputs its conclusion
|
|
104
|
+
- **Then** it includes all 4 fields: Root Cause (one sentence), Evidence (which verification confirmed it), Fix Path (file:line or command), and PDCA Nudge (appropriate command recommendation)
|
|
105
|
+
|
|
106
|
+
### AC7: Codegraph Preferred When Available (R7)
|
|
107
|
+
|
|
108
|
+
- **Given** the project has `.codegraph/` directory
|
|
109
|
+
- **When** the skill needs to trace callers/callees during verification
|
|
110
|
+
- **Then** it uses `codegraph` CLI instead of raw grep
|
|
111
|
+
|
|
112
|
+
## Target Call Chain
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
User invokes /project-debug "$symptom"
|
|
116
|
+
→ SKILL.md protocol loaded (model: opus)
|
|
117
|
+
→ Phase 1: Symptom Structuring (extract/confirm 4-field template)
|
|
118
|
+
→ Phase 2: Hypothesis Generation (≤3, ranked by probability)
|
|
119
|
+
→ Phase 3: Verification Loop (execute → observe → narrow)
|
|
120
|
+
└─ Loop until: root cause confirmed OR escalation triggered
|
|
121
|
+
→ Phase 4: Conclusion Report (root cause + fix path + PDCA nudge)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
No code implementation needed — this is a pure SKILL.md protocol (prompt-as-code for diagnostic reasoning).
|
|
125
|
+
|
|
126
|
+
## Implementation Steps
|
|
127
|
+
|
|
128
|
+
| Step | File | Action | Dependencies | Risk |
|
|
129
|
+
|------|------|--------|-------------|------|
|
|
130
|
+
| 1 | `~/.claude/skills/project-debug/SKILL.md` | Create skill protocol with all phases | None | Low |
|
|
131
|
+
| 2 | `~/.claude/rules/pactkit.md` | Add command to routing table | Step 1 | Low |
|
|
132
|
+
| 3 | Board | Register skill in available-skills | Step 1 | Low |
|
|
133
|
+
|
|
134
|
+
## Security Scope
|
|
135
|
+
|
|
136
|
+
| Check | Applicable | Reason |
|
|
137
|
+
|-------|------------|--------|
|
|
138
|
+
| SEC-1 (Injection) | N/A | No user input passed to shell unsanitized — verification commands are AI-composed |
|
|
139
|
+
| SEC-2 (Auth) | N/A | No auth logic involved |
|
|
140
|
+
| SEC-3 (Data Exposure) | N/A | Reads local files only |
|
|
141
|
+
| SEC-4 (XSS) | N/A | No web output |
|
|
142
|
+
| SEC-5 (Config) | N/A | No config files modified |
|
|
143
|
+
| SEC-6 (Crypto) | N/A | No crypto involved |
|
|
144
|
+
| SEC-7 (Logging) | N/A | No logging changes |
|
|
145
|
+
| SEC-8 (SSRF) | N/A | No network requests |
|
|
146
|
+
|
|
147
|
+
## Out of Scope
|
|
148
|
+
|
|
149
|
+
- 自动修复代码 — skill 仅定位问题,修复走 `/project-hotfix` 或 `/project-act`
|
|
150
|
+
- 环境/配置问题 — 已有 `system-medic` + `pactkit-doctor` 覆盖
|
|
151
|
+
- 性能分析 — 属于另一个专项 skill 的范畴
|
|
152
|
+
- CI/CD pipeline 问题 — 超出本地 debug 范围
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# STORY-slim-134: remove model field from command frontmatter
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| ID | STORY-slim-134 |
|
|
6
|
+
| Status | Done |
|
|
7
|
+
| Priority | P1 |
|
|
8
|
+
| Release | 2.17.0 |
|
|
9
|
+
|
|
10
|
+
## Background
|
|
11
|
+
|
|
12
|
+
Claude Code 在读取 command frontmatter 中的 `model: sonnet` / `model: opus` 字段时,会将 alias 解析成 Anthropic 官方最新的 model ID(如 `us.anthropic.claude-sonnet-4-5-20250929-v1:0`)。但企业用户通过 Bedrock 代理(如 genai-nexus)接入时,其部署往往只启用了较旧版本的模型,导致 VS Code 插件环境下所有 `/project-*` 命令都因模型不可用而报错。
|
|
13
|
+
|
|
14
|
+
移除 frontmatter 中的 `model:` 字段后,command 会继承用户当前 session 的默认模型(由用户的 `ANTHROPIC_DEFAULT_SONNET_MODEL` 等环境变量或 Claude Code 设置控制),不再主动切换,从而避免 Bedrock 兼容性问题。
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
|
|
18
|
+
### R1: 移除 prompts/commands.py 中的 model 字段 (MUST)
|
|
19
|
+
|
|
20
|
+
删除 `src/pactkit/prompts/commands.py` 中所有 command 字符串 frontmatter 里的 `model:` 行。涉及 9 处(`model: opus` × 2,`model: sonnet` × 7)。
|
|
21
|
+
|
|
22
|
+
### R2: 移除 prompts/workflows.py 中的 model 字段 (MUST)
|
|
23
|
+
|
|
24
|
+
删除 `src/pactkit/prompts/workflows.py` 中所有 command 字符串 frontmatter 里的 `model:` 行。涉及 4 处(`model: opus` × 1,`model: sonnet` × 3)。
|
|
25
|
+
|
|
26
|
+
### R3: 同步更新 pactkit-plugin/commands/ (MUST)
|
|
27
|
+
|
|
28
|
+
执行 `pactkit deploy --format plugin` 重新生成 `pactkit-plugin/commands/*.md`,确保 generated artifact 与 source 一致。
|
|
29
|
+
|
|
30
|
+
### R4: 不影响 sprint 内联 model 引用 (MUST NOT)
|
|
31
|
+
|
|
32
|
+
`workflows.py` 中 sprint 命令正文里对 `model: sonnet` 的**文本说明**(如 `A1 model: opus`)不得修改——这些是给 LLM 读的 prompt 指令,不是 frontmatter 字段。
|
|
33
|
+
|
|
34
|
+
## Acceptance Criteria
|
|
35
|
+
|
|
36
|
+
### AC1: commands.py 无 model 字段 (R1)
|
|
37
|
+
|
|
38
|
+
- **Given** `src/pactkit/prompts/commands.py` 中各 command 字符串的 YAML frontmatter
|
|
39
|
+
- **When** 检查每个 `---` 块内的字段列表
|
|
40
|
+
- **Then** 不存在任何 `model:` 行;`description:` 和 `allowed-tools:` 字段保持不变
|
|
41
|
+
|
|
42
|
+
### AC2: workflows.py 无 model 字段 (R2)
|
|
43
|
+
|
|
44
|
+
- **Given** `src/pactkit/prompts/workflows.py` 中各 command 字符串的 YAML frontmatter
|
|
45
|
+
- **When** 检查每个 `---` 块内的字段列表
|
|
46
|
+
- **Then** 不存在任何 `model:` 行;正文中对模型的文字引用保持不变
|
|
47
|
+
|
|
48
|
+
### AC3: plugin artifact 与 source 一致 (R3)
|
|
49
|
+
|
|
50
|
+
- **Given** R1/R2 修改完成后执行 `pactkit deploy --format plugin`
|
|
51
|
+
- **When** 检查 `pactkit-plugin/commands/*.md` 各文件的 frontmatter
|
|
52
|
+
- **Then** 所有文件 frontmatter 中均无 `model:` 字段
|
|
53
|
+
|
|
54
|
+
### AC5: sprint 正文模型引用不变 (R4)
|
|
55
|
+
|
|
56
|
+
- **Given** R1/R2 修改完成
|
|
57
|
+
- **When** 检查 `workflows.py` 中 sprint 命令正文(非 frontmatter)的内容
|
|
58
|
+
- **Then** `A1 (system-architect, model: opus)`、`A2 (senior-developer, model: sonnet)` 等文字说明保持不变
|
|
59
|
+
|
|
60
|
+
### AC4: 测试套件全通过 (R1-R4)
|
|
61
|
+
|
|
62
|
+
- **Given** 修改完成
|
|
63
|
+
- **When** 运行 `.venv/bin/pytest tests/ -v`
|
|
64
|
+
- **Then** 所有测试通过,无新失败
|
|
65
|
+
|
|
66
|
+
## Target Call Chain
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
src/pactkit/prompts/commands.py (COMMANDS_CONTENT 字符串常量,含 model: 字段)
|
|
70
|
+
src/pactkit/prompts/workflows.py (SPRINT_PROMPT / HOTFIX_PROMPT 等,含 model: 字段)
|
|
71
|
+
→ deployer._deploy_commands() — 原样写出字符串到文件
|
|
72
|
+
→ pactkit-plugin/commands/*.md (generated artifact)
|
|
73
|
+
→ Claude Code frontmatter 解析 → model alias → Bedrock model ID
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Implementation Steps
|
|
77
|
+
|
|
78
|
+
| Step | File | Action | Dependencies | Risk |
|
|
79
|
+
|------|------|--------|-------------|------|
|
|
80
|
+
| 1 | `src/pactkit/prompts/commands.py` | 删除所有 frontmatter 中的 `model:` 行(9 处) | None | Low |
|
|
81
|
+
| 2 | `src/pactkit/prompts/workflows.py` | 删除所有 frontmatter 中的 `model:` 行(4 处) | Step 1 | Low |
|
|
82
|
+
| 3 | 运行测试 | `.venv/bin/pytest tests/ -v` 确保无回归 | Step 1-2 | Low |
|
|
83
|
+
| 4 | `pactkit-plugin/commands/` | `pactkit deploy --format plugin` 重新生成 artifact | Step 1-2 | Low |
|
|
84
|
+
|
|
85
|
+
## Security Scope
|
|
86
|
+
|
|
87
|
+
| Check | Applicable | Reason |
|
|
88
|
+
|-------|------------|--------|
|
|
89
|
+
| SEC-1 | N/A | 仅删除字符串字段,无新代码逻辑引入 |
|
|
90
|
+
| SEC-2 | N/A | 无输入处理变更 |
|
|
91
|
+
| SEC-3 | N/A | 无数据库相关 |
|
|
92
|
+
| SEC-4 | N/A | 无前端文件 |
|
|
93
|
+
| SEC-5 | N/A | 无认证/会话逻辑变更 |
|
|
94
|
+
| SEC-6 | N/A | 无 API/路由变更 |
|
|
95
|
+
| SEC-7 | N/A | 无错误处理变更 |
|
|
96
|
+
| SEC-8 | N/A | 无依赖变更 |
|
|
97
|
+
|
|
98
|
+
## Out of Scope
|
|
99
|
+
|
|
100
|
+
- 不修改 `deployer.py` 中的 frontmatter 处理逻辑
|
|
101
|
+
- 不为用户提供 model fallback 配置机制(该需求已明确放弃)
|
|
102
|
+
- 不修改 sprint/hotfix 正文中对模型的文字说明(R4)
|
|
@@ -40,6 +40,7 @@ VALID_COMMANDS = frozenset(
|
|
|
40
40
|
"project-clarify",
|
|
41
41
|
"project-release",
|
|
42
42
|
"project-pr",
|
|
43
|
+
"project-debug",
|
|
43
44
|
}
|
|
44
45
|
)
|
|
45
46
|
|
|
@@ -71,6 +72,7 @@ VALID_SKILLS = frozenset(
|
|
|
71
72
|
"project-clarify",
|
|
72
73
|
"project-release",
|
|
73
74
|
"project-pr",
|
|
75
|
+
"project-debug",
|
|
74
76
|
}
|
|
75
77
|
)
|
|
76
78
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from pactkit.prompts.workflows import (
|
|
2
|
+
DEBUG_PROMPT,
|
|
2
3
|
DESIGN_PROMPT,
|
|
3
4
|
HOTFIX_PROMPT,
|
|
4
5
|
SPRINT_PROMPT,
|
|
@@ -8,7 +9,6 @@ COMMANDS_CONTENT = {
|
|
|
8
9
|
"project-plan.md": """---
|
|
9
10
|
description: "Analyze requirements, create Spec and Story"
|
|
10
11
|
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep]
|
|
11
|
-
model: opus
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# Command: Plan (v1.3.0 Integrated Trace)
|
|
@@ -166,7 +166,6 @@ model: opus
|
|
|
166
166
|
"project-act.md": """---
|
|
167
167
|
description: "Implement code per Spec, strict TDD"
|
|
168
168
|
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep]
|
|
169
|
-
model: sonnet
|
|
170
169
|
---
|
|
171
170
|
|
|
172
171
|
# Command: Act (v1.3.0 Stack-Aware)
|
|
@@ -287,7 +286,6 @@ model: sonnet
|
|
|
287
286
|
"project-check.md": """---
|
|
288
287
|
description: "QA verification: security scan, code quality scan, Spec alignment"
|
|
289
288
|
allowed-tools: [Read, Bash, Grep, Glob]
|
|
290
|
-
model: sonnet
|
|
291
289
|
---
|
|
292
290
|
|
|
293
291
|
# Command: Check (v1.3.0 Deep QA)
|
|
@@ -501,7 +499,6 @@ For each finding, assign a severity (P0-P3). Flag issues that may cause silent f
|
|
|
501
499
|
"project-done.md": """---
|
|
502
500
|
description: "Code cleanup, Board update, Git commit"
|
|
503
501
|
allowed-tools: [Read, Write, Edit, Bash, Glob]
|
|
504
|
-
model: sonnet
|
|
505
502
|
---
|
|
506
503
|
|
|
507
504
|
# Command: Done (v1.3.0 Smart Gatekeeper)
|
|
@@ -672,7 +669,6 @@ Run `pactkit coverage-gate <changed-files>` to verify coverage on changed source
|
|
|
672
669
|
"project-clarify.md": """---
|
|
673
670
|
description: "Standalone requirement clarification before planning"
|
|
674
671
|
allowed-tools: [Read, Bash, Glob, Grep]
|
|
675
|
-
model: sonnet
|
|
676
672
|
---
|
|
677
673
|
|
|
678
674
|
# Command: Clarify (v1.1.0)
|
|
@@ -713,7 +709,6 @@ model: sonnet
|
|
|
713
709
|
"project-init.md": """---
|
|
714
710
|
description: "Initialize project scaffolding and governance structure"
|
|
715
711
|
allowed-tools: [Read, Write, Edit, Bash, Glob]
|
|
716
|
-
model: sonnet
|
|
717
712
|
---
|
|
718
713
|
|
|
719
714
|
# Command: Init (v1.3.0 Rich)
|
|
@@ -786,7 +781,6 @@ model: sonnet
|
|
|
786
781
|
"project-release.md": """---
|
|
787
782
|
description: "Version release: snapshot, archive, Git tag, and GitHub Release"
|
|
788
783
|
allowed-tools: [Read, Write, Edit, Bash, Glob]
|
|
789
|
-
model: sonnet
|
|
790
784
|
---
|
|
791
785
|
|
|
792
786
|
# Command: Release (v1.4.0)
|
|
@@ -809,7 +803,6 @@ model: sonnet
|
|
|
809
803
|
"project-pr.md": """---
|
|
810
804
|
description: "Push branch and create pull request via gh CLI"
|
|
811
805
|
allowed-tools: [Read, Write, Edit, Bash, Glob]
|
|
812
|
-
model: sonnet
|
|
813
806
|
---
|
|
814
807
|
|
|
815
808
|
# Command: PR (v1.4.0)
|
|
@@ -868,3 +861,4 @@ model: sonnet
|
|
|
868
861
|
COMMANDS_CONTENT["project-sprint.md"] = SPRINT_PROMPT
|
|
869
862
|
COMMANDS_CONTENT["project-hotfix.md"] = HOTFIX_PROMPT
|
|
870
863
|
COMMANDS_CONTENT["project-design.md"] = DESIGN_PROMPT
|
|
864
|
+
COMMANDS_CONTENT["project-debug.md"] = DEBUG_PROMPT
|
|
@@ -857,6 +857,7 @@ COMMAND_RULES_MAP = {
|
|
|
857
857
|
"core", "sectional", "hierarchy", "atlas", "routing", "workflow",
|
|
858
858
|
"mcp", "shared", "credential",
|
|
859
859
|
],
|
|
860
|
+
"project-debug": ["core", "shared", "credential"],
|
|
860
861
|
}
|
|
861
862
|
|
|
862
863
|
# Managed file prefixes for rules/ directory cleanup (deployer will clean these, leave user files intact)
|