pactkit 2.14.1__tar.gz → 2.14.2__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 (601) hide show
  1. pactkit-2.14.2/.opencode/pactkit.yaml +23 -0
  2. {pactkit-2.14.1 → pactkit-2.14.2}/CHANGELOG.md +14 -0
  3. {pactkit-2.14.1 → pactkit-2.14.2}/PKG-INFO +2 -2
  4. {pactkit-2.14.1 → pactkit-2.14.2}/README.md +1 -1
  5. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/archive/lessons_archive_202603.md +1 -0
  6. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/lessons.md +2 -1
  7. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/rules.md +1 -1
  8. pactkit-2.14.2/docs/product/archive/archive_202606.md +17 -0
  9. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/context.md +3 -3
  10. pactkit-2.14.2/docs/specs/STORY-slim-126.md +131 -0
  11. pactkit-2.14.2/docs/specs/STORY-slim-127.md +116 -0
  12. {pactkit-2.14.1 → pactkit-2.14.2}/pyproject.toml +1 -1
  13. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/__init__.py +1 -1
  14. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/cli.py +23 -1
  15. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/config.py +3 -19
  16. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/generators/deployer.py +109 -70
  17. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/lazy_visualize.py +40 -0
  18. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/commands.py +2 -2
  19. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/rules.py +0 -29
  20. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/workflows.py +1 -1
  21. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_drawio_mcp.py +4 -32
  22. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_mcp_integration.py +2 -11
  23. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story033_config_backfill.py +7 -8
  24. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story040_layered_claude_md.py +16 -10
  25. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story062_mcp_recommendations.py +4 -4
  26. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim028.py +8 -9
  27. pactkit-2.14.2/tests/unit/test_story_slim126.py +101 -0
  28. pactkit-2.14.2/tests/unit/test_story_slim127_managed_block.py +233 -0
  29. pactkit-2.14.1/.opencode/pactkit.yaml +0 -172
  30. {pactkit-2.14.1 → pactkit-2.14.2}/.codegraph/.gitignore +0 -0
  31. {pactkit-2.14.1 → pactkit-2.14.2}/.github/workflows/pactkit.yml +0 -0
  32. {pactkit-2.14.1 → pactkit-2.14.2}/.github/workflows/publish.yml +0 -0
  33. {pactkit-2.14.1 → pactkit-2.14.2}/.gitignore +0 -0
  34. {pactkit-2.14.1 → pactkit-2.14.2}/AGENTS.md +0 -0
  35. {pactkit-2.14.1 → pactkit-2.14.2}/CODE_OF_CONDUCT.md +0 -0
  36. {pactkit-2.14.1 → pactkit-2.14.2}/CONTRIBUTING.md +0 -0
  37. {pactkit-2.14.1 → pactkit-2.14.2}/LICENSE +0 -0
  38. {pactkit-2.14.1 → pactkit-2.14.2}/SECURITY.md +0 -0
  39. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
  40. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/harness_audit.json +0 -0
  41. {pactkit-2.14.1 → pactkit-2.14.2}/docs/architecture/governance/philosophy.md +0 -0
  42. {pactkit-2.14.1 → pactkit-2.14.2}/docs/assets/logo.png +0 -0
  43. {pactkit-2.14.1 → pactkit-2.14.2}/docs/e2e/journey.md +0 -0
  44. {pactkit-2.14.1 → pactkit-2.14.2}/docs/guides/codex-integration-preresearch.md +0 -0
  45. {pactkit-2.14.1 → pactkit-2.14.2}/docs/guides/tool-integration-checklist.md +0 -0
  46. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/archive/archive_202602.md +0 -0
  47. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/archive/archive_202603.md +0 -0
  48. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/archive/archive_202604.md +0 -0
  49. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/archive/archive_202605.md +0 -0
  50. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/friction-log.md +0 -0
  51. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/prd.md +0 -0
  52. {pactkit-2.14.1 → pactkit-2.14.2}/docs/product/sprint_board.md +0 -0
  53. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-001.md +0 -0
  54. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-002.md +0 -0
  55. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-003.md +0 -0
  56. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-004.md +0 -0
  57. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-005.md +0 -0
  58. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-006.md +0 -0
  59. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-007.md +0 -0
  60. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-008.md +0 -0
  61. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-009.md +0 -0
  62. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-010.md +0 -0
  63. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-011.md +0 -0
  64. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-012.md +0 -0
  65. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-013.md +0 -0
  66. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-014.md +0 -0
  67. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-015.md +0 -0
  68. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-016.md +0 -0
  69. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-017.md +0 -0
  70. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-018.md +0 -0
  71. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-019.md +0 -0
  72. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-020.md +0 -0
  73. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-021.md +0 -0
  74. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-022.md +0 -0
  75. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-023.md +0 -0
  76. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-024.md +0 -0
  77. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-025.md +0 -0
  78. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-026.md +0 -0
  79. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-027.md +0 -0
  80. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-028.md +0 -0
  81. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-029.md +0 -0
  82. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-030.md +0 -0
  83. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-031.md +0 -0
  84. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-032.md +0 -0
  85. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-033.md +0 -0
  86. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-034.md +0 -0
  87. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-035.md +0 -0
  88. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-001.md +0 -0
  89. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-002.md +0 -0
  90. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-003.md +0 -0
  91. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-004.md +0 -0
  92. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-005.md +0 -0
  93. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-006.md +0 -0
  94. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-089.md +0 -0
  95. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/BUG-slim-107.md +0 -0
  96. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-023.md +0 -0
  97. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-049.md +0 -0
  98. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-050.md +0 -0
  99. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-051.md +0 -0
  100. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-052.md +0 -0
  101. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-061.md +0 -0
  102. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-062.md +0 -0
  103. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-067.md +0 -0
  104. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-069.md +0 -0
  105. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-070.md +0 -0
  106. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-085.md +0 -0
  107. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-087.md +0 -0
  108. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-096.md +0 -0
  109. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-099.md +0 -0
  110. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-107.md +0 -0
  111. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-117.md +0 -0
  112. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-122.md +0 -0
  113. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-123.md +0 -0
  114. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-126.md +0 -0
  115. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/HOTFIX-slim-127.md +0 -0
  116. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-001.md +0 -0
  117. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-002.md +0 -0
  118. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-003.md +0 -0
  119. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-004.md +0 -0
  120. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-005.md +0 -0
  121. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-006.md +0 -0
  122. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-007.md +0 -0
  123. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-008.md +0 -0
  124. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-009.md +0 -0
  125. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-010.md +0 -0
  126. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-011.md +0 -0
  127. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-012.md +0 -0
  128. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-013.md +0 -0
  129. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-014.md +0 -0
  130. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-015.md +0 -0
  131. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-016.md +0 -0
  132. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-017.md +0 -0
  133. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-018.md +0 -0
  134. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-019.md +0 -0
  135. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-020.md +0 -0
  136. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-021.md +0 -0
  137. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-022.md +0 -0
  138. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-023.md +0 -0
  139. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-024.md +0 -0
  140. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-025.md +0 -0
  141. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-026.md +0 -0
  142. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-027.md +0 -0
  143. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-028.md +0 -0
  144. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-029.md +0 -0
  145. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-030.md +0 -0
  146. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-031.md +0 -0
  147. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-032.md +0 -0
  148. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-033.md +0 -0
  149. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-034.md +0 -0
  150. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-035.md +0 -0
  151. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-036.md +0 -0
  152. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-037.md +0 -0
  153. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-038.md +0 -0
  154. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-039.md +0 -0
  155. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-040.md +0 -0
  156. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-041.md +0 -0
  157. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-042.md +0 -0
  158. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-043.md +0 -0
  159. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-044.md +0 -0
  160. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-045.md +0 -0
  161. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-046.md +0 -0
  162. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-047.md +0 -0
  163. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-048.md +0 -0
  164. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-049.md +0 -0
  165. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-050.md +0 -0
  166. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-051.md +0 -0
  167. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-052.md +0 -0
  168. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-053.md +0 -0
  169. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-054.md +0 -0
  170. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-055.md +0 -0
  171. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-056.md +0 -0
  172. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-057.md +0 -0
  173. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-058.md +0 -0
  174. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-059.md +0 -0
  175. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-060.md +0 -0
  176. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-061.md +0 -0
  177. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-062.md +0 -0
  178. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-063.md +0 -0
  179. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-064.md +0 -0
  180. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-065.md +0 -0
  181. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-069.md +0 -0
  182. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-070.md +0 -0
  183. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-071.md +0 -0
  184. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-072.md +0 -0
  185. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-073.md +0 -0
  186. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-001.md +0 -0
  187. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-005.md +0 -0
  188. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-006.md +0 -0
  189. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-007.md +0 -0
  190. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-009.md +0 -0
  191. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-010.md +0 -0
  192. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-011.md +0 -0
  193. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-012.md +0 -0
  194. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-013.md +0 -0
  195. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-014.md +0 -0
  196. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-015.md +0 -0
  197. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-016.md +0 -0
  198. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-017.md +0 -0
  199. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-018.md +0 -0
  200. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-019.md +0 -0
  201. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-020.md +0 -0
  202. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-021.md +0 -0
  203. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-022.md +0 -0
  204. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-023.md +0 -0
  205. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-024.md +0 -0
  206. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-028.md +0 -0
  207. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-029.md +0 -0
  208. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-030.md +0 -0
  209. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-031.md +0 -0
  210. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-032.md +0 -0
  211. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-033.md +0 -0
  212. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-034.md +0 -0
  213. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-035.md +0 -0
  214. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-036.md +0 -0
  215. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-037.md +0 -0
  216. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-038.md +0 -0
  217. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-039.md +0 -0
  218. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-040.md +0 -0
  219. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-041.md +0 -0
  220. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-042.md +0 -0
  221. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-043.md +0 -0
  222. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-044.md +0 -0
  223. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-045.md +0 -0
  224. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-046.md +0 -0
  225. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-047.md +0 -0
  226. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-048.md +0 -0
  227. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-049.md +0 -0
  228. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-050.md +0 -0
  229. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-051.md +0 -0
  230. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-052.md +0 -0
  231. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-053.md +0 -0
  232. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-054.md +0 -0
  233. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-055.md +0 -0
  234. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-056.md +0 -0
  235. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-057.md +0 -0
  236. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-058.md +0 -0
  237. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-059.md +0 -0
  238. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-060.md +0 -0
  239. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-063.md +0 -0
  240. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-066.md +0 -0
  241. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-067.md +0 -0
  242. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-068.md +0 -0
  243. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-069.md +0 -0
  244. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-070.md +0 -0
  245. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-071.md +0 -0
  246. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-072.md +0 -0
  247. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-073.md +0 -0
  248. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-074.md +0 -0
  249. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-075.md +0 -0
  250. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-076.md +0 -0
  251. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-077.md +0 -0
  252. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-078.md +0 -0
  253. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-079.md +0 -0
  254. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-080.md +0 -0
  255. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-081.md +0 -0
  256. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-082.md +0 -0
  257. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-083.md +0 -0
  258. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-084.md +0 -0
  259. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-086.md +0 -0
  260. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-088.md +0 -0
  261. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-089.md +0 -0
  262. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-090.md +0 -0
  263. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-091.md +0 -0
  264. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-092.md +0 -0
  265. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-093.md +0 -0
  266. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-094.md +0 -0
  267. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-095.md +0 -0
  268. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-097.md +0 -0
  269. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-098.md +0 -0
  270. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-099.md +0 -0
  271. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-100.md +0 -0
  272. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-101.md +0 -0
  273. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-102.md +0 -0
  274. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-103.md +0 -0
  275. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-104.md +0 -0
  276. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-105.md +0 -0
  277. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-106.md +0 -0
  278. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-107.md +0 -0
  279. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-108.md +0 -0
  280. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-109.md +0 -0
  281. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-110.md +0 -0
  282. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-111.md +0 -0
  283. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-112.md +0 -0
  284. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-113.md +0 -0
  285. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-114.md +0 -0
  286. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-115.md +0 -0
  287. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-116.md +0 -0
  288. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-118.md +0 -0
  289. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-119.md +0 -0
  290. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-120.md +0 -0
  291. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-121.md +0 -0
  292. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-124.md +0 -0
  293. {pactkit-2.14.1 → pactkit-2.14.2}/docs/specs/STORY-slim-125.md +0 -0
  294. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/BUG-001_case.md +0 -0
  295. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/BUG-002_case.md +0 -0
  296. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-028_case.md +0 -0
  297. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-029_case.md +0 -0
  298. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-031_case.md +0 -0
  299. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-032_case.md +0 -0
  300. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-033_case.md +0 -0
  301. {pactkit-2.14.1 → pactkit-2.14.2}/docs/test_cases/STORY-slim-034_case.md +0 -0
  302. {pactkit-2.14.1 → pactkit-2.14.2}/opencode.json +0 -0
  303. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/__main__.py +0 -0
  304. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/audit.py +0 -0
  305. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/backfill.py +0 -0
  306. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/cleaners.py +0 -0
  307. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/context_gen.py +0 -0
  308. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/coverage_gate.py +0 -0
  309. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/doctor.py +0 -0
  310. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/garden.py +0 -0
  311. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/generators/__init__.py +0 -0
  312. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/generators/adapter.py +0 -0
  313. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/generators/deploy_base.py +0 -0
  314. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/guards.py +0 -0
  315. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/id_generator.py +0 -0
  316. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/invariants.py +0 -0
  317. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/issue_sync.py +0 -0
  318. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/lessons.py +0 -0
  319. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/lint_runner.py +0 -0
  320. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/observe.py +0 -0
  321. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/profiles.py +0 -0
  322. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/__init__.py +0 -0
  323. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/agents.py +0 -0
  324. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/references.py +0 -0
  325. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/prompts/skills.py +0 -0
  326. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/regression.py +0 -0
  327. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/schemas.py +0 -0
  328. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/scripts.py +0 -0
  329. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/sec_scope.py +0 -0
  330. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/__init__.py +0 -0
  331. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/analyzers/__init__.py +0 -0
  332. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/analyzers/go_analyzer.py +0 -0
  333. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/analyzers/java_analyzer.py +0 -0
  334. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/analyzers/python_analyzer.py +0 -0
  335. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/analyzers/ts_analyzer.py +0 -0
  336. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/board.py +0 -0
  337. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/interface_summary.py +0 -0
  338. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/report.py +0 -0
  339. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/scaffold.py +0 -0
  340. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/spec_linter.py +0 -0
  341. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/skills/visualize.py +0 -0
  342. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/spec_status.py +0 -0
  343. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/test_mapper.py +0 -0
  344. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/utils.py +0 -0
  345. {pactkit-2.14.1 → pactkit-2.14.2}/src/pactkit/validators.py +0 -0
  346. {pactkit-2.14.1 → pactkit-2.14.2}/tests/conftest.py +0 -0
  347. {pactkit-2.14.1 → pactkit-2.14.2}/tests/e2e/__init__.py +0 -0
  348. {pactkit-2.14.1 → pactkit-2.14.2}/tests/e2e/cli/__init__.py +0 -0
  349. {pactkit-2.14.1 → pactkit-2.14.2}/tests/e2e/cli/test_cli_e2e.py +0 -0
  350. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
  351. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
  352. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
  353. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
  354. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
  355. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
  356. {pactkit-2.14.1 → pactkit-2.14.2}/tests/fixtures/api_call_parser/page.tsx +0 -0
  357. {pactkit-2.14.1 → pactkit-2.14.2}/tests/integration/__init__.py +0 -0
  358. {pactkit-2.14.1 → pactkit-2.14.2}/tests/integration/test_deploy_classic.py +0 -0
  359. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_agent_features.py +0 -0
  360. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_agent_frontmatter.py +0 -0
  361. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_agents_enrichment.py +0 -0
  362. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_audit.py +0 -0
  363. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_blast_radius.py +0 -0
  364. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_board_bug027.py +0 -0
  365. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_board_sections.py +0 -0
  366. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug001_skill_path.py +0 -0
  367. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug002_plugin_paths.py +0 -0
  368. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug003_multi_import.py +0 -0
  369. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug004_dead_set.py +0 -0
  370. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug005_archive_taskless.py +0 -0
  371. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug006_scan_excludes.py +0 -0
  372. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
  373. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug008_stale_command_refs.py +0 -0
  374. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug009_project_config_backfill.py +0 -0
  375. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
  376. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug011_stale_refs.py +0 -0
  377. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug012_call_graph_filter.py +0 -0
  378. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug013_config_single_source.py +0 -0
  379. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug014_version_hygiene.py +0 -0
  380. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug017_project_init_playbook.py +0 -0
  381. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
  382. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug019_venv_deployment.py +0 -0
  383. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug020_claude_md_backup.py +0 -0
  384. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug025_release_delegation.py +0 -0
  385. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug026_version_sync.py +0 -0
  386. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug028_ghost_refs.py +0 -0
  387. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
  388. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
  389. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
  390. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
  391. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_021.py +0 -0
  392. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_022.py +0 -0
  393. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_023.py +0 -0
  394. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_024.py +0 -0
  395. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim001_env_detection.py +0 -0
  396. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
  397. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim003.py +0 -0
  398. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim004.py +0 -0
  399. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim005.py +0 -0
  400. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim006.py +0 -0
  401. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_bug_slim089_global_claude_md.py +0 -0
  402. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_check_command.py +0 -0
  403. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_check_extensions_072_073.py +0 -0
  404. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_check_playbook_072_073.py +0 -0
  405. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_command_frontmatter.py +0 -0
  406. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_command_visualize_modes.py +0 -0
  407. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_complexity.py +0 -0
  408. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_config.py +0 -0
  409. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_config_auto_merge.py +0 -0
  410. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_constitution_sharpening.py +0 -0
  411. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_context_gen.py +0 -0
  412. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_create_skill.py +0 -0
  413. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_cross_flow_matrix.py +0 -0
  414. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_deploy_base.py +0 -0
  415. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_deployer_cleanup.py +0 -0
  416. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_deployer_plugin.py +0 -0
  417. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_design_command.py +0 -0
  418. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_done_gates.py +0 -0
  419. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_draw_prompt.py +0 -0
  420. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_draw_references.py +0 -0
  421. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_garden.py +0 -0
  422. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_home_path_fix.py +0 -0
  423. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_hotfix_command.py +0 -0
  424. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_init_guard.py +0 -0
  425. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_init_playbook_074.py +0 -0
  426. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_interface_summary.py +0 -0
  427. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_lang_profiles.py +0 -0
  428. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_layer_violations.py +0 -0
  429. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_lessons_rotation_075.py +0 -0
  430. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_list_stories.py +0 -0
  431. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_model_config.py +0 -0
  432. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_modular_constitution.py +0 -0
  433. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_monorepo_detect.py +0 -0
  434. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_multi_prefix.py +0 -0
  435. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_observe.py +0 -0
  436. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_pdca_slim.py +0 -0
  437. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_profiles.py +0 -0
  438. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_project_visibility.py +0 -0
  439. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_prompt_cli_refs.py +0 -0
  440. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_prompt_quality_075.py +0 -0
  441. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_prompt_structural_invariants.py +0 -0
  442. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_prompts_package.py +0 -0
  443. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_release.py +0 -0
  444. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_release_field.py +0 -0
  445. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_release_v110.py +0 -0
  446. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_render_prompt.py +0 -0
  447. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_report_parser.py +0 -0
  448. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_report_unified.py +0 -0
  449. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_review_command.py +0 -0
  450. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_rules_enrichment.py +0 -0
  451. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_scaffold.py +0 -0
  452. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_scaffold_developer_prefix.py +0 -0
  453. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_schemas.py +0 -0
  454. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_script_extraction.py +0 -0
  455. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_selective_deploy.py +0 -0
  456. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_session_context.py +0 -0
  457. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_skill_structure.py +0 -0
  458. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_skills_enrichment.py +0 -0
  459. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_slim_deps_088.py +0 -0
  460. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_smart_regression.py +0 -0
  461. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_solution_design_rule.py +0 -0
  462. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_sprint_command.py +0 -0
  463. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_stack_references.py +0 -0
  464. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_status_command.py +0 -0
  465. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_statusline.py +0 -0
  466. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story014_release.py +0 -0
  467. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story015_ci_lint_gate.py +0 -0
  468. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story016_claude_md.py +0 -0
  469. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story017_init_claude_md.py +0 -0
  470. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story018_arch_staleness.py +0 -0
  471. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story019_bailout.py +0 -0
  472. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story020_horizon.py +0 -0
  473. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story021_rfc.py +0 -0
  474. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story022_decision_tree.py +0 -0
  475. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story023_test_quality.py +0 -0
  476. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story024_native_agent.py +0 -0
  477. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story025_ci_pipeline.py +0 -0
  478. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story026_issue_tracker.py +0 -0
  479. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story028_rule_scoping.py +0 -0
  480. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story029_doctor.py +0 -0
  481. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story030_lint.py +0 -0
  482. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story031_git_init_guard.py +0 -0
  483. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story032_greenfield_redirect.py +0 -0
  484. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story034_plan_config_refresh.py +0 -0
  485. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story035_readme_docs.py +0 -0
  486. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story037_regression_fix.py +0 -0
  487. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story038_call_graph_update.py +0 -0
  488. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story039_venv_config.py +0 -0
  489. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story042_spec_linter.py +0 -0
  490. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story043_active_clarify.py +0 -0
  491. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story044_consistency_check.py +0 -0
  492. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story045_auto_pr.py +0 -0
  493. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story046_agent_adapter.py +0 -0
  494. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story047_enterprise_flags.py +0 -0
  495. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story048_worktree_isolation.py +0 -0
  496. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story049_community_standards.py +0 -0
  497. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
  498. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story051_workflow_streamlining.py +0 -0
  499. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story052_conditional_github_release.py +0 -0
  500. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story053_impact_regression.py +0 -0
  501. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story055_commands.py +0 -0
  502. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story055_config.py +0 -0
  503. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story055_spec_linter.py +0 -0
  504. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story056_commands.py +0 -0
  505. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story056_config.py +0 -0
  506. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story057_implicit_cleanup.py +0 -0
  507. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story058_opencode_extraction.py +0 -0
  508. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story058_routing_fix.py +0 -0
  509. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story059_codex_removal.py +0 -0
  510. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story060_init_hang.py +0 -0
  511. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story061_remove_thinking.py +0 -0
  512. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story063_prompt_slimming.py +0 -0
  513. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story064_venv_local_md.py +0 -0
  514. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story065_sprint_model.py +0 -0
  515. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story072_developer_prefix.py +0 -0
  516. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story106_lateral_scan.py +0 -0
  517. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
  518. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
  519. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim011_command_rules.py +0 -0
  520. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim012_ci.py +0 -0
  521. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_clean.py +0 -0
  522. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_context.py +0 -0
  523. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_guard.py +0 -0
  524. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
  525. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_next_id.py +0 -0
  526. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_regression.py +0 -0
  527. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_sec_scope.py +0 -0
  528. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim014_validators.py +0 -0
  529. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim015_doctor.py +0 -0
  530. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
  531. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim017.py +0 -0
  532. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim018.py +0 -0
  533. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
  534. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
  535. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim021.py +0 -0
  536. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim022.py +0 -0
  537. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim023.py +0 -0
  538. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim024.py +0 -0
  539. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim025.py +0 -0
  540. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim026.py +0 -0
  541. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim027.py +0 -0
  542. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim029.py +0 -0
  543. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim030.py +0 -0
  544. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim031.py +0 -0
  545. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim032.py +0 -0
  546. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim033.py +0 -0
  547. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim034.py +0 -0
  548. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim035.py +0 -0
  549. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim036.py +0 -0
  550. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim037.py +0 -0
  551. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim038.py +0 -0
  552. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim039.py +0 -0
  553. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim040.py +0 -0
  554. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim041.py +0 -0
  555. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim042.py +0 -0
  556. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim043.py +0 -0
  557. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim044.py +0 -0
  558. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim045.py +0 -0
  559. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim046.py +0 -0
  560. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim047.py +0 -0
  561. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim048.py +0 -0
  562. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim049.py +0 -0
  563. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim051.py +0 -0
  564. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim052.py +0 -0
  565. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim053.py +0 -0
  566. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim054.py +0 -0
  567. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim055.py +0 -0
  568. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim056.py +0 -0
  569. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim060_codex_profile.py +0 -0
  570. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim063.py +0 -0
  571. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim065.py +0 -0
  572. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim076_multistack.py +0 -0
  573. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim077_monorepo_stack.py +0 -0
  574. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim078.py +0 -0
  575. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim079.py +0 -0
  576. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim080.py +0 -0
  577. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim081.py +0 -0
  578. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim082.py +0 -0
  579. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim083.py +0 -0
  580. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim084.py +0 -0
  581. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim095.py +0 -0
  582. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim098_pdca_nudge.py +0 -0
  583. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim099_act_context_ref.py +0 -0
  584. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim102_version_marker.py +0 -0
  585. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim104_should_semantics.py +0 -0
  586. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim107.py +0 -0
  587. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim109_journey_spec.py +0 -0
  588. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim111_playwright_assertion.py +0 -0
  589. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim112_rules_split.py +0 -0
  590. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim114_journey_sync.py +0 -0
  591. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim119.py +0 -0
  592. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim120.py +0 -0
  593. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim121.py +0 -0
  594. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_story_slim125.py +0 -0
  595. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_tools.py +0 -0
  596. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_topology_parsers_066.py +0 -0
  597. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_update_task.py +0 -0
  598. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_visualize_call_nested.py +0 -0
  599. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_visualize_chain_fix.py +0 -0
  600. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_visualize_modes.py +0 -0
  601. {pactkit-2.14.1 → pactkit-2.14.2}/tests/unit/test_visualize_multilang_chain.py +0 -0
@@ -0,0 +1,23 @@
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
@@ -4,6 +4,20 @@ 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.14.2] - 2026-06-01
8
+
9
+ ### Added
10
+ - **Managed-block update for project CLAUDE.md** (STORY-slim-127) — `pactkit update` now uses `<!-- pactkit:start -->` / `<!-- pactkit:end -->` markers. User content outside the managed block is preserved across updates. Supports four migration paths: fresh install, existing markers, legacy PactKit template, and user-modified files.
11
+ - **Codegraph sync enforcement via code** (STORY-slim-126) — `pactkit visualize --lazy` and `pactkit sync` now run `codegraph sync` automatically when `.codegraph/` exists. Removed prompt-based instructions that relied on AI compliance.
12
+ - **Codegraph priority in generated CLAUDE.md** — When `.codegraph/` exists, the generated project CLAUDE.md includes a "Code Intelligence" section instructing AI to prefer codegraph over grep/find.
13
+
14
+ ### Changed
15
+ - **MCP strategy trimmed to Context7 + Memory** — Removed Playwright, Chrome DevTools, Draw.io, and shadcn from MCP rules and recommendations. These remain as conditional no-ops in command prompts but are no longer actively promoted.
16
+ - **Config backfill removed** — `pactkit update` no longer backfills default sections into `pactkit.yaml`. Absent keys now mean "accept default", keeping config files minimal.
17
+
18
+ ### Fixed
19
+ - **Stale rule warnings** — Removed obsolete rule names from `.opencode/pactkit.yaml` that caused "Unknown rule" warnings on every `pactkit update`.
20
+
7
21
  ## [2.14.1] - 2026-05-28
