pactkit 2.14.2__tar.gz → 2.15.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pactkit-2.14.2 → pactkit-2.15.0}/CHANGELOG.md +9 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/PKG-INFO +21 -1
- {pactkit-2.14.2 → pactkit-2.15.0}/README.md +17 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/pyproject.toml +5 -2
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/__init__.py +1 -1
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim010_dry_refactor.py +0 -31
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim032.py +4 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim033.py +4 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim034.py +4 -0
- pactkit-2.14.2/.opencode/pactkit.yaml +0 -23
- {pactkit-2.14.2 → pactkit-2.15.0}/.codegraph/.gitignore +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/.github/workflows/pactkit.yml +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/.github/workflows/publish.yml +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/.gitignore +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/AGENTS.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/CONTRIBUTING.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/LICENSE +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/SECURITY.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202603.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/harness_audit.json +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/lessons.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/philosophy.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/rules.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/assets/logo.png +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/e2e/journey.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202602.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202603.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202604.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202605.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202606.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/context.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/friction-log.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/prd.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/sprint_board.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-089.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-107.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-023.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-049.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-050.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-051.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-052.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-061.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-062.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-067.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-069.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-070.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-085.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-087.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-096.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-099.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-107.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-117.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-122.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-123.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-126.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-127.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-001.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-002.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-003.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-004.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-005.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-006.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-007.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-008.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-009.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-010.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-011.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-012.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-013.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-014.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-015.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-016.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-017.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-018.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-019.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-020.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-021.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-022.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-023.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-024.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-025.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-026.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-027.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-028.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-029.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-030.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-031.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-032.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-033.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-034.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-035.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-036.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-037.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-038.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-039.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-040.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-041.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-042.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-043.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-044.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-045.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-046.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-047.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-048.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-049.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-050.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-051.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-052.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-053.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-054.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-055.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-056.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-057.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-058.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-059.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-060.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-061.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-062.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-063.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-064.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-065.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-069.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-070.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-071.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-072.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-073.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-001.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-005.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-006.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-007.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-009.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-010.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-011.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-012.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-013.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-014.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-015.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-016.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-017.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-018.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-019.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-020.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-021.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-022.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-023.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-024.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-028.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-029.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-030.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-031.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-032.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-033.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-034.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-035.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-036.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-037.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-038.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-039.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-040.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-041.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-042.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-043.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-044.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-045.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-046.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-047.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-048.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-049.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-050.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-051.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-052.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-053.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-054.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-055.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-056.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-057.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-058.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-059.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-060.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-063.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-066.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-067.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-068.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-069.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-070.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-071.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-072.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-073.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-074.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-075.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-076.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-077.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-078.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-079.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-080.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-081.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-082.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-083.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-084.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-086.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-088.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-089.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-090.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-091.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-092.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-093.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-094.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-095.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-097.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-098.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-099.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-100.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-101.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-102.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-103.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-104.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-105.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-106.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-107.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-108.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-109.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-110.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-111.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-112.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-113.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-114.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-115.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-116.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-118.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-119.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-120.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-121.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-124.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-125.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-126.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-127.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-028_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-029_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-031_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-032_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-033_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-034_case.md +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/opencode.json +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/__main__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/audit.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/backfill.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/cleaners.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/cli.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/doctor.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/garden.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/adapter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/deploy_base.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/deployer.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/guards.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/invariants.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lessons.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/observe.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/profiles.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/commands.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/rules.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/skills.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/workflows.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/regression.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/schemas.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/scripts.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/board.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/interface_summary.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/report.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/visualize.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/utils.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/validators.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/conftest.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/cli/test_cli_e2e.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/page.tsx +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/integration/__init__.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_audit.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_blast_radius.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_extensions_072_073.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_playbook_072_073.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_complexity.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_constitution_sharpening.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_context_gen.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deploy_base.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deployer_plugin.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_garden.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_init_playbook_074.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_interface_summary.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_layer_violations.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_lessons_rotation_075.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_modular_constitution.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_monorepo_detect.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_observe.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_pdca_slim.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_cli_refs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_quality_075.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_structural_invariants.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_report_parser.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_report_unified.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_selective_deploy.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_session_context.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_slim_deps_088.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_solution_design_rule.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_status_command.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story040_layered_claude_md.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story046_agent_adapter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story049_community_standards.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story058_opencode_extraction.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story059_codex_removal.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story063_prompt_slimming.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story106_lateral_scan.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim011_command_rules.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_clean.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim021.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim026.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim049.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim051.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim052.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim053.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim054.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim055.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim056.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim060_codex_profile.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim063.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim065.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim076_multistack.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim078.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim079.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim080.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim081.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim082.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim083.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim084.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim095.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim102_version_marker.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim104_should_semantics.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim107.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim109_journey_spec.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim112_rules_split.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim114_journey_sync.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim119.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim120.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim121.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim125.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim126.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim127_managed_block.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_tools.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_topology_parsers_066.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_call_nested.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_chain_fix.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_modes.py +0 -0
- {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_multilang_chain.py +0 -0
|
@@ -4,6 +4,15 @@ 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.15.0] - 2026-06-04
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **`lint` optional dependency group** — `pip install pactkit[lint]` now includes `ruff>=0.4`. The `all` extra also includes `lint`. Users no longer need to install ruff separately for the lint gate to work.
|
|
11
|
+
- **External tools documentation** — README and pactkit.dev installation pages now document recommended external tools (gh, codegraph) with install commands and fallback behavior.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **CI: tree-sitter tests skip when not installed** — `test_story_slim032`, `test_story_slim033`, `test_story_slim034` now use `pytest.importorskip("tree_sitter")` so they skip gracefully in CI environments without the `visualize` extra.
|
|
15
|
+
|
|
7
16
|
## [2.14.2] - 2026-06-01
|
|
8
17
|
|
|
9
18
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pactkit
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.15.0
|
|
4
4
|
Summary: Spec-driven agentic DevOps toolkit for AI coding assistants
|
|
5
5
|
Project-URL: Homepage, https://pactkit.dev
|
|
6
6
|
Project-URL: Repository, https://github.com/pactkit/pactkit-public
|
|
@@ -25,12 +25,15 @@ Requires-Dist: pyyaml>=6.0
|
|
|
25
25
|
Provides-Extra: all
|
|
26
26
|
Requires-Dist: pactkit-codex>=2.9.0; extra == 'all'
|
|
27
27
|
Requires-Dist: pactkit-opencode>=2.9.0; extra == 'all'
|
|
28
|
+
Requires-Dist: ruff>=0.4; extra == 'all'
|
|
28
29
|
Requires-Dist: tree-sitter-go>=0.25; extra == 'all'
|
|
29
30
|
Requires-Dist: tree-sitter-java>=0.23; extra == 'all'
|
|
30
31
|
Requires-Dist: tree-sitter-typescript>=0.23; extra == 'all'
|
|
31
32
|
Requires-Dist: tree-sitter>=0.25; extra == 'all'
|
|
32
33
|
Provides-Extra: codex
|
|
33
34
|
Requires-Dist: pactkit-codex>=2.9.0; extra == 'codex'
|
|
35
|
+
Provides-Extra: lint
|
|
36
|
+
Requires-Dist: ruff>=0.4; extra == 'lint'
|
|
34
37
|
Provides-Extra: opencode
|
|
35
38
|
Requires-Dist: pactkit-opencode>=2.9.0; extra == 'opencode'
|
|
36
39
|
Provides-Extra: visualize
|
|
@@ -117,6 +120,23 @@ Requires Python 3.10+ and one of:
|
|
|
117
120
|
|
|
118
121
|
> `pip install pactkit` automatically installs adapters for all 3 IDEs.
|
|
119
122
|
|
|
123
|
+
### Optional Extras
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pip install pactkit[lint] # Includes ruff for lint gate
|
|
127
|
+
pip install pactkit[visualize] # Includes tree-sitter for AST analysis
|
|
128
|
+
pip install pactkit[all] # Everything above + IDE adapters
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Recommended External Tools
|
|
132
|
+
|
|
133
|
+
These tools enhance PactKit but cannot be distributed via pip:
|
|
134
|
+
|
|
135
|
+
| Tool | Purpose | Install |
|
|
136
|
+
|------|---------|---------|
|
|
137
|
+
| [gh](https://cli.github.com) | GitHub CLI (issue sync, release, PR) | `brew install gh` |
|
|
138
|
+
| [codegraph](https://www.npmjs.com/package/codegraph) | Code symbol index & call chain analysis | `npm install -g codegraph` |
|
|
139
|
+
|
|
120
140
|
## Quick Start
|
|
121
141
|
|
|
122
142
|
```bash
|
|
@@ -75,6 +75,23 @@ Requires Python 3.10+ and one of:
|
|
|
75
75
|
|
|
76
76
|
> `pip install pactkit` automatically installs adapters for all 3 IDEs.
|
|
77
77
|
|
|
78
|
+
### Optional Extras
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install pactkit[lint] # Includes ruff for lint gate
|
|
82
|
+
pip install pactkit[visualize] # Includes tree-sitter for AST analysis
|
|
83
|
+
pip install pactkit[all] # Everything above + IDE adapters
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Recommended External Tools
|
|
87
|
+
|
|
88
|
+
These tools enhance PactKit but cannot be distributed via pip:
|
|
89
|
+
|
|
90
|
+
| Tool | Purpose | Install |
|
|
91
|
+
|------|---------|---------|
|
|
92
|
+
| [gh](https://cli.github.com) | GitHub CLI (issue sync, release, PR) | `brew install gh` |
|
|
93
|
+
| [codegraph](https://www.npmjs.com/package/codegraph) | Code symbol index & call chain analysis | `npm install -g codegraph` |
|
|
94
|
+
|
|
78
95
|
## Quick Start
|
|
79
96
|
|
|
80
97
|
```bash
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pactkit"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.15.0"
|
|
8
8
|
description = "Spec-driven agentic DevOps toolkit for AI coding assistants"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -62,8 +62,11 @@ visualize = [
|
|
|
62
62
|
"tree-sitter-java>=0.23",
|
|
63
63
|
"tree-sitter-typescript>=0.23",
|
|
64
64
|
]
|
|
65
|
+
lint = [
|
|
66
|
+
"ruff>=0.4",
|
|
67
|
+
]
|
|
65
68
|
all = [
|
|
66
|
-
"pactkit[opencode,codex,visualize]",
|
|
69
|
+
"pactkit[opencode,codex,visualize,lint]",
|
|
67
70
|
]
|
|
68
71
|
|
|
69
72
|
[tool.hatch.build.targets.wheel]
|
|
@@ -16,40 +16,9 @@ from pathlib import Path
|
|
|
16
16
|
# ---------------------------------------------------------------------------
|
|
17
17
|
|
|
18
18
|
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
19
|
-
# Use .opencode/pactkit.yaml (tracked in git) for CI; .claude/ is gitignored
|
|
20
|
-
OPENCODE_YAML = PROJECT_ROOT / ".opencode" / "pactkit.yaml"
|
|
21
|
-
PYPROJECT = PROJECT_ROOT / "pyproject.toml"
|
|
22
19
|
DEPLOYER = PROJECT_ROOT / "src" / "pactkit" / "generators" / "deployer.py"
|
|
23
20
|
|
|
24
21
|
|
|
25
|
-
def _read_pyproject_version() -> str:
|
|
26
|
-
for line in PYPROJECT.read_text().splitlines():
|
|
27
|
-
if line.startswith("version"):
|
|
28
|
-
return line.split("=")[1].strip().strip('"').strip("'")
|
|
29
|
-
raise ValueError("version not found in pyproject.toml")
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# ---------------------------------------------------------------------------
|
|
33
|
-
# AC1: Version Consistency
|
|
34
|
-
# ---------------------------------------------------------------------------
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class TestAC1VersionSync:
|
|
38
|
-
def test_opencode_yaml_exists(self):
|
|
39
|
-
"""AC1: .opencode/pactkit.yaml must exist (tracked in git for CI)."""
|
|
40
|
-
assert OPENCODE_YAML.exists(), f"{OPENCODE_YAML} does not exist"
|
|
41
|
-
|
|
42
|
-
def test_opencode_yaml_version_matches_pyproject(self):
|
|
43
|
-
"""AC1: .opencode/pactkit.yaml must NOT contain version (STORY-slim-102)."""
|
|
44
|
-
import yaml
|
|
45
|
-
|
|
46
|
-
data = yaml.safe_load(OPENCODE_YAML.read_text())
|
|
47
|
-
# STORY-slim-102: version removed from project yaml, tracked via global marker
|
|
48
|
-
assert "version" not in data, (
|
|
49
|
-
f".opencode/pactkit.yaml should not have a version field; got keys: {list(data.keys())}"
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
|
|
53
22
|
# ---------------------------------------------------------------------------
|
|
54
23
|
# AC2: _build_rule_id_to_key() helper
|
|
55
24
|
# ---------------------------------------------------------------------------
|
|
@@ -13,6 +13,10 @@ Tests verify:
|
|
|
13
13
|
import sys
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
|
|
19
|
+
|
|
16
20
|
project_root = Path(__file__).resolve().parent.parent.parent
|
|
17
21
|
if str(project_root) not in sys.path:
|
|
18
22
|
sys.path.insert(0, str(project_root))
|
|
@@ -13,6 +13,10 @@ Tests verify:
|
|
|
13
13
|
import sys
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
|
|
19
|
+
|
|
16
20
|
project_root = Path(__file__).resolve().parent.parent.parent
|
|
17
21
|
if str(project_root) not in sys.path:
|
|
18
22
|
sys.path.insert(0, str(project_root))
|
|
@@ -3,6 +3,10 @@ import importlib.util
|
|
|
3
3
|
import pathlib
|
|
4
4
|
import textwrap
|
|
5
5
|
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
|
|
9
|
+
|
|
6
10
|
# Load visualize.py as standalone module
|
|
7
11
|
_vis_path = pathlib.Path(__file__).resolve().parents[2] / "src" / "pactkit" / "skills" / "visualize.py"
|
|
8
12
|
_spec = importlib.util.spec_from_file_location("visualize", _vis_path)
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# PactKit Configuration (OpenCode)
|
|
2
|
-
# Only override non-default values. Absent keys = default (all enabled).
|
|
3
|
-
|
|
4
|
-
stack: python
|
|
5
|
-
developer: "slim"
|
|
6
|
-
|
|
7
|
-
ci:
|
|
8
|
-
provider: github
|
|
9
|
-
|
|
10
|
-
issue_tracker:
|
|
11
|
-
provider: github
|
|
12
|
-
|
|
13
|
-
release:
|
|
14
|
-
github_release: true
|
|
15
|
-
|
|
16
|
-
visualize:
|
|
17
|
-
graph_provider: codegraph
|
|
18
|
-
|
|
19
|
-
agent_models:
|
|
20
|
-
code-explorer: haiku
|
|
21
|
-
product-designer: opus
|
|
22
|
-
system-architect: opus
|
|
23
|
-
system-medic: haiku
|
|
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.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202602.md
RENAMED
|
File without changes
|
{pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202603.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
|