pactkit 2.15.2__tar.gz → 2.16.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 (611) hide show
  1. {pactkit-2.15.2 → pactkit-2.16.0}/CHANGELOG.md +5 -0
  2. {pactkit-2.15.2 → pactkit-2.16.0}/PKG-INFO +1 -1
  3. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/archive/lessons_archive_202603.md +1 -0
  4. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/lessons.md +1 -1
  5. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/rules.md +1 -1
  6. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202607.md +7 -0
  7. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/context.md +3 -3
  8. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/sprint_board.md +0 -1
  9. pactkit-2.16.0/docs/specs/STORY-slim-133.md +152 -0
  10. {pactkit-2.15.2 → pactkit-2.16.0}/pyproject.toml +1 -1
  11. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/__init__.py +1 -1
  12. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/config.py +2 -0
  13. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/commands.py +2 -0
  14. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/rules.py +1 -0
  15. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/workflows.py +146 -0
  16. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_config.py +5 -5
  17. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_pdca_slim.py +10 -10
  18. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_prompt_structural_invariants.py +2 -2
  19. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_selective_deploy.py +6 -7
  20. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_status_command.py +2 -2
  21. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story063_prompt_slimming.py +2 -1
  22. pactkit-2.16.0/tests/unit/test_story133_debug_skill.py +35 -0
  23. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim063.py +1 -1
  24. {pactkit-2.15.2 → pactkit-2.16.0}/.codegraph/.gitignore +0 -0
  25. {pactkit-2.15.2 → pactkit-2.16.0}/.github/workflows/pactkit.yml +0 -0
  26. {pactkit-2.15.2 → pactkit-2.16.0}/.github/workflows/publish.yml +0 -0
  27. {pactkit-2.15.2 → pactkit-2.16.0}/.gitignore +0 -0
  28. {pactkit-2.15.2 → pactkit-2.16.0}/AGENTS.md +0 -0
  29. {pactkit-2.15.2 → pactkit-2.16.0}/CODE_OF_CONDUCT.md +0 -0
  30. {pactkit-2.15.2 → pactkit-2.16.0}/CONTRIBUTING.md +0 -0
  31. {pactkit-2.15.2 → pactkit-2.16.0}/LICENSE +0 -0
  32. {pactkit-2.15.2 → pactkit-2.16.0}/README.md +0 -0
  33. {pactkit-2.15.2 → pactkit-2.16.0}/SECURITY.md +0 -0
  34. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
  35. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/harness_audit.json +0 -0
  36. {pactkit-2.15.2 → pactkit-2.16.0}/docs/architecture/governance/philosophy.md +0 -0
  37. {pactkit-2.15.2 → pactkit-2.16.0}/docs/assets/logo.png +0 -0
  38. {pactkit-2.15.2 → pactkit-2.16.0}/docs/e2e/journey.md +0 -0
  39. {pactkit-2.15.2 → pactkit-2.16.0}/docs/guides/codex-integration-preresearch.md +0 -0
  40. {pactkit-2.15.2 → pactkit-2.16.0}/docs/guides/tool-integration-checklist.md +0 -0
  41. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202602.md +0 -0
  42. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202603.md +0 -0
  43. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202604.md +0 -0
  44. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202605.md +0 -0
  45. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/archive/archive_202606.md +0 -0
  46. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/friction-log.md +0 -0
  47. {pactkit-2.15.2 → pactkit-2.16.0}/docs/product/prd.md +0 -0
  48. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-001.md +0 -0
  49. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-002.md +0 -0
  50. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-003.md +0 -0
  51. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-004.md +0 -0
  52. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-005.md +0 -0
  53. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-006.md +0 -0
  54. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-007.md +0 -0
  55. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-008.md +0 -0
  56. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-009.md +0 -0
  57. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-010.md +0 -0
  58. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-011.md +0 -0
  59. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-012.md +0 -0
  60. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-013.md +0 -0
  61. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-014.md +0 -0
  62. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-015.md +0 -0
  63. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-016.md +0 -0
  64. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-017.md +0 -0
  65. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-018.md +0 -0
  66. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-019.md +0 -0
  67. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-020.md +0 -0
  68. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-021.md +0 -0
  69. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-022.md +0 -0
  70. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-023.md +0 -0
  71. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-024.md +0 -0
  72. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-025.md +0 -0
  73. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-026.md +0 -0
  74. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-027.md +0 -0
  75. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-028.md +0 -0
  76. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-029.md +0 -0
  77. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-030.md +0 -0
  78. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-031.md +0 -0
  79. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-032.md +0 -0
  80. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-033.md +0 -0
  81. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-034.md +0 -0
  82. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-035.md +0 -0
  83. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-001.md +0 -0
  84. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-002.md +0 -0
  85. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-003.md +0 -0
  86. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-004.md +0 -0
  87. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-005.md +0 -0
  88. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-006.md +0 -0
  89. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-089.md +0 -0
  90. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/BUG-slim-107.md +0 -0
  91. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-023.md +0 -0
  92. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-049.md +0 -0
  93. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-050.md +0 -0
  94. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-051.md +0 -0
  95. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-052.md +0 -0
  96. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-061.md +0 -0
  97. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-062.md +0 -0
  98. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-067.md +0 -0
  99. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-069.md +0 -0
  100. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-070.md +0 -0
  101. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-085.md +0 -0
  102. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-087.md +0 -0
  103. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-096.md +0 -0
  104. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-099.md +0 -0
  105. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-107.md +0 -0
  106. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-117.md +0 -0
  107. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-122.md +0 -0
  108. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-123.md +0 -0
  109. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-126.md +0 -0
  110. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-127.md +0 -0
  111. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-130.md +0 -0
  112. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-131.md +0 -0
  113. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/HOTFIX-slim-132.md +0 -0
  114. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-001.md +0 -0
  115. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-002.md +0 -0
  116. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-003.md +0 -0
  117. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-004.md +0 -0
  118. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-005.md +0 -0
  119. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-006.md +0 -0
  120. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-007.md +0 -0
  121. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-008.md +0 -0
  122. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-009.md +0 -0
  123. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-010.md +0 -0
  124. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-011.md +0 -0
  125. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-012.md +0 -0
  126. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-013.md +0 -0
  127. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-014.md +0 -0
  128. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-015.md +0 -0
  129. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-016.md +0 -0
  130. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-017.md +0 -0
  131. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-018.md +0 -0
  132. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-019.md +0 -0
  133. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-020.md +0 -0
  134. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-021.md +0 -0
  135. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-022.md +0 -0
  136. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-023.md +0 -0
  137. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-024.md +0 -0
  138. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-025.md +0 -0
  139. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-026.md +0 -0
  140. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-027.md +0 -0
  141. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-028.md +0 -0
  142. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-029.md +0 -0
  143. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-030.md +0 -0
  144. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-031.md +0 -0
  145. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-032.md +0 -0
  146. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-033.md +0 -0
  147. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-034.md +0 -0
  148. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-035.md +0 -0
  149. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-036.md +0 -0
  150. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-037.md +0 -0
  151. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-038.md +0 -0
  152. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-039.md +0 -0
  153. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-040.md +0 -0
  154. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-041.md +0 -0
  155. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-042.md +0 -0
  156. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-043.md +0 -0
  157. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-044.md +0 -0
  158. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-045.md +0 -0
  159. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-046.md +0 -0
  160. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-047.md +0 -0
  161. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-048.md +0 -0
  162. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-049.md +0 -0
  163. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-050.md +0 -0
  164. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-051.md +0 -0
  165. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-052.md +0 -0
  166. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-053.md +0 -0
  167. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-054.md +0 -0
  168. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-055.md +0 -0
  169. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-056.md +0 -0
  170. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-057.md +0 -0
  171. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-058.md +0 -0
  172. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-059.md +0 -0
  173. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-060.md +0 -0
  174. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-061.md +0 -0
  175. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-062.md +0 -0
  176. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-063.md +0 -0
  177. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-064.md +0 -0
  178. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-065.md +0 -0
  179. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-069.md +0 -0
  180. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-070.md +0 -0
  181. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-071.md +0 -0
  182. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-072.md +0 -0
  183. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-073.md +0 -0
  184. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-001.md +0 -0
  185. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-005.md +0 -0
  186. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-006.md +0 -0
  187. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-007.md +0 -0
  188. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-009.md +0 -0
  189. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-010.md +0 -0
  190. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-011.md +0 -0
  191. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-012.md +0 -0
  192. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-013.md +0 -0
  193. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-014.md +0 -0
  194. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-015.md +0 -0
  195. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-016.md +0 -0
  196. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-017.md +0 -0
  197. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-018.md +0 -0
  198. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-019.md +0 -0
  199. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-020.md +0 -0
  200. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-021.md +0 -0
  201. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-022.md +0 -0
  202. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-023.md +0 -0
  203. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-024.md +0 -0
  204. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-028.md +0 -0
  205. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-029.md +0 -0
  206. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-030.md +0 -0
  207. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-031.md +0 -0
  208. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-032.md +0 -0
  209. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-033.md +0 -0
  210. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-034.md +0 -0
  211. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-035.md +0 -0
  212. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-036.md +0 -0
  213. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-037.md +0 -0
  214. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-038.md +0 -0
  215. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-039.md +0 -0
  216. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-040.md +0 -0
  217. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-041.md +0 -0
  218. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-042.md +0 -0
  219. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-043.md +0 -0
  220. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-044.md +0 -0
  221. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-045.md +0 -0
  222. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-046.md +0 -0
  223. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-047.md +0 -0
  224. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-048.md +0 -0
  225. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-049.md +0 -0
  226. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-050.md +0 -0
  227. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-051.md +0 -0
  228. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-052.md +0 -0
  229. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-053.md +0 -0
  230. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-054.md +0 -0
  231. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-055.md +0 -0
  232. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-056.md +0 -0
  233. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-057.md +0 -0
  234. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-058.md +0 -0
  235. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-059.md +0 -0
  236. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-060.md +0 -0
  237. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-063.md +0 -0
  238. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-066.md +0 -0
  239. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-067.md +0 -0
  240. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-068.md +0 -0
  241. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-069.md +0 -0
  242. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-070.md +0 -0
  243. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-071.md +0 -0
  244. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-072.md +0 -0
  245. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-073.md +0 -0
  246. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-074.md +0 -0
  247. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-075.md +0 -0
  248. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-076.md +0 -0
  249. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-077.md +0 -0
  250. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-078.md +0 -0
  251. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-079.md +0 -0
  252. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-080.md +0 -0
  253. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-081.md +0 -0
  254. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-082.md +0 -0
  255. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-083.md +0 -0
  256. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-084.md +0 -0
  257. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-086.md +0 -0
  258. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-088.md +0 -0
  259. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-089.md +0 -0
  260. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-090.md +0 -0
  261. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-091.md +0 -0
  262. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-092.md +0 -0
  263. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-093.md +0 -0
  264. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-094.md +0 -0
  265. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-095.md +0 -0
  266. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-097.md +0 -0
  267. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-098.md +0 -0
  268. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-099.md +0 -0
  269. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-100.md +0 -0
  270. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-101.md +0 -0
  271. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-102.md +0 -0
  272. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-103.md +0 -0
  273. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-104.md +0 -0
  274. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-105.md +0 -0
  275. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-106.md +0 -0
  276. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-107.md +0 -0
  277. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-108.md +0 -0
  278. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-109.md +0 -0
  279. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-110.md +0 -0
  280. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-111.md +0 -0
  281. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-112.md +0 -0
  282. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-113.md +0 -0
  283. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-114.md +0 -0
  284. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-115.md +0 -0
  285. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-116.md +0 -0
  286. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-118.md +0 -0
  287. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-119.md +0 -0
  288. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-120.md +0 -0
  289. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-121.md +0 -0
  290. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-124.md +0 -0
  291. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-125.md +0 -0
  292. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-126.md +0 -0
  293. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-127.md +0 -0
  294. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-128.md +0 -0
  295. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-129.md +0 -0
  296. {pactkit-2.15.2 → pactkit-2.16.0}/docs/specs/STORY-slim-132.md +0 -0
  297. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/BUG-001_case.md +0 -0
  298. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/BUG-002_case.md +0 -0
  299. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-028_case.md +0 -0
  300. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-029_case.md +0 -0
  301. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-031_case.md +0 -0
  302. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-032_case.md +0 -0
  303. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-033_case.md +0 -0
  304. {pactkit-2.15.2 → pactkit-2.16.0}/docs/test_cases/STORY-slim-034_case.md +0 -0
  305. {pactkit-2.15.2 → pactkit-2.16.0}/opencode.json +0 -0
  306. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/__main__.py +0 -0
  307. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/audit.py +0 -0
  308. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/backfill.py +0 -0
  309. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/cleaners.py +0 -0
  310. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/cli.py +0 -0
  311. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/context_gen.py +0 -0
  312. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/coverage_gate.py +0 -0
  313. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/doctor.py +0 -0
  314. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/garden.py +0 -0
  315. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/generators/__init__.py +0 -0
  316. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/generators/adapter.py +0 -0
  317. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/generators/deploy_base.py +0 -0
  318. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/generators/deployer.py +0 -0
  319. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/guards.py +0 -0
  320. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/id_generator.py +0 -0
  321. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/invariants.py +0 -0
  322. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/issue_sync.py +0 -0
  323. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/lazy_visualize.py +0 -0
  324. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/lessons.py +0 -0
  325. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/lint_runner.py +0 -0
  326. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/observe.py +0 -0
  327. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/profiles.py +0 -0
  328. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/__init__.py +0 -0
  329. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/agents.py +0 -0
  330. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/guides.py +0 -0
  331. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/references.py +0 -0
  332. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/prompts/skills.py +0 -0
  333. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/regression.py +0 -0
  334. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/schemas.py +0 -0
  335. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/scripts.py +0 -0
  336. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/sec_scope.py +0 -0
  337. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/__init__.py +0 -0
  338. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/analyzers/__init__.py +0 -0
  339. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
  340. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
  341. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
  342. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
  343. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/board.py +0 -0
  344. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/interface_summary.py +0 -0
  345. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/report.py +0 -0
  346. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/scaffold.py +0 -0
  347. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/spec_linter.py +0 -0
  348. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/skills/visualize.py +0 -0
  349. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/spec_status.py +0 -0
  350. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/test_mapper.py +0 -0
  351. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/utils.py +0 -0
  352. {pactkit-2.15.2 → pactkit-2.16.0}/src/pactkit/validators.py +0 -0
  353. {pactkit-2.15.2 → pactkit-2.16.0}/tests/conftest.py +0 -0
  354. {pactkit-2.15.2 → pactkit-2.16.0}/tests/e2e/__init__.py +0 -0
  355. {pactkit-2.15.2 → pactkit-2.16.0}/tests/e2e/cli/__init__.py +0 -0
  356. {pactkit-2.15.2 → pactkit-2.16.0}/tests/e2e/cli/test_cli_e2e.py +0 -0
  357. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
  358. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
  359. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
  360. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
  361. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
  362. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
  363. {pactkit-2.15.2 → pactkit-2.16.0}/tests/fixtures/api_call_parser/page.tsx +0 -0
  364. {pactkit-2.15.2 → pactkit-2.16.0}/tests/integration/__init__.py +0 -0
  365. {pactkit-2.15.2 → pactkit-2.16.0}/tests/integration/test_deploy_classic.py +0 -0
  366. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_agent_features.py +0 -0
  367. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_agent_frontmatter.py +0 -0
  368. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_agents_enrichment.py +0 -0
  369. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_audit.py +0 -0
  370. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_blast_radius.py +0 -0
  371. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_board_bug027.py +0 -0
  372. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_board_sections.py +0 -0
  373. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug001_skill_path.py +0 -0
  374. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug002_plugin_paths.py +0 -0
  375. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug003_multi_import.py +0 -0
  376. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug004_dead_set.py +0 -0
  377. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug005_archive_taskless.py +0 -0
  378. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug006_scan_excludes.py +0 -0
  379. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
  380. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug008_stale_command_refs.py +0 -0
  381. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug009_project_config_backfill.py +0 -0
  382. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
  383. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug011_stale_refs.py +0 -0
  384. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug012_call_graph_filter.py +0 -0
  385. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug013_config_single_source.py +0 -0
  386. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug014_version_hygiene.py +0 -0
  387. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug017_project_init_playbook.py +0 -0
  388. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
  389. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug019_venv_deployment.py +0 -0
  390. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug020_claude_md_backup.py +0 -0
  391. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug025_release_delegation.py +0 -0
  392. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug026_version_sync.py +0 -0
  393. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug028_ghost_refs.py +0 -0
  394. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
  395. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
  396. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
  397. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
  398. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_021.py +0 -0
  399. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_022.py +0 -0
  400. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_023.py +0 -0
  401. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_024.py +0 -0
  402. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim001_env_detection.py +0 -0
  403. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
  404. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim003.py +0 -0
  405. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim004.py +0 -0
  406. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim005.py +0 -0
  407. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim006.py +0 -0
  408. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
  409. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_check_command.py +0 -0
  410. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_check_extensions_072_073.py +0 -0
  411. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_check_playbook_072_073.py +0 -0
  412. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_command_frontmatter.py +0 -0
  413. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_command_visualize_modes.py +0 -0
  414. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_complexity.py +0 -0
  415. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_config_auto_merge.py +0 -0
  416. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_constitution_sharpening.py +0 -0
  417. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_context_gen.py +0 -0
  418. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_create_skill.py +0 -0
  419. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_cross_flow_matrix.py +0 -0
  420. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_deploy_base.py +0 -0
  421. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_deployer_cleanup.py +0 -0
  422. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_deployer_plugin.py +0 -0
  423. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_design_command.py +0 -0
  424. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_done_gates.py +0 -0
  425. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_draw_prompt.py +0 -0
  426. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_draw_references.py +0 -0
  427. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_drawio_mcp.py +0 -0
  428. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_garden.py +0 -0
  429. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_home_path_fix.py +0 -0
  430. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_hotfix_command.py +0 -0
  431. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_init_guard.py +0 -0
  432. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_init_playbook_074.py +0 -0
  433. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_interface_summary.py +0 -0
  434. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_lang_profiles.py +0 -0
  435. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_layer_violations.py +0 -0
  436. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_lessons_rotation_075.py +0 -0
  437. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_list_stories.py +0 -0
  438. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_mcp_integration.py +0 -0
  439. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_model_config.py +0 -0
  440. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_modular_constitution.py +0 -0
  441. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_monorepo_detect.py +0 -0
  442. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_multi_prefix.py +0 -0
  443. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_observe.py +0 -0
  444. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_profiles.py +0 -0
  445. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_project_visibility.py +0 -0
  446. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_prompt_cli_refs.py +0 -0
  447. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_prompt_quality_075.py +0 -0
  448. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_prompts_package.py +0 -0
  449. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_release.py +0 -0
  450. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_release_field.py +0 -0
  451. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_release_v110.py +0 -0
  452. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_render_prompt.py +0 -0
  453. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_report_parser.py +0 -0
  454. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_report_unified.py +0 -0
  455. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_review_command.py +0 -0
  456. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_rules_enrichment.py +0 -0
  457. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_scaffold.py +0 -0
  458. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_scaffold_developer_prefix.py +0 -0
  459. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_schemas.py +0 -0
  460. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_script_extraction.py +0 -0
  461. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_session_context.py +0 -0
  462. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_skill_structure.py +0 -0
  463. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_skills_enrichment.py +0 -0
  464. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_slim_deps_088.py +0 -0
  465. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_smart_regression.py +0 -0
  466. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_solution_design_rule.py +0 -0
  467. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_sprint_command.py +0 -0
  468. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_stack_references.py +0 -0
  469. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_statusline.py +0 -0
  470. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story014_release.py +0 -0
  471. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story015_ci_lint_gate.py +0 -0
  472. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story016_claude_md.py +0 -0
  473. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story017_init_claude_md.py +0 -0
  474. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story018_arch_staleness.py +0 -0
  475. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story019_bailout.py +0 -0
  476. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story020_horizon.py +0 -0
  477. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story021_rfc.py +0 -0
  478. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story022_decision_tree.py +0 -0
  479. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story023_test_quality.py +0 -0
  480. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story024_native_agent.py +0 -0
  481. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story025_ci_pipeline.py +0 -0
  482. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story026_issue_tracker.py +0 -0
  483. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story028_rule_scoping.py +0 -0
  484. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story029_doctor.py +0 -0
  485. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story030_lint.py +0 -0
  486. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story031_git_init_guard.py +0 -0
  487. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story032_greenfield_redirect.py +0 -0
  488. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story033_config_backfill.py +0 -0
  489. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story034_plan_config_refresh.py +0 -0
  490. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story035_readme_docs.py +0 -0
  491. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story037_regression_fix.py +0 -0
  492. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story038_call_graph_update.py +0 -0
  493. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story039_venv_config.py +0 -0
  494. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story040_layered_claude_md.py +0 -0
  495. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story042_spec_linter.py +0 -0
  496. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story043_active_clarify.py +0 -0
  497. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story044_consistency_check.py +0 -0
  498. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story045_auto_pr.py +0 -0
  499. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story046_agent_adapter.py +0 -0
  500. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story047_enterprise_flags.py +0 -0
  501. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story048_worktree_isolation.py +0 -0
  502. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story049_community_standards.py +0 -0
  503. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
  504. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story051_workflow_streamlining.py +0 -0
  505. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story052_conditional_github_release.py +0 -0
  506. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story053_impact_regression.py +0 -0
  507. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story055_commands.py +0 -0
  508. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story055_config.py +0 -0
  509. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story055_spec_linter.py +0 -0
  510. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story056_commands.py +0 -0
  511. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story056_config.py +0 -0
  512. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story057_implicit_cleanup.py +0 -0
  513. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story058_opencode_extraction.py +0 -0
  514. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story058_routing_fix.py +0 -0
  515. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story059_codex_removal.py +0 -0
  516. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story060_init_hang.py +0 -0
  517. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story061_remove_thinking.py +0 -0
  518. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story062_mcp_recommendations.py +0 -0
  519. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story064_venv_local_md.py +0 -0
  520. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story065_sprint_model.py +0 -0
  521. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story072_developer_prefix.py +0 -0
  522. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story106_lateral_scan.py +0 -0
  523. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
  524. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
  525. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim011_command_rules.py +0 -0
  526. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim012_ci.py +0 -0
  527. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_clean.py +0 -0
  528. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_context.py +0 -0
  529. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_guard.py +0 -0
  530. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
  531. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_next_id.py +0 -0
  532. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_regression.py +0 -0
  533. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_sec_scope.py +0 -0
  534. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim014_validators.py +0 -0
  535. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim015_doctor.py +0 -0
  536. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
  537. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim017.py +0 -0
  538. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim018.py +0 -0
  539. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
  540. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
  541. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim021.py +0 -0
  542. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim022.py +0 -0
  543. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim023.py +0 -0
  544. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim024.py +0 -0
  545. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim025.py +0 -0
  546. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim026.py +0 -0
  547. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim027.py +0 -0
  548. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim028.py +0 -0
  549. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim029.py +0 -0
  550. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim030.py +0 -0
  551. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim031.py +0 -0
  552. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim032.py +0 -0
  553. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim033.py +0 -0
  554. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim034.py +0 -0
  555. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim035.py +0 -0
  556. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim036.py +0 -0
  557. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim037.py +0 -0
  558. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim038.py +0 -0
  559. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim039.py +0 -0
  560. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim040.py +0 -0
  561. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim041.py +0 -0
  562. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim042.py +0 -0
  563. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim043.py +0 -0
  564. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim044.py +0 -0
  565. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim045.py +0 -0
  566. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim046.py +0 -0
  567. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim047.py +0 -0
  568. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim048.py +0 -0
  569. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim049.py +0 -0
  570. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim051.py +0 -0
  571. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim052.py +0 -0
  572. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim053.py +0 -0
  573. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim054.py +0 -0
  574. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim055.py +0 -0
  575. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim056.py +0 -0
  576. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim060_codex_profile.py +0 -0
  577. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim065.py +0 -0
  578. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim076_multistack.py +0 -0
  579. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
  580. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim078.py +0 -0
  581. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim079.py +0 -0
  582. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim080.py +0 -0
  583. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim081.py +0 -0
  584. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim082.py +0 -0
  585. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim083.py +0 -0
  586. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim084.py +0 -0
  587. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim095.py +0 -0
  588. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
  589. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
  590. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim102_version_marker.py +0 -0
  591. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim104_should_semantics.py +0 -0
  592. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim107.py +0 -0
  593. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim109_journey_spec.py +0 -0
  594. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
  595. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim112_rules_split.py +0 -0
  596. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim114_journey_sync.py +0 -0
  597. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim119.py +0 -0
  598. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim120.py +0 -0
  599. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim121.py +0 -0
  600. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim125.py +0 -0
  601. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim126.py +0 -0
  602. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim127_managed_block.py +0 -0
  603. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim128_engineering_concerns.py +0 -0
  604. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_story_slim132.py +0 -0
  605. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_tools.py +0 -0
  606. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_topology_parsers_066.py +0 -0
  607. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_update_task.py +0 -0
  608. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_visualize_call_nested.py +0 -0
  609. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_visualize_chain_fix.py +0 -0
  610. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_visualize_modes.py +0 -0
  611. {pactkit-2.15.2 → pactkit-2.16.0}/tests/unit/test_visualize_multilang_chain.py +0 -0