8
22
 
9
23
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pactkit
3
- Version: 2.14.1
3
+ Version: 2.14.2
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
@@ -123,7 +123,7 @@ Requires Python 3.10+ and one of:
123
123
  # Deploy to all 3 IDEs at once
124
124
  pactkit init
125
125
 
126
- # Update to latest playbooks (preserves your config)
126
+ # Update to latest playbooks (preserves your custom content in CLAUDE.md)
127
127
  pactkit update
128
128
  ```
129
129
 
@@ -81,7 +81,7 @@ Requires Python 3.10+ and one of:
81
81
  # Deploy to all 3 IDEs at once
82
82
  pactkit init
83
83
 
84
- # Update to latest playbooks (preserves your config)
84
+ # Update to latest playbooks (preserves your custom content in CLAUDE.md)
85
85
  pactkit update
86
86
  ```
87
87
 
@@ -62,3 +62,4 @@
62
62
  | 2026-03-26 | _atomic_mmd_write() in visualize.py prevents truncated .mmd on crash via tmp+rename; all 4 write sites converted | visualize.py:_atomic_mmd_write |
63
63
  | 2026-03-26 | test_story_slim056.py _init_project() helper creates realistic pactkit project fixture for subprocess E2E tests; 60 tests cover all 25 subcommands | test_story_slim056.py:_init_project |
