pactkit 2.14.2__tar.gz → 2.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. {pactkit-2.14.2 → pactkit-2.15.0}/CHANGELOG.md +9 -0
  2. {pactkit-2.14.2 → pactkit-2.15.0}/PKG-INFO +21 -1
  3. {pactkit-2.14.2 → pactkit-2.15.0}/README.md +17 -0
  4. {pactkit-2.14.2 → pactkit-2.15.0}/pyproject.toml +5 -2
  5. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/__init__.py +1 -1
  6. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim010_dry_refactor.py +0 -31
  7. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim032.py +4 -0
  8. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim033.py +4 -0
  9. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim034.py +4 -0
  10. pactkit-2.14.2/.opencode/pactkit.yaml +0 -23
  11. {pactkit-2.14.2 → pactkit-2.15.0}/.codegraph/.gitignore +0 -0
  12. {pactkit-2.14.2 → pactkit-2.15.0}/.github/workflows/pactkit.yml +0 -0
  13. {pactkit-2.14.2 → pactkit-2.15.0}/.github/workflows/publish.yml +0 -0
  14. {pactkit-2.14.2 → pactkit-2.15.0}/.gitignore +0 -0
  15. {pactkit-2.14.2 → pactkit-2.15.0}/AGENTS.md +0 -0
  16. {pactkit-2.14.2 → pactkit-2.15.0}/CODE_OF_CONDUCT.md +0 -0
  17. {pactkit-2.14.2 → pactkit-2.15.0}/CONTRIBUTING.md +0 -0
  18. {pactkit-2.14.2 → pactkit-2.15.0}/LICENSE +0 -0
  19. {pactkit-2.14.2 → pactkit-2.15.0}/SECURITY.md +0 -0
  20. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
  21. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/archive/lessons_archive_202603.md +0 -0
  22. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/harness_audit.json +0 -0
  23. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/lessons.md +0 -0
  24. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/philosophy.md +0 -0
  25. {pactkit-2.14.2 → pactkit-2.15.0}/docs/architecture/governance/rules.md +0 -0
  26. {pactkit-2.14.2 → pactkit-2.15.0}/docs/assets/logo.png +0 -0
  27. {pactkit-2.14.2 → pactkit-2.15.0}/docs/e2e/journey.md +0 -0
  28. {pactkit-2.14.2 → pactkit-2.15.0}/docs/guides/codex-integration-preresearch.md +0 -0
  29. {pactkit-2.14.2 → pactkit-2.15.0}/docs/guides/tool-integration-checklist.md +0 -0
  30. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202602.md +0 -0
  31. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202603.md +0 -0
  32. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202604.md +0 -0
  33. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202605.md +0 -0
  34. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/archive/archive_202606.md +0 -0
  35. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/context.md +0 -0
  36. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/friction-log.md +0 -0
  37. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/prd.md +0 -0
  38. {pactkit-2.14.2 → pactkit-2.15.0}/docs/product/sprint_board.md +0 -0
  39. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-001.md +0 -0
  40. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-002.md +0 -0
  41. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-003.md +0 -0
  42. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-004.md +0 -0
  43. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-005.md +0 -0
  44. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-006.md +0 -0
  45. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-007.md +0 -0
  46. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-008.md +0 -0
  47. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-009.md +0 -0
  48. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-010.md +0 -0
  49. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-011.md +0 -0
  50. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-012.md +0 -0
  51. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-013.md +0 -0
  52. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-014.md +0 -0
  53. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-015.md +0 -0
  54. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-016.md +0 -0
  55. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-017.md +0 -0
  56. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-018.md +0 -0
  57. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-019.md +0 -0
  58. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-020.md +0 -0
  59. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-021.md +0 -0
  60. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-022.md +0 -0
  61. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-023.md +0 -0
  62. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-024.md +0 -0
  63. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-025.md +0 -0
  64. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-026.md +0 -0
  65. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-027.md +0 -0
  66. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-028.md +0 -0
  67. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-029.md +0 -0
  68. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-030.md +0 -0
  69. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-031.md +0 -0
  70. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-032.md +0 -0
  71. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-033.md +0 -0
  72. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-034.md +0 -0
  73. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-035.md +0 -0
  74. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-001.md +0 -0
  75. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-002.md +0 -0
  76. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-003.md +0 -0
  77. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-004.md +0 -0
  78. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-005.md +0 -0
  79. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-006.md +0 -0
  80. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-089.md +0 -0
  81. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/BUG-slim-107.md +0 -0
  82. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-023.md +0 -0
  83. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-049.md +0 -0
  84. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-050.md +0 -0
  85. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-051.md +0 -0
  86. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-052.md +0 -0
  87. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-061.md +0 -0
  88. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-062.md +0 -0
  89. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-067.md +0 -0
  90. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-069.md +0 -0
  91. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-070.md +0 -0
  92. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-085.md +0 -0
  93. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-087.md +0 -0
  94. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-096.md +0 -0
  95. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-099.md +0 -0
  96. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-107.md +0 -0
  97. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-117.md +0 -0
  98. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-122.md +0 -0
  99. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-123.md +0 -0
  100. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-126.md +0 -0
  101. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/HOTFIX-slim-127.md +0 -0
  102. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-001.md +0 -0
  103. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-002.md +0 -0
  104. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-003.md +0 -0
  105. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-004.md +0 -0
  106. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-005.md +0 -0
  107. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-006.md +0 -0
  108. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-007.md +0 -0
  109. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-008.md +0 -0
  110. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-009.md +0 -0
  111. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-010.md +0 -0
  112. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-011.md +0 -0
  113. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-012.md +0 -0
  114. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-013.md +0 -0
  115. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-014.md +0 -0
  116. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-015.md +0 -0
  117. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-016.md +0 -0
  118. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-017.md +0 -0
  119. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-018.md +0 -0
  120. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-019.md +0 -0
  121. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-020.md +0 -0
  122. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-021.md +0 -0
  123. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-022.md +0 -0
  124. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-023.md +0 -0
  125. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-024.md +0 -0
  126. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-025.md +0 -0
  127. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-026.md +0 -0
  128. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-027.md +0 -0
  129. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-028.md +0 -0
  130. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-029.md +0 -0
  131. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-030.md +0 -0
  132. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-031.md +0 -0
  133. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-032.md +0 -0
  134. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-033.md +0 -0
  135. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-034.md +0 -0
  136. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-035.md +0 -0
  137. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-036.md +0 -0
  138. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-037.md +0 -0
  139. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-038.md +0 -0
  140. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-039.md +0 -0
  141. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-040.md +0 -0
  142. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-041.md +0 -0
  143. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-042.md +0 -0
  144. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-043.md +0 -0
  145. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-044.md +0 -0
  146. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-045.md +0 -0
  147. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-046.md +0 -0
  148. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-047.md +0 -0
  149. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-048.md +0 -0
  150. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-049.md +0 -0
  151. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-050.md +0 -0
  152. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-051.md +0 -0
  153. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-052.md +0 -0
  154. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-053.md +0 -0
  155. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-054.md +0 -0
  156. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-055.md +0 -0
  157. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-056.md +0 -0
  158. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-057.md +0 -0
  159. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-058.md +0 -0
  160. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-059.md +0 -0
  161. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-060.md +0 -0
  162. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-061.md +0 -0
  163. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-062.md +0 -0
  164. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-063.md +0 -0
  165. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-064.md +0 -0
  166. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-065.md +0 -0
  167. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-069.md +0 -0
  168. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-070.md +0 -0
  169. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-071.md +0 -0
  170. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-072.md +0 -0
  171. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-073.md +0 -0
  172. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-001.md +0 -0
  173. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-005.md +0 -0
  174. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-006.md +0 -0
  175. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-007.md +0 -0
  176. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-009.md +0 -0
  177. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-010.md +0 -0
  178. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-011.md +0 -0
  179. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-012.md +0 -0
  180. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-013.md +0 -0
  181. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-014.md +0 -0
  182. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-015.md +0 -0
  183. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-016.md +0 -0
  184. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-017.md +0 -0
  185. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-018.md +0 -0
  186. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-019.md +0 -0
  187. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-020.md +0 -0
  188. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-021.md +0 -0
  189. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-022.md +0 -0
  190. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-023.md +0 -0
  191. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-024.md +0 -0
  192. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-028.md +0 -0
  193. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-029.md +0 -0
  194. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-030.md +0 -0
  195. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-031.md +0 -0
  196. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-032.md +0 -0
  197. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-033.md +0 -0
  198. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-034.md +0 -0
  199. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-035.md +0 -0
  200. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-036.md +0 -0
  201. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-037.md +0 -0
  202. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-038.md +0 -0
  203. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-039.md +0 -0
  204. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-040.md +0 -0
  205. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-041.md +0 -0
  206. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-042.md +0 -0
  207. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-043.md +0 -0
  208. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-044.md +0 -0
  209. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-045.md +0 -0
  210. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-046.md +0 -0
  211. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-047.md +0 -0
  212. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-048.md +0 -0
  213. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-049.md +0 -0
  214. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-050.md +0 -0
  215. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-051.md +0 -0
  216. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-052.md +0 -0
  217. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-053.md +0 -0
  218. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-054.md +0 -0
  219. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-055.md +0 -0
  220. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-056.md +0 -0
  221. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-057.md +0 -0
  222. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-058.md +0 -0
  223. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-059.md +0 -0
  224. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-060.md +0 -0
  225. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-063.md +0 -0
  226. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-066.md +0 -0
  227. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-067.md +0 -0
  228. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-068.md +0 -0
  229. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-069.md +0 -0
  230. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-070.md +0 -0
  231. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-071.md +0 -0
  232. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-072.md +0 -0
  233. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-073.md +0 -0
  234. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-074.md +0 -0
  235. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-075.md +0 -0
  236. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-076.md +0 -0
  237. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-077.md +0 -0
  238. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-078.md +0 -0
  239. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-079.md +0 -0
  240. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-080.md +0 -0
  241. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-081.md +0 -0
  242. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-082.md +0 -0
  243. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-083.md +0 -0
  244. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-084.md +0 -0
  245. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-086.md +0 -0
  246. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-088.md +0 -0
  247. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-089.md +0 -0
  248. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-090.md +0 -0
  249. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-091.md +0 -0
  250. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-092.md +0 -0
  251. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-093.md +0 -0
  252. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-094.md +0 -0
  253. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-095.md +0 -0
  254. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-097.md +0 -0
  255. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-098.md +0 -0
  256. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-099.md +0 -0
  257. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-100.md +0 -0
  258. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-101.md +0 -0
  259. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-102.md +0 -0
  260. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-103.md +0 -0
  261. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-104.md +0 -0
  262. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-105.md +0 -0
  263. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-106.md +0 -0
  264. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-107.md +0 -0
  265. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-108.md +0 -0
  266. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-109.md +0 -0
  267. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-110.md +0 -0
  268. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-111.md +0 -0
  269. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-112.md +0 -0
  270. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-113.md +0 -0
  271. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-114.md +0 -0
  272. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-115.md +0 -0
  273. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-116.md +0 -0
  274. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-118.md +0 -0
  275. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-119.md +0 -0
  276. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-120.md +0 -0
  277. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-121.md +0 -0
  278. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-124.md +0 -0
  279. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-125.md +0 -0
  280. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-126.md +0 -0
  281. {pactkit-2.14.2 → pactkit-2.15.0}/docs/specs/STORY-slim-127.md +0 -0
  282. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/BUG-001_case.md +0 -0
  283. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/BUG-002_case.md +0 -0
  284. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-028_case.md +0 -0
  285. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-029_case.md +0 -0
  286. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-031_case.md +0 -0
  287. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-032_case.md +0 -0
  288. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-033_case.md +0 -0
  289. {pactkit-2.14.2 → pactkit-2.15.0}/docs/test_cases/STORY-slim-034_case.md +0 -0
  290. {pactkit-2.14.2 → pactkit-2.15.0}/opencode.json +0 -0
  291. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/__main__.py +0 -0
  292. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/audit.py +0 -0
  293. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/backfill.py +0 -0
  294. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/cleaners.py +0 -0
  295. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/cli.py +0 -0
  296. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/config.py +0 -0
  297. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/context_gen.py +0 -0
  298. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/coverage_gate.py +0 -0
  299. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/doctor.py +0 -0
  300. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/garden.py +0 -0
  301. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/__init__.py +0 -0
  302. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/adapter.py +0 -0
  303. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/deploy_base.py +0 -0
  304. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/generators/deployer.py +0 -0
  305. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/guards.py +0 -0
  306. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/id_generator.py +0 -0
  307. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/invariants.py +0 -0
  308. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/issue_sync.py +0 -0
  309. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lazy_visualize.py +0 -0
  310. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lessons.py +0 -0
  311. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/lint_runner.py +0 -0
  312. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/observe.py +0 -0
  313. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/profiles.py +0 -0
  314. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/__init__.py +0 -0
  315. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/agents.py +0 -0
  316. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/commands.py +0 -0
  317. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/references.py +0 -0
  318. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/rules.py +0 -0
  319. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/skills.py +0 -0
  320. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/prompts/workflows.py +0 -0
  321. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/regression.py +0 -0
  322. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/schemas.py +0 -0
  323. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/scripts.py +0 -0
  324. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/sec_scope.py +0 -0
  325. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/__init__.py +0 -0
  326. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/__init__.py +0 -0
  327. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
  328. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
  329. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
  330. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
  331. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/board.py +0 -0
  332. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/interface_summary.py +0 -0
  333. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/report.py +0 -0
  334. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/scaffold.py +0 -0
  335. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/spec_linter.py +0 -0
  336. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/skills/visualize.py +0 -0
  337. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/spec_status.py +0 -0
  338. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/test_mapper.py +0 -0
  339. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/utils.py +0 -0
  340. {pactkit-2.14.2 → pactkit-2.15.0}/src/pactkit/validators.py +0 -0
  341. {pactkit-2.14.2 → pactkit-2.15.0}/tests/conftest.py +0 -0
  342. {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/__init__.py +0 -0
  343. {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/cli/__init__.py +0 -0
  344. {pactkit-2.14.2 → pactkit-2.15.0}/tests/e2e/cli/test_cli_e2e.py +0 -0
  345. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
  346. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
  347. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
  348. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
  349. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
  350. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
  351. {pactkit-2.14.2 → pactkit-2.15.0}/tests/fixtures/api_call_parser/page.tsx +0 -0
  352. {pactkit-2.14.2 → pactkit-2.15.0}/tests/integration/__init__.py +0 -0
  353. {pactkit-2.14.2 → pactkit-2.15.0}/tests/integration/test_deploy_classic.py +0 -0
  354. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agent_features.py +0 -0
  355. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agent_frontmatter.py +0 -0
  356. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_agents_enrichment.py +0 -0
  357. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_audit.py +0 -0
  358. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_blast_radius.py +0 -0
  359. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_board_bug027.py +0 -0
  360. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_board_sections.py +0 -0
  361. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug001_skill_path.py +0 -0
  362. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug002_plugin_paths.py +0 -0
  363. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug003_multi_import.py +0 -0
  364. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug004_dead_set.py +0 -0
  365. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug005_archive_taskless.py +0 -0
  366. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug006_scan_excludes.py +0 -0
  367. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
  368. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug008_stale_command_refs.py +0 -0
  369. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug009_project_config_backfill.py +0 -0
  370. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
  371. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug011_stale_refs.py +0 -0
  372. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug012_call_graph_filter.py +0 -0
  373. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug013_config_single_source.py +0 -0
  374. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug014_version_hygiene.py +0 -0
  375. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug017_project_init_playbook.py +0 -0
  376. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
  377. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug019_venv_deployment.py +0 -0
  378. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug020_claude_md_backup.py +0 -0
  379. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug025_release_delegation.py +0 -0
  380. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug026_version_sync.py +0 -0
  381. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug028_ghost_refs.py +0 -0
  382. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
  383. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
  384. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
  385. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
  386. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_021.py +0 -0
  387. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_022.py +0 -0
  388. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_023.py +0 -0
  389. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_024.py +0 -0
  390. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim001_env_detection.py +0 -0
  391. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
  392. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim003.py +0 -0
  393. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim004.py +0 -0
  394. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim005.py +0 -0
  395. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim006.py +0 -0
  396. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
  397. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_command.py +0 -0
  398. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_extensions_072_073.py +0 -0
  399. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_check_playbook_072_073.py +0 -0
  400. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_command_frontmatter.py +0 -0
  401. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_command_visualize_modes.py +0 -0
  402. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_complexity.py +0 -0
  403. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_config.py +0 -0
  404. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_config_auto_merge.py +0 -0
  405. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_constitution_sharpening.py +0 -0
  406. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_context_gen.py +0 -0
  407. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_create_skill.py +0 -0
  408. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_cross_flow_matrix.py +0 -0
  409. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deploy_base.py +0 -0
  410. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deployer_cleanup.py +0 -0
  411. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_deployer_plugin.py +0 -0
  412. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_design_command.py +0 -0
  413. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_done_gates.py +0 -0
  414. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_draw_prompt.py +0 -0
  415. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_draw_references.py +0 -0
  416. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_drawio_mcp.py +0 -0
  417. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_garden.py +0 -0
  418. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_home_path_fix.py +0 -0
  419. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_hotfix_command.py +0 -0
  420. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_init_guard.py +0 -0
  421. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_init_playbook_074.py +0 -0
  422. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_interface_summary.py +0 -0
  423. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_lang_profiles.py +0 -0
  424. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_layer_violations.py +0 -0
  425. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_lessons_rotation_075.py +0 -0
  426. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_list_stories.py +0 -0
  427. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_mcp_integration.py +0 -0
  428. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_model_config.py +0 -0
  429. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_modular_constitution.py +0 -0
  430. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_monorepo_detect.py +0 -0
  431. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_multi_prefix.py +0 -0
  432. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_observe.py +0 -0
  433. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_pdca_slim.py +0 -0
  434. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_profiles.py +0 -0
  435. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_project_visibility.py +0 -0
  436. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_cli_refs.py +0 -0
  437. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_quality_075.py +0 -0
  438. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompt_structural_invariants.py +0 -0
  439. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_prompts_package.py +0 -0
  440. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release.py +0 -0
  441. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release_field.py +0 -0
  442. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_release_v110.py +0 -0
  443. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_render_prompt.py +0 -0
  444. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_report_parser.py +0 -0
  445. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_report_unified.py +0 -0
  446. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_review_command.py +0 -0
  447. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_rules_enrichment.py +0 -0
  448. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_scaffold.py +0 -0
  449. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_scaffold_developer_prefix.py +0 -0
  450. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_schemas.py +0 -0
  451. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_script_extraction.py +0 -0
  452. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_selective_deploy.py +0 -0
  453. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_session_context.py +0 -0
  454. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_skill_structure.py +0 -0
  455. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_skills_enrichment.py +0 -0
  456. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_slim_deps_088.py +0 -0
  457. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_smart_regression.py +0 -0
  458. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_solution_design_rule.py +0 -0
  459. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_sprint_command.py +0 -0
  460. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_stack_references.py +0 -0
  461. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_status_command.py +0 -0
  462. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_statusline.py +0 -0
  463. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story014_release.py +0 -0
  464. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story015_ci_lint_gate.py +0 -0
  465. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story016_claude_md.py +0 -0
  466. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story017_init_claude_md.py +0 -0
  467. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story018_arch_staleness.py +0 -0
  468. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story019_bailout.py +0 -0
  469. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story020_horizon.py +0 -0
  470. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story021_rfc.py +0 -0
  471. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story022_decision_tree.py +0 -0
  472. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story023_test_quality.py +0 -0
  473. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story024_native_agent.py +0 -0
  474. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story025_ci_pipeline.py +0 -0
  475. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story026_issue_tracker.py +0 -0
  476. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story028_rule_scoping.py +0 -0
  477. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story029_doctor.py +0 -0
  478. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story030_lint.py +0 -0
  479. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story031_git_init_guard.py +0 -0
  480. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story032_greenfield_redirect.py +0 -0
  481. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story033_config_backfill.py +0 -0
  482. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story034_plan_config_refresh.py +0 -0
  483. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story035_readme_docs.py +0 -0
  484. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story037_regression_fix.py +0 -0
  485. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story038_call_graph_update.py +0 -0
  486. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story039_venv_config.py +0 -0
  487. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story040_layered_claude_md.py +0 -0
  488. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story042_spec_linter.py +0 -0
  489. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story043_active_clarify.py +0 -0
  490. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story044_consistency_check.py +0 -0
  491. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story045_auto_pr.py +0 -0
  492. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story046_agent_adapter.py +0 -0
  493. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story047_enterprise_flags.py +0 -0
  494. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story048_worktree_isolation.py +0 -0
  495. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story049_community_standards.py +0 -0
  496. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
  497. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story051_workflow_streamlining.py +0 -0
  498. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story052_conditional_github_release.py +0 -0
  499. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story053_impact_regression.py +0 -0
  500. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_commands.py +0 -0
  501. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_config.py +0 -0
  502. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story055_spec_linter.py +0 -0
  503. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story056_commands.py +0 -0
  504. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story056_config.py +0 -0
  505. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story057_implicit_cleanup.py +0 -0
  506. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story058_opencode_extraction.py +0 -0
  507. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story058_routing_fix.py +0 -0
  508. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story059_codex_removal.py +0 -0
  509. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story060_init_hang.py +0 -0
  510. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story061_remove_thinking.py +0 -0
  511. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story062_mcp_recommendations.py +0 -0
  512. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story063_prompt_slimming.py +0 -0
  513. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story064_venv_local_md.py +0 -0
  514. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story065_sprint_model.py +0 -0
  515. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story072_developer_prefix.py +0 -0
  516. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story106_lateral_scan.py +0 -0
  517. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
  518. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim011_command_rules.py +0 -0
  519. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim012_ci.py +0 -0
  520. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_clean.py +0 -0
  521. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_context.py +0 -0
  522. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_guard.py +0 -0
  523. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
  524. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_next_id.py +0 -0
  525. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_regression.py +0 -0
  526. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_sec_scope.py +0 -0
  527. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim014_validators.py +0 -0
  528. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim015_doctor.py +0 -0
  529. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
  530. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim017.py +0 -0
  531. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim018.py +0 -0
  532. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
  533. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
  534. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim021.py +0 -0
  535. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim022.py +0 -0
  536. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim023.py +0 -0
  537. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim024.py +0 -0
  538. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim025.py +0 -0
  539. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim026.py +0 -0
  540. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim027.py +0 -0
  541. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim028.py +0 -0
  542. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim029.py +0 -0
  543. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim030.py +0 -0
  544. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim031.py +0 -0
  545. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim035.py +0 -0
  546. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim036.py +0 -0
  547. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim037.py +0 -0
  548. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim038.py +0 -0
  549. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim039.py +0 -0
  550. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim040.py +0 -0
  551. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim041.py +0 -0
  552. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim042.py +0 -0
  553. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim043.py +0 -0
  554. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim044.py +0 -0
  555. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim045.py +0 -0
  556. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim046.py +0 -0
  557. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim047.py +0 -0
  558. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim048.py +0 -0
  559. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim049.py +0 -0
  560. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim051.py +0 -0
  561. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim052.py +0 -0
  562. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim053.py +0 -0
  563. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim054.py +0 -0
  564. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim055.py +0 -0
  565. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim056.py +0 -0
  566. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim060_codex_profile.py +0 -0
  567. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim063.py +0 -0
  568. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim065.py +0 -0
  569. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim076_multistack.py +0 -0
  570. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
  571. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim078.py +0 -0
  572. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim079.py +0 -0
  573. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim080.py +0 -0
  574. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim081.py +0 -0
  575. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim082.py +0 -0
  576. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim083.py +0 -0
  577. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim084.py +0 -0
  578. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim095.py +0 -0
  579. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
  580. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
  581. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim102_version_marker.py +0 -0
  582. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim104_should_semantics.py +0 -0
  583. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim107.py +0 -0
  584. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim109_journey_spec.py +0 -0
  585. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
  586. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim112_rules_split.py +0 -0
  587. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim114_journey_sync.py +0 -0
  588. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim119.py +0 -0
  589. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim120.py +0 -0
  590. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim121.py +0 -0
  591. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim125.py +0 -0
  592. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim126.py +0 -0
  593. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_story_slim127_managed_block.py +0 -0
  594. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_tools.py +0 -0
  595. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_topology_parsers_066.py +0 -0
  596. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_update_task.py +0 -0
  597. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_call_nested.py +0 -0
  598. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_chain_fix.py +0 -0
  599. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_modes.py +0 -0
  600. {pactkit-2.14.2 → pactkit-2.15.0}/tests/unit/test_visualize_multilang_chain.py +0 -0
@@ -4,6 +4,15 @@ All notable changes to PactKit will be documented in this file.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/).
6
6
 
7
+ ## [2.15.0] - 2026-06-04
8
+
9
+ ### Added
10
+ - **`lint` optional dependency group** — `pip install pactkit[lint]` now includes `ruff>=0.4`. The `all` extra also includes `lint`. Users no longer need to install ruff separately for the lint gate to work.
11
+ - **External tools documentation** — README and pactkit.dev installation pages now document recommended external tools (gh, codegraph) with install commands and fallback behavior.
12
+
13
+ ### Fixed
14
+ - **CI: tree-sitter tests skip when not installed** — `test_story_slim032`, `test_story_slim033`, `test_story_slim034` now use `pytest.importorskip("tree_sitter")` so they skip gracefully in CI environments without the `visualize` extra.
15
+
7
16
  ## [2.14.2] - 2026-06-01
8
17
 
9
18
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pactkit
3
- Version: 2.14.2
3
+ Version: 2.15.0
4
4
  Summary: Spec-driven agentic DevOps toolkit for AI coding assistants
5
5
  Project-URL: Homepage, https://pactkit.dev
6
6
  Project-URL: Repository, https://github.com/pactkit/pactkit-public
@@ -25,12 +25,15 @@ Requires-Dist: pyyaml>=6.0
25
25
  Provides-Extra: all
26
26
  Requires-Dist: pactkit-codex>=2.9.0; extra == 'all'
27
27
  Requires-Dist: pactkit-opencode>=2.9.0; extra == 'all'
28
+ Requires-Dist: ruff>=0.4; extra == 'all'
28
29
  Requires-Dist: tree-sitter-go>=0.25; extra == 'all'
29
30
  Requires-Dist: tree-sitter-java>=0.23; extra == 'all'
30
31
  Requires-Dist: tree-sitter-typescript>=0.23; extra == 'all'
31
32
  Requires-Dist: tree-sitter>=0.25; extra == 'all'
32
33
  Provides-Extra: codex
33
34
  Requires-Dist: pactkit-codex>=2.9.0; extra == 'codex'
35
+ Provides-Extra: lint
36
+ Requires-Dist: ruff>=0.4; extra == 'lint'
34
37
  Provides-Extra: opencode
35
38
  Requires-Dist: pactkit-opencode>=2.9.0; extra == 'opencode'
36
39
  Provides-Extra: visualize
@@ -117,6 +120,23 @@ Requires Python 3.10+ and one of:
117
120
 
118
121
  > `pip install pactkit` automatically installs adapters for all 3 IDEs.
119
122
 
123
+ ### Optional Extras
124
+
125
+ ```bash
126
+ pip install pactkit[lint] # Includes ruff for lint gate
127
+ pip install pactkit[visualize] # Includes tree-sitter for AST analysis
128
+ pip install pactkit[all] # Everything above + IDE adapters
129
+ ```
130
+
131
+ ### Recommended External Tools
132
+
133
+ These tools enhance PactKit but cannot be distributed via pip:
134
+
135
+ | Tool | Purpose | Install |
136
+ |------|---------|---------|
137
+ | [gh](https://cli.github.com) | GitHub CLI (issue sync, release, PR) | `brew install gh` |
138
+ | [codegraph](https://www.npmjs.com/package/codegraph) | Code symbol index & call chain analysis | `npm install -g codegraph` |
139
+
120
140
  ## Quick Start
121
141
 
122
142
  ```bash
@@ -75,6 +75,23 @@ Requires Python 3.10+ and one of:
75
75
 
76
76
  > `pip install pactkit` automatically installs adapters for all 3 IDEs.
77
77
 
78
+ ### Optional Extras
79
+
80
+ ```bash
81
+ pip install pactkit[lint] # Includes ruff for lint gate
82
+ pip install pactkit[visualize] # Includes tree-sitter for AST analysis
83
+ pip install pactkit[all] # Everything above + IDE adapters
84
+ ```
85
+
86
+ ### Recommended External Tools
87
+
88
+ These tools enhance PactKit but cannot be distributed via pip:
89
+
90
+ | Tool | Purpose | Install |
91
+ |------|---------|---------|
92
+ | [gh](https://cli.github.com) | GitHub CLI (issue sync, release, PR) | `brew install gh` |
93
+ | [codegraph](https://www.npmjs.com/package/codegraph) | Code symbol index & call chain analysis | `npm install -g codegraph` |
94
+
78
95
  ## Quick Start
79
96
 
80
97
  ```bash
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pactkit"
7
- version = "2.14.2"
7
+ version = "2.15.0"
8
8
  description = "Spec-driven agentic DevOps toolkit for AI coding assistants"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -62,8 +62,11 @@ visualize = [
62
62
  "tree-sitter-java>=0.23",
63
63
  "tree-sitter-typescript>=0.23",
64
64
  ]
65
+ lint = [
66
+ "ruff>=0.4",
67
+ ]
65
68
  all = [
66
- "pactkit[opencode,codex,visualize]",
69
+ "pactkit[opencode,codex,visualize,lint]",
67
70
  ]
68
71
 
69
72
  [tool.hatch.build.targets.wheel]
@@ -1,3 +1,3 @@
1
1
  """PactKit - Spec-driven agentic DevOps toolkit."""
2
2
 
3
- __version__ = "2.14.2"
3
+ __version__ = "2.15.0"
@@ -16,40 +16,9 @@ from pathlib import Path
16
16
  # ---------------------------------------------------------------------------
17
17
 
18
18
  PROJECT_ROOT = Path(__file__).resolve().parents[2]
19
- # Use .opencode/pactkit.yaml (tracked in git) for CI; .claude/ is gitignored
20
- OPENCODE_YAML = PROJECT_ROOT / ".opencode" / "pactkit.yaml"
21
- PYPROJECT = PROJECT_ROOT / "pyproject.toml"
22
19
  DEPLOYER = PROJECT_ROOT / "src" / "pactkit" / "generators" / "deployer.py"
23
20
 
24
21
 
25
- def _read_pyproject_version() -> str:
26
- for line in PYPROJECT.read_text().splitlines():
27
- if line.startswith("version"):
28
- return line.split("=")[1].strip().strip('"').strip("'")
29
- raise ValueError("version not found in pyproject.toml")
30
-
31
-
32
- # ---------------------------------------------------------------------------
33
- # AC1: Version Consistency
34
- # ---------------------------------------------------------------------------
35
-
36
-
37
- class TestAC1VersionSync:
38
- def test_opencode_yaml_exists(self):
39
- """AC1: .opencode/pactkit.yaml must exist (tracked in git for CI)."""
40
- assert OPENCODE_YAML.exists(), f"{OPENCODE_YAML} does not exist"
41
-
42
- def test_opencode_yaml_version_matches_pyproject(self):
43
- """AC1: .opencode/pactkit.yaml must NOT contain version (STORY-slim-102)."""
44
- import yaml
45
-
46
- data = yaml.safe_load(OPENCODE_YAML.read_text())
47
- # STORY-slim-102: version removed from project yaml, tracked via global marker
48
- assert "version" not in data, (
49
- f".opencode/pactkit.yaml should not have a version field; got keys: {list(data.keys())}"
50
- )
51
-
52
-
53
22
  # ---------------------------------------------------------------------------
54
23
  # AC2: _build_rule_id_to_key() helper
55
24
  # ---------------------------------------------------------------------------
@@ -13,6 +13,10 @@ Tests verify:
13
13
  import sys
14
14
  from pathlib import Path
15
15
 
16
+ import pytest
17
+
18
+ pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
19
+
16
20
  project_root = Path(__file__).resolve().parent.parent.parent
17
21
  if str(project_root) not in sys.path:
18
22
  sys.path.insert(0, str(project_root))
@@ -13,6 +13,10 @@ Tests verify:
13
13
  import sys
14
14
  from pathlib import Path
15
15
 
16
+ import pytest
17
+
18
+ pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
19
+
16
20
  project_root = Path(__file__).resolve().parent.parent.parent
17
21
  if str(project_root) not in sys.path:
18
22
  sys.path.insert(0, str(project_root))
@@ -3,6 +3,10 @@ import importlib.util
3
3
  import pathlib
4
4
  import textwrap
5
5
 
6
+ import pytest
7
+
8
+ pytest.importorskip("tree_sitter", reason="tree-sitter not installed (optional dep)")
9
+
6
10
  # Load visualize.py as standalone module
7
11
  _vis_path = pathlib.Path(__file__).resolve().parents[2] / "src" / "pactkit" / "skills" / "visualize.py"
8
12
  _spec = importlib.util.spec_from_file_location("visualize", _vis_path)
@@ -1,23 +0,0 @@
1
- # PactKit Configuration (OpenCode)
2
- # Only override non-default values. Absent keys = default (all enabled).
3
-
4
- stack: python
5
- developer: "slim"
6
-
7
- ci:
8
- provider: github
9
-
10
- issue_tracker:
11
- provider: github
12
-
13
- release:
14
- github_release: true
15
-
16
- visualize:
17
- graph_provider: codegraph
18
-
19
- agent_models:
20
- code-explorer: haiku
21
- product-designer: opus
22
- system-architect: opus
23
- system-medic: haiku
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes