pactkit 2.20.0__tar.gz → 2.22.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. pactkit-2.22.0/CHANGELOG.md +745 -0
  2. pactkit-2.22.0/PKG-INFO +463 -0
  3. pactkit-2.22.0/README.md +418 -0
  4. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260227-8e92f52c86.md +12 -0
  5. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260227-a21cacfde2.md +12 -0
  6. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260227-ccb19799ea.md +12 -0
  7. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260228-6e4b02ff08.md +12 -0
  8. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260228-b87245d5fc.md +12 -0
  9. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260302-8980b2512d.md +12 -0
  10. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260302-8f58fa2045.md +12 -0
  11. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260302-a3a1b7900e.md +12 -0
  12. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260303-3f65c0442b.md +12 -0
  13. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260304-23c605e495.md +12 -0
  14. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260304-8bd6c10219.md +12 -0
  15. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260305-129d1dea2a.md +12 -0
  16. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260305-48752d79c3.md +12 -0
  17. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260305-b9afdd8720.md +12 -0
  18. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260305-f93ee5b19f.md +12 -0
  19. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260306-7061390095.md +12 -0
  20. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260313-edf7807faf.md +12 -0
  21. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260316-091567c2bb.md +12 -0
  22. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260316-4661b3789a.md +12 -0
  23. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260316-7214dac8fc.md +12 -0
  24. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-3d8a855086.md +12 -0
  25. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-4ba69c35f0.md +12 -0
  26. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-6cd2a53ba5.md +12 -0
  27. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-7a0dd3407e.md +12 -0
  28. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-86927e3701.md +12 -0
  29. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-9a8025eaac.md +12 -0
  30. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-a0721cc066.md +12 -0
  31. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-a1f53d759b.md +12 -0
  32. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-a9f7897b36.md +12 -0
  33. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260317-ff430eaa29.md +12 -0
  34. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260318-fb0bcd928b.md +12 -0
  35. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260319-f320fbb5cc.md +12 -0
  36. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260320-b2d80c56b3.md +12 -0
  37. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260320-c102dbd6f8.md +12 -0
  38. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260320-e8f6ddae81.md +12 -0
  39. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260321-5e57da75b0.md +12 -0
  40. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260321-6a4a30628f.md +12 -0
  41. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260321-b5a58de3f9.md +12 -0
  42. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260321-e0138991ed.md +12 -0
  43. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260321-e49663fc95.md +12 -0
  44. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260322-4c0480e882.md +12 -0
  45. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260322-d1ece5c0d4.md +12 -0
  46. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260323-4bd30888ce.md +12 -0
  47. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260323-7a02b3eb85.md +12 -0
  48. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260323-8624e0d93a.md +12 -0
  49. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260323-a8faeea78c.md +12 -0
  50. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-075e3332b8.md +12 -0
  51. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-0f6f041a52.md +12 -0
  52. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-2dab5931de.md +12 -0
  53. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-8bcda73e9b.md +12 -0
  54. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-9e6238f0c8.md +12 -0
  55. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-a1cace9846.md +12 -0
  56. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-bf64dd9564.md +12 -0
  57. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-c344d7655c.md +12 -0
  58. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-e60c50dcc9.md +12 -0
  59. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260324-f5149caffe.md +12 -0
  60. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260325-1a5eeea04c.md +12 -0
  61. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-02460b22de.md +12 -0
  62. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-09de627b2b.md +12 -0
  63. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-204ea48f84.md +12 -0
  64. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-32e2fd3074.md +12 -0
  65. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-6c6dbfc365.md +12 -0
  66. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-7811ad7ff2.md +12 -0
  67. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-88e7123370.md +12 -0
  68. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-d2376010b1.md +12 -0
  69. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-e4f0eb8850.md +12 -0
  70. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-e68b8aa47f.md +12 -0
  71. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260326-fdd06ad981.md +12 -0
  72. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260327-e3c7f5abcb.md +12 -0
  73. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260330-eb1760def2.md +12 -0
  74. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-1b58a289ea.md +12 -0
  75. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-26e474753e.md +12 -0
  76. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-3028ab9cf5.md +12 -0
  77. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-350048862b.md +12 -0
  78. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-7d41cdf5a3.md +12 -0
  79. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-8e5558a077.md +12 -0
  80. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260331-c46df1c3b1.md +12 -0
  81. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-41515789f6.md +12 -0
  82. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-4453752dda.md +12 -0
  83. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-5a225a1c0a.md +12 -0
  84. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-90724b10f0.md +12 -0
  85. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-9e322eb76e.md +12 -0
  86. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-bd20019d3d.md +12 -0
  87. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-de035be681.md +12 -0
  88. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-f44c8f499e.md +12 -0
  89. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260401-fa52f596ff.md +12 -0
  90. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260402-5b063207c8.md +12 -0
  91. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260402-5e0913ec81.md +12 -0
  92. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260415-3d8b5e8f81.md +12 -0
  93. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260415-84219771ca.md +12 -0
  94. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-41d4564480.md +12 -0
  95. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-5cdc3cf53f.md +12 -0
  96. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-807c65a8e7.md +12 -0
  97. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-ade561c777.md +12 -0
  98. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-b78aaf129a.md +12 -0
  99. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-db8a5430a0.md +12 -0
  100. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260416-f5a765c496.md +12 -0
  101. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260417-f1d777e9c9.md +12 -0
  102. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260418-ee12f2ff0d.md +12 -0
  103. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260420-2260437be7.md +12 -0
  104. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260420-a35a083e29.md +12 -0
  105. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260420-fa7d958d56.md +12 -0
  106. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260421-309c998a10.md +12 -0
  107. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260422-6509ac4df0.md +12 -0
  108. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260422-8dd5ed6a24.md +12 -0
  109. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260423-b0890ad9c2.md +12 -0
  110. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260424-24cc1d5e19.md +12 -0
  111. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260424-39a99c887d.md +12 -0
  112. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260427-f7955d5775.md +12 -0
  113. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260507-7b75a5cab8.md +12 -0
  114. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260507-b26f97255d.md +12 -0
  115. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260525-1fe96d2ff4.md +12 -0
  116. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260525-717e18e190.md +12 -0
  117. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260525-df4853fa3f.md +12 -0
  118. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260526-4c230f3a9d.md +12 -0
  119. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260601-6d6b779a83.md +12 -0
  120. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260601-e65d3407ed.md +12 -0
  121. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260610-51c3cf895e.md +12 -0
  122. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260629-6171e54ac8.md +12 -0
  123. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260702-4616caa284.md +12 -0
  124. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260713-da6d40dcc0.md +12 -0
  125. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260723-d4c9801300.md +12 -0
  126. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260813-18efcf9687.md +12 -0
  127. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260813-1dc6e2e1c7.md +12 -0
  128. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260813-21d4da632f.md +12 -0
  129. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260817-3587ae1a22.md +12 -0
  130. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260817-5f08a6affa.md +12 -0
  131. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260817-800f717c9d.md +12 -0
  132. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260817-a2cd839a2d.md +12 -0
  133. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260822-9175485749.md +12 -0
  134. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260822105138-298451a42c.md +10 -0
  135. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260822105138-522c7e4af4.md +10 -0
  136. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260822105138-72cc1d0343.md +10 -0
  137. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260823015950-6b8cbea92e.md +10 -0
  138. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260823022240-d3570f57fb.md +10 -0
  139. pactkit-2.22.0/docs/architecture/governance/lessons/LESSON-20260823050717-9192db37f8.md +10 -0
  140. pactkit-2.22.0/docs/architecture/governance/rules.md +24 -0
  141. pactkit-2.22.0/docs/product/archive/archive_202608.md +111 -0
  142. pactkit-2.22.0/docs/product/context.md +29 -0
  143. pactkit-2.22.0/docs/product/sprint_board.md +127 -0
  144. pactkit-2.22.0/docs/product/stories/HOTFIX-slim-127.yaml +20 -0
  145. pactkit-2.22.0/docs/product/stories/HOTFIX-slim-131.yaml +11 -0
  146. pactkit-2.22.0/docs/product/stories/HOTFIX-slim-132.yaml +11 -0
  147. pactkit-2.22.0/docs/product/stories/STORY-slim-115.yaml +23 -0
  148. pactkit-2.22.0/docs/product/stories/STORY-slim-118.yaml +17 -0
  149. pactkit-2.22.0/docs/product/stories/STORY-slim-119.yaml +23 -0
  150. pactkit-2.22.0/docs/product/stories/STORY-slim-145.yaml +23 -0
  151. pactkit-2.22.0/docs/product/stories/STORY-slim-147.yaml +28 -0
  152. pactkit-2.22.0/docs/product/stories/STORY-slim-148.yaml +31 -0
  153. pactkit-2.22.0/docs/product/stories/STORY-slim-149.yaml +31 -0
  154. pactkit-2.22.0/docs/product/stories/STORY-slim-2026082381e832771d4e.yaml +37 -0
  155. pactkit-2.22.0/docs/product/stories/STORY-slim-20260823d854b0cf1875.yaml +34 -0
  156. pactkit-2.22.0/docs/product/stories/STORY-slim-20260823de7e85d6042a.yaml +31 -0
  157. pactkit-2.22.0/docs/specs/STORY-slim-147.md +236 -0
  158. pactkit-2.22.0/docs/specs/STORY-slim-148.md +256 -0
  159. pactkit-2.22.0/docs/specs/STORY-slim-149.md +215 -0
  160. pactkit-2.22.0/docs/specs/STORY-slim-2026082381e832771d4e.md +256 -0
  161. pactkit-2.22.0/docs/specs/STORY-slim-20260823d854b0cf1875.md +178 -0
  162. pactkit-2.22.0/docs/specs/STORY-slim-20260823de7e85d6042a.md +225 -0
  163. pactkit-2.22.0/docs/specs/STORY-slim-2026082466c8670d9655.md +112 -0
  164. pactkit-2.22.0/docs/specs/STORY-slim-20260824dd23a0ed3b4c.md +159 -0
  165. pactkit-2.22.0/docs/test_cases/STORY-slim-147_case.md +59 -0
  166. pactkit-2.22.0/docs/test_cases/STORY-slim-148_case.md +65 -0
  167. pactkit-2.22.0/docs/test_cases/STORY-slim-149_case.md +65 -0
  168. pactkit-2.22.0/docs/test_cases/STORY-slim-2026082381e832771d4e_case.md +89 -0
  169. pactkit-2.22.0/docs/test_cases/STORY-slim-20260823d854b0cf1875_case.md +92 -0
  170. pactkit-2.22.0/docs/test_cases/STORY-slim-20260823de7e85d6042a_case.md +85 -0
  171. pactkit-2.22.0/pyproject.toml +101 -0
  172. pactkit-2.22.0/src/pactkit/__init__.py +3 -0
  173. pactkit-2.22.0/src/pactkit/audit.py +1302 -0
  174. pactkit-2.22.0/src/pactkit/backfill.py +81 -0
  175. pactkit-2.22.0/src/pactkit/cli.py +1616 -0
  176. pactkit-2.22.0/src/pactkit/commit_gate.py +362 -0
  177. pactkit-2.22.0/src/pactkit/config.py +1146 -0
  178. pactkit-2.22.0/src/pactkit/context_gen.py +403 -0
  179. pactkit-2.22.0/src/pactkit/continuation.py +1199 -0
  180. pactkit-2.22.0/src/pactkit/deploy_manifest.py +159 -0
  181. pactkit-2.22.0/src/pactkit/doctor.py +653 -0
  182. pactkit-2.22.0/src/pactkit/done_verify.py +384 -0
  183. pactkit-2.22.0/src/pactkit/garden.py +408 -0
  184. pactkit-2.22.0/src/pactkit/generators/deploy_base.py +288 -0
  185. pactkit-2.22.0/src/pactkit/generators/deployer.py +1744 -0
  186. pactkit-2.22.0/src/pactkit/governance.py +460 -0
  187. pactkit-2.22.0/src/pactkit/graph_query.py +393 -0
  188. pactkit-2.22.0/src/pactkit/guards.py +113 -0
  189. pactkit-2.22.0/src/pactkit/host_continuation.py +225 -0
  190. pactkit-2.22.0/src/pactkit/id_generator.py +33 -0
  191. pactkit-2.22.0/src/pactkit/portable_methods.py +70 -0
  192. pactkit-2.22.0/src/pactkit/profiles.py +273 -0
  193. pactkit-2.22.0/src/pactkit/prompts/__init__.py +67 -0
  194. pactkit-2.22.0/src/pactkit/prompts/agents.py +321 -0
  195. pactkit-2.22.0/src/pactkit/prompts/commands.py +997 -0
  196. pactkit-2.22.0/src/pactkit/prompts/rules.py +886 -0
  197. pactkit-2.22.0/src/pactkit/prompts/skills.py +856 -0
  198. pactkit-2.22.0/src/pactkit/prompts/workflows.py +961 -0
  199. pactkit-2.22.0/src/pactkit/schemas.py +260 -0
  200. pactkit-2.22.0/src/pactkit/skills/board.py +484 -0
  201. pactkit-2.22.0/src/pactkit/skills/scaffold.py +490 -0
  202. pactkit-2.22.0/src/pactkit/skills/spec_linter.py +551 -0
  203. pactkit-2.22.0/src/pactkit/utils.py +15 -0
  204. pactkit-2.22.0/src/pactkit/workflow_engine.py +3094 -0
  205. pactkit-2.22.0/src/pactkit/workflow_registry.py +195 -0
  206. pactkit-2.22.0/src/pactkit/workflow_validators.py +439 -0
  207. pactkit-2.22.0/tests/e2e/cli/test_cli_e2e.py +593 -0
  208. pactkit-2.22.0/tests/e2e/cli/test_story_slim147_workflow_cli.py +65 -0
  209. pactkit-2.22.0/tests/e2e/cli/test_story_slim148_governance_cli.py +82 -0
  210. pactkit-2.22.0/tests/e2e/cli/test_story_slim149_query_cli.py +74 -0
  211. pactkit-2.22.0/tests/unit/test_board_bug027.py +178 -0
  212. pactkit-2.22.0/tests/unit/test_board_sections.py +308 -0
  213. pactkit-2.22.0/tests/unit/test_bug005_archive_taskless.py +71 -0
  214. pactkit-2.22.0/tests/unit/test_bug_021.py +342 -0
  215. pactkit-2.22.0/tests/unit/test_bug_024.py +212 -0
  216. pactkit-2.22.0/tests/unit/test_bug_slim002_instruction_collision.py +169 -0
  217. pactkit-2.22.0/tests/unit/test_bug_slim003.py +238 -0
  218. pactkit-2.22.0/tests/unit/test_bug_slim004.py +152 -0
  219. pactkit-2.22.0/tests/unit/test_bug_slim006.py +214 -0
  220. pactkit-2.22.0/tests/unit/test_command_visualize_modes.py +83 -0
  221. pactkit-2.22.0/tests/unit/test_commit_gate.py +333 -0
  222. pactkit-2.22.0/tests/unit/test_cross_flow_matrix.py +104 -0
  223. pactkit-2.22.0/tests/unit/test_init_guard.py +107 -0
  224. pactkit-2.22.0/tests/unit/test_list_stories.py +195 -0
  225. pactkit-2.22.0/tests/unit/test_multi_prefix.py +164 -0
  226. pactkit-2.22.0/tests/unit/test_prompt_cli_refs.py +87 -0
  227. pactkit-2.22.0/tests/unit/test_resolve_scope.py +296 -0
  228. pactkit-2.22.0/tests/unit/test_selective_deploy.py +330 -0
  229. pactkit-2.22.0/tests/unit/test_session_context.py +229 -0
  230. pactkit-2.22.0/tests/unit/test_skill_structure.py +219 -0
  231. pactkit-2.22.0/tests/unit/test_skills_enrichment.py +137 -0
  232. pactkit-2.22.0/tests/unit/test_sprint_command.py +271 -0
  233. pactkit-2.22.0/tests/unit/test_status_command.py +163 -0
  234. pactkit-2.22.0/tests/unit/test_story017_init_claude_md.py +48 -0
  235. pactkit-2.22.0/tests/unit/test_story020_horizon.py +93 -0
  236. pactkit-2.22.0/tests/unit/test_story024_native_agent.py +318 -0
  237. pactkit-2.22.0/tests/unit/test_story034_plan_config_refresh.py +102 -0
  238. pactkit-2.22.0/tests/unit/test_story056_commands.py +162 -0
  239. pactkit-2.22.0/tests/unit/test_story063_prompt_slimming.py +238 -0
  240. pactkit-2.22.0/tests/unit/test_story_slim014_guard.py +65 -0
  241. pactkit-2.22.0/tests/unit/test_story_slim014_next_id.py +96 -0
  242. pactkit-2.22.0/tests/unit/test_story_slim026.py +128 -0
  243. pactkit-2.22.0/tests/unit/test_story_slim051.py +560 -0
  244. pactkit-2.22.0/tests/unit/test_story_slim052.py +584 -0
  245. pactkit-2.22.0/tests/unit/test_story_slim054.py +147 -0
  246. pactkit-2.22.0/tests/unit/test_story_slim056.py +495 -0
  247. pactkit-2.22.0/tests/unit/test_story_slim084.py +122 -0
  248. pactkit-2.22.0/tests/unit/test_story_slim099_act_context_ref.py +45 -0
  249. pactkit-2.22.0/tests/unit/test_story_slim121.py +252 -0
  250. pactkit-2.22.0/tests/unit/test_story_slim127_managed_block.py +235 -0
  251. pactkit-2.22.0/tests/unit/test_story_slim132.py +147 -0
  252. pactkit-2.22.0/tests/unit/test_story_slim139_skill_manifest.py +198 -0
  253. pactkit-2.22.0/tests/unit/test_story_slim141_manifest_hash.py +238 -0
  254. pactkit-2.22.0/tests/unit/test_story_slim144_wave_mode.py +147 -0
  255. pactkit-2.22.0/tests/unit/test_story_slim145.py +358 -0
  256. pactkit-2.22.0/tests/unit/test_story_slim147.py +248 -0
  257. pactkit-2.22.0/tests/unit/test_story_slim148.py +286 -0
  258. pactkit-2.22.0/tests/unit/test_story_slim149.py +312 -0
  259. pactkit-2.22.0/tests/unit/test_story_slim150.py +799 -0
  260. pactkit-2.22.0/tests/unit/test_story_slim_stop_hook.py +242 -0
  261. pactkit-2.22.0/tests/unit/test_story_slim_work_units.py +3249 -0
  262. pactkit-2.22.0/tests/unit/test_tools.py +164 -0
  263. pactkit-2.22.0/tests/unit/test_update_task.py +122 -0
  264. pactkit-2.20.0/CHANGELOG.md +0 -721
  265. pactkit-2.20.0/PKG-INFO +0 -462
  266. pactkit-2.20.0/README.md +0 -417
  267. pactkit-2.20.0/docs/architecture/governance/rules.md +0 -24
  268. pactkit-2.20.0/docs/product/archive/archive_202608.md +0 -95
  269. pactkit-2.20.0/docs/product/context.md +0 -29
  270. pactkit-2.20.0/docs/product/sprint_board.md +0 -50
  271. pactkit-2.20.0/pyproject.toml +0 -101
  272. pactkit-2.20.0/src/pactkit/__init__.py +0 -3
  273. pactkit-2.20.0/src/pactkit/audit.py +0 -1296
  274. pactkit-2.20.0/src/pactkit/backfill.py +0 -72
  275. pactkit-2.20.0/src/pactkit/cli.py +0 -1224
  276. pactkit-2.20.0/src/pactkit/commit_gate.py +0 -349
  277. pactkit-2.20.0/src/pactkit/config.py +0 -1109
  278. pactkit-2.20.0/src/pactkit/context_gen.py +0 -388
  279. pactkit-2.20.0/src/pactkit/continuation.py +0 -539
  280. pactkit-2.20.0/src/pactkit/deploy_manifest.py +0 -112
  281. pactkit-2.20.0/src/pactkit/doctor.py +0 -412
  282. pactkit-2.20.0/src/pactkit/done_verify.py +0 -368
  283. pactkit-2.20.0/src/pactkit/garden.py +0 -401
  284. pactkit-2.20.0/src/pactkit/generators/deploy_base.py +0 -279
  285. pactkit-2.20.0/src/pactkit/generators/deployer.py +0 -1719
  286. pactkit-2.20.0/src/pactkit/guards.py +0 -112
  287. pactkit-2.20.0/src/pactkit/id_generator.py +0 -37
  288. pactkit-2.20.0/src/pactkit/profiles.py +0 -271
  289. pactkit-2.20.0/src/pactkit/prompts/__init__.py +0 -64
  290. pactkit-2.20.0/src/pactkit/prompts/agents.py +0 -321
  291. pactkit-2.20.0/src/pactkit/prompts/commands.py +0 -879
  292. pactkit-2.20.0/src/pactkit/prompts/rules.py +0 -882
  293. pactkit-2.20.0/src/pactkit/prompts/skills.py +0 -867
  294. pactkit-2.20.0/src/pactkit/prompts/workflows.py +0 -961
  295. pactkit-2.20.0/src/pactkit/schemas.py +0 -254
  296. pactkit-2.20.0/src/pactkit/skills/board.py +0 -413
  297. pactkit-2.20.0/src/pactkit/skills/scaffold.py +0 -484
  298. pactkit-2.20.0/src/pactkit/skills/spec_linter.py +0 -514
  299. pactkit-2.20.0/src/pactkit/utils.py +0 -14
  300. pactkit-2.20.0/tests/e2e/cli/test_cli_e2e.py +0 -590
  301. pactkit-2.20.0/tests/unit/test_board_bug027.py +0 -174
  302. pactkit-2.20.0/tests/unit/test_board_sections.py +0 -296
  303. pactkit-2.20.0/tests/unit/test_bug005_archive_taskless.py +0 -71
  304. pactkit-2.20.0/tests/unit/test_bug_021.py +0 -341
  305. pactkit-2.20.0/tests/unit/test_bug_024.py +0 -204
  306. pactkit-2.20.0/tests/unit/test_bug_slim002_instruction_collision.py +0 -169
  307. pactkit-2.20.0/tests/unit/test_bug_slim003.py +0 -238
  308. pactkit-2.20.0/tests/unit/test_bug_slim004.py +0 -152
  309. pactkit-2.20.0/tests/unit/test_bug_slim006.py +0 -214
  310. pactkit-2.20.0/tests/unit/test_command_visualize_modes.py +0 -83
  311. pactkit-2.20.0/tests/unit/test_commit_gate.py +0 -312
  312. pactkit-2.20.0/tests/unit/test_cross_flow_matrix.py +0 -104
  313. pactkit-2.20.0/tests/unit/test_init_guard.py +0 -107
  314. pactkit-2.20.0/tests/unit/test_list_stories.py +0 -192
  315. pactkit-2.20.0/tests/unit/test_multi_prefix.py +0 -163
  316. pactkit-2.20.0/tests/unit/test_prompt_cli_refs.py +0 -82
  317. pactkit-2.20.0/tests/unit/test_selective_deploy.py +0 -330
  318. pactkit-2.20.0/tests/unit/test_session_context.py +0 -226
  319. pactkit-2.20.0/tests/unit/test_skill_structure.py +0 -218
  320. pactkit-2.20.0/tests/unit/test_skills_enrichment.py +0 -136
  321. pactkit-2.20.0/tests/unit/test_sprint_command.py +0 -271
  322. pactkit-2.20.0/tests/unit/test_status_command.py +0 -163
  323. pactkit-2.20.0/tests/unit/test_story017_init_claude_md.py +0 -47
  324. pactkit-2.20.0/tests/unit/test_story020_horizon.py +0 -94
  325. pactkit-2.20.0/tests/unit/test_story024_native_agent.py +0 -315
  326. pactkit-2.20.0/tests/unit/test_story034_plan_config_refresh.py +0 -102
  327. pactkit-2.20.0/tests/unit/test_story056_commands.py +0 -162
  328. pactkit-2.20.0/tests/unit/test_story063_prompt_slimming.py +0 -236
  329. pactkit-2.20.0/tests/unit/test_story_slim014_guard.py +0 -69
  330. pactkit-2.20.0/tests/unit/test_story_slim014_next_id.py +0 -82
  331. pactkit-2.20.0/tests/unit/test_story_slim026.py +0 -127
  332. pactkit-2.20.0/tests/unit/test_story_slim051.py +0 -559
  333. pactkit-2.20.0/tests/unit/test_story_slim052.py +0 -584
  334. pactkit-2.20.0/tests/unit/test_story_slim054.py +0 -138
  335. pactkit-2.20.0/tests/unit/test_story_slim056.py +0 -495
  336. pactkit-2.20.0/tests/unit/test_story_slim084.py +0 -115
  337. pactkit-2.20.0/tests/unit/test_story_slim099_act_context_ref.py +0 -45
  338. pactkit-2.20.0/tests/unit/test_story_slim121.py +0 -241
  339. pactkit-2.20.0/tests/unit/test_story_slim127_managed_block.py +0 -233
  340. pactkit-2.20.0/tests/unit/test_story_slim132.py +0 -146
  341. pactkit-2.20.0/tests/unit/test_story_slim139_skill_manifest.py +0 -176
  342. pactkit-2.20.0/tests/unit/test_story_slim141_manifest_hash.py +0 -238
  343. pactkit-2.20.0/tests/unit/test_story_slim144_wave_mode.py +0 -147
  344. pactkit-2.20.0/tests/unit/test_story_slim145.py +0 -340
  345. pactkit-2.20.0/tests/unit/test_tools.py +0 -162
  346. pactkit-2.20.0/tests/unit/test_update_task.py +0 -122
  347. {pactkit-2.20.0 → pactkit-2.22.0}/.codegraph/.gitignore +0 -0
  348. {pactkit-2.20.0 → pactkit-2.22.0}/.coverage +0 -0
  349. {pactkit-2.20.0 → pactkit-2.22.0}/.github/workflows/pactkit.yml +0 -0
  350. {pactkit-2.20.0 → pactkit-2.22.0}/.github/workflows/publish.yml +0 -0
  351. {pactkit-2.20.0 → pactkit-2.22.0}/.gitignore +0 -0
  352. {pactkit-2.20.0 → pactkit-2.22.0}/AGENTS.md +0 -0
  353. {pactkit-2.20.0 → pactkit-2.22.0}/CODE_OF_CONDUCT.md +0 -0
  354. {pactkit-2.20.0 → pactkit-2.22.0}/CONTRIBUTING.md +0 -0
  355. {pactkit-2.20.0 → pactkit-2.22.0}/LICENSE +0 -0
  356. {pactkit-2.20.0 → pactkit-2.22.0}/SECURITY.md +0 -0
  357. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
  358. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/archive/lessons_archive_202603.md +0 -0
  359. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/archive/lessons_archive_202604.md +0 -0
  360. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/harness_audit.json +0 -0
  361. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/lessons.md +0 -0
  362. {pactkit-2.20.0 → pactkit-2.22.0}/docs/architecture/governance/philosophy.md +0 -0
  363. {pactkit-2.20.0 → pactkit-2.22.0}/docs/assets/logo.png +0 -0
  364. {pactkit-2.20.0 → pactkit-2.22.0}/docs/e2e/journey.md +0 -0
  365. {pactkit-2.20.0 → pactkit-2.22.0}/docs/guides/codex-integration-preresearch.md +0 -0
  366. {pactkit-2.20.0 → pactkit-2.22.0}/docs/guides/tool-integration-checklist.md +0 -0
  367. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202602.md +0 -0
  368. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202603.md +0 -0
  369. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202604.md +0 -0
  370. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202605.md +0 -0
  371. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202606.md +0 -0
  372. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/archive/archive_202607.md +0 -0
  373. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/friction-log.md +0 -0
  374. {pactkit-2.20.0 → pactkit-2.22.0}/docs/product/prd.md +0 -0
  375. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-001.md +0 -0
  376. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-002.md +0 -0
  377. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-003.md +0 -0
  378. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-004.md +0 -0
  379. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-005.md +0 -0
  380. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-006.md +0 -0
  381. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-007.md +0 -0
  382. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-008.md +0 -0
  383. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-009.md +0 -0
  384. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-010.md +0 -0
  385. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-011.md +0 -0
  386. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-012.md +0 -0
  387. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-013.md +0 -0
  388. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-014.md +0 -0
  389. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-015.md +0 -0
  390. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-016.md +0 -0
  391. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-017.md +0 -0
  392. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-018.md +0 -0
  393. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-019.md +0 -0
  394. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-020.md +0 -0
  395. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-021.md +0 -0
  396. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-022.md +0 -0
  397. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-023.md +0 -0
  398. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-024.md +0 -0
  399. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-025.md +0 -0
  400. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-026.md +0 -0
  401. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-027.md +0 -0
  402. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-028.md +0 -0
  403. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-029.md +0 -0
  404. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-030.md +0 -0
  405. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-031.md +0 -0
  406. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-032.md +0 -0
  407. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-033.md +0 -0
  408. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-034.md +0 -0
  409. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-035.md +0 -0
  410. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-001.md +0 -0
  411. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-002.md +0 -0
  412. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-003.md +0 -0
  413. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-004.md +0 -0
  414. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-005.md +0 -0
  415. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-006.md +0 -0
  416. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-089.md +0 -0
  417. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/BUG-slim-107.md +0 -0
  418. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-023.md +0 -0
  419. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-049.md +0 -0
  420. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-050.md +0 -0
  421. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-051.md +0 -0
  422. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-052.md +0 -0
  423. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-061.md +0 -0
  424. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-062.md +0 -0
  425. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-067.md +0 -0
  426. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-069.md +0 -0
  427. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-070.md +0 -0
  428. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-085.md +0 -0
  429. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-087.md +0 -0
  430. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-096.md +0 -0
  431. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-099.md +0 -0
  432. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-107.md +0 -0
  433. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-117.md +0 -0
  434. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-122.md +0 -0
  435. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-123.md +0 -0
  436. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-126.md +0 -0
  437. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-127.md +0 -0
  438. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-130.md +0 -0
  439. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-131.md +0 -0
  440. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/HOTFIX-slim-132.md +0 -0
  441. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-001.md +0 -0
  442. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-002.md +0 -0
  443. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-003.md +0 -0
  444. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-004.md +0 -0
  445. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-005.md +0 -0
  446. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-006.md +0 -0
  447. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-007.md +0 -0
  448. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-008.md +0 -0
  449. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-009.md +0 -0
  450. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-010.md +0 -0
  451. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-011.md +0 -0
  452. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-012.md +0 -0
  453. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-013.md +0 -0
  454. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-014.md +0 -0
  455. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-015.md +0 -0
  456. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-016.md +0 -0
  457. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-017.md +0 -0
  458. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-018.md +0 -0
  459. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-019.md +0 -0
  460. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-020.md +0 -0
  461. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-021.md +0 -0
  462. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-022.md +0 -0
  463. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-023.md +0 -0
  464. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-024.md +0 -0
  465. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-025.md +0 -0
  466. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-026.md +0 -0
  467. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-027.md +0 -0
  468. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-028.md +0 -0
  469. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-029.md +0 -0
  470. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-030.md +0 -0
  471. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-031.md +0 -0
  472. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-032.md +0 -0
  473. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-033.md +0 -0
  474. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-034.md +0 -0
  475. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-035.md +0 -0
  476. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-036.md +0 -0
  477. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-037.md +0 -0
  478. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-038.md +0 -0
  479. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-039.md +0 -0
  480. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-040.md +0 -0
  481. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-041.md +0 -0
  482. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-042.md +0 -0
  483. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-043.md +0 -0
  484. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-044.md +0 -0
  485. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-045.md +0 -0
  486. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-046.md +0 -0
  487. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-047.md +0 -0
  488. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-048.md +0 -0
  489. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-049.md +0 -0
  490. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-050.md +0 -0
  491. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-051.md +0 -0
  492. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-052.md +0 -0
  493. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-053.md +0 -0
  494. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-054.md +0 -0
  495. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-055.md +0 -0
  496. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-056.md +0 -0
  497. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-057.md +0 -0
  498. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-058.md +0 -0
  499. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-059.md +0 -0
  500. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-060.md +0 -0
  501. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-061.md +0 -0
  502. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-062.md +0 -0
  503. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-063.md +0 -0
  504. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-064.md +0 -0
  505. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-065.md +0 -0
  506. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-069.md +0 -0
  507. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-070.md +0 -0
  508. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-071.md +0 -0
  509. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-072.md +0 -0
  510. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-073.md +0 -0
  511. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-001.md +0 -0
  512. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-005.md +0 -0
  513. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-006.md +0 -0
  514. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-007.md +0 -0
  515. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-009.md +0 -0
  516. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-010.md +0 -0
  517. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-011.md +0 -0
  518. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-012.md +0 -0
  519. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-013.md +0 -0
  520. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-014.md +0 -0
  521. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-015.md +0 -0
  522. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-016.md +0 -0
  523. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-017.md +0 -0
  524. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-018.md +0 -0
  525. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-019.md +0 -0
  526. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-020.md +0 -0
  527. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-021.md +0 -0
  528. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-022.md +0 -0
  529. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-023.md +0 -0
  530. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-024.md +0 -0
  531. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-028.md +0 -0
  532. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-029.md +0 -0
  533. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-030.md +0 -0
  534. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-031.md +0 -0
  535. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-032.md +0 -0
  536. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-033.md +0 -0
  537. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-034.md +0 -0
  538. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-035.md +0 -0
  539. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-036.md +0 -0
  540. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-037.md +0 -0
  541. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-038.md +0 -0
  542. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-039.md +0 -0
  543. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-040.md +0 -0
  544. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-041.md +0 -0
  545. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-042.md +0 -0
  546. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-043.md +0 -0
  547. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-044.md +0 -0
  548. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-045.md +0 -0
  549. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-046.md +0 -0
  550. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-047.md +0 -0
  551. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-048.md +0 -0
  552. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-049.md +0 -0
  553. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-050.md +0 -0
  554. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-051.md +0 -0
  555. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-052.md +0 -0
  556. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-053.md +0 -0
  557. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-054.md +0 -0
  558. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-055.md +0 -0
  559. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-056.md +0 -0
  560. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-057.md +0 -0
  561. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-058.md +0 -0
  562. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-059.md +0 -0
  563. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-060.md +0 -0
  564. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-063.md +0 -0
  565. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-066.md +0 -0
  566. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-067.md +0 -0
  567. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-068.md +0 -0
  568. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-069.md +0 -0
  569. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-070.md +0 -0
  570. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-071.md +0 -0
  571. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-072.md +0 -0
  572. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-073.md +0 -0
  573. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-074.md +0 -0
  574. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-075.md +0 -0
  575. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-076.md +0 -0
  576. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-077.md +0 -0
  577. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-078.md +0 -0
  578. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-079.md +0 -0
  579. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-080.md +0 -0
  580. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-081.md +0 -0
  581. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-082.md +0 -0
  582. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-083.md +0 -0
  583. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-084.md +0 -0
  584. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-086.md +0 -0
  585. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-088.md +0 -0
  586. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-089.md +0 -0
  587. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-090.md +0 -0
  588. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-091.md +0 -0
  589. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-092.md +0 -0
  590. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-093.md +0 -0
  591. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-094.md +0 -0
  592. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-095.md +0 -0
  593. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-097.md +0 -0
  594. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-098.md +0 -0
  595. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-099.md +0 -0
  596. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-100.md +0 -0
  597. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-101.md +0 -0
  598. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-102.md +0 -0
  599. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-103.md +0 -0
  600. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-104.md +0 -0
  601. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-105.md +0 -0
  602. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-106.md +0 -0
  603. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-107.md +0 -0
  604. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-108.md +0 -0
  605. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-109.md +0 -0
  606. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-110.md +0 -0
  607. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-111.md +0 -0
  608. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-112.md +0 -0
  609. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-113.md +0 -0
  610. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-114.md +0 -0
  611. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-115.md +0 -0
  612. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-116.md +0 -0
  613. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-118.md +0 -0
  614. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-119.md +0 -0
  615. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-120.md +0 -0
  616. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-121.md +0 -0
  617. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-124.md +0 -0
  618. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-125.md +0 -0
  619. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-126.md +0 -0
  620. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-127.md +0 -0
  621. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-128.md +0 -0
  622. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-129.md +0 -0
  623. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-132.md +0 -0
  624. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-133.md +0 -0
  625. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-134.md +0 -0
  626. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-135.md +0 -0
  627. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-136.md +0 -0
  628. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-137.md +0 -0
  629. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-138.md +0 -0
  630. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-139.md +0 -0
  631. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-140.md +0 -0
  632. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-141.md +0 -0
  633. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-142.md +0 -0
  634. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-143.md +0 -0
  635. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-144.md +0 -0
  636. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-145.md +0 -0
  637. {pactkit-2.20.0 → pactkit-2.22.0}/docs/specs/STORY-slim-146.md +0 -0
  638. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/BUG-001_case.md +0 -0
  639. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/BUG-002_case.md +0 -0
  640. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-028_case.md +0 -0
  641. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-029_case.md +0 -0
  642. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-031_case.md +0 -0
  643. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-032_case.md +0 -0
  644. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-033_case.md +0 -0
  645. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-034_case.md +0 -0
  646. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-135_case.md +0 -0
  647. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-136_case.md +0 -0
  648. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-137_case.md +0 -0
  649. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-138_case.md +0 -0
  650. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-139_case.md +0 -0
  651. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-140_case.md +0 -0
  652. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-141_case.md +0 -0
  653. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-142_case.md +0 -0
  654. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-143_case.md +0 -0
  655. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-144_case.md +0 -0
  656. {pactkit-2.20.0 → pactkit-2.22.0}/docs/test_cases/STORY-slim-146_case.md +0 -0
  657. {pactkit-2.20.0 → pactkit-2.22.0}/opencode.json +0 -0
  658. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/__main__.py +0 -0
  659. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/cleaners.py +0 -0
  660. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/coverage_gate.py +0 -0
  661. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/deps.py +0 -0
  662. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/generators/__init__.py +0 -0
  663. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/generators/adapter.py +0 -0
  664. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/invariants.py +0 -0
  665. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/issue_sync.py +0 -0
  666. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/lazy_visualize.py +0 -0
  667. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/lessons.py +0 -0
  668. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/lint_runner.py +0 -0
  669. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/observe.py +0 -0
  670. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/prompts/guides.py +0 -0
  671. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/prompts/references.py +0 -0
  672. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/regression.py +0 -0
  673. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/scripts.py +0 -0
  674. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/sec_scope.py +0 -0
  675. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/__init__.py +0 -0
  676. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/analyzers/__init__.py +0 -0
  677. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
  678. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
  679. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
  680. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
  681. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/interface_summary.py +0 -0
  682. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/report.py +0 -0
  683. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/skills/visualize.py +0 -0
  684. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/spec_graph.py +0 -0
  685. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/spec_status.py +0 -0
  686. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/test_mapper.py +0 -0
  687. {pactkit-2.20.0 → pactkit-2.22.0}/src/pactkit/validators.py +0 -0
  688. {pactkit-2.20.0 → pactkit-2.22.0}/tests/conftest.py +0 -0
  689. {pactkit-2.20.0 → pactkit-2.22.0}/tests/e2e/__init__.py +0 -0
  690. {pactkit-2.20.0 → pactkit-2.22.0}/tests/e2e/cli/__init__.py +0 -0
  691. {pactkit-2.20.0 → pactkit-2.22.0}/tests/e2e/cli/test_story_slim146_cli.py +0 -0
  692. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
  693. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
  694. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
  695. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
  696. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
  697. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
  698. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/api_call_parser/page.tsx +0 -0
  699. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_claude.json +0 -0
  700. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_claude.yaml +0 -0
  701. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_codex.json +0 -0
  702. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_codex.yaml +0 -0
  703. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_github.json +0 -0
  704. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/copy_github.yaml +0 -0
  705. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/empty.json +0 -0
  706. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/empty.yaml +0 -0
  707. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/full_legacy.json +0 -0
  708. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/full_legacy.yaml +0 -0
  709. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/minimal.json +0 -0
  710. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/minimal.yaml +0 -0
  711. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/unknown_keys.json +0 -0
  712. {pactkit-2.20.0 → pactkit-2.22.0}/tests/fixtures/config_golden/unknown_keys.yaml +0 -0
  713. {pactkit-2.20.0 → pactkit-2.22.0}/tests/integration/__init__.py +0 -0
  714. {pactkit-2.20.0 → pactkit-2.22.0}/tests/integration/test_deploy_classic.py +0 -0
  715. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_agent_features.py +0 -0
  716. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_agent_frontmatter.py +0 -0
  717. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_agents_enrichment.py +0 -0
  718. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_audit.py +0 -0
  719. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_blast_radius.py +0 -0
  720. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug001_skill_path.py +0 -0
  721. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug002_plugin_paths.py +0 -0
  722. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug003_multi_import.py +0 -0
  723. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug004_dead_set.py +0 -0
  724. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug006_scan_excludes.py +0 -0
  725. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
  726. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug008_stale_command_refs.py +0 -0
  727. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug009_project_config_backfill.py +0 -0
  728. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
  729. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug011_stale_refs.py +0 -0
  730. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug012_call_graph_filter.py +0 -0
  731. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug013_config_single_source.py +0 -0
  732. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug014_version_hygiene.py +0 -0
  733. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug017_project_init_playbook.py +0 -0
  734. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
  735. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug019_venv_deployment.py +0 -0
  736. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug020_claude_md_backup.py +0 -0
  737. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug025_release_delegation.py +0 -0
  738. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug026_version_sync.py +0 -0
  739. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug028_ghost_refs.py +0 -0
  740. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
  741. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
  742. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
  743. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
  744. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug_022.py +0 -0
  745. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug_023.py +0 -0
  746. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug_slim001_env_detection.py +0 -0
  747. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug_slim005.py +0 -0
  748. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
  749. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_check_command.py +0 -0
  750. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_check_extensions_072_073.py +0 -0
  751. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_check_playbook_072_073.py +0 -0
  752. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_command_frontmatter.py +0 -0
  753. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_complexity.py +0 -0
  754. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_config.py +0 -0
  755. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_config_auto_merge.py +0 -0
  756. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_constitution_sharpening.py +0 -0
  757. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_context_gen.py +0 -0
  758. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_create_skill.py +0 -0
  759. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_deploy_base.py +0 -0
  760. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_deployer_cleanup.py +0 -0
  761. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_deployer_plugin.py +0 -0
  762. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_deps.py +0 -0
  763. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_design_command.py +0 -0
  764. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_done_gates.py +0 -0
  765. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_done_verify.py +0 -0
  766. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_draw_prompt.py +0 -0
  767. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_draw_references.py +0 -0
  768. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_drawio_mcp.py +0 -0
  769. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_garden.py +0 -0
  770. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_home_path_fix.py +0 -0
  771. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_hotfix_command.py +0 -0
  772. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_init_playbook_074.py +0 -0
  773. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_interface_summary.py +0 -0
  774. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_lang_profiles.py +0 -0
  775. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_layer_violations.py +0 -0
  776. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_lessons_rotation_075.py +0 -0
  777. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_mcp_integration.py +0 -0
  778. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_model_config.py +0 -0
  779. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_modular_constitution.py +0 -0
  780. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_monorepo_detect.py +0 -0
  781. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_observe.py +0 -0
  782. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_pdca_slim.py +0 -0
  783. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_profiles.py +0 -0
  784. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_project_visibility.py +0 -0
  785. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_prompt_quality_075.py +0 -0
  786. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_prompt_structural_invariants.py +0 -0
  787. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_prompts_package.py +0 -0
  788. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_release.py +0 -0
  789. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_release_field.py +0 -0
  790. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_release_v110.py +0 -0
  791. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_render_prompt.py +0 -0
  792. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_report_parser.py +0 -0
  793. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_report_unified.py +0 -0
  794. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_review_command.py +0 -0
  795. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_rules_enrichment.py +0 -0
  796. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_scaffold.py +0 -0
  797. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_scaffold_developer_prefix.py +0 -0
  798. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_schemas.py +0 -0
  799. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_script_extraction.py +0 -0
  800. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_slim_deps_088.py +0 -0
  801. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_smart_regression.py +0 -0
  802. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_solution_design_rule.py +0 -0
  803. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_stack_references.py +0 -0
  804. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_statusline.py +0 -0
  805. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story014_release.py +0 -0
  806. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story015_ci_lint_gate.py +0 -0
  807. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story016_claude_md.py +0 -0
  808. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story018_arch_staleness.py +0 -0
  809. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story019_bailout.py +0 -0
  810. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story021_rfc.py +0 -0
  811. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story022_decision_tree.py +0 -0
  812. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story023_test_quality.py +0 -0
  813. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story025_ci_pipeline.py +0 -0
  814. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story026_issue_tracker.py +0 -0
  815. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story028_rule_scoping.py +0 -0
  816. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story029_doctor.py +0 -0
  817. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story030_lint.py +0 -0
  818. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story031_git_init_guard.py +0 -0
  819. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story032_greenfield_redirect.py +0 -0
  820. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story033_config_backfill.py +0 -0
  821. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story035_readme_docs.py +0 -0
  822. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story037_regression_fix.py +0 -0
  823. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story038_call_graph_update.py +0 -0
  824. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story039_venv_config.py +0 -0
  825. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story040_layered_claude_md.py +0 -0
  826. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story042_spec_linter.py +0 -0
  827. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story043_active_clarify.py +0 -0
  828. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story044_consistency_check.py +0 -0
  829. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story045_auto_pr.py +0 -0
  830. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story046_agent_adapter.py +0 -0
  831. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story047_enterprise_flags.py +0 -0
  832. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story048_worktree_isolation.py +0 -0
  833. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story049_community_standards.py +0 -0
  834. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
  835. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story051_workflow_streamlining.py +0 -0
  836. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story052_conditional_github_release.py +0 -0
  837. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story053_impact_regression.py +0 -0
  838. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story055_commands.py +0 -0
  839. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story055_config.py +0 -0
  840. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story055_spec_linter.py +0 -0
  841. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story056_config.py +0 -0
  842. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story057_implicit_cleanup.py +0 -0
  843. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story058_opencode_extraction.py +0 -0
  844. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story058_routing_fix.py +0 -0
  845. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story059_codex_removal.py +0 -0
  846. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story060_init_hang.py +0 -0
  847. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story061_remove_thinking.py +0 -0
  848. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story062_mcp_recommendations.py +0 -0
  849. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story064_venv_local_md.py +0 -0
  850. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story065_sprint_model.py +0 -0
  851. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story072_developer_prefix.py +0 -0
  852. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story106_lateral_scan.py +0 -0
  853. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story133_debug_skill.py +0 -0
  854. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
  855. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
  856. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim011_command_rules.py +0 -0
  857. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim012_ci.py +0 -0
  858. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_clean.py +0 -0
  859. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_context.py +0 -0
  860. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
  861. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_regression.py +0 -0
  862. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_sec_scope.py +0 -0
  863. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim014_validators.py +0 -0
  864. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim015_doctor.py +0 -0
  865. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
  866. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim017.py +0 -0
  867. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim018.py +0 -0
  868. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
  869. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
  870. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim021.py +0 -0
  871. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim022.py +0 -0
  872. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim023.py +0 -0
  873. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim024.py +0 -0
  874. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim025.py +0 -0
  875. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim027.py +0 -0
  876. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim028.py +0 -0
  877. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim029.py +0 -0
  878. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim030.py +0 -0
  879. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim031.py +0 -0
  880. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim032.py +0 -0
  881. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim033.py +0 -0
  882. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim034.py +0 -0
  883. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim035.py +0 -0
  884. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim036.py +0 -0
  885. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim037.py +0 -0
  886. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim038.py +0 -0
  887. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim039.py +0 -0
  888. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim040.py +0 -0
  889. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim041.py +0 -0
  890. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim042.py +0 -0
  891. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim043.py +0 -0
  892. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim044.py +0 -0
  893. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim045.py +0 -0
  894. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim046.py +0 -0
  895. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim047.py +0 -0
  896. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim048.py +0 -0
  897. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim049.py +0 -0
  898. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim053.py +0 -0
  899. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim055.py +0 -0
  900. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim060_codex_profile.py +0 -0
  901. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim063.py +0 -0
  902. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim065.py +0 -0
  903. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim076_multistack.py +0 -0
  904. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
  905. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim078.py +0 -0
  906. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim079.py +0 -0
  907. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim080.py +0 -0
  908. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim081.py +0 -0
  909. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim082.py +0 -0
  910. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim083.py +0 -0
  911. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim095.py +0 -0
  912. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
  913. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim102_version_marker.py +0 -0
  914. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim104_should_semantics.py +0 -0
  915. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim107.py +0 -0
  916. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim109_journey_spec.py +0 -0
  917. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
  918. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim112_rules_split.py +0 -0
  919. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim114_journey_sync.py +0 -0
  920. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim119.py +0 -0
  921. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim120.py +0 -0
  922. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim125.py +0 -0
  923. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim126.py +0 -0
  924. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim128_engineering_concerns.py +0 -0
  925. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim134_no_model_in_frontmatter.py +0 -0
  926. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim135_config_schema.py +0 -0
  927. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim142_all_target_isolation.py +0 -0
  928. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim143_spec_graph.py +0 -0
  929. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_story_slim146.py +0 -0
  930. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_topology_parsers_066.py +0 -0
  931. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_visualize_call_nested.py +0 -0
  932. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_visualize_chain_fix.py +0 -0
  933. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_visualize_modes.py +0 -0
  934. {pactkit-2.20.0 → pactkit-2.22.0}/tests/unit/test_visualize_multilang_chain.py +0 -0