64
64
  | 2026-03-26 | entry_points auto-discovery with _load_entry_point_deployers() enables pip install pactkit-opencode to self-register; pre-existing tests referencing extracted functions must be updated to import from adapter package | deployer.py:_load_entry_point_deployers |
65
+ | 2026-03-26 | VALID_FORMATS auto-derives from FORMAT_PROFILES.keys() — removing a profile cascades to config, CLI, and deployer with zero manual sync | profiles.py:FORMAT_PROFILES |
@@ -2,7 +2,6 @@
2
2
 
3
3
  | Date | Lesson | Context |
4
4
  |------|--------|---------|
5
- | 2026-03-26 | VALID_FORMATS auto-derives from FORMAT_PROFILES.keys() — removing a profile cascades to config, CLI, and deployer with zero manual sync | profiles.py:FORMAT_PROFILES |
6
5
  | 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 |
7
6
  | 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 |
8
7
  | 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 |
@@ -52,3 +51,5 @@
52
51
  | 2026-05-25 | When SCAN_EXCLUDES is a module-level constant shared across graph modes, add mode-specific exclusion logic at the call site rather than modifying the constant — pass call_extra_excludes = SCAN_EXCLUDES - {'tests'} only for call mode to avoid affecting file/class modes | visualize.py:_build_call_graph |
