pactkit 2.10.2__tar.gz → 2.10.3__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.10.2 → pactkit-2.10.3}/.opencode/pactkit.yaml +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/CHANGELOG.md +5 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/PKG-INFO +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/archive/lessons_archive_202603.md +1 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/lessons.md +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/rules.md +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/context.md +2 -2
- {pactkit-2.10.2 → pactkit-2.10.3}/pyproject.toml +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/__init__.py +1 -1
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/cleaners.py +25 -2
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_clean.py +44 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/.github/workflows/pactkit.yml +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/.github/workflows/publish.yml +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/.gitignore +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/AGENTS.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/CONTRIBUTING.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/LICENSE +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/README.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/SECURITY.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/harness_audit.json +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/philosophy.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/assets/logo.png +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/archive/archive_202602.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/archive/archive_202603.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/archive/archive_202604.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/friction-log.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/prd.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/product/sprint_board.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/BUG-slim-089.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-023.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-049.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-050.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-051.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-052.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-061.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-062.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-067.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-069.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-070.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-085.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-087.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-096.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/HOTFIX-slim-099.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-001.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-002.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-003.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-004.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-005.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-006.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-007.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-008.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-009.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-010.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-011.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-012.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-013.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-014.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-015.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-016.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-017.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-018.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-019.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-020.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-021.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-022.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-023.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-024.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-025.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-026.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-027.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-028.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-029.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-030.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-031.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-032.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-033.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-034.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-035.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-036.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-037.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-038.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-039.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-040.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-041.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-042.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-043.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-044.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-045.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-046.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-047.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-048.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-049.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-050.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-051.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-052.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-053.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-054.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-055.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-056.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-057.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-058.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-059.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-060.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-061.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-062.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-063.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-064.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-065.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-069.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-070.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-071.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-072.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-073.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-001.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-005.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-006.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-007.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-009.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-010.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-011.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-012.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-013.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-014.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-015.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-016.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-017.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-018.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-019.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-020.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-021.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-022.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-023.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-024.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-028.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-029.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-030.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-031.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-032.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-033.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-034.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-035.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-036.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-037.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-038.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-039.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-040.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-041.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-042.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-043.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-044.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-045.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-046.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-047.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-048.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-049.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-050.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-051.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-052.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-053.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-054.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-055.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-056.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-057.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-058.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-059.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-060.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-063.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-066.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-067.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-068.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-069.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-070.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-071.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-072.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-073.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-074.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-075.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-076.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-077.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-078.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-079.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-080.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-081.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-082.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-083.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-084.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-086.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-088.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-089.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-090.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-091.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-092.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-093.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-094.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-095.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-097.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-098.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/specs/STORY-slim-099.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-028_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-029_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-031_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-032_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-033_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/docs/test_cases/STORY-slim-034_case.md +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/opencode.json +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/__main__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/audit.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/backfill.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/cli.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/doctor.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/garden.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/generators/adapter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/generators/deploy_base.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/generators/deployer.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/guards.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/invariants.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/lessons.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/observe.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/profiles.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/commands.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/rules.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/skills.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/prompts/workflows.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/regression.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/schemas.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/scripts.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/analyzers/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/board.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/report.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/skills/visualize.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/utils.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/src/pactkit/validators.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/conftest.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/e2e/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/e2e/cli/test_cli_e2e.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/fixtures/api_call_parser/page.tsx +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/integration/__init__.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_audit.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_blast_radius.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_check_extensions_072_073.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_check_playbook_072_073.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_complexity.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_constitution_sharpening.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_context_gen.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_deploy_base.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_deployer_plugin.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_garden.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_init_playbook_074.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_layer_violations.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_lessons_rotation_075.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_modular_constitution.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_monorepo_detect.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_observe.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_pdca_slim.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_prompt_cli_refs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_prompt_quality_075.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_prompt_structural_invariants.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_release.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_report_parser.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_report_unified.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_selective_deploy.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_session_context.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_slim_deps_088.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_status_command.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story027_hooks.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story040_layered_claude_md.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story046_agent_adapter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story049_community_standards.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story058_opencode_extraction.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story059_codex_removal.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story063_prompt_slimming.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim011_command_rules.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim021.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim026.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim032.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim033.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim034.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim049.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim051.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim052.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim053.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim054.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim055.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim056.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim060_codex_profile.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim063.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim065.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim076_multistack.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim078.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim079.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim080.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim081.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim082.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim083.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim084.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim095.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_tools.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_topology_parsers_066.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_visualize_call_nested.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_visualize_chain_fix.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_visualize_modes.py +0 -0
- {pactkit-2.10.2 → pactkit-2.10.3}/tests/unit/test_visualize_multilang_chain.py +0 -0
|
@@ -4,6 +4,11 @@ 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.10.3] - 2026-04-20
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **Protected parent dirs in `pactkit clean`** — `rglob("dist")` was matching `node_modules/*/dist`, destroying npm dependency internals. Added `_inside_protected()` guard for `node_modules/` and `.git/`; explicit path patterns (e.g., `node_modules/.cache`) now use direct matching instead of rglob.
|
|
11
|
+
|
|
7
12
|
## [2.10.2] - 2026-04-20
|
|
8
13
|
|
|
9
14
|
### Added
|
{pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/archive/lessons_archive_202603.md
RENAMED
|
@@ -46,3 +46,4 @@
|
|
|
46
46
|
| 2026-03-24 | Plan Phase 3.2a scaffold-first: replaced AI freeform Write with {SCAFFOLD_CMD} create_spec + Read + Edit in src/pactkit/prompts/commands.py. Removed 3 inline format examples (~240 chars). Pre-existing tests (test_bug034, test_story055_commands, test_story_slim019) needed updates for new checkpoint wording. | src/pactkit/prompts/commands.py:Phase3.2a |
|
|
47
47
|
| 2026-03-24 | spec_linter.py _check_acceptance_criteria: per-subsection GWT check must use raw_text (with code blocks) not stripped text, because specs legitimately wrap Gherkin in fenced blocks | spec_linter.py:_check_acceptance_criteria |
|
|
48
48
|
| 2026-03-24 | Standalone scripts (visualize.py) need try/except ImportError guards for yaml.safe_load when reading pactkit.yaml — they cannot import from pactkit library | visualize.py:_load_scan_excludes |
|
|
49
|
+
| 2026-03-24 | Inline data in standalone scripts must have canonical-source comments pointing to the library module (e.g. _STACK_MARKERS → cleaners.py, _LANG_FILE_EXT → workflows.py) per Architecture Principle 1 | visualize.py:_STACK_MARKERS |
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
| Date | Lesson | Context |
|
|
4
4
|
|------|--------|---------|
|
|
5
|
-
| 2026-03-24 | Inline data in standalone scripts must have canonical-source comments pointing to the library module (e.g. _STACK_MARKERS → cleaners.py, _LANG_FILE_EXT → workflows.py) per Architecture Principle 1 | visualize.py:_STACK_MARKERS |
|
|
6
5
|
| 2026-03-24 | Worktree isolation diverges from working-tree: verify visualize.py _scan_files() signature is preserved across stories to avoid breaking callers | visualize.py:_scan_files |
|
|
7
6
|
| 2026-03-24 | Extracting _detect_stack() from _detect_file_ext() enables both file discovery and test mapping to share stack detection — DRY refactoring | visualize.py:_detect_stack |
|
|
8
7
|
| 2026-03-24 | Standalone skill scripts using exec() require all imports in _SHARED_HEADER; new stdlib imports (dataclass) must be added to skills/__init__.py _SHARED_HEADER, not just the standalone header section | skills/__init__.py:_SHARED_HEADER |
|
|
@@ -53,3 +52,4 @@
|
|
|
53
52
|
| 2026-04-17 | Dual-anchor pattern: declare principle in RULES_MODULES['core'] (01-core-protocol.md), detail in dedicated module (11-pdca-nudge.md). Prevents attention dilution when rules/ has 10+ files — Core Protocol acts as behavioral constitution anchor. | src/pactkit/prompts/rules.py:RULES_MODULES |
|
|
54
53
|
| 2026-04-18 | Version comparison guards must use semantic (tuple) comparison, not string equality — string != treats 2.10.1 != 2.5.0 without direction, giving wrong upgrade advice | guards.py:check_version_mismatch |
|
|
55
54
|
| 2026-04-20 | Plugin deployer (_deploy_commands in deployer.py:952-954) uses _rewrite_skills_prefix instead of _render_prompt, keeping raw placeholders like {BOARD_CMD} — not a deploy drift bug but by-design template behavior | src/pactkit/generators/deployer.py:_deploy_commands |
|
|
55
|
+
| 2026-04-20 | pactkit clean rglob patterns must exclude protected parent dirs (node_modules, .git) — recursive pattern matching deletes dependency internals | cleaners.py:_inside_protected |
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
## Invariants
|
|
17
17
|
|
|
18
|
-
1. All
|
|
18
|
+
1. All 3755+ 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`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Project Context (Auto-generated)
|
|
2
|
-
> Last updated: 2026-04-
|
|
2
|
+
> Last updated: 2026-04-20T15:24:48+08:00 by pactkit context
|
|
3
3
|
|
|
4
4
|
## Sprint Status
|
|
5
5
|
Backlog: 0 | In Progress: 0 | Done: 0 stories
|
|
@@ -15,11 +15,11 @@ develop
|
|
|
15
15
|
* main
|
|
16
16
|
|
|
17
17
|
## Key Decisions
|
|
18
|
-
- Weighted hotspot formula (complexity 25% + docstring 15% + smells 15% + layers 10% + test 20% + blast 15%) gives meaningful scores across different project profiles; _generate_suggested_tasks auto-scaffolds BUG/HOTFIX specs with Done-completed filter for idempotency
|
|
19
18
|
- Dual-dimension audit (config+code 50/50) gives accurate project health picture; scanning ~/.claude/ global config catches harness setup invisible at project level
|
|
20
19
|
- Dual-anchor pattern: declare principle in RULES_MODULES['core'] (01-core-protocol.md), detail in dedicated module (11-pdca-nudge.md). Prevents attention dilution when rules/ has 10+ files — Core Protocol acts as behavioral constitution anchor.
|
|
21
20
|
- Version comparison guards must use semantic (tuple) comparison, not string equality — string != treats 2.10.1 != 2.5.0 without direction, giving wrong upgrade advice
|
|
22
21
|
- Plugin deployer (_deploy_commands in deployer.py:952-954) uses _rewrite_skills_prefix instead of _render_prompt, keeping raw placeholders like {BOARD_CMD} — not a deploy drift bug but by-design template behavior
|
|
22
|
+
- pactkit clean rglob patterns must exclude protected parent dirs (node_modules, .git) — recursive pattern matching deletes dependency internals
|
|
23
23
|
|
|
24
24
|
## Next Recommended Action
|
|
25
25
|
`/project-design`
|
|
@@ -15,6 +15,9 @@ _CLEANUP_PATTERNS: dict[str, list[str]] = {
|
|
|
15
15
|
"java": ["target/", "build/", ".gradle/"],
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
# Directories whose contents must never be cleaned by rglob patterns
|
|
19
|
+
_PROTECTED_PARENTS = {"node_modules", ".git"}
|
|
20
|
+
|
|
18
21
|
# Stack detection markers (ordered by priority)
|
|
19
22
|
_STACK_MARKERS: list[tuple[str, str]] = [
|
|
20
23
|
("pyproject.toml", "python"),
|
|
@@ -27,6 +30,12 @@ _STACK_MARKERS: list[tuple[str, str]] = [
|
|
|
27
30
|
]
|
|
28
31
|
|
|
29
32
|
|
|
33
|
+
def _inside_protected(path: Path, project_root: Path) -> bool:
|
|
34
|
+
"""Return True if path is inside a protected parent directory."""
|
|
35
|
+
rel = path.relative_to(project_root)
|
|
36
|
+
return bool(_PROTECTED_PARENTS & set(rel.parts[:-1]))
|
|
37
|
+
|
|
38
|
+
|
|
30
39
|
def detect_stacks(project_root: Path) -> list[str]:
|
|
31
40
|
"""Detect all project stacks from marker files.
|
|
32
41
|
|
|
@@ -84,9 +93,21 @@ def clean_artifacts(
|
|
|
84
93
|
removed: list[Path] = []
|
|
85
94
|
|
|
86
95
|
for pattern in patterns:
|
|
87
|
-
if "
|
|
96
|
+
if "/" in pattern:
|
|
97
|
+
# Explicit path (e.g., "node_modules/.cache") — match directly
|
|
98
|
+
target = project_root / pattern
|
|
99
|
+
if target.exists():
|
|
100
|
+
removed.append(target)
|
|
101
|
+
if not dry_run:
|
|
102
|
+
if target.is_dir():
|
|
103
|
+
shutil.rmtree(target)
|
|
104
|
+
else:
|
|
105
|
+
target.unlink()
|
|
106
|
+
elif "*" in pattern:
|
|
88
107
|
# Glob pattern (e.g., "*.pyc")
|
|
89
108
|
for match in project_root.rglob(pattern):
|
|
109
|
+
if _inside_protected(match, project_root):
|
|
110
|
+
continue
|
|
90
111
|
removed.append(match)
|
|
91
112
|
if not dry_run:
|
|
92
113
|
if match.is_dir():
|
|
@@ -94,9 +115,11 @@ def clean_artifacts(
|
|
|
94
115
|
else:
|
|
95
116
|
match.unlink()
|
|
96
117
|
else:
|
|
97
|
-
# Directory or file name (e.g., "__pycache__", "
|
|
118
|
+
# Directory or file name (e.g., "__pycache__", "dist")
|
|
98
119
|
clean_name = pattern.rstrip("/")
|
|
99
120
|
for match in project_root.rglob(clean_name):
|
|
121
|
+
if _inside_protected(match, project_root):
|
|
122
|
+
continue
|
|
100
123
|
removed.append(match)
|
|
101
124
|
if not dry_run:
|
|
102
125
|
if match.is_dir():
|
|
@@ -87,3 +87,47 @@ class TestCleanArtifacts:
|
|
|
87
87
|
|
|
88
88
|
removed = clean_artifacts(tmp_path, stack="auto")
|
|
89
89
|
assert len(removed) >= 1
|
|
90
|
+
|
|
91
|
+
def test_clean_node_skips_dist_inside_node_modules(self, tmp_path):
|
|
92
|
+
"""dist inside node_modules must NOT be deleted."""
|
|
93
|
+
(tmp_path / "package.json").write_text("{}")
|
|
94
|
+
# Create a dependency with dist/
|
|
95
|
+
dep_dist = tmp_path / "node_modules" / "some-pkg" / "dist"
|
|
96
|
+
dep_dist.mkdir(parents=True)
|
|
97
|
+
(dep_dist / "index.js").write_text("module.exports = {}")
|
|
98
|
+
# Create a project-level dist/ that SHOULD be cleaned
|
|
99
|
+
proj_dist = tmp_path / "dist"
|
|
100
|
+
proj_dist.mkdir()
|
|
101
|
+
(proj_dist / "bundle.js").write_text("")
|
|
102
|
+
|
|
103
|
+
removed = clean_artifacts(tmp_path, stack="node")
|
|
104
|
+
assert proj_dist not in list(tmp_path.iterdir())
|
|
105
|
+
assert dep_dist.exists(), "node_modules/*/dist must survive clean"
|
|
106
|
+
|
|
107
|
+
def test_clean_node_modules_cache_still_cleaned(self, tmp_path):
|
|
108
|
+
"""node_modules/.cache is explicitly targeted and should be cleaned."""
|
|
109
|
+
(tmp_path / "package.json").write_text("{}")
|
|
110
|
+
nm_cache = tmp_path / "node_modules" / ".cache"
|
|
111
|
+
nm_cache.mkdir(parents=True)
|
|
112
|
+
(nm_cache / "babel").mkdir()
|
|
113
|
+
(nm_cache / "babel" / "data.json").write_text("{}")
|
|
114
|
+
|
|
115
|
+
removed = clean_artifacts(tmp_path, stack="node")
|
|
116
|
+
assert any("node_modules/.cache" in str(p) for p in removed)
|
|
117
|
+
assert not nm_cache.exists()
|
|
118
|
+
|
|
119
|
+
def test_clean_skips_pyc_inside_node_modules(self, tmp_path):
|
|
120
|
+
"""Glob patterns (*.pyc) must not match inside node_modules."""
|
|
121
|
+
(tmp_path / "pyproject.toml").write_text("[project]")
|
|
122
|
+
# A .pyc in node_modules (unlikely but possible in hybrid projects)
|
|
123
|
+
nm_pyc = tmp_path / "node_modules" / "weird" / "file.pyc"
|
|
124
|
+
nm_pyc.parent.mkdir(parents=True)
|
|
125
|
+
nm_pyc.write_text("")
|
|
126
|
+
# A normal .pyc that should be cleaned
|
|
127
|
+
normal_pyc = tmp_path / "src" / "mod.pyc"
|
|
128
|
+
normal_pyc.parent.mkdir(parents=True)
|
|
129
|
+
normal_pyc.write_text("")
|
|
130
|
+
|
|
131
|
+
removed = clean_artifacts(tmp_path, stack="python")
|
|
132
|
+
assert not normal_pyc.exists(), "src/*.pyc should be cleaned"
|
|
133
|
+
assert nm_pyc.exists(), "node_modules/**/*.pyc must survive clean"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pactkit-2.10.2 → pactkit-2.10.3}/docs/architecture/governance/archive/lessons_archive_202602.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|