@@ -4,6 +4,11 @@ All notable changes to PactKit will be documented in this file.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/).
6
6
 
7
+ ## [2.16.0] - 2026-07-13
8
+
9
+ ### Added
10
+ - **`/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.
11
+
7
12
  ## [2.15.2] - 2026-07-02
8
13
 
9
14
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pactkit
3
- Version: 2.15.2
3
+ Version: 2.16.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
@@ -66,3 +66,4 @@
66
66
  | 2026-03-26 | DeployerBase static methods use lazy imports to avoid circular dependencies between deploy_base.py and deployer.py | deploy_base.py:DeployerBase.render_prompt |
67
67
  | 2026-03-26 | Thin adapter conversion: pactkit-codex reduced from 15,356 lines (full fork) to 668 lines (thin adapter) by importing core via DeployerBase. Key: deploy_codex_playbooks needs explicit path replacement for ALL format prefixes (~/.claude/, ~/.config/opencode/ → ~/.codex/) | pactkit_codex/deployer.py:deploy_codex_playbooks |
68
68
  | 2026-03-27 | When migrating commands to skills (subdir/SKILL.md format), all path assertions in pre-existing tests must be updated in the same commit — 17 tests broke because they asserted flat commands/*.md paths | deployer.py:_deploy_commands |
69
+ | 2026-03-30 | Frontend API path convention bugs are structurally preventable: ApiCallParser+api_convention_summary in trace phase surfaces prefix/wrapper conventions before implementation, eliminating a class of copy-paste path errors | visualize.py:ApiCallParser |
@@ -2,7 +2,6 @@
2
2
 
3
3
  | Date | Lesson | Context |
4
4
  |------|--------|---------|
5
- | 2026-03-30 | Frontend API path convention bugs are structurally preventable: ApiCallParser+api_convention_summary in trace phase surfaces prefix/wrapper conventions before implementation, eliminating a class of copy-paste path errors | visualize.py:ApiCallParser |
6
5
  | 2026-03-31 | Rendering-only changes to visualize.py can be isolated by extracting a shared render helper (_render_nested_call_graph) that both forward and reverse BFS call — keeps AST parsing untouched | visualize.py:_render_nested_call_graph |
7
6
  | 2026-03-31 | dict.update() on call_edges causes last-wins overwrite when scanning same-name functions across files; use extend-merge pattern instead | visualize.py:_build_call_graph |
8
7
  | 2026-03-31 | CLI args must mirror visualize.py standalone argparse; feature implemented in visualize.py but not exposed in cli.py is effectively dead code | cli.py:viz_parser |
@@ -53,3 +52,4 @@
53
52
  | 2026-06-10 | Engineering guides are additive: new GUIDES_FILES entries auto-deploy via _deploy_guides() without deployer changes. Test impact limited to count assertions in test_story_slim128. | src/pactkit/prompts/guides.py:GUIDES_FILES |
54
53
  | 2026-06-29 | Large @inject rules (architecture 11KB, solution 8.4KB, engineering 4.3KB) removed from COMMAND_RULES_MAP — loaded on-demand via Read in playbooks. Saves ~12,500 tokens/PDCA session. | src/pactkit/prompts/rules.py:COMMAND_RULES_MAP |
55
54
  | 2026-07-02 | Hardcoding external tool CLI commands in SKILL_VISUALIZE_MD and deployer.py creates upgrade coupling — replaced with codegraph --help runtime discovery in _build_claude_md_managed_content() | src/pactkit/generators/deployer.py:_build_claude_md_managed_content |
55
+ | 2026-07-13 | Adding project-debug required updating VALID_COMMANDS in config.py, VALID_SKILLS, COMMANDS_CONTENT registration in commands.py, and COMMAND_RULES_MAP in rules.py — plus 6 test files with hardcoded count assertions | src/pactkit/config.py:VALID_COMMANDS, src/pactkit/prompts/rules.py:COMMAND_RULES_MAP |
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## Invariants
17
17
 
18
- 1. All 4032+ tests must pass before any commit to `main`.
18
+ 1. All 4037+ tests must pass before any commit to `main`.
19
19
  2. Specs (`docs/specs/`) are the source of truth — code conforms to specs, not the reverse.
20
20
  3. CLI entry point is `pactkit` via `src/pactkit/cli.py:main`.
21
21
  4. No runtime dependencies beyond `pyyaml`.
@@ -11,3 +11,10 @@
11
11
  > Spec: docs/specs/HOTFIX-slim-130.md
12
12
 
13
13
  - [x] Move @ references below YAML frontmatter block in all project-* skills
14
+
15
+ ### [STORY-slim-133] Structured Debug Skill (Hypothesis-Driven Troubleshooting)
16
+ > Spec: docs/specs/STORY-slim-133.md
17
+
18
+ - [x] Create SKILL.md protocol with all phases
19
+ - [x] Add to routing table in pactkit.md
20
+ - [x] Register in available-skills list
@@ -1,8 +1,8 @@
1
1
  # Project Context (Auto-generated)
2
- > Last updated: 2026-07-02T11:00:51+08:00 by pactkit context
2
+ > Last updated: 2026-07-13T17:51:18+08:00 by pactkit context
3
3
 
4
4
  ## Sprint Status
5
- Backlog: 4 | In Progress: 0 | Done: 0 stories
5
+ Backlog: 5 | In Progress: 0 | Done: 0 stories
6
6
 
7
7
  ## Current Stories
8
8
  None
@@ -16,11 +16,11 @@ None
16
16
  * main
17
17
 
18
18
  ## Key Decisions
19
- - codegraph sync must be enforced by code (pactkit visualize/sync), not by prompt instructions — prompt-only enforcement is unreliable for deterministic operations
20
19
  - Managed-block pattern (start/end markers + regex replace) is the canonical way to update mixed-ownership files — same pattern for CLAUDE.md and CLAUDE.local.md
21
20
  - Engineering guides are additive: new GUIDES_FILES entries auto-deploy via _deploy_guides() without deployer changes. Test impact limited to count assertions in test_story_slim128.
22
21
  - Large @inject rules (architecture 11KB, solution 8.4KB, engineering 4.3KB) removed from COMMAND_RULES_MAP — loaded on-demand via Read in playbooks. Saves ~12,500 tokens/PDCA session.
23
22
  - Hardcoding external tool CLI commands in SKILL_VISUALIZE_MD and deployer.py creates upgrade coupling — replaced with codegraph --help runtime discovery in _build_claude_md_managed_content()
23
+ - Adding project-debug required updating VALID_COMMANDS in config.py, VALID_SKILLS, COMMANDS_CONTENT registration in commands.py, and COMMAND_RULES_MAP in rules.py — plus 6 test files with hardcoded count assertions
24
24
 
25
25
  ## Next Recommended Action
26
26
  `/project-plan`
@@ -31,7 +31,6 @@
31
31
 
32
32
  - [ ] Fix _deploy_commands prepend order
33
33
 
34
-
35
34
  ### [HOTFIX-slim-132] Add explicit board.py move_story command to project-act
36
35
  > Spec: docs/specs/HOTFIX-slim-132.md
37
36
 
@@ -0,0 +1,152 @@
1
+ # STORY-slim-133: Structured Debug Skill with Hypothesis-Driven Troubleshooting
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | ID | STORY-slim-133 |
6
+ | Status | Done |
7
+ | Priority | P1 |
8
+ | Release | 2.16.0 |
9
+
10
+ ## Background
11
+
12
+ 当前 troubleshooting 流程存在两个核心问题:
13
+ 1. **假设发散不收敛** — AI 列出大量可能原因但不逐个验证排除,导致排查停滞
14
+ 2. **信息过载** — 漫无目的地 grep/read 大量文件,消耗 token 但不推进定位
15
+
16
+ 现有工具覆盖不了这个场景:
17
+ - `pactkit-trace` 是静态分析工具,前提是"已知要看哪里"
18
+ - `pactkit-doctor` 仅做项目健康检查
19
+ - `system-medic` 仅处理环境/配置问题
20
+ - `project-hotfix` 前提是"已定位到问题"
21
+
22
+ 需要一个**从症状到根因**的结构化排查 skill,强制走「假设→验证→缩小」循环,用 opus 模型的强推理能力替代漫无目的的搜索。
23
+
24
+ ## Requirements
25
+
26
+ ### R1: Hypothesis-Driven Loop (MUST)
27
+
28
+ Skill MUST enforce a structured loop: Observe → Hypothesize (≤3) → Verify (executable command per hypothesis) → Narrow. Each hypothesis MUST have a concrete verification step (a runnable command or code inspection with expected vs actual outcome). Skill MUST NOT proceed to the next hypothesis without executing verification on the current one first.
29
+
30
+ ### R2: Evidence-Gated File Access (MUST)
31
+
32
+ Every file read MUST be justified by a stated hypothesis or evidence trail. Skill MUST NOT read files "to get familiar with the codebase" or "to understand the context" without linking to a specific hypothesis being tested — violation of this produces the exact "查不到点子上" problem this skill solves.
33
+
34
+ ### R3: Structured Input Protocol (MUST)
35
+
36
+ Skill MUST provide a structured input template that minimizes user typing while capturing critical debugging info:
37
+ - **Symptom**: What's happening (error message, unexpected behavior)
38
+ - **Expected**: What should happen instead
39
+ - **Reproduction**: How to trigger it (command, URL, input)
40
+ - **Context**: What changed recently (optional)
41
+
42
+ When user provides raw text instead of structured input, skill MUST extract and organize into this structure before proceeding.
43
+
44
+ ### R4: Convergence Guarantee (MUST)
45
+
46
+ Each loop iteration MUST reduce the hypothesis space. If after 3 iterations no hypothesis is confirmed, skill MUST escalate:
47
+ - **Round 1 escalation**: ask user for more information (additional symptoms, reproduction steps)
48
+ - **Round 2 escalation (still stuck)**: nudge to `/project-plan` — "This looks like a cross-module issue that needs full architectural trace."
49
+
50
+ MUST NOT loop indefinitely on the same hypothesis set. The skill's job is fast triage, not deep surgery.
51
+
52
+ ### R5: Model Selection (MUST)
53
+
54
+ Skill MUST specify `model: sonnet` in SKILL.md frontmatter. Sonnet + structured protocol handles 80% of common bugs. For complex cross-module issues that don't converge, the escalation path is `/project-plan` (full PDCA with trace), not model upgrade.
55
+
56
+ ### R6: Concluding Report (MUST)
57
+
58
+ Upon locating root cause, skill MUST output a structured conclusion:
59
+ - **Root Cause**: One-sentence statement
60
+ - **Evidence**: The verification step that confirmed it
61
+ - **Fix Path**: Concrete next action (file:line to change, or command to run)
62
+ - **PDCA Nudge**: Recommend `/project-hotfix` or `/project-act` as appropriate
63
+
64
+ ### R7: Codegraph Integration (SHOULD)
65
+
66
+ If `.codegraph/` exists, skill SHOULD prefer codegraph for caller/callee analysis over grep during hypothesis verification. Fallback to grep when codegraph is unavailable.
67
+
68
+ ## Acceptance Criteria
69
+
70
+ ### AC1: Hypothesis Loop Enforced (R1, R4)
71
+
72
+ - **Given** user invokes `/project-debug "tests fail with KeyError on user_id"`
73
+ - **When** the skill starts processing
74
+ - **Then** it outputs: (1) structured symptom summary, (2) ≤3 ranked hypotheses each with a verification command, (3) executes verification commands in order, (4) narrows based on results, (5) converges to root cause within ≤5 iterations
75
+
76
+ ### AC2: No Aimless File Reading (R2)
77
+
78
+ - **Given** the skill is in a verification phase
79
+ - **When** it needs to read a file
80
+ - **Then** the read is preceded by a one-line justification linking to a hypothesis (e.g., "H2 verification: checking if `models.py:45` validates user_id before access")
81
+
82
+ ### AC3: Structured Input Extraction (R3)
83
+
84
+ - **Given** user provides unstructured text like "部署之后接口报500了"
85
+ - **When** the skill receives this input
86
+ - **Then** it extracts and formats into the 4-field template, asks for missing critical fields (Reproduction), and does NOT start hypothesizing until Symptom is clear
87
+
88
+ ### AC4: Convergence Escalation (R4)
89
+
90
+ - **Given** 3 iterations have passed without confirming a hypothesis
91
+ - **When** the skill enters the 4th iteration
92
+ - **Then** it asks user for more info; if still stuck after 1 more round, it nudges `/project-plan` with a summary of what was tried and ruled out
93
+
94
+ ### AC5: Sonnet Model with PDCA Escalation (R5)
95
+
96
+ - **Given** the SKILL.md file exists at `~/.claude/skills/project-debug/SKILL.md`
97
+ - **When** inspecting the frontmatter
98
+ - **Then** the `model` field is set to `sonnet`
99
+
100
+ ### AC6: Conclusion Report Format (R6)
101
+
102
+ - **Given** root cause has been identified through the verification loop
103
+ - **When** the skill outputs its conclusion
104
+ - **Then** it includes all 4 fields: Root Cause (one sentence), Evidence (which verification confirmed it), Fix Path (file:line or command), and PDCA Nudge (appropriate command recommendation)
105
+
106
+ ### AC7: Codegraph Preferred When Available (R7)
107
+
108
+ - **Given** the project has `.codegraph/` directory
109
+ - **When** the skill needs to trace callers/callees during verification
110
+ - **Then** it uses `codegraph` CLI instead of raw grep
111
+
112
+ ## Target Call Chain
113
+
114
+ ```
115
+ User invokes /project-debug "$symptom"
116
+ → SKILL.md protocol loaded (model: opus)
117
+ → Phase 1: Symptom Structuring (extract/confirm 4-field template)
118
+ → Phase 2: Hypothesis Generation (≤3, ranked by probability)
119
+ → Phase 3: Verification Loop (execute → observe → narrow)
120
+ └─ Loop until: root cause confirmed OR escalation triggered
121
+ → Phase 4: Conclusion Report (root cause + fix path + PDCA nudge)
122
+ ```
123
+
124
+ No code implementation needed — this is a pure SKILL.md protocol (prompt-as-code for diagnostic reasoning).
125
+
126
+ ## Implementation Steps
127
+
128
+ | Step | File | Action | Dependencies | Risk |
129
+ |------|------|--------|-------------|------|
130
+ | 1 | `~/.claude/skills/project-debug/SKILL.md` | Create skill protocol with all phases | None | Low |
131
+ | 2 | `~/.claude/rules/pactkit.md` | Add command to routing table | Step 1 | Low |
132
+ | 3 | Board | Register skill in available-skills | Step 1 | Low |
133
+
134
+ ## Security Scope
135
+
136
+ | Check | Applicable | Reason |
137
+ |-------|------------|--------|
138
+ | SEC-1 (Injection) | N/A | No user input passed to shell unsanitized — verification commands are AI-composed |
139
+ | SEC-2 (Auth) | N/A | No auth logic involved |
140
+ | SEC-3 (Data Exposure) | N/A | Reads local files only |
141
+ | SEC-4 (XSS) | N/A | No web output |
142
+ | SEC-5 (Config) | N/A | No config files modified |
143
+ | SEC-6 (Crypto) | N/A | No crypto involved |
144
+ | SEC-7 (Logging) | N/A | No logging changes |
145
+ | SEC-8 (SSRF) | N/A | No network requests |
146
+
147
+ ## Out of Scope
148
+
149
+ - 自动修复代码 — skill 仅定位问题,修复走 `/project-hotfix` 或 `/project-act`
150
+ - 环境/配置问题 — 已有 `system-medic` + `pactkit-doctor` 覆盖
151
+ - 性能分析 — 属于另一个专项 skill 的范畴
152
+ - CI/CD pipeline 问题 — 超出本地 debug 范围
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pactkit"
7
- version = "2.15.2"
7
+ version = "2.16.0"
8
8
  description = "Spec-driven agentic DevOps toolkit for AI coding assistants"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """PactKit - Spec-driven agentic DevOps toolkit."""
2
2
 
3
- __version__ = "2.15.2"
3
+ __version__ = "2.16.0"
@@ -40,6 +40,7 @@ VALID_COMMANDS = frozenset(
40
40
  "project-clarify",
41
41
  "project-release",
42
42
  "project-pr",
43
+ "project-debug",
43
44
  }
44
45
  )
45
46
 
@@ -71,6 +72,7 @@ VALID_SKILLS = frozenset(
71
72
  "project-clarify",
72
73
  "project-release",
73
74
  "project-pr",
75
+ "project-debug",
74
76
  }
75
77
  )
76
78
 
@@ -1,4 +1,5 @@
1
1
  from pactkit.prompts.workflows import (
2
+ DEBUG_PROMPT,
2
3
  DESIGN_PROMPT,
3
4
  HOTFIX_PROMPT,
4
5
  SPRINT_PROMPT,
@@ -868,3 +869,4 @@ model: sonnet
868
869
  COMMANDS_CONTENT["project-sprint.md"] = SPRINT_PROMPT
869
870
  COMMANDS_CONTENT["project-hotfix.md"] = HOTFIX_PROMPT
870
871
  COMMANDS_CONTENT["project-design.md"] = DESIGN_PROMPT
872
+ COMMANDS_CONTENT["project-debug.md"] = DEBUG_PROMPT
@@ -857,6 +857,7 @@ COMMAND_RULES_MAP = {
857
857
  "core", "sectional", "hierarchy", "atlas", "routing", "workflow",
858
858
  "mcp", "shared", "credential",
859
859
  ],
860
+ "project-debug": ["core", "shared", "credential"],
860
861
  }
861
862
 
862
863
  # Managed file prefixes for rules/ directory cleanup (deployer will clean these, leave user files intact)
@@ -804,3 +804,149 @@ Assign each Story to a horizon:
804
804
  - Does NOT enforce a specific tech stack — recommendations only, not mandates
805
805
  - Does NOT depend on WebSearch — works entirely from user input
806
806
  """
807
+
808
+ # ==============================================================================
809
+ # 5f. DEBUG PROMPT (STORY-slim-133)
810
+ # ==============================================================================
811
+ DEBUG_PROMPT = """---
812
+ description: "Hypothesis-driven troubleshooting: structured debug from symptom to root cause"
813
+ allowed-tools: [Read, Write, Edit, Bash, Glob, Grep]
814
+ model: sonnet
815
+ ---
816
+ @{{SKILLS_PREFIX}}_rules/03-shared-protocols.md
817
+
818
+
819
+ # Command: Debug (v1.0.0 Hypothesis-Driven)
820
+ - **Usage**: `/project-debug "$SYMPTOM"`
821
+ - **Agent**: Senior Developer
822
+
823
+ > **PRINCIPLE**: Debug by scientific method — not by reading everything.
824
+ > Every file read must be justified by a hypothesis. Every hypothesis must have a verification step.
825
+ > If 3 iterations don't converge, escalate to `/project-plan` for full architectural trace.
826
+
827
+ ## ⚠️ Scope of Application
828
+ - ✅ Runtime errors (exceptions, crashes, unexpected behavior)
829
+ - ✅ Test failures (assertion errors, unexpected output)
830
+ - ✅ Logic bugs ("code runs but result is wrong")
831
+ - ✅ Regression ("it worked before, now it doesn't")
832
+ - ❌ Environment/config issues → use `system-medic` + `pactkit-doctor`
833
+ - ❌ Performance issues → out of scope (different diagnostic approach)
834
+ - ❌ Feature design → use `/project-plan`
835
+
836
+ ## 🧠 Phase 1: Symptom Structuring
837
+ > **PURPOSE**: Minimize user input burden — extract structure from whatever they provide.
838
+
839
+ 1. **Parse Input**: Extract from `$SYMPTOM`:
840
+ - **Symptom**: What's happening? (error message, traceback, unexpected behavior)
841
+ - **Expected**: What should happen instead?
842
+ - **Reproduction**: How to trigger it? (command, input, URL)
843
+ - **Context**: What changed recently? (recent commit, deploy, dependency update)
844
+
845
+ 2. **If input is unstructured** (e.g., "接口报500了"):
846
+ - Extract what you can into the 4-field template
847
+ - Ask for **only** the critical missing field(s) — typically Reproduction
848
+ - Do NOT ask for all 4 fields if 2-3 are inferable
849
+
850
+ 3. **If reproduction command exists**: Run it to capture the actual error output.
851
+ - This is evidence, not exploration. The output feeds Phase 2.
852
+
853
+ 4. **Output checkpoint**:
854
+ ```
855
+ 📋 Symptom Summary:
856
+ - Symptom: {extracted}
857
+ - Expected: {extracted or "TBD"}
858
+ - Reproduction: {command or "need from user"}
859
+ - Context: {recent changes or "unknown"}
860
+ ```
861
+
862
+ ## 🔍 Phase 2: Hypothesis Generation
863
+ > **CONSTRAINT**: Maximum 3 hypotheses. Ranked by probability. Each MUST have a verification step.
864
+
865
+ 1. **Analyze signals** from Phase 1 output:
866
+ - Error type (KeyError → data shape; ImportError → dependency; AssertionError → logic)
867
+ - Stack trace location (if available)
868
+ - Recency of changes (if Context provided)
869
+
870
+ 2. **Generate ≤3 hypotheses**, format:
871
+ ```
872
+ H1 (probability%): {one-sentence hypothesis}
873
+ Verify: {executable command or specific file:line to check}
874
+ Expected if true: {what the verification would show}
875
+ Expected if false: {what it would show instead}
876
+
877
+ H2 (probability%): ...
878
+ H3 (probability%): ...
879
+ ```
880
+
881
+ 3. **Hypothesis quality rules**:
882
+ - Each hypothesis MUST be falsifiable (there must be a way to disprove it)
883
+ - Verification MUST be a concrete action (not "investigate further" or "look into")
884
+ - Probabilities must sum to ≤100% (leave room for unknown unknowns)
885
+
886
+ 4. **Codegraph Priority (R7)**: If `.codegraph/` exists, prefer codegraph for tracing:
887
+ - `codegraph callers <function>` over `grep -rn "function_name"`
888
+ - `codegraph callees <function>` for downstream impact
889
+ - Fallback to grep only if codegraph unavailable
890
+
891
+ ## 🔬 Phase 3: Verification Loop
892
+ > **CONSTRAINT**: One hypothesis at a time. Execute → Observe → Conclude before moving to next.
893
+
894
+ For each hypothesis (highest probability first):
895
+
896
+ 1. **Justify** (one line): "Testing H{N}: checking if {hypothesis} by {action}"
897
+ 2. **Execute**: Run the verification command or read the specific file:line
898
+ - **Evidence-Gated Read (R2)**: Every `Read` call MUST be preceded by:
899
+ `"H{N} verification: reading {file}:{line} to check {specific thing}"`
900
+ - MUST NOT read files "for context" or "to understand" without hypothesis link
901
+ 3. **Observe**: Record actual vs expected output
902
+ 4. **Conclude**:
903
+ - **Confirmed**: Evidence matches "expected if true" → proceed to Phase 4
904
+ - **Eliminated**: Evidence matches "expected if false" → mark H{N} as eliminated, proceed to next
905
+ - **Inconclusive**: Neither matches → refine hypothesis, re-verify once
906
+
907
+ 5. **After each iteration**: State remaining hypothesis space:
908
+ ```
909
+ ❌ H1: eliminated (reason)
910
+ 🔍 H2: testing next
911
+ ⏳ H3: pending
912
+ ```
913
+
914
+ ## 🚨 Phase 3.5: Convergence Escalation (R4)
915
+ > **TRIGGER**: All initial hypotheses eliminated OR 3 iterations without confirmation.
916
+
917
+ **Round 1 escalation**:
918
+ - All 3 hypotheses eliminated → generate 2 new hypotheses from a DIFFERENT angle:
919
+ - If initial hypotheses were "code logic" → try "data/state" angle
920
+ - If initial were "recent change" → try "upstream dependency" angle
921
+ - Ask user: "Initial hypotheses eliminated. Any additional symptoms or reproduction info?"
922
+
923
+ **Round 2 escalation** (still stuck after Round 1):
924
+ - Output summary of what was tried and ruled out
925
+ - Nudge: "This looks like a cross-module issue that needs full architectural trace."
926
+ - Recommend: `/project-plan "{problem summary}"` for deep analysis with pactkit-trace
927
+
928
+ ## ✅ Phase 4: Conclusion Report (R6)
929
+ > **TRIGGER**: A hypothesis is confirmed with evidence.
930
+
931
+ Output structured conclusion:
932
+ ```
933
+ 🎯 Root Cause
934
+ {One-sentence statement of what's wrong}
935
+
936
+ 📎 Evidence
937
+ {The verification step that confirmed it — command + output}
938
+
939
+ 🔧 Fix Path
940
+ {Concrete next action: file:line to change, or command to run}
941
+
942
+ 💡 Next Step
943
+ {PDCA nudge — recommend /project-hotfix for single-file fix, /project-act for multi-file}
944
+ ```
945
+
946
+ ## 🚫 What This Command Does NOT Do
947
+ - Does NOT fix the code — only locates the root cause
948
+ - Does NOT read files without justification — every read is hypothesis-linked
949
+ - Does NOT loop indefinitely — max 2 escalation rounds then hands off to /project-plan
950
+ - Does NOT replace /project-plan — it's fast triage, not deep architecture analysis
951
+ - Does NOT handle environment issues — those go to system-medic
952
+ """
@@ -38,15 +38,15 @@ class TestGetDefaultConfig:
38
38
  assert len(cfg["agents"]) == 9
39
39
 
40
40
  def test_default_commands_count(self):
41
- # STORY-051: added project-release and project-pr → 11 commands
41
+ # STORY-slim-133: added project-debug → 12 commands
42
42
  cfg = _config().get_default_config()
43
- assert len(cfg["commands"]) == 11
43
+ assert len(cfg["commands"]) == 12
44
44
 
45
45
  def test_default_skills_count(self):
46
- # STORY-slim-063: VALID_SKILLS now includes 11 commands migrated to skills/ subdirs
47
- # +pactkit-audit, +pactkit-report = 24 total
46
+ # STORY-slim-133: VALID_SKILLS now includes 12 commands migrated to skills/ subdirs
47
+ # +pactkit-audit, +pactkit-report = 25 total
48
48
  cfg = _config().get_default_config()
49
- assert len(cfg["skills"]) == 24
49
+ assert len(cfg["skills"]) == 25
50
50
 
51
51
  def test_default_rules_count(self):
52
52
  """8 rule modules (1 merged global + 7 on-demand, post STORY-slim-128)."""
@@ -47,8 +47,8 @@ class TestCommandReduction:
47
47
 
48
48
  def test_valid_commands_count(self):
49
49
  cfg = _config()
50
- # STORY-051 adds project-release and project-pr → 11 commands
51
- assert len(cfg.VALID_COMMANDS) == 11
50
+ # STORY-051 adds project-release and project-pr; STORY-slim-133 adds project-debug → 12 commands
51
+ assert len(cfg.VALID_COMMANDS) == 12
52
52
 
53
53
  def test_kept_commands_present(self):
54
54
  cfg = _config()
@@ -61,9 +61,9 @@ class TestCommandReduction:
61
61
  assert cmd not in cfg.VALID_COMMANDS, f"Should be removed: {cmd}"
62
62
 
63
63
  def test_commands_content_count(self):
64
- """STORY-051: COMMANDS_CONTENT should have 11 entries (added project-release, project-pr)."""
64
+ """STORY-051: COMMANDS_CONTENT should have 12 entries (added project-release, project-pr, project-debug)."""
65
65
  p = _prompts()
66
- assert len(p.COMMANDS_CONTENT) == 11
66
+ assert len(p.COMMANDS_CONTENT) == 12
67
67
 
68
68
  def test_removed_commands_not_in_content(self):
69
69
  p = _prompts()
@@ -97,9 +97,9 @@ class TestSkillPromotion:
97
97
  }
98
98
 
99
99
  def test_valid_skills_count(self):
100
- # +pactkit-audit, +pactkit-report = 24 total (13 embedded + 11 commands)
100
+ # +pactkit-audit, +pactkit-report = 25 total (13 embedded + 12 commands)
101
101
  cfg = _config()
102
- assert len(cfg.VALID_SKILLS) == 24
102
+ assert len(cfg.VALID_SKILLS) == 25
103
103
 
104
104
  def test_new_skills_present(self):
105
105
  cfg = _config()
@@ -137,16 +137,16 @@ class TestSkillPromotion:
137
137
  f"{var_name} should have YAML frontmatter"
138
138
 
139
139
  def test_default_config_has_10_skills(self):
140
- # +pactkit-audit, +pactkit-report = 24 total (13 embedded + 11 commands)
140
+ # +pactkit-audit, +pactkit-report = 25 total (13 embedded + 12 commands)
141
141
  cfg = _config()
142
142
  default = cfg.get_default_config()
143
- assert len(default['skills']) == 24
143
+ assert len(default['skills']) == 25
144
144
 
145
145
  def test_default_config_has_9_commands(self):
146
- """STORY-051: default config now has 11 commands (added project-release, project-pr)."""
146
+ """STORY-slim-133: default config now has 12 commands (added project-debug)."""
147
147
  cfg = _config()
148
148
  default = cfg.get_default_config()
149
- assert len(default['commands']) == 11
149
+ assert len(default['commands']) == 12
150
150
 
151
151
 
152
152
  # ===========================================================================
@@ -118,8 +118,8 @@ class TestPromptModuleCounts:
118
118
  assert len(prompts.RULES_MODULES) == 14
119
119
 
120
120
  def test_command_count(self):
121
- """STORY-051: Should have 11 command playbooks (added project-release, project-pr)."""
122
- assert len(prompts.COMMANDS_CONTENT) == 11
121
+ """STORY-slim-133: Should have 12 command playbooks (added project-debug)."""
122
+ assert len(prompts.COMMANDS_CONTENT) == 12
123
123
 
124
124
  def test_agent_count(self):
125
125
  """Should have 9 agent definitions."""
@@ -253,19 +253,18 @@ class TestConfigAutoGeneration:
253
253
 
254
254
  class TestDeploymentSummary:
255
255
  def test_summary_printed_full(self, tmp_path, capsys):
256
- # STORY-slim-063: summary format changed to unified Skills count
257
- # +pactkit-audit, +pactkit-report = 24 total (13 embedded + 11 commands)
256
+ # STORY-slim-133: 25 total (13 embedded + 12 commands)
258
257
  # Post STORY-slim-128: 8 rules (1 merged global + 7 on-demand)
259
258
  _run_deploy(tmp_path, config=get_default_config())
260
259
  output = capsys.readouterr().out
261
260
  assert "9/9 Agents" in output
262
- assert "24/24 Skills" in output
261
+ assert "25/25 Skills" in output
263
262
  assert "13 embedded" in output
264
- assert "11 commands" in output
263
+ assert "12 commands" in output
265
264
  assert "8/8 Rules" in output
266
265
 
267
266
  def test_summary_printed_partial(self, tmp_path, capsys):
268
- # +pactkit-audit, +pactkit-report = 24 total (13 embedded + 11 commands)
267
+ # STORY-slim-133: 25 total (13 embedded + 12 commands)
269
268
  cfg = get_default_config()
270
269
  cfg["agents"] = ["system-architect", "senior-developer"]
271
270
  cfg["commands"] = ["project-plan", "project-act", "project-done"]
@@ -273,8 +272,8 @@ class TestDeploymentSummary:
273
272
  _run_deploy(tmp_path, config=cfg)
274
273
  output = capsys.readouterr().out
275
274
  assert "2/9 Agents" in output
276
- # 13 embedded skills + 3 commands = 16 total skills deployed out of 24
277
- assert "16/24 Skills" in output
275
+ # 13 embedded skills + 3 commands = 16 total skills deployed out of 25
276
+ assert "16/25 Skills" in output
278
277
 
279
278
 
280
279
  # ===========================================================================
@@ -158,6 +158,6 @@ class TestBackwardCompatibility:
158
158
  assert cmd in p.COMMANDS_CONTENT, f"Missing {cmd}"
159
159
 
160
160
  def test_total_command_count(self):
161
- """STORY-051: 11 commands total (added project-release, project-pr)."""
161
+ """STORY-slim-133: 12 commands total (added project-debug)."""
162
162
  cfg = _config()
163
- assert len(cfg.VALID_COMMANDS) == 11
163
+ assert len(cfg.VALID_COMMANDS) == 12
@@ -215,7 +215,8 @@ class TestAC6DevRefGhostResolved:
215
215
  # HOTFIX-slim-127: bumped +280 for codegraph sync in Done Phase 2 + Hotfix Phase 3.6
216
216
  # STORY-slim-128: bumped +1650 for Engineering Concerns phases in Plan Phase 2 + Act Phase 1.5
217
217
  # Context slim: +170 for explicit {SKILLS_ROOT}/_rules/ paths in on-demand Read references
218
- BASELINE_TOTAL_CHARS = 92264
218
+ # STORY-slim-133: bumped +8000 for new project-debug command (~4.5K chars, headroom for iteration)
219
+ BASELINE_TOTAL_CHARS = 100264
219
220
 
220
221
 
221
222
  class TestAC7PromptSizeReduced:
@@ -0,0 +1,35 @@
1
+ """STORY-slim-133: project-debug skill registration and deployment.
2
+
3
+ Tests verify that:
4
+ - project-debug is registered in VALID_COMMANDS (TC-1)
5
+ - project-debug SKILL.md source template exists in deployer (TC-2)
6
+ - Deployed SKILL.md contains required frontmatter (TC-3)
7
+ """
8
+ from pactkit.config import VALID_COMMANDS
9
+ from pactkit.generators.deployer import _deploy_commands
10
+
11
+
12
+ class TestDebugSkillRegistered:
13
+ """TC-1: project-debug is in VALID_COMMANDS."""
14
+
15
+ def test_project_debug_in_valid_commands(self):
16
+ assert "project-debug" in VALID_COMMANDS
17
+
18
+
19
+ class TestDebugSkillDeploys:
20
+ """TC-2/TC-3: project-debug deploys with correct frontmatter."""
21
+
22
+ def test_deploy_creates_debug_skill(self, tmp_path):
23
+ commands_dir = tmp_path / "commands"
24
+ commands_dir.mkdir()
25
+ _deploy_commands(commands_dir, ["project-debug"])
26
+ # Classic profile deploys as subdirectory/SKILL.md
27
+ skill_file = commands_dir / "project-debug" / "SKILL.md"
28
+ assert skill_file.is_file(), "project-debug/SKILL.md not deployed"
29
+
30
+ def test_deployed_frontmatter_has_sonnet_model(self, tmp_path):
31
+ commands_dir = tmp_path / "commands"
32
+ commands_dir.mkdir()
33
+ _deploy_commands(commands_dir, ["project-debug"])
34
+ content = (commands_dir / "project-debug" / "SKILL.md").read_text()
35
+ assert "model: sonnet" in content
@@ -60,7 +60,7 @@ class TestAC2ValidSkillsContainsAll:
60
60
  def test_valid_skills_count(self):
61
61
  from pactkit.config import VALID_SKILLS
62
62
 
63
- assert len(VALID_SKILLS) == 24
63
+ assert len(VALID_SKILLS) == 25
64
64
 
65
65
  def test_commands_in_valid_skills(self):
66
66
  from pactkit.config import VALID_COMMANDS, VALID_SKILLS
File without changes