53
52
  | 2026-05-25 | _write_sqlite_db reuses func_registry and rel_edges already in memory from _build_call_graph — no second AST scan; pactkit query reads db directly without touching pactkit.yaml | visualize.py:_build_call_graph |
54
53
  | 2026-05-26 | SKILL.md model: frontmatter is passed through by deployer without transformation — source prompts in commands.py/workflows.py are the single source of truth for deployed skill metadata | commands.py:COMMANDS_CONTENT |
54
+ | 2026-06-01 | codegraph sync must be enforced by code (pactkit visualize/sync), not by prompt instructions — prompt-only enforcement is unreliable for deterministic operations | lazy_visualize.py:codegraph_sync |
55
+ | 2026-06-01 | 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 | deployer.py:_upsert_claude_md_managed_block |
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## Invariants
17
17
 
18
- 1. All 3986+ tests must pass before any commit to `main`.
18
+ 1. All 4009+ 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`.
@@ -0,0 +1,17 @@
1
+
2
+ ### [STORY-slim-126] codegraph sync code enforcement
3
+ > Spec: docs/specs/STORY-slim-126.md
4
+
5
+ - [x] Add codegraph_sync() function
6
+ - [x] Integrate into visualize path
7
+ - [x] Add pactkit sync subcommand
8
+ - [x] Remove prompt instructions
9
+ - [x] Unit tests
10
+
11
+ ### [STORY-slim-127] project CLAUDE.md managed-block update
12
+ > Spec: docs/specs/STORY-slim-127.md
13
+
14
+ - [x] Add marker constants
15
+ - [x] Extract managed content builder
16
+ - [x] Rewrite _generate_project_claude_md with upsert
17
+ - [x] Unit tests
@@ -1,5 +1,5 @@
1
1
  # Project Context (Auto-generated)
2
- > Last updated: 2026-05-28T18:15:01+08:00 by pactkit context
2
+ > Last updated: 2026-06-01T11:05:34+08:00 by pactkit context
3
3
 
4
4
  ## Sprint Status
5
5
  Backlog: 3 | In Progress: 0 | Done: 0 stories
@@ -16,11 +16,11 @@ None
16
16
  * main
17
17
 
18
18
  ## Key Decisions
19
- - Lifecycle gap pattern: when artifact has create+consume but no update mechanism, add conditional sync in the modifying command. Applied: Act Phase 4 Journey Sync step in commands.py COMMANDS_CONTENT['project-act.md']
20
- - code_graph.mmd uses sanitized node IDs (src_pactkit_generators_deployer_py), not bare filenames — grep patterns for fan-in/fan-out must use .* wildcard or they silently never match
21
19
  - When SCAN_EXCLUDES is a module-level constant shared across graph modes, add mode-specific exclusion logic at the call site rather than modifying the constant — pass call_extra_excludes = SCAN_EXCLUDES - {'tests'} only for call mode to avoid affecting file/class modes
22
20
  - _write_sqlite_db reuses func_registry and rel_edges already in memory from _build_call_graph — no second AST scan; pactkit query reads db directly without touching pactkit.yaml
23
21
  - SKILL.md model: frontmatter is passed through by deployer without transformation — source prompts in commands.py/workflows.py are the single source of truth for deployed skill metadata
22
+ - codegraph sync must be enforced by code (pactkit visualize/sync), not by prompt instructions — prompt-only enforcement is unreliable for deterministic operations
23
+ - 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
24
24
 
25
25
  ## Next Recommended Action
26
26
  `/project-plan`
@@ -0,0 +1,131 @@
1
+ # STORY-slim-126: codegraph sync code enforcement
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | ID | STORY-slim-126 |
6
+ | Status | Done |
7
+ | Priority | P1 |
8
+ | Release | 2.15.0 |
9
+
10
+ ## Background
11
+
12
+ `codegraph sync` is currently enforced only via prompt instructions in 4 PDCA skill templates (Act Phase 4, Done Phase 2, Hotfix Phase 3.6, Plan Phase 1 auto-setup). This violates the "Code Enforces, Prompt Instructs" principle — if the AI ignores the prompt instruction, the codegraph index becomes stale and `pactkit query` returns outdated results.
13
+
14
+ The fix: integrate `codegraph sync` into the `pactkit visualize --lazy` code path so it runs automatically whenever source files changed. Remove the corresponding prompt instructions afterward.
15
+
16
+ ## Requirements
17
+
18
+ ### R1: Auto-sync codegraph in visualize path (MUST)
19
+
20
+ When `pactkit visualize --lazy` determines that source files changed (should_visualize returns True) AND `.codegraph/` directory exists in project root AND `codegraph` is on `$PATH`, automatically run `codegraph sync` after graph generation completes.
21
+
22
+ ### R2: Standalone sync function (MUST)
23
+
24
+ Extract a reusable `codegraph_sync(project_root)` function in `lazy_visualize.py` that:
25
+ - Checks `.codegraph/` exists
26
+ - Checks `codegraph` binary is available via `shutil.which`
27
+ - Runs `codegraph sync <path>` with subprocess
28
+ - Returns a status tuple: `(synced: bool, message: str)`
29
+ - Fails silently (returns False + reason) when codegraph is unavailable
30
+
31
+ ### R3: CLI integration for non-visualize paths (MUST)
32
+
33
+ Add `--sync` flag to `pactkit visualize` that forces codegraph sync even when `--lazy` skips graph regeneration. This covers the Hotfix use case where visualize is not run but codegraph still needs syncing.
34
+
35
+ Also: expose `pactkit sync` as a standalone subcommand that only runs codegraph sync (no mermaid graphs). This is the minimal replacement for prompt instructions in Hotfix flow.
36
+
37
+ ### R4: Remove prompt instructions (MUST)
38
+
39
+ Remove all "If `.codegraph/` exists, run `codegraph sync`" instructions from:
40
+ - `commands.py:248` (Act Phase 4)
41
+ - `commands.py:505` (Done Phase 2)
42
+ - `workflows.py:614` (Hotfix Phase 3.6)
43
+
44
+ Replace with a note that `pactkit visualize --lazy` and `pactkit sync` handle this automatically.
45
+
46
+ ### R5: Output feedback (SHOULD)
47
+
48
+ When codegraph sync runs, print a brief status line: `"🔄 codegraph synced (N files updated)"` or `"codegraph: skipped (not installed)"`. Silent when `.codegraph/` doesn't exist (user hasn't opted in).
49
+
50
+ ## Acceptance Criteria
51
+
52
+ ### AC1: visualize --lazy triggers codegraph sync when source changed (R1)
53
+
54
+ - **Given** project has `.codegraph/` directory and `codegraph` is on PATH
55
+ - **When** `pactkit visualize --lazy` runs and source files have changed
56
+ - **Then** `codegraph sync` is executed after mermaid graph generation, output includes sync status
57
+
58
+ ### AC2: visualize --lazy skips codegraph sync when no .codegraph/ (R1, R2)
59
+
60
+ - **Given** project does NOT have `.codegraph/` directory
61
+ - **When** `pactkit visualize --lazy` runs
62
+ - **Then** no codegraph sync is attempted, no error is raised
63
+
64
+ ### AC3: codegraph_sync returns gracefully when binary missing (R2)
65
+
66
+ - **Given** project has `.codegraph/` directory but `codegraph` is NOT on PATH
67
+ - **When** `codegraph_sync(project_root)` is called
68
+ - **Then** returns `(False, "codegraph not installed")` without raising
69
+
70
+ ### AC4: pactkit sync standalone command (R3)
71
+
72
+ - **Given** project has `.codegraph/` and `codegraph` on PATH
73
+ - **When** user runs `pactkit sync`
74
+ - **Then** codegraph sync runs and reports status
75
+
76
+ ### AC5: prompt instructions removed (R4)
77
+
78
+ - **Given** the updated codebase
79
+ - **When** `grep -rn "codegraph sync" src/pactkit/prompts/` is run
80
+ - **Then** zero matches for "If .codegraph/ exists, run codegraph sync" pattern (only informational references like skills.py docs remain)
81
+
82
+ ### AC6: output feedback on sync (R5)
83
+
84
+ - **Given** project has `.codegraph/` and codegraph is on PATH
85
+ - **When** `pactkit visualize --lazy` runs and triggers sync
86
+ - **Then** stdout includes a status line like "🔄 codegraph synced" or "codegraph: skipped (not installed)"
87
+
88
+ ## Target Call Chain
89
+
90
+ ```
91
+ CLI main() → args.command == "visualize"
92
+ → lazy_visualize.should_visualize()
93
+ → run_visualize_graphs() / run_visualize_single()
94
+ → [NEW] codegraph_sync(project_root)
95
+ → shutil.which("codegraph")
96
+ → subprocess.run(["codegraph", "sync", str(project_root)])
97
+
98
+ CLI main() → args.command == "sync" [NEW]
99
+ → codegraph_sync(project_root)
100
+ ```
101
+
102
+ ## Implementation Steps
103
+
104
+ | Step | File | Action | Dependencies | Risk |
105
+ |------|------|--------|-------------|------|
106
+ | 1 | `src/pactkit/lazy_visualize.py` | Add `codegraph_sync(project_root) -> tuple[bool, str]` function | None | Low |
107
+ | 2 | `src/pactkit/lazy_visualize.py` | Call `codegraph_sync()` at end of `run_visualize_graphs()` and `run_visualize_single()` | Step 1 | Low |
108
+ | 3 | `src/pactkit/cli.py` | Add `sync` subcommand that calls `codegraph_sync()` | Step 1 | Low |
109
+ | 4 | `src/pactkit/cli.py` | In `visualize` handler, call `codegraph_sync()` after lazy check passes | Step 1 | Low |
110
+ | 5 | `src/pactkit/prompts/commands.py` | Remove "If .codegraph/ exists, run codegraph sync" from Act & Done prompts | None | Low |
111
+ | 6 | `src/pactkit/prompts/workflows.py` | Remove Hotfix Phase 3.6 codegraph sync prompt instruction | None | Low |
112
+ | 7 | `tests/unit/` | Unit tests for `codegraph_sync()` with mocked subprocess | Step 1 | Low |
113
+
114
+ ## Security Scope
115
+
116
+ | Check | Applicable | Reason |
117
+ |-------|------------|--------|
118
+ | SEC-1 Input Validation | N/A | No user input — project_root from cwd |
119
+ | SEC-2 Authentication | N/A | Local CLI tool |
120
+ | SEC-3 Authorization | N/A | Local CLI tool |
121
+ | SEC-4 Data Exposure | N/A | No secrets involved |
122
+ | SEC-5 Injection | N/A | subprocess uses list args, not shell=True |
123
+ | SEC-6 Dependencies | N/A | No new dependencies |
124
+ | SEC-7 Cryptography | N/A | Not applicable |
125
+ | SEC-8 Logging | N/A | No sensitive data logged |
126
+
127
+ ## Out of Scope
128
+
129
+ - codegraph MCP server auto-start (out of scope — user manages MCP servers independently)
130
+ - codegraph init auto-setup (already handled in Plan Phase 1 prompt, keep as-is)
131
+ - Modifying `pactkit query` behavior (already works correctly)
@@ -0,0 +1,116 @@
1
+ # STORY-slim-127: project CLAUDE.md managed-block update
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | ID | STORY-slim-127 |
6
+ | Status | Done |
7
+ | Priority | P1 |
8
+ | Release | 2.15.0 |
9
+
10
+ ## Background
11
+
12
+ `_generate_project_claude_md` currently uses `atomic_write` to fully overwrite `.claude/CLAUDE.md` on every `pactkit update`. This violates Architecture Principle §9 (Merge over Replace) — any content the user manually adds to CLAUDE.md is silently destroyed.
13
+
14
+ The fix: adopt the same managed-block pattern used by `_upsert_venv_managed_block` in CLAUDE.local.md. PactKit owns a `<!-- pactkit:start -->` / `<!-- pactkit:end -->` region; user content outside that region is preserved.
15
+
16
+ ## Requirements
17
+
18
+ ### R1: Managed-block update for project CLAUDE.md (MUST)
19
+
20
+ `_generate_project_claude_md` MUST use `<!-- pactkit:start -->` / `<!-- pactkit:end -->` markers. Only content between these markers is regenerated. User content outside is preserved.
21
+
22
+ ### R2: Migration from legacy full-replace (MUST)
23
+
24
+ When CLAUDE.md exists but has no markers:
25
+ - If content matches PactKit template (detected via `# {project_name} — Project Context` header) → wrap entire content in markers (safe migration).
26
+ - If content has user modifications (no PactKit header) → append managed block at end of file, preserve all existing content.
27
+
28
+ ### R3: Fresh install (MUST)
29
+
30
+ When CLAUDE.md does not exist, create it with the managed block including markers. Also include `@` import references outside the managed block so users can add content above or below.
31
+
32
+ ### R4: Preserve @import references position (MUST)
33
+
34
+ The `@./docs/product/context.md` and `@./.claude/CLAUDE.local.md` references MUST be placed outside the managed block (after `<!-- pactkit:end -->`) so they are never accidentally removed if the user rearranges content.
35
+
36
+ ### R5: Codegraph section conditional inclusion (SHOULD)
37
+
38
+ When `.codegraph/` exists, include the "Code Intelligence" section inside the managed block. When absent, omit it. This is dynamic per-deploy.
39
+
40
+ ## Acceptance Criteria
41
+
42
+ ### AC1: Existing user content preserved on update (R1)
43
+
44
+ - **Given** `.claude/CLAUDE.md` exists with user content outside markers
45
+ - **When** `pactkit update` runs
46
+ - **Then** user content is unchanged; only content between `<!-- pactkit:start -->` and `<!-- pactkit:end -->` is regenerated
47
+
48
+ ### AC2: Legacy CLAUDE.md migrated with markers (R2)
49
+
50
+ - **Given** `.claude/CLAUDE.md` exists with PactKit-generated content but no markers
51
+ - **When** `pactkit update` runs
52
+ - **Then** content is wrapped in markers; no content is lost
53
+
54
+ ### AC3: User-modified legacy CLAUDE.md preserved (R2)
55
+
56
+ - **Given** `.claude/CLAUDE.md` exists with user-written content (no PactKit header)
57
+ - **When** `pactkit update` runs
58
+ - **Then** existing content is preserved, managed block is appended
59
+
60
+ ### AC4: Fresh install creates file with markers (R3)
61
+
62
+ - **Given** `.claude/CLAUDE.md` does not exist
63
+ - **When** `pactkit update` runs
64
+ - **Then** file is created with `<!-- pactkit:start -->` ... `<!-- pactkit:end -->` and `@` imports after the end marker
65
+
66
+ ### AC5: @imports are outside managed block (R4)
67
+
68
+ - **Given** any state of CLAUDE.md
69
+ - **When** `pactkit update` runs
70
+ - **Then** `@./docs/product/context.md` and `@./.claude/CLAUDE.local.md` appear after `<!-- pactkit:end -->`
71
+
72
+ ### AC6: Codegraph section appears when .codegraph/ exists (R5)
73
+
74
+ - **Given** project has `.codegraph/` directory
75
+ - **When** `pactkit update` runs
76
+ - **Then** managed block includes "Code Intelligence (codegraph)" section
77
+
78
+ ## Target Call Chain
79
+
80
+ ```
81
+ deployer.deploy() → _generate_project_claude_md(config)
82
+ → _build_managed_block(config, project_root) [NEW]
83
+ → _upsert_claude_md_managed_block(claude_md_path, managed_block) [NEW]
84
+ → if file missing: write fresh (markers + @imports)
85
+ → if has markers: regex replace between markers
86
+ → if legacy PactKit template: wrap in markers
87
+ → if user content: append managed block
88
+ ```
89
+
90
+ ## Implementation Steps
91
+
92
+ | Step | File | Action | Dependencies | Risk |
93
+ |------|------|--------|-------------|------|
94
+ | 1 | `src/pactkit/generators/deployer.py` | Add `_CLAUDE_MD_START` / `_CLAUDE_MD_END` constants | None | Low |
95
+ | 2 | `src/pactkit/generators/deployer.py` | Extract `_build_claude_md_managed_content()` from existing lines[] logic | None | Low |
96
+ | 3 | `src/pactkit/generators/deployer.py` | Rewrite `_generate_project_claude_md` to use upsert pattern (detect markers, migrate, or fresh create) | Steps 1-2 | Medium |
97
+ | 4 | `tests/unit/` | Unit tests for all 4 paths (fresh, has-markers, legacy-template, user-modified) | Step 3 | Low |
98
+
99
+ ## Security Scope
100
+
101
+ | Check | Applicable | Reason |
102
+ |-------|------------|--------|
103
+ | SEC-1 Input Validation | N/A | No user input — paths from cwd |
104
+ | SEC-2 Authentication | N/A | Local CLI tool |
105
+ | SEC-3 Authorization | N/A | Local CLI tool |
106
+ | SEC-4 Data Exposure | N/A | No secrets |
107
+ | SEC-5 Injection | N/A | No shell/SQL |
108
+ | SEC-6 Dependencies | N/A | No new deps |
109
+ | SEC-7 Cryptography | N/A | Not applicable |
110
+ | SEC-8 Logging | N/A | No sensitive data |
111
+
112
+ ## Out of Scope
113
+
114
+ - Global `~/.claude/CLAUDE.md` — already has user-modified detection, not changing
115
+ - `CLAUDE.local.md` — already uses managed-block pattern, not changing
116
+ - Plugin/marketplace format CLAUDE.md — separate code path
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pactkit"
7
- version = "2.14.1"
7
+ version = "2.14.2"
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.14.1"
3
+ __version__ = "2.14.2"
@@ -268,6 +268,10 @@ def main():
268
268
  viz_parser.add_argument("--reverse", action="store_true", default=False, help="Reverse BFS: find callers of entry")