@@ -0,0 +1,745 @@
1
+ # Changelog
2
+
3
+ All notable changes to PactKit will be documented in this file.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/).
6
+
7
+ ## [2.22.0] - 2026-08-24
8
+
9
+ ### Added
10
+ - **Unified WorkUnit scope derivation for non-standard directory layouts** — WorkUnit read/write scope is no longer a hardcoded `src/**`|`tests/**` whitelist. A `resolve_scope` SSoT unions each unit's frozen template floor with project-declared `write_scope` roots (`source_roots`/`test_roots`/`docs_roots`) and the Spec's `Touches`, so projects with `frontend/src/`, `backend/`, `directus-extensions/` layouts no longer block `project-act`/`project-hotfix`. Union (not intersection): the Spec (Tier-1) is never clipped by mutable config. `spec_linter` rejects pathological `Touches` (`**`, absolute, `..`); runtime path-escape stays in `_safe_repo_path`.
11
+
12
+ ### Fixed
13
+ - **Completed runs survive legitimate cross-workflow projection evolution** — after Plan → Act, `project-check`/`project-done` start and `pactkit work-unit status <plan-run>` no longer crash with `invalid_workflow_state`. `_completed_run_for_story` scans sibling journals leniently (existence lookups don't re-validate projection fingerprints), and `finalize-workflow` regenerates `context.md` to the post-completion canonical. Execution reads (`_read`) stay strict, so genuine tampering is still detected.
14
+
15
+ ## [2.21.0] - 2026-08-24
16
+
17
+ ### Added
18
+ - **Core-owned lifecycle WorkUnits for every project command** — all 12 `project-*` entry points now run through a versioned Core scheduler with bounded leases, deterministic EvidenceReceipts, durable ExecutionAttempts, command-specific validators, and journaled completion. Plan, Act, Check, Done, Sprint, Init, Hotfix, Design, Clarify, Debug, Release, and PR share one completion authority instead of relying on model prose.
19
+ - **Official Codex App Server execution bridge** — `pactkit-codex-work-unit` starts and resumes persisted App Server threads, requests schema-constrained results, retries malformed or out-of-scope receipts without losing workflow state, and supports cross-process `thread/resume`.
20
+ - **Resumable Codex capability contract** — deployment manifests and `pactkit doctor` now report the verified `resumable` guarantee independently of weaker project-local hosts, while retaining per-host capability details.
21
+
22
+ ### Changed
23
+ - **Act completion is Core-governed** — RED must fail, GREEN must pass, regression/lint/coverage must be accepted, and canonical Story tasks plus the Board projection are completed by an idempotent `validated → governance → completed` finalizer with crash recovery and tamper detection.
24
+ - **Explicit side-effect authorization** — commit, push, pull request, tag, publish, release, and Sprint orchestration pause as `await_user` before a model turn unless the exact operation was authorized.
25
+ - **Distributed IDs** — removed the sequential `next-id` command; `pactkit generate-id` creates time-prefixed, collision-resistant Story, Hotfix, and Bug IDs without a shared counter.
26
+
27
+ ### Fixed
28
+ - **Premature Codex termination** — an agent response can no longer mark a workflow complete; only Core's finish guard and journaled finalizer can return `done`. Artifact drift, lease expiry, malformed model output, and process restarts fail closed into a recoverable retry.
29
+ - **Cross-host deployment parity** — all managed command facades consume the same lifecycle contract, OpenCode no longer receives Claude-only skill paths, and Sprint has a serialized Plan → Act → Check → Done fallback where native orchestration is unavailable.
30
+
31
+ ## [2.20.0] - 2026-08-22
32
+
33
+ ### Added
34
+ - **Verified resumable Act checkpoints** (STORY-slim-146) — PactKit now persists Story-scoped continuation state with validated Spec, Board, test, regression, and lint evidence. `pactkit continuation status/verify/resume/checkpoint` supports safe cross-process recovery, stale-state detection, terminal completion, fresh-cycle archival, secret/path sanitization, and Story-level locking. All 13 runtime skills and the Classic, OpenCode, Codex, and Copilot deployments share the recovery contract.
35
+
36
+ ### Fixed
37
+ - **Adapter-safe command rendering and deployment gates** (STORY-slim-145) — operation-aware prompt rendering preserves PactKit CLI semantics across adapters, rejects lossy command transformations, checks generated prompt integrity before writing, and blocks incompatible Core/adapter versions unless skew is explicitly acknowledged.
38
+
39
+ ## [2.19.0] - 2026-08-17
40
+
41
+ ### Added
42
+ - **Spec Dependency Surface** (STORY-slim-143) — every scaffolded Spec now carries a machine-readable `## Dependency Surface` table (`Depends on` / `Provides` / `Touches` / `Conflict risk`). Story dependencies and file-level conflict surface are no longer implicit in the architect's head — they're data.
43
+ - **`pactkit spec-graph`** (STORY-slim-143) — deterministic story dependency DAG from all Specs: topological **execution waves** (wave N depends only on waves < N; same-wave stories are parallelizable), a **file-overlap conflict matrix** (same-wave overlaps flagged unsafe-parallel), cycle detection with non-zero exit, and Mermaid output to `docs/architecture/graphs/story_graph.mmd`. Stdlib only (`graphlib`, `fnmatch`), zero new dependencies.
44
+ - **Spec linter rules E010/W011** (STORY-slim-143) — dangling `Depends on` references (story ID with no Spec file) are now an Act-blocking ERROR; missing Dependency Surface is a WARNING. Reuses spec_linter's section-parsing helpers (newly public: `strip_code_blocks` / `section_text`).
45
+ - **Sprint Wave Mode** (STORY-slim-144) — `/project-sprint` with empty arguments scans the backlog, consumes `pactkit spec-graph --json` (new flag), and runs conflict-free same-wave stories as parallel worktree subagents (cap `sprint.max_parallel`, default 3). Stories with same-wave conflicts or undeclared Touches are serialized safe-by-default. Wave gate: wave N+1 starts only after wave N is fully merged green; fail-fast with no auto-retry; resume by re-running (idempotent). Single-story mode with arguments is byte-for-byte unchanged.
46
+ - **Plan playbook Dependency Surface step** (STORY-slim-143) — `/project-plan` Phase 3.2a now fills the table from Phase 1 trace findings, so every new Spec ships scheduling data.
47
+
48
+ ## [2.18.0] - 2026-08-17
49
+
50
+ ### Added
51
+ - **Deployment manifest content hashes** (STORY-slim-141) — `write_deploy_manifest` now records a per-file sha256 under a `files` field (skills/commands-as-skills/agents/managed rules/guides; merge-semantics files like `CLAUDE.md` and user configs are structurally excluded). `pactkit doctor` deepens the parity check from component-name lists to content level: hash mismatch or missing-on-disk becomes an explicit `Content drift:` report, so "version stamp says new, content is old" deployments can no longer pass silently. Pre-2.18 manifests degrade to a warning; unreadable files and corrupted `files` fields degrade per SEC-7 and never crash doctor. Manifest keys are POSIX-normalized for cross-platform consistency.
52
+ - **Adapter version skew warning in doctor** (STORY-slim-142) — doctor now reads adapter package metadata (`pactkit-opencode` etc.) and warns when an installed adapter lags behind core, with a `pipx inject` upgrade hint. The manifest's version field is core-stamped and could never reveal adapter skew.
53
+
54
+ ### Fixed
55
+ - **`deploy(format="all", target=...)` no longer deploys adapters** (STORY-slim-142) — adapter deployers cannot honor `-t` and previously always wrote into real home dirs, which let test-suite or preview `init` calls silently overwrite live deployments (root cause of repeated `~/.config/opencode` stale-content incidents). With an explicit target, adapters are skipped with a printed notice; `target=None` behavior is unchanged.
56
+
57
+ ## [2.17.0] - 2026-08-13
58
+
59
+ ### Added
60
+ - **`pactkit done-verify`** (STORY-slim-136) — Mechanical archive-honesty gate for `/project-done`. Verifies requirement→test evidence chains, checkbox↔case-file consistency (with code-span stripping), zero-production-caller components (WARN), and Spec/Board/archive status consistency. Any FAIL blocks archiving and commit (exit 1). Wired into project-done Phase 3 as a mandatory step.
61
+ - **`pactkit commit-gate`** (STORY-slim-138, STORY-slim-140) — Pre-commit test gate with skip≠pass transparency (passed/failed/skipped reported separately; skips always listed). Two channels sharing one pipeline: Claude Code PreToolUse hook (auto-installed into `.claude/settings.json` by init/update) and git pre-commit (auto-installed for non-Claude formats). Self-lock protection: gate-internal failures always allow with a loud WARN. Direct commits on main/master/develop force the full unit suite.
62
+ - **`pactkit deps check/install`** (STORY-slim-137) — External dependency registry (node/codegraph/gh) with platform-aware guided install. `pactkit init` CLI only reports (CI/air-gap safe); `/project-init` Phase 1.5 asks before installing. `enterprise.no_external` refuses installs.
63
+ - **`pactkit schema config`** (STORY-slim-135) — Discoverability report for every pactkit.yaml key: default, effective value, and source file.
64
+ - **Deployment parity check in `pactkit doctor`** (STORY-slim-139) — Every deploy writes `.pactkit-deployed.json`; doctor compares per-format manifests against the registry and FormatProfile capability matrix, turning silent deployment drift into explicit `Deployed drift:` reports.
65
+
66
+ ### Changed
67
+ - **Schema-driven pactkit.yaml** (STORY-slim-135) — `CONFIG_SCHEMA` is now the single source for defaults, validation, deep-merge behavior, and rendering. Fresh `pactkit init` writes a minimal yaml (stack + developer only) instead of a 94-line default wall; absent keys resolve through defaults. Multi-copy sync keeps `.claude`/`.codex`/`.github`/`.opencode` copies identical (canonical = `.claude` first); doctor reports copy drift.
68
+ - **Skill deployment single source** (STORY-slim-139) — `SKILL_MANIFEST` + public `get_skill_manifest()` contract; codex/copilot adapters consume it (restoring pactkit-garden/audit/report which a stale hardcoded list had silently dropped), opencode already conformant.
69
+ - **Rule map migration** — `COMMAND_RULES_MAP` keys migrated to the merged `pactkit` rule file; inline embedding no longer duplicates globally-loaded constitution content per command.
70
+
71
+ ### Fixed
72
+ - **Codex adapter never touches an existing `config.toml`** — after two wipe incidents (custom TOML writer stringified arrays; parse-failure path rewrote managed-only content), the policy is now create-if-absent only. Existing files stay byte-identical.
73
+ - **OpenCode global instructions** — the merge logic no longer strips `rules/pactkit.md` from the always-load layer.
74
+ - **`install_git_hook` idempotency** — re-running no longer clobbers chained third-party pre-commit hooks.
75
+ - **Config copy precedence incident** — canonical selection uses explicit preference order, not key-count heuristics (an inflated default-wall copy could otherwise overwrite hand-curated config).
76
+
77
+ ## [2.16.1] - 2026-07-23
78
+
79
+ ### Fixed
80
+ - **Bedrock VS Code plugin model compatibility** (STORY-slim-134) — Removed `model:` field from all `/project-*` command frontmatter. Claude Code was resolving `model: sonnet/opus` to Anthropic's latest model ID (e.g., `us.anthropic.claude-sonnet-4-5-20250929-v1:0`), bypassing `ANTHROPIC_DEFAULT_SONNET_MODEL` env var in VS Code plugin environments. Commands now inherit the session default model set by the user's provider env vars.
81
+
82
+ ## [2.16.0] - 2026-07-13
83
+
84
+ ### Added
85
+ - **`/project-debug` command** (STORY-slim-133) — Hypothesis-driven troubleshooting skill. Structured loop: Symptom → Hypothesize (≤3) → Verify (executable commands) → Narrow → Root Cause. Enforces evidence-gated file access (no aimless reading) and convergence guarantees (escalates to `/project-plan` if stuck after 3 iterations). Uses sonnet model with structured protocol.
86
+
87
+ ## [2.15.2] - 2026-07-02
88
+
89
+ ### Changed
90
+ - **Codegraph commands decoupled from prompts** (STORY-slim-132) — Replaced hardcoded codegraph CLI command lists with runtime `codegraph --help` discovery. PactKit no longer needs updates when codegraph changes its command signatures.
91
+
92
+ ### Fixed
93
+ - **Act Phase 0.6 board move command** (HOTFIX-slim-132) — Added explicit `board.py move_story` command template to prevent AI from guessing wrong subcommand syntax.
94
+ - **Prompt deployer** (HOTFIX-slim-131) — Insert @ references after YAML frontmatter so model: field is parsed correctly.
95
+ - **Skill frontmatter** (HOTFIX-slim-130) — Move @ references below YAML frontmatter in project-* skills.
96
+
97
+ ### Refactored
98
+ - **Prompt rules** — Moved large rules from @inject to on-demand Read to reduce initial context size.
99
+
100
+ ## [2.15.1] - 2026-06-10
101
+
102
+ ### Added
103
+ - **Engineering Concerns guide system** (STORY-slim-128) — On-demand NFR guide loading via trigger index. Plan Phase 2 scans requirement keywords and includes NFR decisions in Spec; Act Phase 1.5 loads matched guides (1-3 max). Initial 13 concerns: concurrency, async, configuration, observability, module-design, database, caching, api-integration, event-driven, resilience, memory-management, code-review-first, component-reuse.
104
+ - **6 additional engineering guides** (STORY-slim-129) — error-recovery (retry/backoff/idempotency), data-consistency (transactions/saga/optimistic lock), backwards-compatibility (API versioning/non-breaking migration), performance-antipatterns (N+1/unbounded queries/indexing), graceful-shutdown (SIGTERM/drain/cleanup order), testing-strategy (boundary/mock vs real/isolation). Total: 19 guides.
105
+
106
+ ### Fixed
107
+ - **Spec linter** — Accept heading format for Security Scope `SEC-*` entries.
108
+ - **CI** — Remove obsolete `.opencode/pactkit.yaml` test.
109
+
110
+ ## [2.15.0] - 2026-06-04
111
+
112
+ ### Added
113
+ - **`lint` optional dependency group** — `pip install pactkit[lint]` now includes `ruff>=0.4`. The `all` extra also includes `lint`. Users no longer need to install ruff separately for the lint gate to work.
114
+ - **External tools documentation** — README and pactkit.dev installation pages now document recommended external tools (gh, codegraph) with install commands and fallback behavior.
115
+
116
+ ### Fixed
117
+ - **CI: tree-sitter tests skip when not installed** — `test_story_slim032`, `test_story_slim033`, `test_story_slim034` now use `pytest.importorskip("tree_sitter")` so they skip gracefully in CI environments without the `visualize` extra.
118
+
119
+ ## [2.14.2] - 2026-06-01
120
+
121
+ ### Added
122
+ - **Managed-block update for project CLAUDE.md** (STORY-slim-127) — `pactkit update` now uses `<!-- pactkit:start -->` / `<!-- pactkit:end -->` markers. User content outside the managed block is preserved across updates. Supports four migration paths: fresh install, existing markers, legacy PactKit template, and user-modified files.
123
+ - **Codegraph sync enforcement via code** (STORY-slim-126) — `pactkit visualize --lazy` and `pactkit sync` now run `codegraph sync` automatically when `.codegraph/` exists. Removed prompt-based instructions that relied on AI compliance.
124
+ - **Codegraph priority in generated CLAUDE.md** — When `.codegraph/` exists, the generated project CLAUDE.md includes a "Code Intelligence" section instructing AI to prefer codegraph over grep/find.
125
+
126
+ ### Changed
127
+ - **MCP strategy trimmed to Context7 + Memory** — Removed Playwright, Chrome DevTools, Draw.io, and shadcn from MCP rules and recommendations. These remain as conditional no-ops in command prompts but are no longer actively promoted.
128
+ - **Config backfill removed** — `pactkit update` no longer backfills default sections into `pactkit.yaml`. Absent keys now mean "accept default", keeping config files minimal.
129
+
130
+ ### Fixed
131
+ - **Stale rule warnings** — Removed obsolete rule names from `.opencode/pactkit.yaml` that caused "Unknown rule" warnings on every `pactkit update`.
132
+
133
+ ## [2.14.1] - 2026-05-28
134
+
135
+ ### Fixed
136
+ - **Codegraph sync missing from project-done and project-hotfix** (HOTFIX-slim-127) — STORY-slim-124 added `codegraph sync` to project-act but missed project-done (Phase 2) and project-hotfix. Workflows bypassing project-act left the codegraph index stale. Fixed in source templates (`commands.py`, `workflows.py`); next `pactkit init` deploy propagates the fix to all users.
137
+
138
+ ## [2.14.0] - 2026-05-26
139
+
140
+ ### Added
141
+ - **Codegraph integration** (STORY-slim-124) — `pactkit query` now reads from `.codegraph/codegraph.db` (generated by `@colbymchenry/codegraph`) when `visualize.graph_provider: codegraph` is configured. Provides 2.6x more edges than pactkit's own suffix-match resolution (6580 vs 2483 in real projects), with qualified names, line numbers, and type-aware resolution.
142
+ - **Auto-init codegraph** — When `graph_provider: codegraph` is set and `.codegraph/codegraph.db` is missing, `pactkit query` auto-runs `codegraph init -i` if the CLI is on PATH. Plan/Act phases also auto-setup codegraph when detected.
143
+ - **Graph Query Protocol dual-mode** — PDCA commands now support two modes: Codegraph Mode (`pactkit query` + codegraph CLI + MCP tools) and Grep Mode (default fallback on `.mmd` files).
144
+
145
+ ### Removed
146
+ - **`_write_sqlite_db()`** — Pactkit no longer generates its own `call_graph.db`. The upstream codegraph tool produces a superior graph with tree-sitter + import-aware resolution.
147
+ - **`visualize.sqlite_output` config** — Replaced by `visualize.graph_provider: codegraph`. Existing configs should migrate.
148
+
149
+ ### Changed
150
+ - **`pactkit query`** — Now reads `.codegraph/codegraph.db` (codegraph schema with hash IDs, JOIN edges+nodes) instead of pactkit's own `call_graph.db`.
151
+ - **PDCA prompts updated** — All references to `call_graph.db` / "SQLite Mode" removed from Plan, Act, Check, Done, Hotfix, and Trace skills. Impact analysis uses `pactkit query --callers` (codegraph) or grep `.mmd` (default).
152
+
153
+ ## [2.13.0] - 2026-05-25
154
+
155
+ ### Added
156
+ - **Call graph SQLite output** (STORY-slim-121) — `pactkit visualize --mode call` now optionally writes `call_graph.db` alongside the existing `.mmd` file. Enable via `visualize.sqlite_output: true` in `pactkit.yaml`. Atomic write (tmp+rename), zero new dependencies (`sqlite3` stdlib).
157
+ - **`pactkit query` CLI** (STORY-slim-121) — New subcommand for structured call graph queries: `--callers <func>` (fan-in), `--callees <func>` (fan-out), `--chain <func> [--down]` (transitive upstream/downstream via recursive CTE). Reads from `call_graph.db`; exits with helpful message when db is missing.
158
+ - **Graph Query Protocol upgrade** (STORY-slim-121) — `SKILL_VISUALIZE_MD` now routes to `pactkit query` as primary path when `call_graph.db` exists, with grep as fallback for mmd-only projects.
159
+ - **Enhanced Python call graph coverage** (STORY-slim-119) — `_extract_calls` now captures non-self attribute calls (`engine.run()`), function references in list/tuple/keyword/assign contexts, and nested functions via `ast.walk` + parent map. Edge count on medium-large projects: 1,360 → 3,764 (+177%).
160
+ - **Test and script scanning in call graph** (STORY-slim-120) — `visualize --mode call` now scans `tests/`, `scripts/`, and `alembic/` directories in addition to `src/`. Locality-based `_resolve_callee` prefers same-file/same-package candidates when multiple matches exist.
161
+ - **`pactkit interface-summary` CLI** (STORY-slim-113) — AST-based interface extraction that physically outputs only signatures, types, and docstrings. Enforces "Code Enforces, Prompt Instructs" for Act Phase 1 layered loading — AI receives truncated content by design.
162
+ - **Journey Sync in Act Phase 4** (STORY-slim-114) — Conditional step that updates `docs/e2e/journey.md` when a Story modifies journey-relevant steps. Closes the create→consume→update lifecycle gap.
163
+ - **Journey Segment in Plan Phase 3.2a** (STORY-slim-114) — Conditional Spec annotation that links Stories to journey steps, enabling Act Phase 4 auto-detection.
164
+
165
+ ## [2.12.0] - 2026-05-06
166
+
167
+ ### Changed
168
+ - **Rules architecture refactor** (STORY-slim-112) — Merged 6 global core rules into single `pactkit.md`; on-demand rules renumbered 01-06 and moved to `~/.claude/skills/_rules/`. Reduces context window usage by ~60% per conversation.
169
+ - **Auto-deploy on version mismatch** — After `pipx upgrade pactkit`, the next CLI command auto-syncs deployed files without requiring explicit `pactkit init`.
170
+
171
+ ### Fixed
172
+ - **Hardcoded paths in deployer** — `_build_command_rules_header()` now uses `FormatProfile.rules_dir` / `skills_dir` instead of hardcoded `~/.claude/` paths.
173
+ - **Stale filename references** — Updated cross-references in visualize.py, commands.py, lazy_visualize.py, and test files to match new rule filenames.
174
+
175
+ ## [2.11.0] - 2026-04-25
176
+
177
+ ### Added
178
+ - **Lateral Scan** (STORY-slim-106) — Plan Phase 1 now scans for duplicate patterns before writing Specs. If overlap > 30% with existing implementations, Spec must include `R0: Extract shared abstraction` or declare tech debt accepted. Removed dead hooks code from rules.
179
+ - **DEFERRED comment mechanism** (STORY-slim-105) — When skipping a SHOULD requirement, code must include `# DEFERRED(SHOULD): R{N} — reason` comment. Coverage table output added to Check phase for tracking deferred items.
180
+
181
+ ### Fixed
182
+ - **Residual pactkit.yaml version operations** (HOTFIX-slim-107) — Removed `update_version()` function and CLI subcommand from board.py, plus all stale references in prompts, agents, and skills docs. Version is now exclusively managed in pyproject.toml + __init__.py with deploy marker at ~/.claude/.pactkit-version.
183
+ - **CI tree-sitter deps** — Install tree-sitter optional dependencies in CI workflow to prevent import failures.
184
+
185
+ ## [2.10.6] - 2026-04-22
186
+
187
+ ### Fixed
188
+ - **L3 SHOULD semantics** (STORY-slim-104) — Signal Strength Convention L3 Recommended changed from "Violation = warning, non-blocking" to "Default required — skip only with stated reason" (RFC 2119). Added clarification bullet that SHOULD is not optional. Prevents AI from systematically deferring SHOULD tasks.
189
+
190
+ ## [2.10.5] - 2026-04-21
191
+
192
+ ### Added
193
+ - **Solution Design Protocol** (STORY-slim-101) — New rule `12-solution-design.md` requires capability delta assessment before implementation. Prevents framework blindness, project blindness, and hardcoded coupling. Includes Implementation Constraints (no magic values, OCP, SRP, dependency direction). Integrated into Plan Phase 1 and Act Phase 1.
194
+
195
+ ### Changed
196
+ - **Global version tracking** (STORY-slim-102) — Version tracking moved from project-level `pactkit.yaml` to global `~/.claude/.pactkit-version` marker. Eliminates cross-project desync when PactKit is upgraded. `auto_merge_config_file()` now removes stale `version` field from existing project yamls.
197
+
198
+ ## [2.10.4] - 2026-04-20
199
+
200
+ ### Added
201
+ - **Hotfix Impact Check** (STORY-slim-100) — `/project-hotfix` now includes Phase 0.5 that reads existing `.mmd` call graph files before fixing. Warns when target function has 3+ callers. Advisory (L3), non-blocking, gracefully skips when no graphs exist.
202
+
203
+ ## [2.10.3] - 2026-04-20
204
+
205
+ ### Fixed
206
+ - **Protected parent dirs in `pactkit clean`** — `rglob("dist")` was matching `node_modules/*/dist`, destroying npm dependency internals. Added `_inside_protected()` guard for `node_modules/` and `.git/`; explicit path patterns (e.g., `node_modules/.cache`) now use direct matching instead of rglob.
207
+
208
+ ## [2.10.2] - 2026-04-20
209
+
210
+ ### Added
211
+ - **PDCA Nudge Protocol** (STORY-slim-098) — AI proactively recommends PDCA commands when free conversation yields actionable conclusions. Trigger matrix maps signals to commands; suppression rules prevent noise.
212
+
213
+ ### Fixed
214
+ - **Shared Protocols Context.md reference** (STORY-slim-099) — Added missing `Act Phase 4` to the Context.md Canonical Format "Referenced by" line. Ensures context.md reflects Act progress for session continuity.
215
+ - **Semantic version comparison** (HOTFIX-slim-099) — Version mismatch warning now uses tuple comparison instead of string equality, giving correct upgrade/downgrade direction.
216
+
217
+ ## [2.10.1] - 2026-04-16
218
+
219
+ ### Added
220
+ - **Dual-dimension Harness Audit** (STORY-slim-097) — Audit now scores two dimensions: Config (project + global `~/.claude/` config, 50pts) and Code (tests, lint, complexity, git hygiene, 50pts). Score went from 52 to 97/100 for PactKit itself. JSON output includes `dimensions` breakdown field.
221
+ - **Unified HTML Report Dashboard** (STORY-slim-094) — Single `report.html` with tab switching, D3 force-directed graph, harness score ring, layer bars, and hotspot panel. Self-contained offline HTML with inline D3.js.
222
+
223
+ ### Fixed
224
+ - **Focus call graph empty output** (STORY-slim-095) — Fixed focus resolution to use `LANG_PROFILES[stack].source_dirs` instead of hardcoded `src/` prefix. Added subdirectory and single-root-module fallback.
225
+ - **Report --all tab overload** (HOTFIX-slim-096) — Filtered unified dashboard to core PDCA graphs only (code_graph, class_graph, call_graph, system_design). Reduced from 9 tabs to 4.
226
+ - **Mermaid `<br/>` tag rendering** (HOTFIX-slim-096) — Strip Mermaid `<br/>` tags from node labels before HTML escape, preventing `&lt;br/&gt;` raw text in SVG.
227
+
228
+ ## [2.9.13] - 2026-04-15
229
+
230
+ ### Fixed
231
+ - **Slim core dependencies** (STORY-slim-088) — Moved adapter packages (`pactkit-opencode`, `pactkit-codex`) and tree-sitter bindings to `[project.optional-dependencies]`. Core `pip install pactkit` now only requires `pyyaml`. Install extras with `pip install pactkit[all]`, `pactkit[visualize]`, `pactkit[opencode]`, or `pactkit[codex]`.
232
+ - **Spec-lint CLI fallback** (STORY-slim-088) — Playbooks now include `python3 -m pactkit spec-lint` fallback for environments where `pactkit` is not on `$PATH`, preventing P.A.C.T. violation (AI "manual lint" replacing deterministic code validation).
233
+ - **Board add_story signature** (STORY-slim-088) — Plan playbook Phase 3.3 now shows complete `add_story` invocation with required ID, title, and tasks arguments.
234
+
235
+ ## [2.9.12] - 2026-04-01
236
+
237
+ ### Added
238
+ - **Copilot deployer adapter** (STORY-slim-083) — `pactkit-copilot` adapter package registered via entry_points. `pactkit update --format copilot` deploys skills, commands, agents, and `copilot-instructions.md` to `.github/`.
239
+ - **OCP-compliant rules header dispatch** (STORY-slim-083 R6) — `_build_command_rules_header()` dispatches on `profile.rules_import_style` (`@import`/`inline`/`instructions`) instead of hardcoded profile name checks. New adapters get correct rule injection automatically.
240
+ - **Multi-stack auto-detection** (STORY-slim-080) — `pactkit init` auto-detects multiple stacks and writes `stack: [python, typescript]` list syntax to `pactkit.yaml`. `pactkit visualize` supports stack list.
241
+ - **Two-tier module graph** (STORY-slim-081) — `visualize --mode module` generates dimension-based subgraphs (Code/PDCA/Service/Frontend Topology).
242
+ - **Prompt template sync** (STORY-slim-082) — Canonical prompt templates rendered consistently across all deployer formats.
243
+
244
+ ### Fixed
245
+ - **OpenCode `rules_import_style`** — Corrected from `"instructions"` to `"inline"` to match actual behavior (commands inline rule content).
246
+
247
+ ## [2.9.11] - 2026-04-01
248
+
249
+ ### Fixed
250
+ - **Rules template variables** — `_deploy_rules()` now renders `{PROJECT_CONFIG_DIR}` and other template variables via `_render_prompt()`. Previously rules were deployed with raw template strings, causing unresolved `{PROJECT_CONFIG_DIR}` in Codex/OpenCode deployments.
251
+
252
+ ## [2.9.10] - 2026-04-01
253
+
254
+ ### Fixed
255
+ - **Skill script `__future__` import** — `load_script()` now hoists `from __future__ import annotations` above `_SHARED_HEADER`, fixing SyntaxError in deployed `spec_linter.py`. Added `# === SCRIPT BODY ===` marker to `spec_linter.py`.
256
+ - **Lessons table auto-repair** — `append_lesson()` now calls `_repair_table_structure()` before appending, fixing: missing header, wrong header format, data rows before header, stray text in table area.
257
+
258
+ ## [2.9.9] - 2026-04-01
259
+
260
+ ### Added
261
+ - **GitHub Copilot adapter support** — New `copilot` FormatProfile in `profiles.py`. `pactkit init --format copilot` deploys to project `.github/` directory.
262
+ - **Dynamic `--format` CLI choices** — `init`, `update`, `upgrade` commands now derive `--format` choices from `VALID_FORMATS` instead of hardcoded list. Adding a new format profile auto-exposes it in CLI.
263
+
264
+ ### Fixed
265
+ - **Excluded command stripping** — `strip_excluded_command_references()` in `DeployerBase` now strips `/project-sprint` references from all rendered prompts for formats that exclude it (Copilot, Codex, OpenCode).
266
+
267
+ ## [2.9.4] - 2026-03-31
268
+
269
+ ### Fixed
270
+ - **Init playbook DIP violation** (STORY-slim-074) — Eliminated `DETECTED_ENV` runtime IDE detection; all hardcoded paths replaced with template variables (`{FORMAT_NAME}`, `{PROJECT_CONFIG_DIR}`, etc.). Adding a new IDE format now requires zero playbook changes.
271
+ - **Full DIP audit** — Fixed hardcoded IDE paths in doctor skill, core-protocol rule, and done command.
272
+ - **tree-sitter promoted to core dependency** — No longer optional; CI install updated to include `tree-sitter-go`, `tree-sitter-java`, `tree-sitter-typescript`.
273
+ - **`--focus` scan optimization** — `_scan_files` now scans only the focused subdirectory, not the full project root. `pactkit visualize --focus` without `--mode` now correctly passes focus through.
274
+ - **SCAN_EXCLUDES expanded** — From 13 to 30+ entries covering Go (`vendor`), Java (`target`, `.gradle`, `.mvn`), Node (`.next`, `.nuxt`, `.turbo`), IDE (`.idea`, `.vscode`), VCS (`.svn`, `.hg`), and more.
275
+ - **Codex pactkit.yaml candidates** — 3 functions in `visualize.py` now include `.codex/pactkit.yaml` in search paths.
276
+ - **Topology markers** — `_TOPOLOGY_MARKERS` and `PdcaParser.markers` now include all 3 IDE format directories.
277
+
278
+ ## [2.9.3] - 2026-03-31
279
+
280
+ ### Added
281
+ - **Multi-language call chain fix** (STORY-slim-069) — Dispatch hint comment parsing (`pactkit-trace: dispatches_to`) and inheritance edge linking extended from Python-only to Go (struct embedding), Java (extends/implements), and TypeScript (class extends) tree-sitter analyzers.
282
+ - **CLI visualize args exposed** (HOTFIX-slim-070) — `--entry`, `--focus`, `--reverse`, `--depth`, `--max-nodes` now reachable from `pactkit visualize` CLI.
283
+
284
+ ### Fixed
285
+ - **4 call chain断链** (STORY-slim-068) — dict.update scan collision, dynamic dispatch hints, abstract method orphan nodes, cross-package stub edges.
286
+ - **CI install command** — Fallback from `.[multilang]` to `.[dev]` in generated pactkit.yml.
287
+
288
+ ## [2.9.2] - 2026-03-30
289
+
290
+ ### Fixed
291
+ - **FormatProfile.excluded_commands** — `project-sprint` excluded for OpenCode/Codex (requires subagent team, Claude Code only). Doctor `check_config_drift` now respects format-level exclusions.
292
+ - **Redundant pactkit.yaml component lists** — Removed explicit agents/commands/skills/rules lists from `.opencode/pactkit.yaml` (absence = deploy all).
293
+ - **Orphaned spec cleanup** — Removed 7 pre-developer-prefix spec files that were already archived under old IDs.
294
+
295
+ ## [2.9.1] - 2026-03-30
296
+
297
+ ### Added
298
+ - **Topology-aware trace** (STORY-slim-066) — ApiCallParser (tree-sitter-typescript) and AgentParser (LangGraph/YAML/MCP) for multi-topology code tracing. Plan/Act phases now include topology gate.
299
+
300
+ ### Fixed
301
+ - **Monorepo subdirectory detection** — TopologyParser.detect() now scans immediate subdirectories, fixing false negatives for monorepo layouts (e.g., `web/package.json`).
302
+ - **Doctor false drift warnings** — `check_config_drift()` now searches global deploy directories (`~/.claude/`, `~/.config/opencode/`, `~/.codex/`) instead of only project-local paths.
303
+ - **Canonical lessons.md header** — Init Phase 5 now enforces `| Date | Lesson | Context |` table header, preventing AI-invented column names like `| Source |`.
304
+
305
+ ## [2.9.0] - 2026-03-28
306
+
307
+ ### Added
308
+ - **`pactkit init` deploys all IDEs by default** — `--format all` is now the CLI default, deploying Claude Code + OpenCode + Codex configs in one shot. No need to specify `--format` per IDE. Packaging modes (plugin, marketplace) excluded from "all".
309
+
310
+ ### Fixed
311
+ - **Entry_point deployer circular import** — Lazy-load entry_point deployers to fix `ValueError` when running `pactkit init` via pipx. Module-level `ep.load()` caused circular import between deployer.py and adapter packages.
312
+
313
+ ## [2.8.0] - 2026-03-27
314
+
315
+ ### Added
316
+ - **3-IDE default install** — `pip install pactkit` now installs all three IDE adapters (Claude Code + OpenCode + Codex) out of the box.
317
+
318
+ ### Fixed
319
+ - **OpenCode command architecture** — Reverted OpenCode from skills-only back to `commands/` + `skills/` dual architecture. OpenCode auto-discovers commands from `commands/*.md` (invoked via `/project-plan`), while embedded skills in `skills/` are loaded by AI agent on demand. `opencode.json` command entries now only contain model routing (no `template` field — it was incorrectly treated as file path, but is actually inline text).
320
+ - **Spec version confusion** — `/project-plan` Phase 3.2a no longer reads version from `pactkit.yaml` (PactKit toolkit version). Now explicitly reads from project's package manifest (`pyproject.toml`, `package.json`, `Cargo.toml`).
321
+ - **OpenCode path isolation** — All deployed OpenCode files reference `~/.config/opencode/` paths, CLI commands replaced with `python3 ~/.config/opencode/skills/*/scripts/*.py` invocations.
322
+ - **pactkit.yaml simplification** — Removed redundant component lists (agents/commands/skills/rules) from yaml template. Absence = deploy all from `VALID_*` sets. `pactkit doctor` drift check skips absent keys.
323
+
324
+ ### Changed
325
+ - **Cross-IDE command architecture**:
326
+ - Claude Code: skills-only (`skills/project-*/SKILL.md`), prefix `/`
327
+ - OpenCode: commands + skills (`commands/project-*.md` + `skills/pactkit-*/SKILL.md`), prefix `/`
328
+ - Codex: skills-only (`skills/project-*/SKILL.md`), prefix `$`
329
+
330
+ ## [2.7.0] - 2026-03-27
331
+
332
+ ### Added
333
+ - **Commands → Skills Migration** (STORY-slim-063) — 11 PDCA commands now deploy as `skills/{name}/SKILL.md` subdirectories instead of flat `commands/{name}.md` files for Claude Code format. `VALID_SKILLS` expanded from 10 to 21 entries (10 embedded + 11 commands).
334
+ - **Legacy Command Cleanup** — `_cleanup_legacy_commands()` auto-removes old `project-*.md` from `commands/` on upgrade, preserving non-PactKit files.
335
+ - **Codex FormatProfile** (STORY-slim-060) — Re-added `codex` profile to core for thin adapter pattern support (`pactkit-codex` package).
336
+
337
+ ### Fixed
338
+ - **board.py update_task** (HOTFIX-slim-061) — `update_task` now recognizes bullet-format Done entries (`- **STORY-xxx**:`), not just heading format.
339
+ - **visualize --lazy focus** (HOTFIX-slim-062) — Removed hardcoded `--focus cli` refresh; added stem matching for focus target resolution.
340
+
341
+ ### Changed
342
+ - **Deploy summary** — Output now shows unified `Skills (embedded + commands)` count instead of separate Commands/Skills lines.
343
+ - **Cross-format isolation** — OpenCode and Codex profiles unaffected; commands still deploy as flat `.md` files for non-classic formats.
344
+
345
+ ## [2.6.1] - 2026-03-26
346
+
347
+ ### Fixed
348
+ - **OpenCode backward compatibility** — `pactkit-opencode` added as core dependency so `pip install pactkit` automatically includes OpenCode deployment support. Users upgrading from 2.5.0 no longer lose `--format opencode`.
349
+ - **Version sync** — `pactkit-opencode` version aligned to 2.6.0 to match core versioning.
350
+
351
+ ## [2.6.0] - 2026-03-26
352
+
353
+ ### Added
354
+ - **DeployerProtocol & DeployerBase** (STORY-slim-057) — Extracted deployer interface (`typing.Protocol`) and shared base class with registry pattern (`register_deployer()`, `get_deployer()`), enabling adapter-based plugin architecture.
355
+ - **pactkit-opencode Adapter Package** (STORY-slim-058) — Extracted all 8 OpenCode-specific functions into standalone `pactkit-opencode` package with `entry_points`-based auto-registration. `pip install pactkit-opencode` activates OpenCode format automatically.
356
+ - **Entry Point Auto-Discovery** — `_load_entry_point_deployers()` scans `pactkit.deployers` entry_point group at import time for zero-config adapter registration.
357
+
358
+ ### Removed
359
+ - **Codex Profile** (STORY-slim-059) — Removed dead `codex` FormatProfile, YAML candidates, and all codex references from source. VALID_FORMATS auto-shrinks via `FORMAT_PROFILES.keys()`.
360
+ - **OpenCode Functions from Core** — 8 OpenCode-specific functions (~300 lines) moved to `pactkit-opencode` adapter. `deployer.py` reduced from 1754 to 1448 lines (-17%).
361
+
362
+ ### Changed
363
+ - **deployer.py Dispatch** — `deploy()` now dispatches via `_DEPLOYER_REGISTRY` instead of if/elif chain. New formats only need to call `register_deployer()`.
364
+ - **Architecture Principles** — Updated rule templates to reflect adapter pattern (class-based deployers, no codex references).
365
+
366
+ ## [2.5.0] - 2026-03-26
367
+
368
+ ### Added
369
+ - **E2E CLI Coverage 100%** (STORY-slim-056) — 60 subprocess-based E2E tests covering all 25 CLI subcommands, including parametrized `--help` consistency check, error path validation, and Unicode project path support.
370
+ - **`__main__.py`** — `python -m pactkit` now works as an alternative to the `pactkit` entry point.
371
+
372
+ ### Fixed
373
+ - **Mermaid Quote Injection** (STORY-slim-053 R1) — File/function names containing `"` no longer break `.mmd` graph rendering; escaped via `#quot;` HTML entity at 4 label sites.
374
+ - **O(N×E) Callee Resolution** (STORY-slim-053 R2) — `_resolve_callee()` now uses a pre-built `suffix_index` dict for O(1) lookup instead of linear scan.
375
+ - **Module Index Collision** (STORY-slim-053 R3) — `module_index` changed from `dict[str, Path]` to `dict[str, list[Path]]` with `_best_match()` same-package preference, fixing silent node loss for same-name files in different directories.
376
+ - **Focus Substring False Positives** (STORY-slim-053 R4) — `--focus auth.py` no longer matches `oauth.py`; changed to exact path-tail matching with `_extract_node_id()` set lookup.
377
+ - **BFS O(N²) Pop** (STORY-slim-053 R5) — All 4 BFS sites now use `collections.deque.popleft()` instead of `list.pop(0)`.
378
+ - **`_rewrite_yaml` Non-Atomic Write** (STORY-slim-054 R1) — `config.py` now uses tmp+rename pattern, preventing `pactkit.yaml` corruption on crash/disk-full.
379
+ - **`_deploy_ci` Dict Mutation** (STORY-slim-054 R2) — Changed `.pop("_ghe_override")` to `.get()`, preventing caller dict mutation across multi-call scenarios.
380
+ - **`atomic_write` .tmp Residual** (STORY-slim-054 R3) — Added try/except cleanup so `.tmp` files are removed on `os.replace()` failure.
381
+ - **Visualize Non-Atomic .mmd Writes** (STORY-slim-055 R1) — All 4 `.mmd` output sites now use `_atomic_mmd_write()` (tmp+rename).
382
+ - **Deployer Bare `read_text()`** (STORY-slim-055 R2) — 3 sites in `deployer.py` now specify `encoding='utf-8'` for Windows compatibility.
383
+ - **Large File OOM** (STORY-slim-055 R3) — Added `MAX_FILE_BYTES=1MB` guard to `PythonAnalyzer` and `_build_class_graph()`, skipping auto-generated mega-files.
384
+ - **Sprint Redundant Operations** (STORY-slim-050) — Eliminated duplicate visualize/clean/context runs in sprint orchestration.
385
+ - **Skill Script Robustness** (STORY-slim-051, 052) — Hardened board.py, scaffold.py, spec_linter.py, visualize.py with encoding, error handling, and call-chain fixes.
386
+
387
+ ## [2.4.1] - 2026-03-26
388
+
389
+ ### Fixed
390
+ - **CI Template Override** (HOTFIX-slim-051) — `_build_github_workflow()` now reads `ci.install_cmd` from `pactkit.yaml` before falling back to `CI_PROFILES` default, preventing `pactkit update` from reverting custom install commands.
391
+ - **Board ITEM_ID_RE** (HOTFIX-slim-052) — Regex now supports developer-prefixed IDs (`HOTFIX-slim-052`, `STORY-alice-001`), matching the pattern already used by `backfill.py` and `doctor.py`.
392
+
393
+ ### Added
394
+ - **Board `move_story` Command** (HOTFIX-slim-052) — New `board.py move_story <ID> <target>` CLI subcommand moves stories between Backlog/In Progress/Done sections regardless of checkbox state.
395
+ - **Automated PyPI Publish** — New `publish.yml` GitHub Actions workflow triggers on `v*` tags; runs full test matrix (Python 3.10-3.13) then publishes via PyPI trusted publisher (OIDC).
396
+
397
+ ### Changed
398
+ - **Closed-Source Migration** — Source repo moved to `pactkit/pactkit-src` (private); public entry point at `pactkit/pactkit-public` (README, issues, install guide). PyPI distribution unchanged.
399
+
400
+ ## [2.4.0] - 2026-03-25
401
+
402
+ ### Added
403
+ - **Multi-Architecture Topology System** (STORY-slim-039~048) — 10 stories implementing a complete topology analysis framework:
404
+ - **TopologyParser ABC** — Abstract base class with `detect()` + `parse()` and zero-config auto-detection via `_TOPOLOGY_MARKERS`
405
+ - **PdcaParser** — Refactored Epic 1 logic into TopologyParser; added PDCA sequence edges (Plan→Act→Check→Done dashed arrows)
406
+ - **ServiceParser** — Parses `docker-compose.yml`, `openapi.yaml`, `*.proto`; extracts service→api→service dependency graph with MQ topic support
407
+ - **FrontendParser** — Parses Next.js (App/Pages Router), Vue Router routes; extracts page→component→hook→store dependency chain
408
+ - **Cross-topology Impact** — `reverse_reach()` works across all topologies; `regression_workflow_impact()` detects service/hook/store changes
409
+ - **Unified Layered Graph** — `build_unified_graph()` merges code + topology dimensions with bridge edges; `to_mermaid()` renders dimension-based subgraphs
410
+ - **MAX_WORKFLOW_NODES=500** — Performance ceiling for unified graph node count
411
+
412
+ ### Fixed
413
+ - **detect_topology() DRY fix** — Now delegates to parser's own `detect()` method first, falling back to `_TOPOLOGY_MARKERS` for unregistered topologies only. Fixes empty workflow graph on pactkit's own project.
414
+ - **pyproject.toml metadata** — Moved `authors/keywords/classifiers` from `[project.optional-dependencies]` back to `[project]` (caused CI hatchling validation failure)
415
+ - **CI multilang deps** — Both CI workflows now install `[multilang]` extras for tree-sitter test coverage
416
+ - **Spec/PRD consistency** (HOTFIX-slim-049) — Fixed 040 AC1 wording, 042 markers, PRD database/reads_db removal, PRD roadmap checkboxes
417
+
418
+ ## [2.3.6] - 2026-03-24
419
+
420
+ ### Fixed
421
+ - **Issue Sync Substring Matching** (STORY-slim-027 R1) — `issue_sync.py` now uses word-boundary regex instead of `in` substring check, preventing `STORY-1` from matching `STORY-10`.
422
+ - **E007 Per-Subsection GWT Check** (R3) — Spec linter E007 now validates Given/When/Then keywords per AC subsection instead of flat-scanning the entire Acceptance Criteria section. Uses raw text (with code fences) to avoid false positives on specs wrapping Gherkin in ` ```gherkin ` blocks.
423
+ - **W008 Scaffold Placeholder Detection** (R4) — New warning W008 fires when `## Background` or `## Target Call Chain` still contains default scaffold placeholder text.
424
+ - **Schema-Linter Alignment** (R2/R10) — `## Security Scope` moved from OPTIONAL to REQUIRED in `schemas.py` to match E009 enforcement; `## Non-Goals` added to OPTIONAL.
425
+ - **RFC Pattern Consistency** (R11) — Spec linter fallback RFC pattern now derived from `SPEC_RFC_KEYWORDS` tuple instead of a separate hardcoded regex.
426
+ - **Scaffold Skill Path** (R8) — `scaffold.py` usage hint now uses resolved `root` path instead of hardcoded `~/.claude/skills/`.
427
+
428
+ ### Changed
429
+ - **Design Prompt** (R5) — Phase 3 now includes `pactkit sec-scope` step after filling each Spec.
430
+ - **Act Prompt** (R6/R7) — Phase 0.6 adds "Move to In Progress" board step; Phase 3 adds lint gate before regression.
431
+
432
+ ## [2.3.5] - 2026-03-23
433
+
434
+ ### Fixed
435
+ - **W007 RFC 2119 Detection** — W007 now detects all RFC 2119 keywords (MUST, SHOULD, MAY, SHALL, REQUIRED, RECOMMENDED, OPTIONAL) using canonical `SPEC_RFC_KEYWORDS` from schemas.py, instead of hardcoding only SHOULD.
436
+
437
+ ## [2.3.4] - 2026-03-23
438
+
439
+ ### Added
440
+ - **Spec Lint W007 — Req-AC Coverage** (STORY-slim-024) — New warning rule fires when `### R{N}:` requirements are not referenced by any `### AC{M}:` body. Helps catch SHOULD requirements that get overlooked. Message includes `(SHOULD)` indicator for unreferenced SHOULD requirements.
441
+
442
+ ### Fixed
443
+ - **E2E Config Fields** — `api_spec` and `compose_file` now included in `generate_default_yaml()` output (were commented out, breaking roundtrip tests).
444
+ - **Test Fixtures** — Updated test fixtures to include `e2e` section after HOTFIX-slim-025 added new fields.
445
+
446
+ ## [2.3.3] - 2026-03-23
447
+
448
+ ### Added
449
+ - **Auto Version Sync** (STORY-slim-023) — `pactkit update --if-needed` compares `pactkit.yaml` version vs installed `__version__`. If match, skips redeploy; if mismatch, proceeds with full deploy. Core Protocol prompt updated to run this at session start for zero-friction upgrades.
450
+
451
+ ### Fixed
452
+ - **Guard Version Mismatch Detection** (HOTFIX-slim-024) — `pactkit guard` now checks version mismatch and prints warning with suggestion to run `pactkit update`. Also adds `e2e` to `_BACKFILL_KEYS` so new config section is auto-added during update.
453
+
454
+ ## [2.3.2] - 2026-03-23
455
+
456
+ ### Added
457
+ - **E2E Testing Framework** (STORY-slim-022) — Config-driven E2E strategy in `pactkit.yaml` (`e2e.type`: none/cli/frontend/backend/fullstack). `/project-check` Phase 4 rewritten from hardcoded Strategy A/B to config-driven table. `env_file` field (default `.env.test`) for test credential isolation. Non-blocking by default (`e2e.blocking: false`).
458
+
459
+ ### Fixed
460
+ - **Visualize CLI --mode** (HOTFIX-slim-023) — `pactkit visualize --mode class/call` previously failed with "unrecognized arguments". Added `--mode` parameter and wired non-lazy mode to execute graphs directly.
461
+ - **Board Archive Section Headers** (HOTFIX-slim-021) — `archive_stories()` now preserves `## 🔄 In Progress` and `## ✅ Done` section headers when archiving removes all stories from a section.
462
+
463
+ ## [2.3.1] - 2026-03-23
464
+
465
+ ### Fixed
466
+ - **Plan Phase 3.2 Stall** (STORY-slim-019) — Split monolithic Spec-writing phase into 4 sub-steps (3.2a Skeleton, 3.2b Acceptance Criteria, 3.2c Security Scope, 3.2d Spec Lint) with output checkpoints between each, eliminating AI buffering stall on large Spec generation.
467
+ - **Explore Subagent Stall** (STORY-slim-020) — Added Bounded Delegation template to Plan Phase 1 (target/scope/limit/output constraints for Explore subagents), reduced `code-explorer` maxTurns from 50 to 15, and added scope-limiting instructions to prevent unbounded codebase exploration.
468
+ - **CI Workflow** — Reverted `actions/checkout` and `actions/setup-python` from v6 back to v4/v5 for CI stability after Dependabot upgrades caused failures.
469
+
470
+ ## [2.3.0] - 2026-03-22
471
+
472
+ ### Added
473
+ - **Deterministic CLI Subcommands** (STORY-slim-014) — Migrated 7 Done-phase operations from prompt-delegated to Python CLI: `clean`, `regression`, `context`, `sec-scope`, `guard`, `next-id`, `visualize --lazy`.
474
+ - **Doctor, Backfill-Release, Issue-Sync CLI** (STORY-slim-015) — `pactkit doctor` diagnoses project health (HLD drift, board structure, config completeness). `pactkit backfill-release` replaces `Release: TBD` in completed specs. `pactkit issue-sync` handles GitHub issue lifecycle for BUG/HOTFIX items.
475
+ - **Test-Map and Lint CLI** (STORY-slim-016) — `pactkit test-map` maps changed source files to test files via `LANG_PROFILES.test_map_pattern`. `pactkit lint` runs stack-aware lint with auto-fix and blocking modes from `pactkit.yaml`.
476
+ - **Lesson-Append, Invariants-Refresh, Coverage-Gate CLI** (STORY-slim-017) — `pactkit lesson-append` checks specificity (file/function reference) and dedup (Jaccard < 0.5) before appending. `pactkit invariants-refresh` updates test count invariant. `pactkit coverage-gate` enforces 3-tier coverage thresholds (80/50/block).
477
+ - **Systemic Cross-Flow Guards** (STORY-slim-018) — 4 guard test suites: R1 prompt-CLI cross-reference validation, R2 canonical `LANG_PROFILE_REQUIRED_KEYS` SSoT in `schemas.py`, R3 Spec Status lifecycle (`spec-status` CLI + W006 lint rule), R4 declarative cross-flow coverage matrix (12 subcommands × prompt keys).
478
+ - **Spec Status CLI** — `pactkit spec-status <spec> <status>` programmatically updates `| Status |` field in spec files. W006 lint rule flags invalid status values.
479
+
480
+ ### Fixed
481
+ - **Cross-Flow Integrity** (BUG-slim-003 through BUG-slim-006) — 4 rounds of systematic audits fixed 25+ gaps: dead CLI subcommands with zero prompt references, argparser flags without `deploy()` parity, `visualize --lazy` not calling actual function, double `python3` prefix in HOTFIX_PROMPT, unused LANG_PROFILES keys removed.
482
+ - **SSoT Violations** — `backfill.py` imports `BOARD_SECTION_DONE` from schemas (was hardcoded regex). `lessons.py` uses `LESSONS_ROW_FORMAT` from schemas. 5 test files import `LANG_PROFILE_REQUIRED_KEYS` instead of hardcoding key sets.
483
+ - **Prompt Cognitive Overload** (STORY-slim-013) — Reduced redundancy across PDCA command prompts.
484
+ - **Rules-Commands Collision** (BUG-slim-002) — Resolved instruction conflicts between rules and command playbooks.
485
+ - **Draw Skill Stuck** — Added concrete templates to `pactkit-draw` to prevent empty-output behavior.
486
+
487
+ ### Changed
488
+ - `SPEC_VALID_STATUSES` and `LANG_PROFILE_REQUIRED_KEYS` canonicalized in `schemas.py` as single source of truth.
489
+ - Sprint board required sections enforced: `## 📋 Backlog`, `## 🔄 In Progress`, `## ✅ Done`.
490
+ - BUG-017/BUG-029 spec Status fields corrected to valid values per `SPEC_VALID_STATUSES`.
491
+
492
+ ## [2.2.0] - 2026-03-20
493
+
494
+ ### Added
495
+ - **Context-Aware Rule Loading** (STORY-slim-011) — `COMMAND_RULES_MAP` maps each of 11 commands to only the rules it needs, reducing per-command token usage by 20-83%. Classic format uses `@import` injection; OpenCode format embeds rule content inline. Credential safety rule (`09`) is force-injected into every command regardless of configuration.
496
+ - **Stack-Aware CI Pipeline Generation** (STORY-slim-012) — `CI_PROFILES` in `workflows.py` supports Python, Node.js, Go, and Java stacks with correct setup actions, install commands, and test runners. New `pactkit.yaml` CI config fields: `runner`, `language_version`, `github_host`, `actions_ref`.
497
+ - **GitHub Enterprise (GHE) Support** — Explicit `ci.github_host` configuration for GHE Server environments, with `ci.actions_ref` prefix replacement for custom action mirrors. Auto-detection fallback via `_detect_ghe()`.
498
+ - **OpenCode CI Parity** — `_deploy_opencode()` now calls `_deploy_ci()`, ensuring CI pipeline files are generated regardless of deployment format.
499
+ - **CI Status Feedback** — `/project-done` Phase 4 now includes optional CI status check via `gh run list` after push (non-blocking).
500
+ - **GitLab CI Stack-Aware** — GitLab CI templates now use correct Docker images and commands per stack (e.g., `node:20` + `npm ci` for Node projects).
501
+
502
+ ### Changed
503
+ - `_deploy_ci()` refactored from hardcoded Python-only templates to parameterized builders (`_build_github_workflow()`, `_build_gitlab_ci()`).
504
+ - `generate_default_yaml()` now outputs commented CI configuration fields (`runner`, `language_version`, `github_host`, `actions_ref`) for user discoverability.
505
+ - CLAUDE.md no longer contains global rule `@import` directives — rules are now injected at command level.
506
+ - OpenCode `opencode.json` instructions reduced to only `09-credential-safety.md` — other rules injected per-command.
507
+
508
+ ## [2.1.1] - 2026-03-18
509
+
510
+ ### Added
511
+ - **Lazy Rule Loading** (STORY-slim-009) — Rules split into always-load core (`01-core-protocol`, `02-hierarchy-of-truth`, `09-credential-safety`) and on-demand `@reference` layer (6 files loaded by AI via Read tool when needed). Reduces per-turn system prompt overhead by 62% (7200 → 2800 tokens).
512
+ - `RULES_CORE_FILES`, `RULES_ONDEMAND_FILES`, `RULES_INSTRUCTIONS_CORE` constants in `rules.py` for layered rule management.
513
+ - AGENTS.md now contains `@rules/xxx.md` reference index with lazy-loading instructions — mirrors Claude Code's `@import` behavior in OpenCode's architecture.
514
+
515
+ ### Changed
516
+ - `_update_global_opencode_json()` writes individual core rule paths instead of `rules/*.md` glob. Preserves user's existing instructions via merge strategy.
517
+ - `_deploy_agents_md_inline()` generates on-demand `@reference` index from `RULES_ONDEMAND_FILES`.
518
+
519
+ ### Fixed
520
+ - `_update_global_opencode_json()` no longer overwrites user's existing `instructions` entries (merge instead of replace).
521
+
522
+ ## [2.1.0] - 2026-03-17
523
+
524
+ ### Added
525
+ - **FormatProfile Abstraction** (STORY-slim-005) — Frozen dataclass registry (`profiles.py`) replaces scattered if-else format branching. Adding a new tool format requires only one registry entry. `VALID_FORMATS` and `PACTKIT_YAML_CANDIDATES` auto-generated from `FORMAT_PROFILES`.
526
+ - **Prompt Template Variables** (STORY-slim-006) — 48 hardcoded env-specific paths replaced with 11 named placeholders (`{SKILLS_ROOT}`, `{BOARD_CMD}`, `{PACTKIT_YAML}`, etc.) resolved at deploy time by `_render_prompt(template, profile)`.
527
+ - **Document Schema Registry** (STORY-slim-007) — New `schemas.py` centralizes all document structure rules (Spec sections, Board headers, context.md sections, lessons.md format). New CLI command `pactkit schema [type]` for rule discovery.
528
+ - **Deploy Chain Parity** (STORY-slim-008) — `_deploy_opencode()` now reads `pactkit.yaml` for selective deployment, calls `auto_merge_config_file()`, `_cleanup_legacy()`, generates project-level `AGENTS.md`, prints MCP recommendations. `_generate_config_if_missing(format=)` is format-aware.
529
+ - **Architecture Principles Rule** — New `08-architecture-principles.md` codifies 8 principles (SOLID, DRY, 12-Factor, Defense-in-Depth) derived from project practice. `CLAUDE_MD_TEMPLATE` auto-generated from `RULES_FILES`.
530
+ - **Codex CLI Pre-Research** (STORY-slim-001) — Tool integration checklist (11 dimensions, 60+ checks) and Codex capability matrix completed. Integration specs (STORY-slim-002/003/004) ready.
531
+ - **Daily Retro Skill** — Personal growth feedback loop with 6 dimensions (engineering, architecture, new skills, thinking patterns, process, career). Triggered by cross-day context.md detection.
532
+ - **Docker Containers** — Isolated `claude-code` and `opencode` containers for clean deployment verification.
533
+
534
+ ### Fixed
535
+ - **BUG-slim-001**: `/project-init` no longer creates `.claude/` directory in OpenCode environment. Environment detection moved before `pactkit init` call. Playbook paths now use `$SKILLS_PATH` variable.
536
+ - **Config Priority**: `.opencode/` now takes precedence over `.claude/` in `pactkit.yaml` resolution (newer environment preferred).
537
+ - **Scaffold Developer Prefix**: `create_spec`, `git_start`, `create_e2e` auto-inject developer prefix from `pactkit.yaml`.
538
+
539
+ ### Changed
540
+ - `opencode_format` boolean parameter removed from `_deploy_agents()`, `_deploy_commands()`, `_deploy_skills()` — replaced by `profile: FormatProfile`.
541
+ - `OPENCODE_SKILLS_PREFIX` constant removed — use `get_profile("opencode").skills_path_var`.
542
+ - `CLAUDE_ONLY_FIELDS` hardcoded set replaced by `profile.excluded_agent_fields` (extensible per format).
543
+ - `TRACE_PROMPT` converted from f-string to regular string for template variable compatibility.
544
+ - Spec scaffold template now uses `TBD` as Release placeholder (enforced by spec-lint E008 at Act time).
545
+
546
+ ## [2.0.2] - 2026-03-16
547
+
548
+ ## [1.6.9] - 2026-03-13
549
+
550
+ ### Fixed
551
+ - **scaffold.py create_spec() Template Mismatch** — Generated specs failed spec-lint validation (E001, E004, E008); updated template to use `| Field | Value |` metadata table format, `### R1:` requirement subsections, and `{VERSION}` placeholder instead of literal TBD; added 4 new tests in `test_scaffold.py` (BUG-033)
552
+
553
+ ## [1.6.8] - 2026-03-06
554
+
555
+ ### Fixed
556
+ - **Stale Docstring in deployer.py** — `_generate_claude_local_md_if_missing()` docstring and template comment claimed "never modified by PactKit" but STORY-064 introduced `_upsert_venv_managed_block()` which modifies the file; updated to accurately describe managed block behavior (BUG-031)
557
+ - **Missing E2E CLI Test for spec-lint** — Added 4 E2E subprocess tests (`TestSpecLintCommand`) to `test_cli_e2e.py` covering single-file pass/fail, `--all`, and no-args cases; spec-lint was the only CLI subcommand without E2E coverage (BUG-032)
558
+
559
+ ## [1.6.7] - 2026-03-05
560
+
561
+ ### Added
562
+ - **Sprint Stage A Model Consistency** — Split Stage A into A1-Plan (`system-architect`, model: opus) and A2-Act (`senior-developer`, model: sonnet) so model selection rule is enforced; Phase 0 reads `agent_models` from `.claude/pactkit.yaml` with opus/sonnet defaults and fallback to sonnet if model unavailable (STORY-065)
563
+ - **Persist Venv Config in CLAUDE.local.md** — `_upsert_venv_managed_block()` in `deployer.py` writes venv instructions into a `<!-- pactkit:venv:start/end -->` managed block in `CLAUDE.local.md` so virtual environment config survives `pactkit update` even when auto-detection fails (STORY-064)
564
+
565
+ ### Fixed
566
+ - **Spec Linter Path Broken in External Projects** — Playbook prompts used hardcoded `python3 src/pactkit/skills/spec_linter.py` which only exists inside the pactkit dev repo; replaced with `pactkit spec-lint` installed CLI entry point; added `pactkit spec-lint` subcommand to `cli.py` supporting single-file and `--all` modes (BUG-030)
567
+
568
+ ## [1.6.6] - 2026-03-05
569
+
570
+ ### Fixed
571
+ - **project-init CLI Hang on Greenfield Projects** — Replaced blocking "ask the user to specify" stack detection fallback with config-first resolution: reads `stack` from `pactkit.yaml` first, file-based detection only when no config exists, safe fallback to `stack: auto` with warning instead of blocking user input mid-flow (BUG-029)
572
+
573
+ ## [1.6.5] - 2026-03-04
574
+
575
+ ### Fixed
576
+ - **Ghost DEV_REF Residual** — Removed unresolvable `DEV_REF_FRONTEND`/`DEV_REF_BACKEND` name references from Check playbook (`commands.py:245`) and Review skill (`workflows.py:373-374`); replaced with inline stack-aware prose; added 17 regression guard tests covering all command playbooks and workflow prompts (BUG-028)
577
+
578
+ ## [1.6.4] - 2026-03-04
579
+
580
+ ### Changed
581
+ - **PDCA Playbook Prompt Slimming** — Extracted shared protocols (Lazy Visualize, Test Mapping, Context.md Format) to `rules.py`, eliminating 4-place duplication; rewrote Sprint to Protocol-Only (70% reduction); removed MCP tool signature teaching from Plan/Act/Check/Done; resolved ghost DEV_REF/TEST_REF references; added Spec Lint to Design phase. Total prompt size: 73,511 → 56,939 chars (22.5% reduction) (STORY-063)
582
+
583
+ ### Added
584
+ - **Shared Protocols Rule** — New `07-shared-protocols.md` rule module containing Lazy Visualize Protocol, Test Mapping Protocol, and Context.md Canonical Format; deployed to `~/.claude/rules/` and referenced by CLAUDE.md
585
+
586
+ ## [1.6.3] - 2026-03-03
587
+
588
+ ### Fixed
589
+ - **Sprint Board Story Heading Tolerance** — `board.py` regex now matches both `###` and `####` story headings for backward compatibility; new `create_board()` scaffold function ensures standardized board generation (BUG-027)
590
+ - **PyPI Logo Display** — README logo now uses absolute GitHub raw URL for PyPI rendering
591
+
592
+ ## [1.6.2] - 2026-03-03
593
+
594
+ ### Added
595
+ - **MCP Recommendations** — After `pactkit init` and `pactkit update`, displays 6 recommended MCP servers (Context7, Memory, Playwright, Draw.io, shadcn, Chrome DevTools) with purposes and config hint; helps users discover optional integrations (STORY-062)
596
+ - **Subagent Model Selection Guidance** — Core protocol now includes model selection guidance (haiku for simple tasks, sonnet for general, opus for complex); balances cost and capability in multi-agent workflows
597
+
598
+ ## [1.6.1] - 2026-03-03
599
+
600
+ ### Fixed
601
+ - **Init Hang Prevention** — Phase 0.5 Git Guard now prints warning instead of blocking prompt; enterprise flags (`--no-git`, `--no-external`, `--non-interactive`) wired end-to-end from CLI to deploy(); `visualize.py` scan truncated at 500 files with `--focus` escape hatch (STORY-060)
602
+
603
+ ### Changed
604
+ - **Prompt Token Optimization** — Removed 10 redundant `<thinking>` block instructions from PDCA playbooks (4 in commands.py, 6 in workflows.py); Claude's native extended thinking makes explicit instructions unnecessary, saving ~50-100 tokens per invocation (STORY-061)
605
+
606
+ ## [1.6.0] - 2026-02-28
607
+
608
+ ### Added
609
+ - **Security Check Scope Filtering** — Plan generates a Security Scope section in Specs; Check phase skips non-applicable SEC-* checks based on the scope table, reducing false positives for prompt-only changes (STORY-056)
610
+
611
+ ### Fixed
612
+ - **Routing Table Accuracy** — Split single "Embedded Skills" table into two: command-invoked (trace, release) and agent-only (draw, status, doctor, review, analyze); corrects 5 incorrect "Embedded In" claims (STORY-058)
613
+ - **Playbook Implicit Instructions** — Removed unverifiable Step 1.5 (Fast-Suite Shortcut) that referenced unobservable state; added explicit [High]/[Medium] signal labels to Clarify Gate ambiguity detection (STORY-057)
614
+ - **Version Sync on Init/Update** — `pactkit.yaml` version field now auto-syncs to `__version__` on every `pactkit init` and `pactkit update` (BUG-026)
615
+
616
+ ### Changed
617
+ - **Lesson Scoring Simplified** — Replaced 5-dimension scoring with 2-check gate for lesson quality evaluation in Done phase
618
+ - **CI Dependencies** — Bump actions/checkout from 4 to 6, actions/setup-python from 5 to 6
619
+
620
+ ## [1.5.0] - 2026-02-27
621
+
622
+ ### Added
623
+ - **PDCA Quality Gates** — Security checklist, lesson scoring threshold, and implementation steps table in Specs; `check.security_checklist` and `done.lesson_quality_threshold` config fields (STORY-055)
624
+ - **Deployment Completeness Audit** — E2E tests verify exact counts and names of deployed files using `VALID_*` set equality assertions (STORY-054)
625
+ - **Impact-Based Regression** — `visualize impact --entry <func>` traces callers via call graph for targeted test selection; `regression.strategy` and `regression.max_impact_tests` config (STORY-053)
626
+ - **Conditional GitHub Release** — `release.github_release` config enables/disables `gh release create` in release workflow (STORY-052)
627
+ - **PDCA Workflow Streamlining** — Split overloaded Done command into focused Done + Release + PR commands; `/project-release` re-promoted from skill to command (STORY-051)
628
+ - **Doc-Only Regression Shortcut** — Skip full test suite when only non-source files changed; `LANG_PROFILES[stack].source_dirs` classification (STORY-050)
629
+ - **Community Standards** — CODE_OF_CONDUCT.md, SECURITY.md, dependabot.yml with content-assertion tests (STORY-049)
630
+ - **Worktree Isolation for Sprint** — `isolation="worktree"` for subagent Sprint; merge/copy recovery instructions for Stage A/C (STORY-048)
631
+
632
+ ### Fixed
633
+ - **Stale project-release reference** — Updated stale-ref tests after re-promoting `/project-release` from skill to command (BUG-025)
634
+
635
+ ## [1.4.0] - 2026-02-26
636
+
637
+ ### Added
638
+ - **Spec Linter (Non-AI Structural Gate)** — `spec_linter.py` enforces 8 ERROR rules (metadata completeness, AC structure, Given/When/Then, no TBD release) and 4 WARN rules before any Act phase; Plan phase runs self-check after Spec generation; `pactkit spec-lint --all` for batch validation (STORY-042)
639
+ - **Active Clarify Gate** — Plan Phase 0.7 auto-detects ambiguous requirements using AMBIGUITY_SIGNALS checklist and generates structured questions (Scope/Users/Constraints/Scale/Edge Cases/Non-Goals); Greenfield projects force-trigger clarification; new `/project-clarify` standalone command (STORY-043)
640
+ - **Pre-Act Consistency Check** — Act Phase 0.6 advisory check cross-references Spec requirements with Board tasks and AC items with Test Case coverage; non-blocking with alignment matrix output; `pactkit-analyze` skill added (STORY-044)
641
+ - **Auto-PR Enhancement** — Done Phase 4.2 generates structured PR body from Spec/Board/test results with Summary, Changes, Acceptance Criteria checklist, and Test Results sections; user confirmation gate; gh CLI fallback (STORY-045)
642
+ - **Multi-Agent Compatibility Layer** — `generators/adapter.py` transforms Claude Code playbooks to Cursor (.mdc), GitHub Copilot (single file), and generic (.ai/) formats; `pactkit init/update --agent {claude,cursor,copilot,generic,all}` deploys to agent-specific directories (STORY-046)
643
+ - **Enterprise Configuration Flags** — `EnterpriseConfig` dataclass in `pactkit.yaml` supports `no_git`, `no_external`, `non_interactive`, `debug` fields; CLI flags `--no-git`, `--no-external`, `--non-interactive` override yaml config for air-gapped/CI environments (STORY-047)
644
+
645
+ ### Fixed
646
+ - **Spec Linter code-block false positive** — Section parser now strips fenced code blocks before heading detection; `## Section` inside ``` examples no longer shadows real sections
647
+
648
+ ## [1.3.1] - 2026-02-25
649
+
650
+ ### Fixed
651
+ - **Dynamic version in CLAUDE.md** — CLAUDE_MD_TEMPLATE now uses `__version__` instead of hardcoded "v23.0"; Docker validation confirms correct version display (BUG-018)
652
+ - **project-init CLI invocation** — `/project-init` now invokes `pactkit init` CLI for complete config generation instead of partial inline logic (BUG-017)
653
+
654
+ ## [1.3.0] - 2026-02-24
655
+
656
+ ### Added
657
+ - **Conditional CI/CD Pipeline Generation** — `ci.provider` config (github/gitlab/none) generates workflow files; disabled by default (STORY-025)
658
+ - **Conditional Issue Tracker Integration** — `issue_tracker.provider` config enables GitHub Issue creation in Plan and closure in Done; standalone Sprint Board preserved (STORY-026)
659
+ - **Safe Opt-in Hook Templates** — 3 hook templates (pre-commit lint, post-test coverage, pre-push check); command-type only, report-only (exit 0), disabled by default (STORY-027)
660
+ - **Context-Aware Rule Scoping** — `rule_scopes` config maps rule IDs to glob patterns; deployer prepends `includeFiles` frontmatter (STORY-028)
661
+ - **Enhanced Doctor Diagnostics** — Stale graph detection (7+ days), orphaned/missing spec detection, config drift detection, severity levels (INFO/WARN/ERROR) (STORY-029)
662
+ - **Smart Lint Integration** — `lint_blocking` and `auto_fix` config options for Done command; non-blocking warnings by default (STORY-030)
663
+ - **TDD Bailout Decision Tree** — Distinguish project-internal modules from third-party packages in autonomous Sprint mode (STORY-022)
664
+ - **Test Quality Gate** — QA check detects tautological and over-mocked tests that pass but verify nothing (STORY-023)
665
+ - **Native Agent Enhancement** — Smart model defaults (`inherit`), opt-in hooks, Memory MCP integration in agent frontmatter (STORY-024)
666
+ - **Use-case validation for marketplace deployment** — Validated 4 deployment personas (solo dev, team lead, open-source maintainer, enterprise) (STORY-031)
667
+ - **Marketplace integration testing** — End-to-end deployment verification for marketplace format with correct path rewriting (STORY-032)
668
+ - **Config auto-backfill for missing sections** — `auto_merge_config_file` handles both list-type and non-list sections; `_rewrite_yaml` writes all sections (STORY-033)
669
+ - **Auto-refresh pactkit.yaml in Plan Init Guard** — Plan Phase 0.5 checks config completeness and runs `pactkit update` before proceeding (STORY-034)
670
+ - **README and docs directory documentation** — Complete project structure section, pactkit.yaml configuration reference, all 9 skills listed (STORY-035)
671
+
672
+ ### Fixed
673
+ - **Read-only agent hooks removed** — Prompt hooks on qa-engineer, security-auditor, system-medic, code-explorer caused latency and infinite loop risk; tools/disallowedTools already enforce read-only constraint
674
+ - **Visualize excludes deployed directories** — `visualize` now excludes PactKit-deployed directories from graph generation to avoid pollution in marketplace mode (BUG-006)
675
+ - **Stale command references in prompt templates** — Comprehensive scan fixed 6 demoted command references across agents.py and skills.py (BUG-007, BUG-008)
676
+ - **Project-level config backfill** — `pactkit update` now backfills both global and project-level configs (BUG-009)
677
+ - **Config serialization data loss** — `_rewrite_yaml`, `generate_default_yaml`, and `_BACKFILL_KEYS` now stay in sync; `agent_models` and `rule_scopes` were validated but never serialized (BUG-010)
678
+ - **Stale command references in agent protocols** — Final sweep fixed 7 remaining demoted command references in agent protocol headers and skill Usage lines (BUG-011)
679
+ - **Call graph noise filter** — `_extract_calls` skips builtins and non-self attribute calls; `_build_call_graph` only emits edges where callees resolve to `func_registry` (BUG-012)
680
+ - **Single-source config consolidation** — Config now reads exclusively from `$CWD/.claude/pactkit.yaml`; removed dual-config architecture (BUG-013)
681
+ - **Version hygiene** — Unified 28 stale spec Release fields, 14 prompt template version labels, and 4 missing CHANGELOG entries; eliminated phantom versions 1.1.5 and 1.2.1 that were never released (BUG-014)
682
+
683
+ ## [1.1.4] - 2026-02-24
684
+
685
+ ### Added
686
+ - **CI lint gate** — Done and Act commands now run `lint_command` from `LANG_PROFILES` before commit, catching lint errors that CI would reject (STORY-015)
687
+ - **Language matching rule** — Core protocol now respects user's language in all PDCA output; project CLAUDE.md cleaned up to be instruction-focused (STORY-016)
688
+ - **Project CLAUDE.md generation** — `project-init` now scaffolds a project-level `.claude/CLAUDE.md` with architecture section, dev commands, and context.md reference (STORY-017)
689
+ - **Architecture docs staleness prevention** — Done command now verifies `system_design.mmd` component counts, refreshes `rules.md` test count, and checks release snapshots exist (STORY-018)
690
+
691
+ ### Fixed
692
+ - **project-init stack detection** — Remove non-standard `language` field from pactkit.yaml schema; constrain `stack` to valid values (`python|node|go|java`)
693
+ - **Version tests use dynamic assertions** — Release tests now read canonical version from `pyproject.toml` instead of hardcoding, preventing CI failures on every version bump
694
+
695
+ ## [1.1.3] - 2026-02-24
696
+
697
+ ### Fixed
698
+ - **Multi-import graph edges** — `_build_file_graph` now processes all aliases in `import a, b, c` statements and deduplicates edges (BUG-003)
699
+ - **Dead code in deployer** — Remove unused `set(enabled_rules)` no-op in `_deploy_rules` (BUG-004)
700
+ - **Archive guard for taskless stories** — `archive_stories` now requires at least one `[x]` task before archiving, aligning with `_classify_story` logic (BUG-005)
701
+
702
+ ## [1.1.2] - 2026-02-14
703
+
704
+ ### Fixed
705
+ - **Scripted skill paths** — Use absolute paths in SKILL.md prompts for scripted skills; the LLM runs bash from project cwd, not the skill base directory (BUG-001)
706
+ - **Plugin mode paths** — Deploy-time path rewriting for plugin/marketplace modes; templates stay canonical, deployer rewrites `~/.claude/skills` to `${CLAUDE_PLUGIN_ROOT}/skills` at write time (BUG-002)
707
+
708
+ ### Added
709
+ - **Draw.io MCP Integration** — `pactkit-draw` instant preview via `@drawio/mcp` when MCP server is available (STORY-013)
710
+
711
+ ### Changed
712
+ - **Commands → Skills migration** — Demoted 6 commands (trace, draw, status, doctor, review, release) to prompt-only skills; reduces command count from 14 to 8 (STORY-011)
713
+ - Lint fixes for CI compliance
714
+
715
+ ## [1.1.1] - 2026-02-13
716
+
717
+ ### Fixed
718
+ - Remove downloads badge — PyPI stats not yet indexed
719
+ - Remove unused import in test_pdca_slim
720
+
721
+ ### Changed
722
+ - Add governance rules and ignore playwright-mcp artifacts
723
+ - Sync pactkit.dev, GitHub metadata, and plugin to PDCA Slim architecture (STORY-012)
724
+
725
+ ## [1.1.0] - 2026-02-13
726
+
727
+ ### Added
728
+ - **Config Auto-Merge** — `pactkit init` now auto-appends new components to existing `pactkit.yaml`. Users can opt out via an `exclude` section. (STORY-009)
729
+ - **`/project-status`** — Cold-start project orientation command. Read-only report of sprint board, git state, and health indicators. (STORY-007)
730
+ - **Session Context Protocol** — `context.md` auto-generated by Done/Plan/Init commands for cross-session state awareness. (STORY-006)
731
+ - **Plugin & Marketplace Distribution** — `pactkit init --format plugin` and `--format marketplace` for self-contained distribution. (STORY-005)
732
+
733
+ ### Changed
734
+ - **Constitution Sharpening** — Removed pseudo-advantages that overlap with LLM native behavior (55% token reduction). Strengthened Hierarchy of Truth and TDD rules. (STORY-008)
735
+
736
+ ## [1.0.0] - 2026-02-01
737
+
738
+ ### Added
739
+ - Initial public release on PyPI
740
+ - 9 specialized agents, 13 commands, 3 skills, 6 constitution rules
741
+ - PDCA+ lifecycle: Plan, Act, Check, Done, Trace, Draw, Doctor, Sprint, Review, Hotfix, Release, Design
742
+ - `pactkit.yaml` config schema with load/validate/generate (STORY-001)
743
+ - Selective deployment filtered by config (STORY-002)
744
+ - Init Guard for project-plan and project-doctor (STORY-003)
745
+ - GitHub/PyPI visibility optimization (STORY-004)