pactkit 2.25.0__tar.gz → 2.25.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pactkit-2.25.0 → pactkit-2.25.1}/CHANGELOG.md +7 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/PKG-INFO +19 -3
- {pactkit-2.25.0 → pactkit-2.25.1}/README.md +18 -2
- pactkit-2.25.1/docs/product/stories/HOTFIX-slim-20260830bbb5bc219d35.yaml +19 -0
- pactkit-2.25.1/docs/product/stories/HOTFIX-slim-20260901469666ef23a8.yaml +16 -0
- pactkit-2.25.1/docs/specs/HOTFIX-slim-20260830bbb5bc219d35.md +42 -0
- pactkit-2.25.1/docs/specs/HOTFIX-slim-20260901469666ef23a8.md +55 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/pyproject.toml +1 -1
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/__init__.py +1 -1
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/cli.py +13 -3
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/commit_gate.py +74 -6
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/regression.py +6 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/gate.txt +3 -2
- pactkit-2.25.1/tests/unit/test_hotfix_20260830_gate_cli.py +164 -0
- pactkit-2.25.1/tests/unit/test_hotfix_20260901_gate_docsonly.py +160 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/.codegraph/.gitignore +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/.coverage +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/.github/workflows/pactkit.yml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/.github/workflows/publish.yml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/.gitignore +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/AGENTS.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/CONTRIBUTING.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/LICENSE +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/SECURITY.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/archive/lessons_archive_202603.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/archive/lessons_archive_202604.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/harness_audit.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260227-8e92f52c86.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260227-a21cacfde2.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260227-ccb19799ea.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260228-6e4b02ff08.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260228-b87245d5fc.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260302-8980b2512d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260302-8f58fa2045.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260302-a3a1b7900e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260303-3f65c0442b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260304-23c605e495.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260304-8bd6c10219.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260305-129d1dea2a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260305-48752d79c3.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260305-b9afdd8720.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260305-f93ee5b19f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260306-7061390095.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260313-edf7807faf.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260316-091567c2bb.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260316-4661b3789a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260316-7214dac8fc.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-3d8a855086.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-4ba69c35f0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-6cd2a53ba5.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-7a0dd3407e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-86927e3701.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-9a8025eaac.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-a0721cc066.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-a1f53d759b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-a9f7897b36.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260317-ff430eaa29.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260318-fb0bcd928b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260319-f320fbb5cc.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260320-b2d80c56b3.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260320-c102dbd6f8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260320-e8f6ddae81.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260321-5e57da75b0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260321-6a4a30628f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260321-b5a58de3f9.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260321-e0138991ed.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260321-e49663fc95.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260322-4c0480e882.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260322-d1ece5c0d4.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260323-4bd30888ce.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260323-7a02b3eb85.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260323-8624e0d93a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260323-a8faeea78c.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-075e3332b8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-0f6f041a52.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-2dab5931de.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-8bcda73e9b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-9e6238f0c8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-a1cace9846.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-bf64dd9564.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-c344d7655c.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-e60c50dcc9.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260324-f5149caffe.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260325-1a5eeea04c.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-02460b22de.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-09de627b2b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-204ea48f84.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-32e2fd3074.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-6c6dbfc365.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-7811ad7ff2.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-88e7123370.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-d2376010b1.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-e4f0eb8850.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-e68b8aa47f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260326-fdd06ad981.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260327-e3c7f5abcb.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260330-eb1760def2.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-1b58a289ea.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-26e474753e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-3028ab9cf5.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-350048862b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-7d41cdf5a3.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-8e5558a077.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260331-c46df1c3b1.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-41515789f6.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-4453752dda.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-5a225a1c0a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-90724b10f0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-9e322eb76e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-bd20019d3d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-de035be681.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-f44c8f499e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260401-fa52f596ff.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260402-5b063207c8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260402-5e0913ec81.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260415-3d8b5e8f81.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260415-84219771ca.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-41d4564480.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-5cdc3cf53f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-807c65a8e7.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-ade561c777.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-b78aaf129a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-db8a5430a0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260416-f5a765c496.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260417-f1d777e9c9.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260418-ee12f2ff0d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260420-2260437be7.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260420-a35a083e29.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260420-fa7d958d56.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260421-309c998a10.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260422-6509ac4df0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260422-8dd5ed6a24.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260423-b0890ad9c2.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260424-24cc1d5e19.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260424-39a99c887d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260427-f7955d5775.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260507-7b75a5cab8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260507-b26f97255d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260525-1fe96d2ff4.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260525-717e18e190.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260525-df4853fa3f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260526-4c230f3a9d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260601-6d6b779a83.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260601-e65d3407ed.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260610-51c3cf895e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260629-6171e54ac8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260702-4616caa284.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260713-da6d40dcc0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260723-d4c9801300.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260813-18efcf9687.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260813-1dc6e2e1c7.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260813-21d4da632f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260817-3587ae1a22.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260817-5f08a6affa.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260817-800f717c9d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260817-a2cd839a2d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260822-9175485749.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260822105138-298451a42c.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260822105138-522c7e4af4.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260822105138-72cc1d0343.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260823015950-6b8cbea92e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260823022240-d3570f57fb.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260823050717-9192db37f8.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260826072120-c6db5dd5b1.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260826074629-f5119ea78b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260826080242-012107ada2.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260826082256-eff3747d60.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260827093143-3236113033.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260827095642-059a7e996b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260827102057-e04522a6fc.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260828102433-81cd3e00a0.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons/LESSON-20260830034504-4f7d0f8c58.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/lessons.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/philosophy.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/architecture/governance/rules.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/assets/logo.png +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/e2e/journey.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202602.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202603.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202604.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202605.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202606.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202607.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/archive/archive_202608.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/context.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/friction-log.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/harness-comparison-2026-08-27.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/prd.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/sprint_board.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/HOTFIX-slim-127.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/HOTFIX-slim-131.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/HOTFIX-slim-132.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/HOTFIX-slim-20260828ee6cde3108fb.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-115.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-118.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-119.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-145.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-147.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-148.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-149.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-2026082381e832771d4e.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260823d854b0cf1875.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260823de7e85d6042a.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260825b1c83a046b4b.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-202608264cf429c75e22.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-2026082672b57c78fd67.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-202608267c3989223b4d.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-202608268fc379dbe6ef.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260826ac1f0bfe4148.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260826cb37edfdd4da.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260826ce35b77ce005.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260826f9492ab32c3d.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827024e71df170f.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-2026082727cc4ab535e7.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-2026082730b5954cf538.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827625b870eb7da.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-202608277ec1236a7b99.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827833e7a200f9a.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827855bf3efaec3.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-2026082799fa651655be.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827c67e3add6af5.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827d0ae0dfada51.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827eddbe9669c87.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827fb6291b717eb.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260827fc9de5542ad7.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260828897396a935ab.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-202608289e83eeb30df4.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260828d43fae4edbb6.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/product/stories/STORY-slim-20260830c65491123af1.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-089.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/BUG-slim-107.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-023.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-049.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-050.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-051.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-052.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-061.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-062.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-067.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-069.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-070.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-085.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-087.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-096.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-099.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-107.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-117.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-122.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-123.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-126.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-127.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-130.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-131.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-132.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/HOTFIX-slim-20260828ee6cde3108fb.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-001.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-002.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-003.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-004.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-005.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-006.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-007.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-008.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-009.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-010.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-011.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-012.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-013.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-014.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-015.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-016.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-017.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-018.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-019.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-020.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-021.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-022.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-023.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-024.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-025.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-026.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-027.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-028.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-029.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-030.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-031.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-032.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-033.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-034.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-035.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-036.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-037.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-038.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-039.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-040.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-041.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-042.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-043.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-044.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-045.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-046.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-047.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-048.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-049.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-050.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-051.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-052.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-053.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-054.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-055.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-056.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-057.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-058.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-059.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-060.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-061.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-062.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-063.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-064.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-065.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-069.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-070.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-071.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-072.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-073.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-001.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-005.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-006.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-007.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-009.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-010.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-011.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-012.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-013.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-014.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-015.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-016.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-017.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-018.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-019.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-020.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-021.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-022.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-023.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-024.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-028.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-029.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-030.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-031.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-032.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-033.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-034.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-035.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-036.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-037.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-038.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-039.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-040.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-041.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-042.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-043.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-044.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-045.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-046.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-047.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-048.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-049.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-050.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-051.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-052.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-053.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-054.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-055.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-056.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-057.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-058.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-059.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-060.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-063.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-066.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-067.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-068.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-069.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-070.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-071.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-072.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-073.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-074.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-075.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-076.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-077.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-078.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-079.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-080.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-081.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-082.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-083.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-084.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-086.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-088.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-089.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-090.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-091.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-092.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-093.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-094.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-095.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-097.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-098.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-099.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-100.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-101.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-102.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-103.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-104.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-105.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-106.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-107.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-108.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-109.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-110.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-111.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-112.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-113.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-114.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-115.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-116.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-118.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-119.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-120.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-121.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-124.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-125.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-126.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-127.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-128.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-129.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-132.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-133.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-134.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-135.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-136.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-137.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-138.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-139.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-140.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-141.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-142.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-143.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-144.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-145.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-146.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-147.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-148.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-149.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-2026082381e832771d4e.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260823d854b0cf1875.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260823de7e85d6042a.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-2026082466c8670d9655.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260824dd23a0ed3b4c.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260825b1c83a046b4b.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-202608264cf429c75e22.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-2026082672b57c78fd67.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-202608267c3989223b4d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-202608268fc379dbe6ef.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260826ac1f0bfe4148.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260826cb37edfdd4da.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260826ce35b77ce005.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260826f9492ab32c3d.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260827024e71df170f.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260827eddbe9669c87.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260827fc9de5542ad7.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260828897396a935ab.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-202608289e83eeb30df4.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260828d43fae4edbb6.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/specs/STORY-slim-20260830c65491123af1.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-028_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-029_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-031_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-032_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-033_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-034_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-135_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-136_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-137_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-138_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-139_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-140_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-141_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-142_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-143_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-144_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-146_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-147_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-148_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-149_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-2026082381e832771d4e_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260823d854b0cf1875_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260823de7e85d6042a_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260825b1c83a046b4b_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-202608264cf429c75e22_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-2026082672b57c78fd67_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-202608267c3989223b4d_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-202608268fc379dbe6ef_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260826ac1f0bfe4148_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260826cb37edfdd4da_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260826ce35b77ce005_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260826f9492ab32c3d_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260827024e71df170f_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260827eddbe9669c87_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260827fc9de5542ad7_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260828897396a935ab_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/docs/test_cases/STORY-slim-20260830c65491123af1_case.md +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/opencode.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/__main__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/audit.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/auth_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/backfill.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/cleaners.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/continuation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/delivery_evidence.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/deploy_manifest.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/deployment_transaction.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/deps.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/doctor.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/done_verify.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/enforcement.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/garden.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/generators/claude_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/generators/command_ownership.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/generators/deploy_base.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/generators/deployer.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/governance.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/graph_query.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/guards.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/host_continuation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/invariants.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/legacy/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/legacy/host_continuation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/legacy/usage.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/legacy/workflow_engine.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/lessons.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/observe.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/portable_methods.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/profiles.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/project_root.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/commands.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/guides.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/rules.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/skills.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/prompts/workflows.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/protocols.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/risk_profile.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/run_events.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/run_stats.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/schemas.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/scripts.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/secrets_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/session_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/analyzers/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/board.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/interface_summary.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/report.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/skills/visualize.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/spec_graph.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/spec_preflight.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/tamper_guard.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/utils.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/validators.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/workflow_engine.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/workflow_registry.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/src/pactkit/workflow_validators.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/conftest.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/test_cli_e2e.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/test_story_slim146_cli.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/test_story_slim147_workflow_cli.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/test_story_slim148_governance_cli.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/e2e/cli/test_story_slim149_query_cli.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/api_call_parser/page.tsx +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/__root__.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/audit.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/backfill-release.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/board.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/clean.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/commit-gate.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/context.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/continuation.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/coverage-gate.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/deps.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/doctor.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/done-verify.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/garden.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/generate-id.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/governance.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/guard.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/init.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/interface-summary.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/invariants-refresh.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/issue-sync.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/lesson-append.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/lint-context.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/lint-lessons.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/lint-testcase.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/lint.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/observe.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/query.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/redetect-stack.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/regression.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/report.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/schema.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/sec-scope.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/spec-graph.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/spec-lint.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/spec-preflight.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/spec-status.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/stats.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/sync.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/test-map.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/update.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/upgrade.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/version.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/visualize.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/work-unit.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/cli_help_golden/workflow.txt +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_claude.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_claude.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_codex.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_codex.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_github.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/copy_github.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/empty.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/empty.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/full_legacy.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/full_legacy.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/minimal.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/minimal.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/unknown_keys.json +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/fixtures/config_golden/unknown_keys.yaml +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/integration/__init__.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_audit.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_blast_radius.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_check_extensions_072_073.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_check_playbook_072_073.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_cli_help_surface.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_codex_hook_channel.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_command_ownership_v2.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_commit_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_complexity.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_config_sync_precedence.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_constitution_sharpening.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_context_gen.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_continuation_hardening.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deploy_base.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deploy_ownership_safety.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deployer_plugin.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deployment_transaction.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_deps.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_done_verify.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_enforcement.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_engine_robustness.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_garden.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_gate_fail_closed.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_gate_telemetry.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_hook_expansion.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_hotfix_legacy_constitution.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_init_playbook_074.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_interface_summary.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_layer_violations.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_legacy_engine_freeze.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_lessons_rotation_075.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_modular_constitution.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_monorepo_detect.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_observe.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_pdca_semantics_v2.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_pdca_slim.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_project_root.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_prompt_cli_contract.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_prompt_cli_refs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_prompt_quality_075.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_prompt_structural_invariants.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_push_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_release.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_report_parser.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_report_unified.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_resolve_scope.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_rule_registry_architecture.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_run_events.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_run_stats.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_selective_deploy.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_session_context.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_slim_deps_088.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_solution_design_rule.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_spec_preflight.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_stack_test_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_status_command.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story040_layered_claude_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story049_community_standards.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story058_opencode_extraction.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story059_codex_removal.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story063_prompt_slimming.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story106_lateral_scan.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story133_debug_skill.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_pdca_host_capsules.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_pdca_semantics_v2.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim011_command_rules.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_clean.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim021.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim026.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim032.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim033.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim034.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim049.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim051.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim052.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim053.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim054.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim055.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim056.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim060_codex_profile.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim063.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim065.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim076_multistack.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim078.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim079.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim080.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim081.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim082.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim083.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim084.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim095.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim102_version_marker.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim104_should_semantics.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim107.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim109_journey_spec.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim112_rules_split.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim114_journey_sync.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim119.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim120.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim121.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim125.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim126.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim127_managed_block.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim128_engineering_concerns.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim132.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim134_no_model_in_frontmatter.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim135_config_schema.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim139_skill_manifest.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim141_manifest_hash.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim142_all_target_isolation.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim143_spec_graph.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim144_wave_mode.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim145.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim146.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim147.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim148.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim149.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim150.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim_stop_hook.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_story_slim_work_units.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_tools.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_topology_parsers_066.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_visualize_call_nested.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_visualize_chain_fix.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_visualize_modes.py +0 -0
- {pactkit-2.25.0 → pactkit-2.25.1}/tests/unit/test_visualize_multilang_chain.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.25.1] - 2026-09-01
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **`pactkit gate authorize <scope>` parses as documented** — 2.25.0's parser accepted only the bare positional form (`pactkit gate <scope>`), so the form printed by every block message and the L1 Override Protocol failed with "unrecognized arguments"; both forms now parse (HOTFIX-slim-20260830bbb5bc219d35).
|
|
7
|
+
- **Cross-repo commands are judged by the repo they operate on** — `cd <other-repo> && git push` was evaluated against the session cwd's enforcement config; `hook_entry` now resolves the last `cd` target before the git command and evaluates gates against that repository (HOTFIX-slim-20260830bbb5bc219d35).
|
|
8
|
+
- **commit-gate no longer misfires on docs/meta-only commits** — three defects that blocked a zero-code design-baseline commit three times and forced test-writing before allowing it (HOTFIX-slim-20260901469666ef23a8): `.gitignore`/`.claude/**`/`.codex/**` are now doc-only (repo/agent metadata carries no runtime code and no longer disqualifies the change set from the skip path); the full-suite target falls back from `tests/unit/` to `tests/` when only a flat layout exists, and a zero-collected run reports "no tests collected" instead of implying failures (still RED — the TDD contract is unchanged); "No module named pytest" from the venv-less fallback interpreter raises `GateUnavailable` → WARN + allow, matching the missing-binary path (R3 self-lock protection).
|
|
9
|
+
|
|
3
10
|
## [2.25.0] - 2026-08-30
|
|
4
11
|
|
|
5
12
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pactkit
|
|
3
|
-
Version: 2.25.
|
|
3
|
+
Version: 2.25.1
|
|
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
|
|
@@ -280,7 +280,7 @@ PactKit deploys 10 skills (3 scripted + 7 prompt-only), auto-invoked by commands
|
|
|
280
280
|
|
|
281
281
|
## CLI Subcommands
|
|
282
282
|
|
|
283
|
-
PactKit ships
|
|
283
|
+
PactKit ships 45 deterministic CLI subcommands — operations that were previously delegated to AI prompts are now enforced in Python code (the "C" in P.A.C.T.):
|
|
284
284
|
|
|
285
285
|
| Command | Purpose |
|
|
286
286
|
|---------|---------|
|
|
@@ -312,11 +312,27 @@ PactKit ships 36 deterministic CLI subcommands — operations that were previous
|
|
|
312
312
|
| `pactkit lint-lessons` | Validate lessons.md structure |
|
|
313
313
|
| `pactkit lint-testcase` | Validate test case structure |
|
|
314
314
|
| `pactkit done-verify` | Archive honesty gate: requirement→test evidence chain, checkbox↔case consistency, status machine (blocks `/project-done` on FAIL) |
|
|
315
|
-
| `pactkit commit-gate` | Pre-commit test gate with skip≠pass transparency; PreToolUse hook + git pre-commit channels, auto-installed per format |
|
|
315
|
+
| `pactkit commit-gate` | Pre-commit test gate with skip≠pass transparency; stack-aware (pytest/npm test/go test/mvn/gradle); PreToolUse hook + git pre-commit/pre-push channels, auto-installed per format |
|
|
316
|
+
| `pactkit gate` | Session context hooks (`--hook session-start/pre-compact`) + external-effect authorization (`pactkit gate <scope> [--ttl-minutes N]`) |
|
|
316
317
|
| `pactkit deps` | External dependency check (`deps check`) and guided install (`deps install`) for node/codegraph/gh |
|
|
317
318
|
| `pactkit schema config` | List every pactkit.yaml key with default, effective value, and source |
|
|
318
319
|
| `pactkit sync` | Sync codegraph index |
|
|
319
320
|
|
|
321
|
+
### Enforcement Gates (2.25.0)
|
|
322
|
+
|
|
323
|
+
The hook layer enforces the rules prompt text can only state — protected branches, specs, credentials, and external effects survive a conflicting instruction instead of losing to it:
|
|
324
|
+
|
|
325
|
+
| Gate | Blocks | Bypass (human/config only) |
|
|
326
|
+
|------|--------|---------------------------|
|
|
327
|
+
| `push_gate` | Direct push to a protected branch (default `main`/`master`) | `PACTKIT_ALLOW_DIRECT_PUSH=1` or `enforcement.allow_direct_push` |
|
|
328
|
+
| `commit_gate` | Commits on protected branches (default) and RED test suites | same as push_gate; `develop` keeps the full-suite rule |
|
|
329
|
+
| `spec_guard` | Editing a spec that has an active preflight receipt (Spec is Law during Act) | `PACTKIT_ALLOW_SPEC_EDIT=1` or `pactkit gate spec_edit` |
|
|
330
|
+
| `auth_gate` | External-effect commands (PR/release/publish/repo) until the user confirms | `pactkit gate <scope>` TTL token or `PACTKIT_AUTHORIZED=1` |
|
|
331
|
+
| `secrets_gate` | Literal credential material in commands (env-var indirection is exempt) | `PACTKIT_ALLOW_SECRET=1` |
|
|
332
|
+
| `tamper_guard` | Modifying enforcement artifacts (hooks, gate registrations, audit records) | `PACTKIT_ALLOW_CONFIG_EDIT=1` |
|
|
333
|
+
|
|
334
|
+
All blocks/bypasses are audited (`.pactkit/enforcement/`) and feed `pactkit stats` as gate telemetry (per-gate block counts, per-command invocation counts, authorization pairs) — the friction data that decides what to tune next.
|
|
335
|
+
|
|
320
336
|
## Deployment Architecture
|
|
321
337
|
|
|
322
338
|
PactKit supports three deployment formats:
|
|
@@ -235,7 +235,7 @@ PactKit deploys 10 skills (3 scripted + 7 prompt-only), auto-invoked by commands
|
|
|
235
235
|
|
|
236
236
|
## CLI Subcommands
|
|
237
237
|
|
|
238
|
-
PactKit ships
|
|
238
|
+
PactKit ships 45 deterministic CLI subcommands — operations that were previously delegated to AI prompts are now enforced in Python code (the "C" in P.A.C.T.):
|
|
239
239
|
|
|
240
240
|
| Command | Purpose |
|
|
241
241
|
|---------|---------|
|
|
@@ -267,11 +267,27 @@ PactKit ships 36 deterministic CLI subcommands — operations that were previous
|
|
|
267
267
|
| `pactkit lint-lessons` | Validate lessons.md structure |
|
|
268
268
|
| `pactkit lint-testcase` | Validate test case structure |
|
|
269
269
|
| `pactkit done-verify` | Archive honesty gate: requirement→test evidence chain, checkbox↔case consistency, status machine (blocks `/project-done` on FAIL) |
|
|
270
|
-
| `pactkit commit-gate` | Pre-commit test gate with skip≠pass transparency; PreToolUse hook + git pre-commit channels, auto-installed per format |
|
|
270
|
+
| `pactkit commit-gate` | Pre-commit test gate with skip≠pass transparency; stack-aware (pytest/npm test/go test/mvn/gradle); PreToolUse hook + git pre-commit/pre-push channels, auto-installed per format |
|
|
271
|
+
| `pactkit gate` | Session context hooks (`--hook session-start/pre-compact`) + external-effect authorization (`pactkit gate <scope> [--ttl-minutes N]`) |
|
|
271
272
|
| `pactkit deps` | External dependency check (`deps check`) and guided install (`deps install`) for node/codegraph/gh |
|
|
272
273
|
| `pactkit schema config` | List every pactkit.yaml key with default, effective value, and source |
|
|
273
274
|
| `pactkit sync` | Sync codegraph index |
|
|
274
275
|
|
|
276
|
+
### Enforcement Gates (2.25.0)
|
|
277
|
+
|
|
278
|
+
The hook layer enforces the rules prompt text can only state — protected branches, specs, credentials, and external effects survive a conflicting instruction instead of losing to it:
|
|
279
|
+
|
|
280
|
+
| Gate | Blocks | Bypass (human/config only) |
|
|
281
|
+
|------|--------|---------------------------|
|
|
282
|
+
| `push_gate` | Direct push to a protected branch (default `main`/`master`) | `PACTKIT_ALLOW_DIRECT_PUSH=1` or `enforcement.allow_direct_push` |
|
|
283
|
+
| `commit_gate` | Commits on protected branches (default) and RED test suites | same as push_gate; `develop` keeps the full-suite rule |
|
|
284
|
+
| `spec_guard` | Editing a spec that has an active preflight receipt (Spec is Law during Act) | `PACTKIT_ALLOW_SPEC_EDIT=1` or `pactkit gate spec_edit` |
|
|
285
|
+
| `auth_gate` | External-effect commands (PR/release/publish/repo) until the user confirms | `pactkit gate <scope>` TTL token or `PACTKIT_AUTHORIZED=1` |
|
|
286
|
+
| `secrets_gate` | Literal credential material in commands (env-var indirection is exempt) | `PACTKIT_ALLOW_SECRET=1` |
|
|
287
|
+
| `tamper_guard` | Modifying enforcement artifacts (hooks, gate registrations, audit records) | `PACTKIT_ALLOW_CONFIG_EDIT=1` |
|
|
288
|
+
|
|
289
|
+
All blocks/bypasses are audited (`.pactkit/enforcement/`) and feed `pactkit stats` as gate telemetry (per-gate block counts, per-command invocation counts, authorization pairs) — the friction data that decides what to tune next.
|
|
290
|
+
|
|
275
291
|
## Deployment Architecture
|
|
276
292
|
|
|
277
293
|
PactKit supports three deployment formats:
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
id: HOTFIX-slim-20260830bbb5bc219d35
|
|
3
|
+
title: gate CLI syntax + push-gate cross-repo root
|
|
4
|
+
spec_path: docs/specs/HOTFIX-slim-20260830bbb5bc219d35.md
|
|
5
|
+
status: archived
|
|
6
|
+
tasks:
|
|
7
|
+
- id: task-28c4e1d550
|
|
8
|
+
title: Accept authorize keyword in gate CLI
|
|
9
|
+
completed: true
|
|
10
|
+
- id: task-f5de85695c
|
|
11
|
+
title: Resolve cd-target repo in hook_entry
|
|
12
|
+
completed: true
|
|
13
|
+
- id: task-0764566491
|
|
14
|
+
title: Focused tests + golden refresh
|
|
15
|
+
completed: true
|
|
16
|
+
created_at: '2026-08-30T04:48:13+00:00'
|
|
17
|
+
updated_at: '2026-09-01T09:06:16+00:00'
|
|
18
|
+
completed_at: '2026-08-30T04:52:32+00:00'
|
|
19
|
+
archived_at: '2026-09-01T09:06:16+00:00'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
id: HOTFIX-slim-20260901469666ef23a8
|
|
3
|
+
title: commit-gate misfires on docs/meta-only commits
|
|
4
|
+
spec_path: docs/specs/HOTFIX-slim-20260901469666ef23a8.md
|
|
5
|
+
status: archived
|
|
6
|
+
tasks:
|
|
7
|
+
- id: task-b98663e6af
|
|
8
|
+
title: 'Fix three defects: doc-only patterns miss repo meta files (.gitignore/.claude/.codex);
|
|
9
|
+
full-suite target hard-codes tests/unit/ with no tests/ fallback and counts exit
|
|
10
|
+
4/5 as RED; missing pytest module (pipx fallback) reads as RED instead of GateUnavailable.
|
|
11
|
+
From harness-backend 2026-09-01 friction.'
|
|
12
|
+
completed: true
|
|
13
|
+
created_at: '2026-09-01T08:29:59+00:00'
|
|
14
|
+
updated_at: '2026-09-01T09:06:16+00:00'
|
|
15
|
+
completed_at: '2026-09-01T08:50:16+00:00'
|
|
16
|
+
archived_at: '2026-09-01T09:06:16+00:00'
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# HOTFIX-slim-20260830bbb5bc219d35: gate CLI syntax mismatch + push-gate cross-repo blind spot
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| ID | HOTFIX-slim-20260830bbb5bc219d35 |
|
|
6
|
+
| Status | Done |
|
|
7
|
+
| Priority | P1 |
|
|
8
|
+
| Release | 2.25.1 |
|
|
9
|
+
|
|
10
|
+
## Background
|
|
11
|
+
|
|
12
|
+
Two defects surfaced during the 2.25.0 release run (post-tag, so they
|
|
13
|
+
ship in 2.25.1):
|
|
14
|
+
|
|
15
|
+
1. **auth-gate teaches a CLI form that does not exist.** The block
|
|
16
|
+
message (and the L1 Override Protocol prompt text, and
|
|
17
|
+
critical-rules.md on the user's machine) instructs
|
|
18
|
+
`pactkit gate authorize <scope>` — but the `gate` parser accepts only
|
|
19
|
+
the bare positional `pactkit gate <scope>`. The documented form fails
|
|
20
|
+
with "unrecognized arguments". Unit tests call `auth_gate.authorize()`
|
|
21
|
+
directly, so the CLI layer was never exercised. Every internal user
|
|
22
|
+
hits this on their first external-effect command.
|
|
23
|
+
2. **push-gate evaluates the wrong repository for cross-repo commands.**
|
|
24
|
+
`cd ~/other-repo && git push` is judged against the SESSION cwd's
|
|
25
|
+
enforcement config (payload `cwd`), not the target repo's — observed
|
|
26
|
+
live when the plugin-repo push was allowed by pactkit's own
|
|
27
|
+
`allow_direct_push: true` although the plugin repo has no config.
|
|
28
|
+
|
|
29
|
+
## Fix
|
|
30
|
+
|
|
31
|
+
1. `cli.py`: `gate` accepts both `pactkit gate authorize <scope>` and
|
|
32
|
+
`pactkit gate <scope>` (positional `scope` becomes `nargs="*"`; an
|
|
33
|
+
`authorize` keyword is normalized away). Help text documents both.
|
|
34
|
+
All existing message/prompt text becomes correct as-is.
|
|
35
|
+
2. `commit_gate.py`: `_command_root()` resolves the last `cd <dir>`
|
|
36
|
+
prefix target in the command (absolute, or relative to the payload
|
|
37
|
+
root; non-dirs ignored) and `hook_entry` evaluates gates against that
|
|
38
|
+
root — a `cd`-prefixed command is judged by the repo it operates on.
|
|
39
|
+
|
|
40
|
+
Verification: focused unit tests for both behaviors + full suite +
|
|
41
|
+
regenerated `gate.txt` help golden. Push to main only; no release, no
|
|
42
|
+
version bump, no adapter/plugin/site sync (deferred to 2.25.1).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# HOTFIX-slim-20260901469666ef23a8: commit-gate misfires on docs/meta-only commits
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| ID | HOTFIX-slim-20260901469666ef23a8 |
|
|
6
|
+
| Status | Done |
|
|
7
|
+
| Priority | P1 |
|
|
8
|
+
| Release | 2.25.1 |
|
|
9
|
+
|
|
10
|
+
## Background
|
|
11
|
+
|
|
12
|
+
A zero-code design-baseline commit (harness-backend root commit,
|
|
13
|
+
2026-09-01) was blocked three times by the commit gate with "FULL —
|
|
14
|
+
impact mapping empty — full unit suite (safe default)" and finally
|
|
15
|
+
forced the agent to write tests, move them to `tests/unit/`, and
|
|
16
|
+
bootstrap a venv before the commit went through. Three defects
|
|
17
|
+
conspired, each violating the gate's own documented intent:
|
|
18
|
+
|
|
19
|
+
1. **Repo meta files break doc-only classification.** `.gitignore` and
|
|
20
|
+
`.claude/settings.json` carry no runtime code, yet they disqualify
|
|
21
|
+
the whole change set from the doc-only skip
|
|
22
|
+
(`regression.py` `_DOC_ONLY_PATTERNS`), contradicting the module's
|
|
23
|
+
own "doc-only — safe to skip tests" contract.
|
|
24
|
+
2. **"Repo has no tests" is treated as "tests failed".** The full
|
|
25
|
+
strategy hard-codes `tests/unit/`; a repo whose tests live at
|
|
26
|
+
`tests/` (or that has none yet) yields exit 4/5, and `run_gate`
|
|
27
|
+
counts any nonzero returncode as RED — converting "nothing to
|
|
28
|
+
verify" into "write tests before any commit".
|
|
29
|
+
3. **Missing pytest module reads as RED, not unavailable.** With no
|
|
30
|
+
project venv, `pytest_command` falls back to the pipx interpreter;
|
|
31
|
+
`python -m pytest` exits 1 with "No module named pytest", which
|
|
32
|
+
`run_gate` reports as failing tests. This violates R3 self-lock
|
|
33
|
+
protection (a gate that cannot run must WARN and allow) and is
|
|
34
|
+
inconsistent with the existing `FileNotFoundError` → WARN path for
|
|
35
|
+
a missing pytest binary.
|
|
36
|
+
|
|
37
|
+
## Fix
|
|
38
|
+
|
|
39
|
+
1. `regression.py`: `_DOC_ONLY_PATTERNS` gains `.gitignore`,
|
|
40
|
+
`.claude/**`, `.codex/**` — agent/repo metadata with no runtime
|
|
41
|
+
code. Tamper guard is a separate channel and is unaffected.
|
|
42
|
+
2. `commit_gate.py run_pytest`: the full-suite target falls back from
|
|
43
|
+
`tests/unit/` to `tests/` when only the latter exists, so a
|
|
44
|
+
non-convention suite is still run instead of erroring. A repo with
|
|
45
|
+
no tests at all keeps the RED verdict — the TDD contract ("code
|
|
46
|
+
changes require tests") is untouched, but the verdict message now
|
|
47
|
+
says "no tests collected" instead of implying failures.
|
|
48
|
+
3. `commit_gate.py run_pytest`: output containing "No module named
|
|
49
|
+
pytest" raises `GateUnavailable` → WARN + allow, matching the
|
|
50
|
+
missing-binary path (R3).
|
|
51
|
+
|
|
52
|
+
Out of scope (unchanged): trunk full-suite rule, protected-branch
|
|
53
|
+
block rule, tamper guard, secrets gate.
|
|
54
|
+
|
|
55
|
+
Verification: focused unit tests for all three behaviors + full suite.
|
|
@@ -597,8 +597,9 @@ def main():
|
|
|
597
597
|
help="Hook mode: read hook JSON context from stdin (SessionStart/PreCompact)",
|
|
598
598
|
)
|
|
599
599
|
gate_parser.add_argument(
|
|
600
|
-
"scope", nargs="
|
|
601
|
-
help="Authorize a scope (pr|release|repo|publish|spec_edit) for the TTL window"
|
|
600
|
+
"scope", nargs="*", default=None,
|
|
601
|
+
help="Authorize a scope (pr|release|repo|publish|spec_edit) for the TTL window. "
|
|
602
|
+
"Both `pactkit gate authorize <scope>` and `pactkit gate <scope>` work.",
|
|
602
603
|
)
|
|
603
604
|
gate_parser.add_argument(
|
|
604
605
|
"--ttl-minutes", type=int, default=None,
|
|
@@ -1651,7 +1652,16 @@ def main():
|
|
|
1651
1652
|
if args.scope:
|
|
1652
1653
|
from pactkit.auth_gate import authorize
|
|
1653
1654
|
|
|
1654
|
-
|
|
1655
|
+
# HOTFIX-slim-20260830bbb5bc219d35: the gate messages and the
|
|
1656
|
+
# L1 Override Protocol document `pactkit gate authorize <scope>`;
|
|
1657
|
+
# accept the keyword form alongside the bare positional form.
|
|
1658
|
+
tokens = list(args.scope)
|
|
1659
|
+
if tokens and tokens[0] == "authorize":
|
|
1660
|
+
tokens = tokens[1:]
|
|
1661
|
+
if len(tokens) != 1:
|
|
1662
|
+
parser.error("gate: authorize takes exactly one scope "
|
|
1663
|
+
"(pr|release|repo|publish|spec_edit)")
|
|
1664
|
+
print(authorize(project_root, tokens[0], args.ttl_minutes))
|
|
1655
1665
|
raise SystemExit(0)
|
|
1656
1666
|
|
|
1657
1667
|
parser.error("gate: --hook or a scope (authorize) is required")
|
|
@@ -142,6 +142,15 @@ def run_pytest(root: Path, test_files: list[str] | None) -> tuple[int, str]:
|
|
|
142
142
|
selection is a Python-only capability). An unresolvable stack raises
|
|
143
143
|
GateUnavailable so run_gate degrades to WARN + allow instead of
|
|
144
144
|
running a wrong-suite command.
|
|
145
|
+
|
|
146
|
+
HOTFIX-slim-20260901469666ef23a8: the full-suite target falls back
|
|
147
|
+
from ``tests/unit/`` to ``tests/`` when only the latter exists, so a
|
|
148
|
+
flat-layout suite still runs instead of erroring with exit 4; a repo
|
|
149
|
+
with no tests directory keeps the convention target. "No module
|
|
150
|
+
named pytest" (e.g. the pipx fallback interpreter without pytest)
|
|
151
|
+
raises GateUnavailable — an unusable toolchain is an environment
|
|
152
|
+
failure (R3 WARN + allow), not a RED verdict, matching the
|
|
153
|
+
missing-binary FileNotFoundError path.
|
|
145
154
|
"""
|
|
146
155
|
from pactkit.utils import stack_test_command
|
|
147
156
|
|
|
@@ -153,8 +162,10 @@ def run_pytest(root: Path, test_files: list[str] | None) -> tuple[int, str]:
|
|
|
153
162
|
cmd = [*_pytest_command(root), "-rs", "-q"]
|
|
154
163
|
if test_files:
|
|
155
164
|
cmd.extend(test_files)
|
|
165
|
+
elif (root / "tests").is_dir() and not (root / "tests" / "unit").is_dir():
|
|
166
|
+
cmd.append("tests/") # flat layout: run the suite that exists
|
|
156
167
|
else:
|
|
157
|
-
cmd.append("tests/unit/")
|
|
168
|
+
cmd.append("tests/unit/") # convention target
|
|
158
169
|
else:
|
|
159
170
|
cmd = list(base_cmd) # full suite; test-file selection ignored
|
|
160
171
|
env = os.environ.copy()
|
|
@@ -165,7 +176,16 @@ def run_pytest(root: Path, test_files: list[str] | None) -> tuple[int, str]:
|
|
|
165
176
|
cmd, cwd=root, capture_output=True, text=True,
|
|
166
177
|
timeout=PYTEST_TIMEOUT_SECONDS, env=env,
|
|
167
178
|
)
|
|
168
|
-
|
|
179
|
+
output = proc.stdout + proc.stderr
|
|
180
|
+
# Only pytest's own absence counts: a failing test may legitimately
|
|
181
|
+
# print "No module named <something>" without the toolchain being broken.
|
|
182
|
+
if proc.returncode != 0 and re.search(
|
|
183
|
+
r"no module named ['\"]?pytest\b", output.lower()
|
|
184
|
+
):
|
|
185
|
+
raise GateUnavailable(
|
|
186
|
+
f"pytest not importable via {cmd[0]} — create the project venv"
|
|
187
|
+
)
|
|
188
|
+
return proc.returncode, output
|
|
169
189
|
except FileNotFoundError:
|
|
170
190
|
raise GateUnavailable("pytest not found")
|
|
171
191
|
except subprocess.TimeoutExpired:
|
|
@@ -402,14 +422,34 @@ def run_gate(root: Path) -> GateResult:
|
|
|
402
422
|
result.lines.extend(f" {line}" for line in summary["skip_reasons"][:20])
|
|
403
423
|
|
|
404
424
|
if returncode != 0:
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
425
|
+
collected = (
|
|
426
|
+
summary["passed"] + summary["failed"]
|
|
427
|
+
+ summary["skipped"] + summary["errors"]
|
|
428
|
+
)
|
|
429
|
+
if collected == 0:
|
|
430
|
+
# HOTFIX-slim-20260901469666ef23a8: exit 4/5 means nothing
|
|
431
|
+
# ran — say so instead of implying failures. Still RED: a
|
|
432
|
+
# change that reaches the gate needs a suite to verify it
|
|
433
|
+
# (docs/meta-only changes skip via classification instead).
|
|
434
|
+
result.lines.append(
|
|
435
|
+
"[FAIL] no tests collected — treated as RED (code changes "
|
|
436
|
+
"require tests; docs/meta-only changes skip via classification)"
|
|
437
|
+
)
|
|
438
|
+
tail = [ln for ln in output.splitlines() if ln.startswith(("ERROR",))][:10]
|
|
439
|
+
result.lines.extend(f" {ln}" for ln in tail)
|
|
440
|
+
else:
|
|
441
|
+
result.lines.append("[FAIL] tests are RED — commit blocked (R5: fix is yours, not the gate's)")
|
|
442
|
+
tail = [ln for ln in output.splitlines() if ln.startswith(("FAILED", "ERROR"))][:10]
|
|
443
|
+
result.lines.extend(f" {ln}" for ln in tail)
|
|
408
444
|
result.exit_code = 1
|
|
409
445
|
from pactkit.run_events import record_gate_event
|
|
410
446
|
|
|
411
447
|
record_gate_event(root, "gate_blocked", {
|
|
412
|
-
"gate": "commit_gate",
|
|
448
|
+
"gate": "commit_gate",
|
|
449
|
+
"reason": (
|
|
450
|
+
"no tests collected — treated as RED"
|
|
451
|
+
if collected == 0 else "tests RED — commit blocked"
|
|
452
|
+
),
|
|
413
453
|
})
|
|
414
454
|
record_status(root, "commit_gate", FULL, "")
|
|
415
455
|
return result
|
|
@@ -431,6 +471,29 @@ def run_gate(root: Path) -> GateResult:
|
|
|
431
471
|
return result
|
|
432
472
|
|
|
433
473
|
|
|
474
|
+
# HOTFIX-slim-20260830bbb5bc219d35: a `cd <dir> && git push` targets
|
|
475
|
+
# <dir>'s repository, not the session cwd — gates must evaluate the
|
|
476
|
+
# TARGET repo's enforcement config. Match `cd` at command start or after
|
|
477
|
+
# a shell separator; the last cd before the git command wins.
|
|
478
|
+
_CD_TARGET_RE = re.compile(r"(?:^|&&|;|\|\|)\s*cd\s+([^\s;&|]+)")
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
def _command_root(command: str, session_root: Path) -> Path:
|
|
482
|
+
"""Directory a shell command actually operates in (last cd target).
|
|
483
|
+
|
|
484
|
+
Relative targets resolve against the session root; a target that is
|
|
485
|
+
not a directory falls back to the session root (never misroute, never
|
|
486
|
+
crash on odd cd usage like `cd -`).
|
|
487
|
+
"""
|
|
488
|
+
targets = _CD_TARGET_RE.findall(command)
|
|
489
|
+
if not targets:
|
|
490
|
+
return session_root
|
|
491
|
+
target = Path(targets[-1]).expanduser()
|
|
492
|
+
if not target.is_absolute():
|
|
493
|
+
target = session_root / target
|
|
494
|
+
return target if target.is_dir() else session_root
|
|
495
|
+
|
|
496
|
+
|
|
434
497
|
def hook_entry(stdin_text: str, root: Path) -> tuple[str, int]:
|
|
435
498
|
"""PreToolUse hook mode. Returns (stderr_message, exit_code).
|
|
436
499
|
|
|
@@ -486,6 +549,11 @@ def hook_entry(stdin_text: str, root: Path) -> tuple[str, int]:
|
|
|
486
549
|
else:
|
|
487
550
|
command = str(raw_command)
|
|
488
551
|
|
|
552
|
+
# HOTFIX-slim-20260830bbb5bc219d35: evaluate gates against the repo the
|
|
553
|
+
# command actually operates in (`cd <other-repo> && git push`), not
|
|
554
|
+
# blindly against the session cwd.
|
|
555
|
+
root = _command_root(command, root)
|
|
556
|
+
|
|
489
557
|
# L1 secrets scan runs on every Bash command, whatever it is
|
|
490
558
|
from pactkit.secrets_gate import check_command as check_secrets
|
|
491
559
|
|
|
@@ -7,11 +7,17 @@ from __future__ import annotations
|
|
|
7
7
|
import fnmatch
|
|
8
8
|
|
|
9
9
|
# Files that match these patterns are considered "doc-only" — safe to skip tests.
|
|
10
|
+
# HOTFIX-slim-20260901469666ef23a8: repo/agent metadata (.gitignore,
|
|
11
|
+
# .claude/**, .codex/**) carries no runtime code — a design-baseline or
|
|
12
|
+
# governance commit containing them must not lose the doc-only skip.
|
|
10
13
|
_DOC_ONLY_PATTERNS: tuple[str, ...] = (
|
|
11
14
|
"docs/**",
|
|
12
15
|
"*.md",
|
|
13
16
|
"README*",
|
|
14
17
|
"*.txt",
|
|
18
|
+
".gitignore",
|
|
19
|
+
".claude/**",
|
|
20
|
+
".codex/**",
|
|
15
21
|
)
|
|
16
22
|
# tests/** is deliberately NOT doc-only: a commit that modifies tests must
|
|
17
23
|
# run them (STORY-slim-20260826ce35b77ce005 R5).
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
usage: pactkit gate [-h] [--hook {session-start,pre-compact}]
|
|
2
2
|
[--ttl-minutes TTL_MINUTES]
|
|
3
|
-
[scope]
|
|
3
|
+
[scope ...]
|
|
4
4
|
|
|
5
5
|
positional arguments:
|
|
6
6
|
scope Authorize a scope (pr|release|repo|publish|spec_edit)
|
|
7
|
-
for the TTL window
|
|
7
|
+
for the TTL window. Both `pactkit gate authorize
|
|
8
|
+
<scope>` and `pactkit gate <scope>` work.
|
|
8
9
|
|
|
9
10
|
options:
|
|
10
11
|
-h, --help show this help message and exit
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""HOTFIX-slim-20260830bbb5bc219d35: gate CLI syntax + cross-repo push root.
|
|
2
|
+
|
|
3
|
+
Two defects from the 2.25.0 release run:
|
|
4
|
+
1. auth-gate's documented `pactkit gate authorize <scope>` failed —
|
|
5
|
+
the parser only accepted the bare positional form.
|
|
6
|
+
2. push-gate judged `cd <other-repo> && git push` by the SESSION cwd's
|
|
7
|
+
enforcement config instead of the target repo's.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
from pactkit import commit_gate
|
|
16
|
+
from pactkit.commit_gate import hook_entry
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture
|
|
20
|
+
def repo(tmp_path, monkeypatch):
|
|
21
|
+
(tmp_path / ".git" / "hooks").mkdir(parents=True)
|
|
22
|
+
monkeypatch.setattr(
|
|
23
|
+
commit_gate,
|
|
24
|
+
"_enforcement_settings",
|
|
25
|
+
lambda root: {
|
|
26
|
+
"protected_branches": ["main", "master"],
|
|
27
|
+
"allow_direct_push": False,
|
|
28
|
+
"tamper_guard": True,
|
|
29
|
+
"spec_guard": True,
|
|
30
|
+
"auth_gate": True,
|
|
31
|
+
"secrets_gate": True,
|
|
32
|
+
"auth_ttl_minutes": 30,
|
|
33
|
+
},
|
|
34
|
+
)
|
|
35
|
+
return tmp_path
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _payload(command, cwd=None):
|
|
39
|
+
payload = {"tool_name": "Bash", "tool_input": {"command": command}}
|
|
40
|
+
if cwd:
|
|
41
|
+
payload["cwd"] = str(cwd)
|
|
42
|
+
return json.dumps(payload)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# ===========================================================================
|
|
46
|
+
# Fix 1: gate CLI accepts the documented `authorize <scope>` form
|
|
47
|
+
# ===========================================================================
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class TestGateCliSyntax:
|
|
51
|
+
def _run_cli(self, argv, tmp_path):
|
|
52
|
+
import sys
|
|
53
|
+
|
|
54
|
+
from pactkit.cli import main
|
|
55
|
+
|
|
56
|
+
# the CLI requires an init marker before dispatching any command
|
|
57
|
+
marker = tmp_path / ".claude" / "pactkit.yaml"
|
|
58
|
+
marker.parent.mkdir(exist_ok=True)
|
|
59
|
+
marker.write_text("stack: python\n", encoding="utf-8")
|
|
60
|
+
|
|
61
|
+
old_argv = sys.argv
|
|
62
|
+
sys.argv = ["pactkit", "-C", str(tmp_path), "gate", *argv]
|
|
63
|
+
try:
|
|
64
|
+
main()
|
|
65
|
+
except SystemExit as exc:
|
|
66
|
+
return exc.code
|
|
67
|
+
finally:
|
|
68
|
+
sys.argv = old_argv
|
|
69
|
+
return 0
|
|
70
|
+
|
|
71
|
+
def test_authorize_keyword_form(self, tmp_path, capsys):
|
|
72
|
+
code = self._run_cli(["authorize", "release", "--ttl-minutes", "5"], tmp_path)
|
|
73
|
+
assert code in (0, None)
|
|
74
|
+
token = json.loads(
|
|
75
|
+
(tmp_path / ".pactkit" / "enforcement" / "authorization.json").read_text()
|
|
76
|
+
)
|
|
77
|
+
assert token["scope"] == "release"
|
|
78
|
+
assert "authorized" in capsys.readouterr().out
|
|
79
|
+
|
|
80
|
+
def test_bare_scope_form_still_works(self, tmp_path, capsys):
|
|
81
|
+
code = self._run_cli(["release", "--ttl-minutes", "5"], tmp_path)
|
|
82
|
+
assert code in (0, None)
|
|
83
|
+
token = json.loads(
|
|
84
|
+
(tmp_path / ".pactkit" / "enforcement" / "authorization.json").read_text()
|
|
85
|
+
)
|
|
86
|
+
assert token["scope"] == "release"
|
|
87
|
+
|
|
88
|
+
def test_authorize_without_scope_errors(self, tmp_path):
|
|
89
|
+
code = self._run_cli(["authorize"], tmp_path)
|
|
90
|
+
assert code not in (0, None)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
# ===========================================================================
|
|
94
|
+
# Fix 2: push-gate evaluates the command's target repo
|
|
95
|
+
# ===========================================================================
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class TestCrossRepoPushRoot:
|
|
99
|
+
def test_cd_to_strict_repo_blocks(self, repo, tmp_path_factory, monkeypatch):
|
|
100
|
+
"""Target repo has default (protective) config; session repo allows."""
|
|
101
|
+
other = tmp_path_factory.mktemp("other-repo")
|
|
102
|
+
(other / ".git" / "hooks").mkdir(parents=True)
|
|
103
|
+
monkeypatch.setattr(
|
|
104
|
+
commit_gate,
|
|
105
|
+
"_enforcement_settings",
|
|
106
|
+
lambda root: (
|
|
107
|
+
{"protected_branches": ["main"], "allow_direct_push": True,
|
|
108
|
+
"tamper_guard": False, "spec_guard": True, "auth_gate": True,
|
|
109
|
+
"secrets_gate": True, "auth_ttl_minutes": 30}
|
|
110
|
+
if Path(root) == Path(repo)
|
|
111
|
+
else {"protected_branches": ["main", "master"],
|
|
112
|
+
"allow_direct_push": False, "tamper_guard": True,
|
|
113
|
+
"spec_guard": True, "auth_gate": True,
|
|
114
|
+
"secrets_gate": True, "auth_ttl_minutes": 30}
|
|
115
|
+
),
|
|
116
|
+
)
|
|
117
|
+
monkeypatch.setattr(commit_gate, "current_branch",
|
|
118
|
+
lambda root: "main" if Path(root) == Path(other) else "feature/x")
|
|
119
|
+
monkeypatch.setattr(commit_gate, "run_pytest", lambda root, tf: (0, "1 passed"))
|
|
120
|
+
|
|
121
|
+
_, code = hook_entry(
|
|
122
|
+
_payload(f"cd {other} && git push origin main", cwd=repo), repo
|
|
123
|
+
)
|
|
124
|
+
assert code == 2 # judged by the TARGET repo's protective config
|
|
125
|
+
|
|
126
|
+
def test_cd_to_permissive_repo_allows(self, repo, tmp_path_factory, monkeypatch):
|
|
127
|
+
"""Target repo allows direct push; session repo is protective."""
|
|
128
|
+
other = tmp_path_factory.mktemp("other-repo")
|
|
129
|
+
(other / ".git" / "hooks").mkdir(parents=True)
|
|
130
|
+
monkeypatch.setattr(
|
|
131
|
+
commit_gate,
|
|
132
|
+
"_enforcement_settings",
|
|
133
|
+
lambda root: (
|
|
134
|
+
{"protected_branches": ["main"], "allow_direct_push": True,
|
|
135
|
+
"tamper_guard": False, "spec_guard": True, "auth_gate": True,
|
|
136
|
+
"secrets_gate": True, "auth_ttl_minutes": 30}
|
|
137
|
+
if Path(root) == Path(other)
|
|
138
|
+
else {"protected_branches": ["main", "master"],
|
|
139
|
+
"allow_direct_push": False, "tamper_guard": True,
|
|
140
|
+
"spec_guard": True, "auth_gate": True,
|
|
141
|
+
"secrets_gate": True, "auth_ttl_minutes": 30}
|
|
142
|
+
),
|
|
143
|
+
)
|
|
144
|
+
monkeypatch.setattr(commit_gate, "current_branch",
|
|
145
|
+
lambda root: "main" if Path(root) == Path(other) else "feature/x")
|
|
146
|
+
|
|
147
|
+
_, code = hook_entry(
|
|
148
|
+
_payload(f"cd {other} && git push origin main", cwd=repo), repo
|
|
149
|
+
)
|
|
150
|
+
assert code == 0
|
|
151
|
+
|
|
152
|
+
def test_relative_cd_resolved_against_session_root(self, repo, monkeypatch):
|
|
153
|
+
(repo / "sub" / ".git").mkdir(parents=True)
|
|
154
|
+
monkeypatch.setattr(commit_gate, "current_branch",
|
|
155
|
+
lambda root: "main" if root.name == "sub" else "feature/x")
|
|
156
|
+
monkeypatch.setattr(commit_gate, "run_pytest", lambda root, tf: (0, "1 passed"))
|
|
157
|
+
_, code = hook_entry(_payload("cd sub && git push origin main", cwd=repo), repo)
|
|
158
|
+
assert code == 2
|
|
159
|
+
|
|
160
|
+
def test_cd_to_nonexistent_dir_falls_back_to_session_root(self, repo, monkeypatch):
|
|
161
|
+
"""A cd that doesn't resolve must not crash or misroute."""
|
|
162
|
+
monkeypatch.setattr(commit_gate, "current_branch", lambda root: "feature/x")
|
|
163
|
+
_, code = hook_entry(_payload("cd /no/such/dir && git push origin feature/x", cwd=repo), repo)
|
|
164
|
+
assert code == 0 # feature branch in session root: allowed
|