269
269
  viz_parser.add_argument("--depth", type=int, default=0, help="Limit traversal depth (0=unlimited)")
270
270
  viz_parser.add_argument("--max-nodes", type=int, default=0, help="Truncate graph to N nodes (0=unlimited)")
271
+ viz_parser.add_argument("--sync", action="store_true", help="Force codegraph sync even if graphs are skipped")
272
+
273
+ # pactkit sync (STORY-slim-126: codegraph sync code enforcement)
274
+ subparsers.add_parser("sync", help="Sync codegraph index")
271
275
 
272
276
  # pactkit garden (STORY-slim-070)
273
277
  garden_parser = subparsers.add_parser("garden", help="Codebase quality patrol")
@@ -565,12 +569,18 @@ def main():
565
569
  elif args.command == "visualize":
566
570
  from pathlib import Path
567
571
 
568
- from pactkit.lazy_visualize import run_visualize_graphs, run_visualize_single, should_visualize
572
+ from pactkit.lazy_visualize import codegraph_sync, run_visualize_graphs, run_visualize_single, should_visualize
569
573
 
570
574
  project_root = Path.cwd()
571
575
  if args.lazy:
572
576
  should_run, reason = should_visualize(project_root, stack=args.stack)
573
577
  if not should_run:
578
+ if args.sync:
579
+ synced, msg = codegraph_sync(project_root)
580
+ if synced:
581
+ print(f"🔄 {msg}")
582
+ elif "skipped" not in msg:
583
+ print(f"codegraph: {msg}")
574
584
  print(reason)
575
585
  raise SystemExit(0)
576
586
  print(f"Visualize needed: {reason}")
@@ -584,6 +594,18 @@ def main():
584
594
  else:
585
595
  run_visualize_graphs(project_root, focus=args.focus)
586
596
 
597
+ elif args.command == "sync":
598
+ from pathlib import Path
599
+
600
+ from pactkit.lazy_visualize import codegraph_sync
601
+
602
+ project_root = Path.cwd()
603
+ synced, msg = codegraph_sync(project_root)
604
+ if synced:
605
+ print(f"🔄 {msg}")
606
+ else:
607
+ print(f"codegraph: {msg}")
608
+
587
609
  elif args.command == "garden":
588
610
  from pathlib import Path
589
611
 
@@ -478,25 +478,9 @@ def auto_merge_config_file(path: Union[Path, str]) -> list[str]:
478
478
  for item in new_items:
479
479
  added.append(f"{key}: {item}")
480
480
 
481
- # --- Non-list sections: backfill missing with defaults (STORY-033, STORY-039) ---
482
- defaults = get_default_config()
483
- _BACKFILL_KEYS = (
484
- "ci",
485
- "issue_tracker",
486
- "lint_blocking",
487
- "auto_fix",
488
- "venv",
489
- "release",
490
- "regression",
491
- "check",
492
- "done",
493
- "e2e", # STORY-slim-022
494
- "visualize", # STORY-slim-028
495
- )
496
- for key in _BACKFILL_KEYS:
497
- if key not in user_data:
498
- user_data[key] = defaults[key]
499
- added.append(f"section: {key}")
481
+ # Non-list sections are NO LONGER backfilled (STORY-slim-126).
482
+ # Absent key = accept default. Users keep yaml minimal.
483
+ # Backfill only happens during `pactkit init` (scaffold).
500
484
 
501
485
  # STORY-slim-102: Remove stale version field from project yaml
502
486
  if "version" in user_data: