@wipcomputer/wip-ai-devops-toolbox 1.9.55 → 1.9.57

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 (538) hide show
  1. package/.worktrees/toolbox--release-notes/.license-guard.json +7 -0
  2. package/.worktrees/toolbox--release-notes/.publish-skill.json +4 -0
  3. package/.worktrees/toolbox--release-notes/CHANGELOG.md +1875 -0
  4. package/.worktrees/toolbox--release-notes/CLA.md +19 -0
  5. package/.worktrees/toolbox--release-notes/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  6. package/.worktrees/toolbox--release-notes/LICENSE +52 -0
  7. package/.worktrees/toolbox--release-notes/README.md +238 -0
  8. package/.worktrees/toolbox--release-notes/RELEASE-NOTES-v1-9-56.md +42 -0
  9. package/.worktrees/toolbox--release-notes/SKILL.md +821 -0
  10. package/.worktrees/toolbox--release-notes/TECHNICAL.md +416 -0
  11. package/.worktrees/toolbox--release-notes/UNIVERSAL-INTERFACE.md +180 -0
  12. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  13. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  14. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  15. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  16. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  17. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  18. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  19. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  20. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  21. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  22. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  23. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  24. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  25. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  26. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  27. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  28. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  29. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  30. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  31. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  32. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  33. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  34. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  35. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  36. package/.worktrees/toolbox--release-notes/_trash/guide 2/DEV-GUIDE.md +487 -0
  37. package/.worktrees/toolbox--release-notes/_trash/guide 2/scripts/deploy-public.sh +152 -0
  38. package/.worktrees/toolbox--release-notes/package.json +27 -0
  39. package/.worktrees/toolbox--release-notes/scripts/SKILL-deploy-public.md +61 -0
  40. package/.worktrees/toolbox--release-notes/scripts/SKILL-post-merge-rename.md +47 -0
  41. package/.worktrees/toolbox--release-notes/scripts/deploy-public.sh +345 -0
  42. package/.worktrees/toolbox--release-notes/scripts/post-merge-rename.sh +210 -0
  43. package/.worktrees/toolbox--release-notes/scripts/publish-skill.sh +134 -0
  44. package/.worktrees/toolbox--release-notes/templates/global-claude-md.md +73 -0
  45. package/.worktrees/toolbox--release-notes/templates/repo-claude-md.template +24 -0
  46. package/.worktrees/toolbox--release-notes/tools/deploy-public/LICENSE +52 -0
  47. package/.worktrees/toolbox--release-notes/tools/deploy-public/README.md +31 -0
  48. package/.worktrees/toolbox--release-notes/tools/deploy-public/SKILL.md +71 -0
  49. package/.worktrees/toolbox--release-notes/tools/deploy-public/deploy-public.sh +264 -0
  50. package/.worktrees/toolbox--release-notes/tools/deploy-public/package.json +9 -0
  51. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/LICENSE +52 -0
  52. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/README.md +46 -0
  53. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/backup.sh +16 -0
  54. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/branch-protect.sh +39 -0
  55. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/crystal-capture.sh +19 -0
  56. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/setup-shell.sh +27 -0
  57. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/visibility-audit.sh +27 -0
  58. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/LICENSE +52 -0
  59. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/README.md +29 -0
  60. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/SKILL.md +57 -0
  61. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/package.json +9 -0
  62. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/post-merge-rename.sh +122 -0
  63. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/INSTALL.md +41 -0
  64. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/guard.mjs +459 -0
  65. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/package.json +18 -0
  66. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/CHANGELOG.md +6 -0
  67. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/LICENSE +52 -0
  68. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/README.md +113 -0
  69. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/REFERENCE.md +86 -0
  70. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/SKILL.md +105 -0
  71. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/guard.mjs +161 -0
  72. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/openclaw.plugin.json +8 -0
  73. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/package.json +27 -0
  74. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/test.sh +119 -0
  75. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/LICENSE +52 -0
  76. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/README.md +69 -0
  77. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/SKILL.md +65 -0
  78. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/cli.mjs +472 -0
  79. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/core.mjs +310 -0
  80. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/guard.mjs +146 -0
  81. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/package.json +22 -0
  82. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/CHANGELOG.md +17 -0
  83. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/LICENSE +52 -0
  84. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/README.md +200 -0
  85. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/SKILL.md +111 -0
  86. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  87. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js +170 -0
  88. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  89. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  90. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js +104 -0
  91. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  92. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  93. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js +5 -0
  94. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js.map +1 -0
  95. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  96. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js +72 -0
  97. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  98. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  99. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js +227 -0
  100. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  101. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  102. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js +325 -0
  103. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  104. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  105. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  106. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/mcp-server.mjs +119 -0
  107. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package-lock.json +54 -0
  108. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package.json +43 -0
  109. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/cli/index.ts +189 -0
  110. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/detector.ts +130 -0
  111. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/index.ts +4 -0
  112. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/ledger.ts +116 -0
  113. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/reporter.ts +255 -0
  114. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/scanner.ts +367 -0
  115. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/tsconfig.json +16 -0
  116. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/README.md +49 -0
  117. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/SKILL.md +84 -0
  118. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/format.mjs +597 -0
  119. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/package.json +15 -0
  120. package/.worktrees/toolbox--release-notes/tools/wip-release/CHANGELOG.md +42 -0
  121. package/.worktrees/toolbox--release-notes/tools/wip-release/LICENSE +52 -0
  122. package/.worktrees/toolbox--release-notes/tools/wip-release/README.md +45 -0
  123. package/.worktrees/toolbox--release-notes/tools/wip-release/REFERENCE.md +100 -0
  124. package/.worktrees/toolbox--release-notes/tools/wip-release/SKILL.md +139 -0
  125. package/.worktrees/toolbox--release-notes/tools/wip-release/cli.js +175 -0
  126. package/.worktrees/toolbox--release-notes/tools/wip-release/core.mjs +1664 -0
  127. package/.worktrees/toolbox--release-notes/tools/wip-release/mcp-server.mjs +113 -0
  128. package/.worktrees/toolbox--release-notes/tools/wip-release/package.json +36 -0
  129. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/README.md +38 -0
  130. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/SKILL.md +77 -0
  131. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/init.mjs +148 -0
  132. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/package.json +11 -0
  133. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_sort/README.md +15 -0
  134. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_trash/README.md +16 -0
  135. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  136. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  137. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  138. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  139. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  140. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  141. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/read-me-first.md +80 -0
  142. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/LICENSE +52 -0
  143. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/README.md +86 -0
  144. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  145. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/cli.js +93 -0
  146. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/core.mjs +122 -0
  147. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  148. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  149. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  150. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/package.json +31 -0
  151. package/.worktrees/toolbox--release-notes/tools/wip-repos/LICENSE +52 -0
  152. package/.worktrees/toolbox--release-notes/tools/wip-repos/README.md +77 -0
  153. package/.worktrees/toolbox--release-notes/tools/wip-repos/SKILL.md +80 -0
  154. package/.worktrees/toolbox--release-notes/tools/wip-repos/claude.mjs +248 -0
  155. package/.worktrees/toolbox--release-notes/tools/wip-repos/cli.mjs +191 -0
  156. package/.worktrees/toolbox--release-notes/tools/wip-repos/core.mjs +290 -0
  157. package/.worktrees/toolbox--release-notes/tools/wip-repos/mcp-server.mjs +157 -0
  158. package/.worktrees/toolbox--release-notes/tools/wip-repos/package.json +34 -0
  159. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/CHANGELOG.md +57 -0
  160. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/LICENSE +52 -0
  161. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/README.md +81 -0
  162. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/REFERENCE.md +122 -0
  163. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SKILL.md +87 -0
  164. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SPEC.md +206 -0
  165. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/detect.mjs +130 -0
  166. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  167. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  168. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  169. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  170. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  171. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  172. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/install.js +930 -0
  173. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/package.json +32 -0
  174. package/.worktrees/toolbox--save-stale/.license-guard.json +7 -0
  175. package/.worktrees/toolbox--save-stale/.publish-skill.json +4 -0
  176. package/.worktrees/toolbox--save-stale/CHANGELOG.md +1875 -0
  177. package/.worktrees/toolbox--save-stale/CLA.md +19 -0
  178. package/.worktrees/toolbox--save-stale/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  179. package/.worktrees/toolbox--save-stale/LICENSE +52 -0
  180. package/.worktrees/toolbox--save-stale/README.md +238 -0
  181. package/.worktrees/toolbox--save-stale/SKILL.md +821 -0
  182. package/.worktrees/toolbox--save-stale/TECHNICAL.md +416 -0
  183. package/.worktrees/toolbox--save-stale/UNIVERSAL-INTERFACE.md +180 -0
  184. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  185. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  186. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  187. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  188. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  189. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  190. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  191. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  192. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  193. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  194. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  195. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  196. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  197. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  198. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  199. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  200. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  201. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  202. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  203. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  204. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  205. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  206. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  207. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  208. package/.worktrees/toolbox--save-stale/_trash/guide 2/DEV-GUIDE.md +487 -0
  209. package/.worktrees/toolbox--save-stale/_trash/guide 2/scripts/deploy-public.sh +152 -0
  210. package/.worktrees/toolbox--save-stale/package.json +27 -0
  211. package/.worktrees/toolbox--save-stale/scripts/SKILL-deploy-public.md +61 -0
  212. package/.worktrees/toolbox--save-stale/scripts/SKILL-post-merge-rename.md +47 -0
  213. package/.worktrees/toolbox--save-stale/scripts/deploy-public.sh +345 -0
  214. package/.worktrees/toolbox--save-stale/scripts/post-merge-rename.sh +210 -0
  215. package/.worktrees/toolbox--save-stale/scripts/publish-skill.sh +134 -0
  216. package/.worktrees/toolbox--save-stale/templates/global-claude-md.md +73 -0
  217. package/.worktrees/toolbox--save-stale/templates/repo-claude-md.template +24 -0
  218. package/.worktrees/toolbox--save-stale/tools/deploy-public/LICENSE +52 -0
  219. package/.worktrees/toolbox--save-stale/tools/deploy-public/README.md +31 -0
  220. package/.worktrees/toolbox--save-stale/tools/deploy-public/SKILL.md +71 -0
  221. package/.worktrees/toolbox--save-stale/tools/deploy-public/deploy-public.sh +264 -0
  222. package/.worktrees/toolbox--save-stale/tools/deploy-public/package.json +9 -0
  223. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/LICENSE +52 -0
  224. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/README.md +46 -0
  225. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/backup.sh +16 -0
  226. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/branch-protect.sh +39 -0
  227. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/crystal-capture.sh +19 -0
  228. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/setup-shell.sh +27 -0
  229. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/visibility-audit.sh +27 -0
  230. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/LICENSE +52 -0
  231. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/README.md +29 -0
  232. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/SKILL.md +57 -0
  233. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/package.json +9 -0
  234. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/post-merge-rename.sh +122 -0
  235. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/INSTALL.md +41 -0
  236. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/guard.mjs +459 -0
  237. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/package.json +18 -0
  238. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/CHANGELOG.md +6 -0
  239. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/LICENSE +52 -0
  240. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/README.md +113 -0
  241. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/REFERENCE.md +86 -0
  242. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/SKILL.md +105 -0
  243. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/guard.mjs +161 -0
  244. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/openclaw.plugin.json +8 -0
  245. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/package.json +27 -0
  246. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/test.sh +119 -0
  247. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/LICENSE +52 -0
  248. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/README.md +69 -0
  249. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/SKILL.md +65 -0
  250. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/cli.mjs +472 -0
  251. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/core.mjs +310 -0
  252. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/guard.mjs +146 -0
  253. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/package.json +22 -0
  254. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/CHANGELOG.md +17 -0
  255. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/LICENSE +52 -0
  256. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/README.md +200 -0
  257. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/SKILL.md +111 -0
  258. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  259. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js +170 -0
  260. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  261. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  262. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js +104 -0
  263. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  264. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  265. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js +5 -0
  266. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js.map +1 -0
  267. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  268. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js +72 -0
  269. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  270. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  271. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js +227 -0
  272. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  273. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  274. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js +325 -0
  275. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  276. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  277. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  278. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/mcp-server.mjs +119 -0
  279. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package-lock.json +54 -0
  280. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package.json +43 -0
  281. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/cli/index.ts +189 -0
  282. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/detector.ts +130 -0
  283. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/index.ts +4 -0
  284. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/ledger.ts +116 -0
  285. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/reporter.ts +255 -0
  286. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/scanner.ts +367 -0
  287. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/tsconfig.json +16 -0
  288. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/README.md +49 -0
  289. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/SKILL.md +84 -0
  290. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/format.mjs +597 -0
  291. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/package.json +15 -0
  292. package/.worktrees/toolbox--save-stale/tools/wip-release/CHANGELOG.md +42 -0
  293. package/.worktrees/toolbox--save-stale/tools/wip-release/LICENSE +52 -0
  294. package/.worktrees/toolbox--save-stale/tools/wip-release/README.md +45 -0
  295. package/.worktrees/toolbox--save-stale/tools/wip-release/REFERENCE.md +100 -0
  296. package/.worktrees/toolbox--save-stale/tools/wip-release/SKILL.md +139 -0
  297. package/.worktrees/toolbox--save-stale/tools/wip-release/cli.js +175 -0
  298. package/.worktrees/toolbox--save-stale/tools/wip-release/core.mjs +1664 -0
  299. package/.worktrees/toolbox--save-stale/tools/wip-release/mcp-server.mjs +113 -0
  300. package/.worktrees/toolbox--save-stale/tools/wip-release/package.json +36 -0
  301. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/README.md +38 -0
  302. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/SKILL.md +77 -0
  303. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/init.mjs +148 -0
  304. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/package.json +11 -0
  305. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_sort/README.md +15 -0
  306. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_trash/README.md +16 -0
  307. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  308. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  309. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  310. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  311. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  312. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  313. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/read-me-first.md +80 -0
  314. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/LICENSE +52 -0
  315. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/README.md +86 -0
  316. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  317. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/cli.js +93 -0
  318. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/core.mjs +122 -0
  319. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  320. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  321. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  322. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/package.json +31 -0
  323. package/.worktrees/toolbox--save-stale/tools/wip-repos/LICENSE +52 -0
  324. package/.worktrees/toolbox--save-stale/tools/wip-repos/README.md +77 -0
  325. package/.worktrees/toolbox--save-stale/tools/wip-repos/SKILL.md +80 -0
  326. package/.worktrees/toolbox--save-stale/tools/wip-repos/claude.mjs +248 -0
  327. package/.worktrees/toolbox--save-stale/tools/wip-repos/cli.mjs +191 -0
  328. package/.worktrees/toolbox--save-stale/tools/wip-repos/core.mjs +290 -0
  329. package/.worktrees/toolbox--save-stale/tools/wip-repos/mcp-server.mjs +157 -0
  330. package/.worktrees/toolbox--save-stale/tools/wip-repos/package.json +34 -0
  331. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/CHANGELOG.md +57 -0
  332. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/LICENSE +52 -0
  333. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/README.md +81 -0
  334. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/REFERENCE.md +122 -0
  335. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SKILL.md +87 -0
  336. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SPEC.md +206 -0
  337. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/detect.mjs +130 -0
  338. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  339. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  340. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  341. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  342. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  343. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  344. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/install.js +930 -0
  345. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/package.json +32 -0
  346. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.license-guard.json +7 -0
  347. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.publish-skill.json +4 -0
  348. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CHANGELOG.md +1875 -0
  349. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CLA.md +19 -0
  350. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  351. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/LICENSE +52 -0
  352. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/README.md +238 -0
  353. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/SKILL.md +821 -0
  354. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/TECHNICAL.md +416 -0
  355. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/UNIVERSAL-INTERFACE.md +180 -0
  356. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  357. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  358. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  359. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  360. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  361. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  362. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  363. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  364. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  365. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  366. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  367. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  368. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  369. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  370. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  371. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  372. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  373. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  374. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  375. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  376. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  377. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  378. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  379. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  380. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/DEV-GUIDE.md +487 -0
  381. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/scripts/deploy-public.sh +152 -0
  382. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/package.json +27 -0
  383. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-deploy-public.md +61 -0
  384. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-post-merge-rename.md +47 -0
  385. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/deploy-public.sh +345 -0
  386. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/post-merge-rename.sh +210 -0
  387. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/publish-skill.sh +134 -0
  388. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/global-claude-md.md +73 -0
  389. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/repo-claude-md.template +24 -0
  390. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/LICENSE +52 -0
  391. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/README.md +31 -0
  392. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/SKILL.md +71 -0
  393. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/deploy-public.sh +264 -0
  394. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/package.json +9 -0
  395. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/LICENSE +52 -0
  396. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/README.md +46 -0
  397. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/backup.sh +16 -0
  398. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/branch-protect.sh +39 -0
  399. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/crystal-capture.sh +19 -0
  400. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/setup-shell.sh +27 -0
  401. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/visibility-audit.sh +27 -0
  402. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/LICENSE +52 -0
  403. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/README.md +29 -0
  404. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/SKILL.md +57 -0
  405. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/package.json +9 -0
  406. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/post-merge-rename.sh +122 -0
  407. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/INSTALL.md +41 -0
  408. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/guard.mjs +418 -0
  409. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/package.json +18 -0
  410. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/CHANGELOG.md +6 -0
  411. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/LICENSE +52 -0
  412. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/README.md +113 -0
  413. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/REFERENCE.md +86 -0
  414. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/SKILL.md +105 -0
  415. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/guard.mjs +161 -0
  416. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/openclaw.plugin.json +8 -0
  417. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/package.json +27 -0
  418. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/test.sh +119 -0
  419. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/LICENSE +52 -0
  420. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/README.md +69 -0
  421. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/SKILL.md +65 -0
  422. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/cli.mjs +472 -0
  423. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/core.mjs +310 -0
  424. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/guard.mjs +146 -0
  425. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/package.json +22 -0
  426. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/CHANGELOG.md +17 -0
  427. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/LICENSE +52 -0
  428. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/README.md +200 -0
  429. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/SKILL.md +111 -0
  430. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  431. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js +170 -0
  432. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  433. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  434. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js +104 -0
  435. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  436. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  437. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js +5 -0
  438. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js.map +1 -0
  439. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  440. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js +72 -0
  441. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  442. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  443. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js +227 -0
  444. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  445. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  446. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js +325 -0
  447. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  448. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  449. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  450. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/mcp-server.mjs +119 -0
  451. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package-lock.json +54 -0
  452. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package.json +43 -0
  453. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/cli/index.ts +189 -0
  454. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/detector.ts +130 -0
  455. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/index.ts +4 -0
  456. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/ledger.ts +116 -0
  457. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/reporter.ts +255 -0
  458. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/scanner.ts +367 -0
  459. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/tsconfig.json +16 -0
  460. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/README.md +49 -0
  461. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/SKILL.md +84 -0
  462. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/format.mjs +597 -0
  463. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/package.json +15 -0
  464. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/CHANGELOG.md +42 -0
  465. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/LICENSE +52 -0
  466. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/README.md +45 -0
  467. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/REFERENCE.md +100 -0
  468. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/SKILL.md +139 -0
  469. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/cli.js +175 -0
  470. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/core.mjs +1664 -0
  471. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/mcp-server.mjs +113 -0
  472. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/package.json +36 -0
  473. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/README.md +38 -0
  474. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/SKILL.md +77 -0
  475. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/init.mjs +148 -0
  476. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/package.json +11 -0
  477. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_sort/README.md +15 -0
  478. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_trash/README.md +16 -0
  479. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  480. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  481. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  482. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  483. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  484. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  485. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/read-me-first.md +80 -0
  486. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/LICENSE +52 -0
  487. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/README.md +86 -0
  488. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  489. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/cli.js +93 -0
  490. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/core.mjs +122 -0
  491. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  492. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  493. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  494. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/package.json +31 -0
  495. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/LICENSE +52 -0
  496. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/README.md +77 -0
  497. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/SKILL.md +80 -0
  498. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/claude.mjs +248 -0
  499. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/cli.mjs +191 -0
  500. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/core.mjs +290 -0
  501. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/mcp-server.mjs +157 -0
  502. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/package.json +34 -0
  503. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/CHANGELOG.md +57 -0
  504. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/LICENSE +52 -0
  505. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/README.md +81 -0
  506. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/REFERENCE.md +122 -0
  507. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SKILL.md +87 -0
  508. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SPEC.md +206 -0
  509. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/detect.mjs +130 -0
  510. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  511. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  512. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  513. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  514. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  515. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  516. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/install.js +930 -0
  517. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/package.json +32 -0
  518. package/CHANGELOG.md +66 -0
  519. package/DEV-GUIDE-GENERAL-PUBLIC.md +6 -6
  520. package/SKILL.md +1 -1
  521. package/_trash/RELEASE-NOTES-v1-9-56.md +42 -0
  522. package/_trash/RELEASE-NOTES-v1-9-57.md +18 -0
  523. package/package.json +1 -1
  524. package/scripts/deploy-public.sh +3 -1
  525. package/tools/deploy-public/package.json +1 -1
  526. package/tools/post-merge-rename/package.json +1 -1
  527. package/tools/wip-branch-guard/guard.mjs +46 -5
  528. package/tools/wip-branch-guard/package.json +1 -1
  529. package/tools/wip-file-guard/package.json +1 -1
  530. package/tools/wip-license-guard/package.json +1 -1
  531. package/tools/wip-license-hook/package.json +1 -1
  532. package/tools/wip-readme-format/package.json +1 -1
  533. package/tools/wip-release/core.mjs +3 -3
  534. package/tools/wip-release/package.json +1 -1
  535. package/tools/wip-repo-init/package.json +1 -1
  536. package/tools/wip-repo-permissions-hook/package.json +1 -1
  537. package/tools/wip-repos/package.json +1 -1
  538. package/tools/wip-universal-installer/package.json +1 -1
@@ -0,0 +1,1875 @@
1
+ # Changelog
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+ ## 1.9.55 (2026-03-28)
36
+
37
+ # Release Notes: wip-ai-devops-toolbox v1.9.55
38
+
39
+ Force redeploy: .worktrees guard fix.
40
+
41
+ ## The story
42
+
43
+ v1.9.53 had the guard fix but deploy-public was missed. v1.9.54 force-redeployed but installer had already cached v1.9.54. This version ensures the public repo and npm are in sync so ldm install deploys the correct guard.mjs with .worktrees convention.
44
+
45
+ ## Issues closed
46
+
47
+ - #240 (partial)
48
+
49
+ ## 1.9.54 (2026-03-28)
50
+
51
+ # Release Notes: wip-ai-devops-toolbox v1.9.54
52
+
53
+ Force redeploy: guard files were stale after v1.9.53.
54
+
55
+ ## The story
56
+
57
+ v1.9.53 published the .worktrees guard fix to npm but ldm install saw the version as current and skipped redeploying the files. The deployed guard.mjs was still the old version. This release forces a version bump so the installer re-deploys.
58
+
59
+ This is a bug in the installer: it checks version numbers but not file contents. Filed for future fix.
60
+
61
+ ## Issues closed
62
+
63
+ - #240 (partial: .worktrees convention)
64
+
65
+ ## 1.9.53 (2026-03-28)
66
+
67
+ # Release Notes: wip-ai-devops-toolbox v1.9.53
68
+
69
+ **One-line summary of what this release does**
70
+
71
+ Tell the story. What was broken or missing? What did we build? Why does the user care?
72
+ Write at least one real paragraph of prose. Not just bullets. The release notes gate
73
+ will block if there is no narrative. Bullets are fine for details, but the story comes first.
74
+
75
+ ## The story
76
+
77
+ (Write a paragraph here. What was the problem? What does this release fix? Why does it matter?
78
+ This is what users read. Make it worth reading.)
79
+
80
+ ## Issues closed
81
+
82
+ - #282
83
+
84
+ ## How to verify
85
+
86
+ ```bash
87
+ # Commands to test the changes
88
+ ```
89
+
90
+ ## 1.9.52 (2026-03-27)
91
+
92
+ # Release Notes: wip-ai-devops-toolbox v1.9.52
93
+
94
+ **Fix branch guard false-blocking bash commands targeting worktree paths**
95
+
96
+ ## What changed
97
+
98
+ - Branch guard now extracts absolute paths from any bash command (mkdir, cp, mv, touch, etc.) and resolves the git branch from the target path's repo, not the CWD
99
+ - `findRepoRoot()` improved to walk up to existing directories for paths that don't exist yet (handles mkdir for new directories)
100
+ - Added `.ldm/worktrees` to allowed worktree locations alongside `_worktrees/` and `.claude/worktrees`
101
+
102
+ ## Why
103
+
104
+ When Claude Code launches from `~/wipcomputerinc/` (on main) and runs bash commands targeting files inside a worktree (e.g., `mkdir -p /path/to/_worktrees/repo--branch/new-dir/`), the guard only knew how to extract paths from `cd` and `git -C` patterns. Any other command fell back to CWD resolution, saw "main", and blocked incorrectly. This caused minutes of wasted time every session.
105
+
106
+ ## Issues closed
107
+
108
+ - wipcomputer/wip-ldm-os#187
109
+
110
+ ## How to verify
111
+
112
+ ```bash
113
+ # From CWD on main, this should no longer be blocked:
114
+ # mkdir -p /path/to/_worktrees/repo--branch/new-directory/
115
+ # cp file.txt /path/to/_worktrees/repo--branch/
116
+ ```
117
+
118
+ ## 1.9.51 (2026-03-24)
119
+
120
+ # Release Notes: wip-ai-devops-toolbox v1.9.51
121
+
122
+ ## Branch Guard: Workspace Files Allowlist (#185)
123
+
124
+ Added TOOLS.md, MEMORY.md, IDENTITY.md, SOUL.md, WHERE-TO-WRITE.md, HEARTBEAT.md to the shared state allowlist. Both agents can now write to workspace files on main without being blocked.
125
+
126
+ Previously only SHARED-CONTEXT.md was allowed. This broke Lesa's ability to edit her own workspace files during the migration to ~/wipcomputerinc/.
127
+
128
+ ## TECHNICAL.md: Backup Documentation
129
+
130
+ Updated LDM Dev Tools.app backup section to reflect the unified backup system. backup.sh now calls `~/.ldm/bin/ldm-backup.sh` (deployed by ldm install from wip-ldm-os-private/scripts/).
131
+
132
+ ## 1.9.50 (2026-03-20)
133
+
134
+ # Release Notes: wip-ai-devops-toolbox v1.9.50
135
+
136
+ **wip-release: require product update doc on every release.**
137
+
138
+ ## What changed
139
+
140
+ New quality gate in wip-release: checks that `ai/dev-updates/product-update/*-product-update.md` was modified since the last release tag. Same pattern as dev-updates, roadmap, and readme-first checks.
141
+
142
+ The product update doc is a human-readable test guide. Each release entry has: what changed, how it's supposed to work, and how to test. New entries go at the top. Additive only.
143
+
144
+ ## Why
145
+
146
+ Three repos now have product update docs but nothing enforced keeping them current. Without the gate, the docs will drift immediately (same problem we had with TECHNICAL.md).
147
+
148
+ ## Issues closed
149
+
150
+ - #220
151
+
152
+ ## How to verify
153
+
154
+ ```bash
155
+ wip-release patch --dry-run
156
+ # Should warn if product update doc not modified since last release
157
+ ```
158
+
159
+ ## 1.9.49 (2026-03-20)
160
+
161
+ # Release Notes: wip-ai-devops-toolbox v1.9.49
162
+
163
+ **TECHNICAL.md audit: 2 weeks of undocumented features now documented.**
164
+
165
+ ## What changed
166
+
167
+ Full TECHNICAL.md audit covering v1.9.15 through v1.9.48. Two passes. Key additions:
168
+
169
+ - **wip-release quality gates:** Technical docs gate, interface coverage gate, product docs auto-sync, all skip flags documented.
170
+ - **deploy-public.sh:** Full 8-step pipeline including GitHub Packages publishing, repo URL rewrite, co-author sync.
171
+ - **wip-license-guard:** Now documented as both CLI and Claude Code PreToolUse hook (guard.mjs). Enforcement details.
172
+ - **wip-branch-guard:** Worktree requirement on branches, non-repo file passthrough, workflow teaching messages.
173
+ - **wip-repos claude:** Cross-repo CLAUDE.md ecosystem generator fully documented.
174
+ - **Source code table:** Missing files added (guard.mjs, claude.mjs, mcp-server.mjs).
175
+ - **Log paths:** Fixed stale /tmp/ references to ~/.ldm/logs/.
176
+
177
+ ## Why
178
+
179
+ 15 releases shipped without TECHNICAL.md updates. Agents reading the docs were missing critical features: release gates, license enforcement hooks, deploy pipeline details.
180
+
181
+ ## Issues closed
182
+
183
+ - #218
184
+
185
+ ## How to verify
186
+
187
+ ```bash
188
+ grep "Interface coverage" TECHNICAL.md # new gate
189
+ grep "guard.mjs" TECHNICAL.md # license-guard hook
190
+ grep "GitHub Packages" TECHNICAL.md # deploy pipeline
191
+ ```
192
+
193
+ ## 1.9.48 (2026-03-20)
194
+
195
+ # Release Notes: wip-ai-devops-toolbox v1.9.48
196
+
197
+ **Document wip-repos claude command in SKILL.md and TECHNICAL.md.**
198
+
199
+ ## What changed
200
+
201
+ - SKILL.md: added `wip-repos claude` commands to the wip-repos section
202
+ - TECHNICAL.md: full documentation of how the ecosystem generator works, template locations, delimiter convention
203
+
204
+ ## Why
205
+
206
+ v1.9.47 shipped the `wip-repos claude` command without updating technical docs. Now documented.
207
+
208
+ ## Issues closed
209
+
210
+ - #212 (docs portion)
211
+
212
+ ## How to verify
213
+
214
+ ```bash
215
+ grep "wip-repos claude" SKILL.md TECHNICAL.md
216
+ ```
217
+
218
+ ## 1.9.47 (2026-03-20)
219
+
220
+ # Release Notes: wip-ai-devops-toolbox v1.9.47
221
+
222
+ **New: `wip-repos claude` command + CLAUDE.md templates.**
223
+
224
+ ## What changed
225
+
226
+ ### `wip-repos claude` (Phases 1-3 of the CLAUDE.md plan)
227
+
228
+ New subcommand that generates cross-repo ecosystem sections in CLAUDE.md files. When an agent opens repo-A, it can't read repo-B. This command pre-generates the context.
229
+
230
+ ```bash
231
+ wip-repos claude # regenerate all repos
232
+ wip-repos claude my-repo # regenerate one repo
233
+ wip-repos claude --init # create CLAUDE.md for repos missing one
234
+ wip-repos claude --dry-run # preview changes
235
+ ```
236
+
237
+ Features:
238
+ - Reads all repos from manifest, extracts metadata (package.json, SKILL.md, directory structure)
239
+ - Generates `## Ecosystem` sections with delimiter comments (`<!-- wip-repos:start/end -->`)
240
+ - Hand-written sections are never overwritten
241
+ - Relevance filtering: only related repos shown (same category + core repos)
242
+ - `--init` creates starter CLAUDE.md from template for repos missing one
243
+
244
+ ### Templates
245
+
246
+ - `templates/global-claude-md.md` ... universal CLAUDE.md for ~/.claude/CLAUDE.md
247
+ - `templates/repo-claude-md.template` ... per-repo starter with ecosystem placeholder
248
+
249
+ ## Why
250
+
251
+ Agents lose context across repos. They can't read sibling repos at runtime. Pre-generating cross-repo maps into CLAUDE.md solves this without requiring runtime access.
252
+
253
+ ## Issues closed
254
+
255
+ - #212 (partial: Phases 1-3 of 6)
256
+
257
+ ## How to verify
258
+
259
+ ```bash
260
+ wip-repos claude --dry-run
261
+ ```
262
+
263
+ ## 1.9.46 (2026-03-18)
264
+
265
+ # Release Notes: wip-ai-devops-toolbox v1.9.46
266
+
267
+ **Centralized worktree management: guard rule, wip-release prune, Dev Guide convention.**
268
+
269
+ ## What changed
270
+
271
+ ### Guard: worktree path warning (#212)
272
+ Branch guard now warns when `git worktree add` creates a worktree outside `_worktrees/`. Shows the convention and suggests `ldm worktree add`. Warning only, not a hard block.
273
+
274
+ ### wip-release: worktree prune (#212)
275
+ New step 12 in the release pipeline. After branch cleanup, prunes stale worktrees from `_worktrees/` whose branches are merged into main. Automatic cleanup after every release.
276
+
277
+ ### Dev Guide: _worktrees/ convention (#212)
278
+ Documents the centralized worktree convention:
279
+ - All worktrees go in `_worktrees/<repo-name>--<branch-suffix>/`
280
+ - Use `ldm worktree add` (auto-detects repo, creates in the right place)
281
+ - Guard warns about worktrees outside the convention
282
+ - `wip-release` auto-prunes merged worktrees
283
+
284
+ ## Why
285
+
286
+ Worktrees created as repo siblings confused iCloud sync, looked like real repos in directory listings, and were never cleaned up. This session alone created 10+ stale worktrees. The convention keeps them organized and the release pipeline cleans them automatically.
287
+
288
+ ## Issues closed
289
+
290
+ - #212
291
+ - #213
292
+
293
+ ## How to verify
294
+
295
+ ```bash
296
+ # Guard warning:
297
+ cd /path/to/repo
298
+ git worktree add ../my-worktree -b test # should warn about _worktrees/
299
+
300
+ # Correct path:
301
+ ldm worktree add cc-mini/test # creates _worktrees/<repo>--cc-mini--test/
302
+ ```
303
+
304
+ ## 1.9.45 (2026-03-18)
305
+
306
+ # Release Notes: wip-ai-devops-toolbox v1.9.45
307
+
308
+ **Guard now teaches the workflow instead of just blocking.**
309
+
310
+ ## What changed
311
+
312
+ - **Branch guard error messages overhauled (#213).** When the guard blocks a write on main, it now shows the full 8-step process: worktree, branch, commit, push, PR, merge, wip-release, deploy-public. Includes the lesson that release notes go on the feature branch, not as a separate PR.
313
+ - **Separate error for "on branch but not in worktree."** Tells the agent to go back to main and create a worktree properly.
314
+ - **CLAUDE.md added to shared state allowlist.** Was patched in the deployed guard but missing from source. Now in sync.
315
+
316
+ ## Why
317
+
318
+ Agents kept getting blocked by the guard and then trying workarounds instead of following the process. The error message said "Use a worktree" but didn't explain the full workflow. Today's session hit this 5+ times. The guard works. The gap was agent knowledge.
319
+
320
+ ## Issues closed
321
+
322
+ - #213
323
+ - #256
324
+
325
+ ## How to verify
326
+
327
+ ```bash
328
+ # In any repo on main, try to edit a file. The error should show the full workflow.
329
+ # In any repo on a branch (not worktree), try to edit. Should show worktree instructions.
330
+ ```
331
+
332
+ ## 1.9.44 (2026-03-17)
333
+
334
+ # Guard non-repo files fix + UTC date fix
335
+
336
+ Two bugs fixed in one PR.
337
+
338
+ ## Bug 1: Guard blocks files outside git repos (#77)
339
+
340
+ **Problem:** When Write/Edit targets a file outside any git repo (e.g. `~/.claude/plans/`), `findRepoRoot()` returns null. The guard fell back to CWD (`~/.openclaw` on main) and blocked the operation. Files outside repos aren't the guard's concern.
341
+
342
+ **Fix:** If `findRepoRoot(filePath)` returns null for Write/Edit operations, allow immediately. The guard only protects git repos from direct-on-main edits.
343
+
344
+ **File:** `tools/wip-branch-guard/guard.mjs`
345
+
346
+ ## Bug 2: UTC date mismatch in wip-release
347
+
348
+ **Problem:** Dev-update files are named with local date (e.g. `2026-03-16--cc-mini--...md`). But `new Date().toISOString().split('T')[0]` returns UTC date. After midnight UTC (4 PM PST), the dates diverge. Release notes gate fails to find today's dev-update.
349
+
350
+ **Fix:** Replaced all three instances of `toISOString()` date extraction with explicit local date construction using `getFullYear()/getMonth()/getDate()`.
351
+
352
+ **Files:**
353
+ - `tools/wip-release/cli.js` (line 80, dev-update detection)
354
+ - `tools/wip-release/core.mjs` (line 92, CHANGELOG date)
355
+ - `tools/wip-release/core.mjs` (line 582, product docs sync date)
356
+
357
+ ## 1.9.43 (2026-03-17)
358
+
359
+ # Guard non-repo files fix + UTC date fix
360
+
361
+ Two bugs fixed in one PR.
362
+
363
+ ## Bug 1: Guard blocks files outside git repos (#77)
364
+
365
+ **Problem:** When Write/Edit targets a file outside any git repo (e.g. `~/.claude/plans/`), `findRepoRoot()` returns null. The guard fell back to CWD (`~/.openclaw` on main) and blocked the operation. Files outside repos aren't the guard's concern.
366
+
367
+ **Fix:** If `findRepoRoot(filePath)` returns null for Write/Edit operations, allow immediately. The guard only protects git repos from direct-on-main edits.
368
+
369
+ **File:** `tools/wip-branch-guard/guard.mjs`
370
+
371
+ ## Bug 2: UTC date mismatch in wip-release
372
+
373
+ **Problem:** Dev-update files are named with local date (e.g. `2026-03-16--cc-mini--...md`). But `new Date().toISOString().split('T')[0]` returns UTC date. After midnight UTC (4 PM PST), the dates diverge. Release notes gate fails to find today's dev-update.
374
+
375
+ **Fix:** Replaced all three instances of `toISOString()` date extraction with explicit local date construction using `getFullYear()/getMonth()/getDate()`.
376
+
377
+ **Files:**
378
+ - `tools/wip-release/cli.js` (line 80, dev-update detection)
379
+ - `tools/wip-release/core.mjs` (line 92, CHANGELOG date)
380
+ - `tools/wip-release/core.mjs` (line 582, product docs sync date)
381
+
382
+ ## 1.9.42 (2026-03-17)
383
+
384
+ # Guard non-repo files fix + UTC date fix
385
+
386
+ Two bugs fixed in one PR.
387
+
388
+ ## Bug 1: Guard blocks files outside git repos (#77)
389
+
390
+ **Problem:** When Write/Edit targets a file outside any git repo (e.g. `~/.claude/plans/`), `findRepoRoot()` returns null. The guard fell back to CWD (`~/.openclaw` on main) and blocked the operation. Files outside repos aren't the guard's concern.
391
+
392
+ **Fix:** If `findRepoRoot(filePath)` returns null for Write/Edit operations, allow immediately. The guard only protects git repos from direct-on-main edits.
393
+
394
+ **File:** `tools/wip-branch-guard/guard.mjs`
395
+
396
+ ## Bug 2: UTC date mismatch in wip-release
397
+
398
+ **Problem:** Dev-update files are named with local date (e.g. `2026-03-16--cc-mini--...md`). But `new Date().toISOString().split('T')[0]` returns UTC date. After midnight UTC (4 PM PST), the dates diverge. Release notes gate fails to find today's dev-update.
399
+
400
+ **Fix:** Replaced all three instances of `toISOString()` date extraction with explicit local date construction using `getFullYear()/getMonth()/getDate()`.
401
+
402
+ **Files:**
403
+ - `tools/wip-release/cli.js` (line 80, dev-update detection)
404
+ - `tools/wip-release/core.mjs` (line 92, CHANGELOG date)
405
+ - `tools/wip-release/core.mjs` (line 582, product docs sync date)
406
+
407
+ ## 1.9.41 (2026-03-17)
408
+
409
+ # Doc enforcement gates for wip-release
410
+
411
+ **Date:** 2026-03-16
412
+ **Closes:** #117, #128
413
+
414
+ ## What changed
415
+
416
+ Two new pre-release gates in wip-release:
417
+
418
+ **Technical Docs Gate (#117):** When source code (*.mjs, *.js, *.ts) changed since the last release tag, checks that SKILL.md or TECHNICAL.md was also modified. Catches code shipping without doc updates. Warns on patch, blocks on minor/major. Skip with `--skip-tech-docs-check`.
419
+
420
+ **Interface Coverage Gate (#128):** For toolbox repos, scans each tool in tools/*/ for actual interfaces (CLI, Module, MCP, OC Plugin, Skill, CC Hook) and compares to the coverage table in README.md and SKILL.md. Reports: tools missing from table, interfaces detected but not marked Y, interfaces marked Y but not detected, tool count mismatches. Warns on patch, blocks on minor/major. Skip with `--skip-coverage-check`.
421
+
422
+ Both follow the same pattern as existing gates (checkProductDocs, checkStaleBranches). Both run in real and dry-run modes.
423
+
424
+ ## Why
425
+
426
+ Source code was shipping without doc updates constantly. SKILL.md and TECHNICAL.md fell behind the code. Interface coverage tables drifted from reality. These gates catch it before release instead of after.
427
+
428
+ ## 1.9.40 (2026-03-16)
429
+
430
+ # Auto-sync product docs version/date on release
431
+
432
+ **Date:** 2026-03-16
433
+ **Closes:** #202
434
+
435
+ ## What changed
436
+
437
+ wip-release now auto-updates version and date lines in product docs before the release commit. No more stale "Current version: v1.9.1" when you're shipping v1.9.39.
438
+
439
+ Files updated automatically:
440
+ - `ai/product/plans-prds/roadmap.md`: "Current version" and "Last updated"
441
+ - `ai/product/readme-first-product.md`: "Last updated" and "What's Built (as of vX.Y.Z)"
442
+
443
+ Runs between changelog update and git commit (step 3.75). Only touches files that exist. Only updates lines that match the expected patterns.
444
+
445
+ ## Why
446
+
447
+ These files were stale from v1.9.1 through v1.9.39 (8 days, 38 releases). Nobody remembered to update them. The existing product docs gate warned about it but couldn't fix it. Now it fixes itself.
448
+
449
+ ## 1.9.39 (2026-03-16)
450
+
451
+ # Wire license-guard as Claude Code PreToolUse hook
452
+
453
+ **Date:** 2026-03-16
454
+ **Closes:** #130
455
+
456
+ ## What changed
457
+
458
+ license-guard now registers as a Claude Code PreToolUse hook on install. Previously the hook code existed (hook.mjs) but was never wired into the deploy system. Now:
459
+
460
+ - Renamed hook.mjs to guard.mjs (matches file-guard/branch-guard convention that LDM OS deploy.mjs expects)
461
+ - Added `claudeCode.hook` config to package.json (event: PreToolUse, matcher: Bash, timeout: 5)
462
+ - On next `ldm install`, the hook auto-registers in ~/.claude/settings.json
463
+
464
+ The hook blocks git commit and git push when license compliance fails:
465
+ - LICENSE file missing
466
+ - Copyright doesn't match .license-guard.json config
467
+ - CLA.md missing
468
+ - README.md missing ## License section
469
+ - MIT+AGPL config but LICENSE or README only mentions MIT
470
+
471
+ Repos without .license-guard.json are not affected (the hook silently passes).
472
+
473
+ ## Also done
474
+
475
+ - Updated plan statuses: license guard Phase 1 complete, bootstrap LDM OS complete
476
+ - Bootstrap LDM OS was already shipped in install.js (lines 740-812)
477
+
478
+ ## 1.9.38 (2026-03-16)
479
+
480
+ # GitHub Packages publish from public repo
481
+
482
+ **Date:** 2026-03-16
483
+ **Closes:** #193
484
+
485
+ ## What changed
486
+
487
+ `deploy-public.sh` now publishes to GitHub Packages from the public repo clone after the npm publish step. Previously, GitHub Packages were only published from the private repo during `wip-release`, so they showed on the private repo's Packages tab. Users couldn't see them.
488
+
489
+ Now packages show on the public repo's Packages tab where users expect to find them. Uses `gh auth token` for authentication (already available from the gh CLI).
490
+
491
+ ## Why
492
+
493
+ The Packages tab on public repos was empty. Users visiting wipcomputer/wip-ldm-os or wipcomputer/wip-ai-devops-toolbox saw no packages even though they were published. The packages existed but were linked to the private repo.
494
+
495
+ ## 1.9.37 (2026-03-16)
496
+
497
+ # GitHub Packages publish from public repo
498
+
499
+ **Date:** 2026-03-16
500
+ **Closes:** #193
501
+
502
+ ## What changed
503
+
504
+ `deploy-public.sh` now publishes to GitHub Packages from the public repo clone after the npm publish step. Previously, GitHub Packages were only published from the private repo during `wip-release`, so they showed on the private repo's Packages tab. Users couldn't see them.
505
+
506
+ Now packages show on the public repo's Packages tab where users expect to find them. Uses `gh auth token` for authentication (already available from the gh CLI).
507
+
508
+ ## Why
509
+
510
+ The Packages tab on public repos was empty. Users visiting wipcomputer/wip-ldm-os or wipcomputer/wip-ai-devops-toolbox saw no packages even though they were published. The packages existed but were linked to the private repo.
511
+
512
+ ## 1.9.36 (2026-03-16)
513
+
514
+ # GitHub Packages publish from public repo
515
+
516
+ **Date:** 2026-03-16
517
+ **Closes:** #193
518
+
519
+ ## What changed
520
+
521
+ `deploy-public.sh` now publishes to GitHub Packages from the public repo clone after the npm publish step. Previously, GitHub Packages were only published from the private repo during `wip-release`, so they showed on the private repo's Packages tab. Users couldn't see them.
522
+
523
+ Now packages show on the public repo's Packages tab where users expect to find them. Uses `gh auth token` for authentication (already available from the gh CLI).
524
+
525
+ ## Why
526
+
527
+ The Packages tab on public repos was empty. Users visiting wipcomputer/wip-ldm-os or wipcomputer/wip-ai-devops-toolbox saw no packages even though they were published. The packages existed but were linked to the private repo.
528
+
529
+ ## 1.9.35 (2026-03-16)
530
+
531
+ # GitHub Packages publish from public repo
532
+
533
+ **Date:** 2026-03-16
534
+ **Closes:** #193
535
+
536
+ ## What changed
537
+
538
+ `deploy-public.sh` now publishes to GitHub Packages from the public repo clone after the npm publish step. Previously, GitHub Packages were only published from the private repo during `wip-release`, so they showed on the private repo's Packages tab. Users couldn't see them.
539
+
540
+ Now packages show on the public repo's Packages tab where users expect to find them. Uses `gh auth token` for authentication (already available from the gh CLI).
541
+
542
+ ## Why
543
+
544
+ The Packages tab on public repos was empty. Users visiting wipcomputer/wip-ldm-os or wipcomputer/wip-ai-devops-toolbox saw no packages even though they were published. The packages existed but were linked to the private repo.
545
+
546
+ ## 1.9.34 (2026-03-16)
547
+
548
+ # GitHub Packages publish from public repo
549
+
550
+ **Date:** 2026-03-16
551
+ **Closes:** #193
552
+
553
+ ## What changed
554
+
555
+ `deploy-public.sh` now publishes to GitHub Packages from the public repo clone after the npm publish step. Previously, GitHub Packages were only published from the private repo during `wip-release`, so they showed on the private repo's Packages tab. Users couldn't see them.
556
+
557
+ Now packages show on the public repo's Packages tab where users expect to find them. Uses `gh auth token` for authentication (already available from the gh CLI).
558
+
559
+ ## Why
560
+
561
+ The Packages tab on public repos was empty. Users visiting wipcomputer/wip-ldm-os or wipcomputer/wip-ai-devops-toolbox saw no packages even though they were published. The packages existed but were linked to the private repo.
562
+
563
+ ## 1.9.33 (2026-03-15)
564
+
565
+ # --version on all CLIs + issue cleanup
566
+
567
+ **Date:** 2026-03-15
568
+ **Closes:** #190, #191, #169, #123, #119
569
+
570
+ ## What changed
571
+
572
+ All 7 CLI tools now support `--version` and `-v`. Each reads its own `package.json` and prints the version. Previously, `wip-release --version` printed the help text instead of a version number.
573
+
574
+ Tools updated: wip-release, wip-repos, wip-license-guard, wip-repo-permissions, wip-repo-init, wip-readme-format, wip-file-guard, wip-branch-guard.
575
+
576
+ wip-license-guard also got a proper README (#169) with all commands, config format, and integration docs.
577
+
578
+ ## Issues closed
579
+
580
+ - #190: wip-release --version should work
581
+ - #191: enforce --version on all CLI tools
582
+ - #169: wip-license-guard needs its own README
583
+ - #123: Merge/Deploy/Install conflated (enforced across v1.9.25-v1.9.30)
584
+ - #119: All destructive tools must have --dry-run (all confirmed)
585
+
586
+ ## 1.9.32 (2026-03-15)
587
+
588
+ # --version on all CLIs + issue cleanup
589
+
590
+ **Date:** 2026-03-15
591
+ **Closes:** #190, #191, #169, #123, #119
592
+
593
+ ## What changed
594
+
595
+ All 7 CLI tools now support `--version` and `-v`. Each reads its own `package.json` and prints the version. Previously, `wip-release --version` printed the help text instead of a version number.
596
+
597
+ Tools updated: wip-release, wip-repos, wip-license-guard, wip-repo-permissions, wip-repo-init, wip-readme-format, wip-file-guard, wip-branch-guard.
598
+
599
+ wip-license-guard also got a proper README (#169) with all commands, config format, and integration docs.
600
+
601
+ ## Issues closed
602
+
603
+ - #190: wip-release --version should work
604
+ - #191: enforce --version on all CLI tools
605
+ - #169: wip-license-guard needs its own README
606
+ - #123: Merge/Deploy/Install conflated (enforced across v1.9.25-v1.9.30)
607
+ - #119: All destructive tools must have --dry-run (all confirmed)
608
+
609
+ ## 1.9.31 (2026-03-15)
610
+
611
+ # Release Notes: wip-ai-devops-toolbox v1.9.31
612
+
613
+ Branch guard no longer blocks global npm operations on main.
614
+
615
+ ## What changed
616
+
617
+ Moved `npm install -g` and `npm link` from BLOCKED_BASH_PATTERNS to ALLOWED_BASH_PATTERNS in `wip-branch-guard/guard.mjs`. Global npm operations modify `/opt/homebrew/`, not the repo. Local `npm install` (no -g flag) remains blocked.
618
+
619
+ ## Why
620
+
621
+ During LDM OS v0.4.0 dogfood, a CC session couldn't run `npm install -g @wipcomputer/wip-ldm-os@0.4.0` even after Parker explicitly said "install." The guard was too aggressive. Original intent (issue #137) was to block repo writes on main, not system-level package installs.
622
+
623
+ ## Issues closed
624
+
625
+ - Closes #188 (branch guard blocks npm install -g)
626
+ - Cross-ref: wipcomputer/wip-ldm-os#44
627
+
628
+ ## How to verify
629
+
630
+ ```bash
631
+ # On main branch, these should now succeed:
632
+ npm install -g @wipcomputer/wip-ldm-os@0.4.0
633
+ npm link
634
+ # This should still be blocked on main:
635
+ npm install
636
+ ```
637
+
638
+ ## 1.9.30 (2026-03-15)
639
+
640
+ # Release notes must be a file on disk
641
+
642
+ **Date:** 2026-03-15
643
+
644
+ ## What changed
645
+
646
+ wip-release no longer accepts the `--notes` flag. Release notes MUST come from a file on disk:
647
+
648
+ 1. `RELEASE-NOTES-v{version}.md` in repo root (auto-detected)
649
+ 2. `ai/dev-updates/YYYY-MM-DD--description.md` (auto-detected)
650
+ 3. `--notes-file=path` (explicit file path)
651
+
652
+ If no file exists, the release is blocked. The gate scaffolds a template (`RELEASE-NOTES-v{version}.md`) so the agent has something to fill in.
653
+
654
+ ## Why
655
+
656
+ The `--notes` flag was the root cause of every bad release note. Agents passed one-liners like `--notes="fix bug"` and the gate let them through. Even after we added length checks and changelog detection, agents found ways around it. The flag was an escape hatch that undermined the entire system.
657
+
658
+ The file-on-disk requirement solves three problems:
659
+ 1. **Reviewability.** The file is on the branch. It shows up in the PR diff. Parker can read and approve the release notes before merge.
660
+ 2. **Quality.** Writing a file forces the agent to think about what changed and why. A flag encourages one-liners.
661
+ 3. **History.** The file is committed to git. The release notes are part of the repo history, not a transient CLI argument.
662
+
663
+ ## What agents need to do
664
+
665
+ Before running `wip-release`:
666
+ 1. Write `RELEASE-NOTES-v{version}.md` or `ai/dev-updates/YYYY-MM-DD--description.md`
667
+ 2. Commit it on the branch
668
+ 3. The file shows up in the PR for review
669
+ 4. After merge to main, `wip-release` auto-detects it
670
+
671
+ If the agent forgets, `wip-release` blocks and scaffolds a template.
672
+
673
+ ## 1.9.29 (2026-03-15)
674
+
675
+ # Release notes must be a file on disk
676
+
677
+ **Date:** 2026-03-15
678
+
679
+ ## What changed
680
+
681
+ wip-release no longer accepts the `--notes` flag. Release notes MUST come from a file on disk:
682
+
683
+ 1. `RELEASE-NOTES-v{version}.md` in repo root (auto-detected)
684
+ 2. `ai/dev-updates/YYYY-MM-DD--description.md` (auto-detected)
685
+ 3. `--notes-file=path` (explicit file path)
686
+
687
+ If no file exists, the release is blocked. The gate scaffolds a template (`RELEASE-NOTES-v{version}.md`) so the agent has something to fill in.
688
+
689
+ ## Why
690
+
691
+ The `--notes` flag was the root cause of every bad release note. Agents passed one-liners like `--notes="fix bug"` and the gate let them through. Even after we added length checks and changelog detection, agents found ways around it. The flag was an escape hatch that undermined the entire system.
692
+
693
+ The file-on-disk requirement solves three problems:
694
+ 1. **Reviewability.** The file is on the branch. It shows up in the PR diff. Parker can read and approve the release notes before merge.
695
+ 2. **Quality.** Writing a file forces the agent to think about what changed and why. A flag encourages one-liners.
696
+ 3. **History.** The file is committed to git. The release notes are part of the repo history, not a transient CLI argument.
697
+
698
+ ## What agents need to do
699
+
700
+ Before running `wip-release`:
701
+ 1. Write `RELEASE-NOTES-v{version}.md` or `ai/dev-updates/YYYY-MM-DD--description.md`
702
+ 2. Commit it on the branch
703
+ 3. The file shows up in the PR for review
704
+ 4. After merge to main, `wip-release` auto-detects it
705
+
706
+ If the agent forgets, `wip-release` blocks and scaffolds a template.
707
+
708
+ ## 1.9.28 (2026-03-15)
709
+
710
+ # Release Notes Quality Gate
711
+
712
+ **Date:** 2026-03-15
713
+
714
+ ## What changed
715
+
716
+ wip-release now blocks ALL releases (patch, minor, major) if the release notes are bad. Previously, patch releases only warned. Now they block.
717
+
718
+ The gate checks:
719
+ - Notes must be at least 50 characters
720
+ - Notes can't look like a changelog entry ("fix: ...", "add: ...", "update: ...")
721
+ - Minor/major still require a file (not --notes flag)
722
+
723
+ If the gate blocks, it tells you exactly how to fix it: write a RELEASE-NOTES file, write a dev update, or use --notes with at least 50 chars of real description.
724
+
725
+ ## Why
726
+
727
+ Release notes were consistently garbage. One-liner --notes flags like "Fix bug" or "Update docs" sailed through on patch releases. The warnings were ignored by both humans and agents. Every release page on GitHub had thin, useless notes that didn't explain what changed or why.
728
+
729
+ ## Also in this release
730
+
731
+ - wip-repo-init templates renamed from ai/ to templates/ so they ship with npm install (deploy-public.sh was stripping them)
732
+ - SKILL.md restart notice after install (hooks need session restart)
733
+ - SPEC.md and TECHNICAL.md updated with all 17 tools and LDM OS links
734
+ - Branch guard matcher fix (catches Bash + NotebookEdit)
735
+ - Forced Git Worktrees and Branch Guard sections added to SKILL.md
736
+
737
+ ## 1.9.27 (2026-03-15)
738
+
739
+ # Release Notes Quality Gate
740
+
741
+ **Date:** 2026-03-15
742
+
743
+ ## What changed
744
+
745
+ wip-release now blocks ALL releases (patch, minor, major) if the release notes are bad. Previously, patch releases only warned. Now they block.
746
+
747
+ The gate checks:
748
+ - Notes must be at least 50 characters
749
+ - Notes can't look like a changelog entry ("fix: ...", "add: ...", "update: ...")
750
+ - Minor/major still require a file (not --notes flag)
751
+
752
+ If the gate blocks, it tells you exactly how to fix it: write a RELEASE-NOTES file, write a dev update, or use --notes with at least 50 chars of real description.
753
+
754
+ ## Why
755
+
756
+ Release notes were consistently garbage. One-liner --notes flags like "Fix bug" or "Update docs" sailed through on patch releases. The warnings were ignored by both humans and agents. Every release page on GitHub had thin, useless notes that didn't explain what changed or why.
757
+
758
+ ## Also in this release
759
+
760
+ - wip-repo-init templates renamed from ai/ to templates/ so they ship with npm install (deploy-public.sh was stripping them)
761
+ - SKILL.md restart notice after install (hooks need session restart)
762
+ - SPEC.md and TECHNICAL.md updated with all 17 tools and LDM OS links
763
+ - Branch guard matcher fix (catches Bash + NotebookEdit)
764
+ - Forced Git Worktrees and Branch Guard sections added to SKILL.md
765
+
766
+ ## 1.9.26 (2026-03-15)
767
+
768
+ Add restart notice after install/update. Hooks need session restart to take effect.
769
+
770
+ ## 1.9.25 (2026-03-14)
771
+
772
+ Fix branch guard matcher (catches Bash + NotebookEdit). Add Forced Git Worktrees and Branch Guard sections to SKILL.md. Update SPEC.md and TECHNICAL.md with all 17 tools and LDM OS links.
773
+
774
+ ## 1.9.24 (2026-03-14)
775
+
776
+ Number tools in dry run and already-installed lists. Dogfood iteration.
777
+
778
+ ## 1.9.23 (2026-03-14)
779
+
780
+ Force verbatim tool list display. AI must show all 17 tools with descriptions, never summarize.
781
+
782
+ ## 1.9.22 (2026-03-14)
783
+
784
+ All 17 tools listed with descriptions. New section order: Setup, Infrastructure, Repo Management, License, Release. Conversational prompt.
785
+
786
+ ## 1.9.21 (2026-03-14)
787
+
788
+ Add Already Installed section with tool descriptions. Dogfood fix.
789
+
790
+ ## 1.9.20 (2026-03-14)
791
+
792
+ Make root package publishable. npm install -g @wipcomputer/wip-ai-devops-toolbox now installs all 12 CLI tools.
793
+
794
+ ## 1.9.19 (2026-03-14)
795
+
796
+ Add websiteRepo to .publish-skill.json. Auto-publish SKILL.md to website on release. Fix install prompt URLs to use wip- prefix.
797
+
798
+ ## 1.9.18 (2026-03-14)
799
+
800
+ Rewrite SKILL.md install flow to use ldm install. Conversational AI-guided pattern matching Memory Crystal.
801
+
802
+ ## 1.9.17 (2026-03-14)
803
+
804
+ Add wip-branch-guard: PreToolUse hook that blocks all writes on main branch. Resolves repo from file path so it works from any CWD. Forces agents to branch or worktree before editing.
805
+
806
+ ## 1.9.16 (2026-03-14)
807
+
808
+ Add wip-branch-guard: PreToolUse hook that blocks all writes on main branch. Resolves repo from file path so it works from any CWD. Forces agents to branch or worktree before editing.
809
+
810
+ ## 1.9.15 (2026-03-14)
811
+
812
+ Fix all 5 root causes of truncated release notes (#121). Add --dry-run to readme-license. Update SKILL.md docs for wip-release and wip-license-guard.
813
+
814
+ ## 1.9.14 (2026-03-14)
815
+
816
+ Add readme-license command to wip-license-guard. Scans all repos, applies standard license block, removes from sub-tools. License Guard now Stable.
817
+
818
+ ## 1.9.13 (2026-03-14)
819
+
820
+ Release.
821
+
822
+ ## 1.9.12 (2026-03-13)
823
+
824
+ Add skill publish to website: after every release, SKILL.md is auto-copied to yoursite.com/install/{name}.txt and deployed. Configured per repo with .publish-skill.json. Non-blocking.
825
+
826
+ ## 1.9.11 (2026-03-13)
827
+
828
+ wip-install bootstraps LDM OS silently when not on PATH
829
+
830
+ ## 1.9.10 (2026-03-13)
831
+
832
+ # Release Notes: AI DevOps Toolbox v1.9.10
833
+
834
+ **Fix: Release notes files on disk always beat --notes flag**
835
+
836
+ v1.9.9 shipped with a one-liner on the GitHub release instead of the full narrative release notes. The RELEASE-NOTES-v1-9-9.md file was sitting right there on disk, but `--notes="short text"` took priority because the auto-detect only ran when `--notes` was absent.
837
+
838
+ This is exactly the kind of bug that happens when a rule exists in documentation but not in code. "Write release notes on the branch" is in the Dev Guide. The tool ignored them.
839
+
840
+ ## What changed
841
+
842
+ ### Notes priority is now enforced (highest wins):
843
+
844
+ 1. `--notes-file=path` ... explicit file path (always wins)
845
+ 2. `RELEASE-NOTES-v{ver}.md` ... in repo root (always wins over `--notes` flag)
846
+ 3. `ai/dev-updates/YYYY-MM-DD*` ... today's dev update (wins over `--notes` flag if longer)
847
+ 4. `--notes="text"` ... fallback only. Use for repos without release notes files.
848
+
849
+ If a RELEASE-NOTES file exists on disk, `--notes` is ignored and a warning is printed:
850
+
851
+ ```
852
+ ! --notes flag ignored: RELEASE-NOTES-v1-9-10.md takes priority
853
+ ```
854
+
855
+ Written notes on disk always take priority over a CLI one-liner. The agent wrote the file. The tool should use it.
856
+
857
+ ## Files changed
858
+
859
+ ```
860
+ tools/wip-release/cli.js | ~40 lines rewritten (notes cascade logic)
861
+ ```
862
+
863
+ ## Install
864
+
865
+ ```bash
866
+ git pull origin main
867
+ ```
868
+
869
+ ## Attribution
870
+
871
+ Built by Parker Todd Brooks, Lesa, and Claude Opus 4.6 at WIP.computer.
872
+
873
+ ## 1.9.9 (2026-03-13)
874
+
875
+ Enforce git worktrees as default workflow. wip-release blocks from worktrees, wip-install auto-adds .claude/worktrees/ to .gitignore, Dev Guide worktree section added.
876
+
877
+ ## 1.9.8 (2026-03-13)
878
+
879
+ wip-install delegates to ldm install when available
880
+
881
+ ## 1.9.7 (2026-03-13)
882
+
883
+ # Release Notes: AI DevOps Toolbox v1.9.7
884
+
885
+ ## LDM OS Integration
886
+
887
+ AI DevOps Toolbox now works with LDM OS when it's available.
888
+
889
+ ### wip-install delegates to ldm install
890
+
891
+ When the `ldm` CLI exists on PATH, `wip-install` delegates to `ldm install`. LDM OS handles the scaffold, interface detection, and extension deployment. The Toolbox's standalone behavior is preserved as a fallback when `ldm` isn't available.
892
+
893
+ Supports `--dry-run` and `--json` passthrough to `ldm install`.
894
+
895
+ ### LDM OS tip
896
+
897
+ After standalone installs, the Toolbox prints a tip: "Run `ldm install` to see more skills you can add."
898
+
899
+ ### Universal Installer link
900
+
901
+ The "Read more about Universal Installer" link now points to the LDM OS docs page. The Universal Installer engine moved to LDM OS. The Toolbox keeps `wip-install` as an entry point that delegates.
902
+
903
+ ### Part of LDM OS
904
+
905
+ README includes a "Part of LDM OS" section linking back to the LDM OS repo.
906
+
907
+ ## 1.9.6 (2026-03-12)
908
+
909
+ # v1.9.6 ... Enforcement Gates
910
+
911
+ Three fixes that move the release pipeline from "suggestions agents forget" to "gates that block."
912
+
913
+ ---
914
+
915
+ ## syncSkillVersion corrupted quoted versions (#71)
916
+
917
+ Every release was appending the old version instead of replacing it. SKILL.md went from `"1.9.5"` to `"1.9.5".9.4".9.3".9.2".9.1"` over five releases.
918
+
919
+ Root cause: the regex `"?\S+?"?` used non-greedy matching. For quoted values, it consumed only part of the string, leaving the rest as trailing garbage.
920
+
921
+ Fix: replaced with `(?:"[^\n]*|\S+)`. Quoted values now match through end of line. Unquoted values use greedy `\S+`. Also fixed the staleness-check regex to extract clean semver from corrupted strings.
922
+
923
+ **Files changed:**
924
+ - `tools/wip-release/core.mjs` ... `syncSkillVersion()` regex fix
925
+ - `SKILL.md` ... repaired corrupted version back to `"1.9.5"`
926
+
927
+ ---
928
+
929
+ ## gh pr merge now always deletes branch (#74)
930
+
931
+ Every `gh pr merge` call in the codebase now includes `--delete-branch`. Previously, deploy-public.sh had a manual 3-line `gh api -X DELETE` cleanup block. That's gone. The flag handles it.
932
+
933
+ Also verified every merge uses `--merge` (never squash). Dev Guide updated with the new convention.
934
+
935
+ **Files changed:**
936
+ - `scripts/deploy-public.sh` ... added `--delete-branch`, removed manual cleanup
937
+ - `tools/deploy-public/deploy-public.sh` ... same
938
+ - `DEV-GUIDE-GENERAL-PUBLIC.md` ... updated merge examples
939
+ - `ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md` ... updated merge rules
940
+ - `ai/_trash/DEV-GUIDE-private.md` ... updated
941
+ - `ai/_sort/_trash/ai_old/_trash/DEV-GUIDE-private.md` ... updated
942
+
943
+ ---
944
+
945
+ ## wip-release blocks on stale remote branches (#75)
946
+
947
+ New gate in the release pipeline. Before releasing, wip-release checks for remote branches that are fully merged into main but haven't been cleaned up.
948
+
949
+ - **Patch:** warns with the list of stale branches (non-blocking)
950
+ - **Minor/major:** blocks the release. Clean up first.
951
+ - **`--skip-stale-check`:** override flag for emergencies
952
+
953
+ Follows the existing gate pattern: fetches with `--prune`, filters out `origin/main`, `origin/HEAD`, and `--merged-` branches. Fails gracefully if git commands error.
954
+
955
+ **Files changed:**
956
+ - `tools/wip-release/core.mjs` ... `checkStaleBranches()` function, integrated as gate 0.8
957
+ - `tools/wip-release/cli.js` ... `--skip-stale-check` flag, help text
958
+
959
+ ---
960
+
961
+ ## Diffstat
962
+
963
+ ```
964
+ 10 files changed, 102 insertions(+), 21 deletions(-)
965
+ ```
966
+
967
+ ## Install
968
+
969
+ ```bash
970
+ npm install -g @wipcomputer/wip-ai-devops-toolbox
971
+ ```
972
+
973
+ Or update an existing install:
974
+ ```bash
975
+ wip-install wipcomputer/wip-ai-devops-toolbox
976
+ ```
977
+
978
+ ---
979
+
980
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
981
+
982
+ ## 1.9.5 (2026-03-12)
983
+
984
+ wip-release: bump sub-tool versions in toolbox repos. Fixes #132.
985
+
986
+ ## 1.9.4 (2026-03-12)
987
+
988
+ wip-install: detect and migrate existing installs under different names. Fixes #128.
989
+
990
+ ## 1.9.3 (2026-03-12)
991
+
992
+ Fix: ensure bin executability on installer skip path. Fixes wip-license-guard, wip-license-hook, wip-repo-init, wip-readme-format permission denied after reinstall.
993
+
994
+ ## 1.9.2 (2026-03-12)
995
+
996
+ # v1.9.2: Distribution Pipeline Fix
997
+
998
+ The entire distribution pipeline was broken. Tools built but never reached users. 8 of 13 tools weren't on npm. ClawHub publish only shipped the root SKILL.md. deploy-public never ran npm publish. Errors were silent.
999
+
1000
+ This release fixes all of it.
1001
+
1002
+ ## What changed
1003
+
1004
+ ### Install fixes (#96, #110)
1005
+ - CLI binaries now have correct executable permissions (git +x on all bin entry files)
1006
+ - wip-license-hook dist/ committed to repo (TypeScript build output was gitignored)
1007
+ - Installer auto-detects TypeScript projects and runs build if dist/ missing
1008
+ - chmod +x safety net after every npm install -g
1009
+ - SSH fallback when HTTPS clone fails (private repos)
1010
+
1011
+ ### SKILL.md spec compliance (#107, #108)
1012
+ - All 12 SKILL.md files conform to agentskills.io spec
1013
+ - name field: lowercase-hyphen format matching directory name
1014
+ - Display names in metadata.display-name
1015
+ - version, homepage, author in metadata block
1016
+ - license: MIT on all files
1017
+ - metadata.openclaw blocks with install instructions and emoji
1018
+ - New SKILL.md created for wip-license-guard (was missing)
1019
+
1020
+ ### Distribution pipeline (#97, #100, #104)
1021
+ - ClawHub publish now iterates all sub-tool SKILL.md files, not just root
1022
+ - detectSkillSlug reads the name field from SKILL.md frontmatter
1023
+ - deploy-public.sh runs npm publish from the public clone after code sync
1024
+ - Handles both single repos and toolbox repos (iterates tools/*)
1025
+ - Distribution summary at end of release: shows all targets with pass/fail
1026
+ - syncSkillVersion handles quoted version strings in new metadata format
1027
+
1028
+ ## Install
1029
+
1030
+ ```bash
1031
+ npm install -g @wipcomputer/wip-ai-devops-toolbox
1032
+ wip-install wipcomputer/wip-ai-devops-toolbox
1033
+ ```
1034
+
1035
+ Built by Parker Todd Brooks, Lesa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
1036
+
1037
+ ## 1.9.1 (2026-03-11)
1038
+
1039
+ # v1.9.1: Release gates ... product docs and release notes quality enforcement
1040
+
1041
+ Agents read the Dev Guide, say "got it," and then release with garbage one-liner notes anyway. Documentation doesn't change behavior. Tools do. This release adds two new gates to `wip-release` that block bad releases before they happen.
1042
+
1043
+ ## Product docs gate
1044
+
1045
+ Every PR is supposed to include updated product docs: a dev update, roadmap changes, and readme-first updates. This was documented in the Dev Guide as a manual checklist. Nobody followed it.
1046
+
1047
+ `wip-release` now checks three things before publishing:
1048
+
1049
+ 1. **Dev update exists.** Looks in `ai/dev-updates/` for a file from the last 3 days. If you did work worth releasing, you should have written about it.
1050
+ 2. **Roadmap was updated.** Checks `ai/product/plans-prds/roadmap.md` via `git diff` against the last tag. If the roadmap doesn't reflect what just shipped, it's stale.
1051
+ 3. **Readme-first was updated.** Same check on `ai/product/readme-first-product.md`. The product bible should always describe what's actually built.
1052
+
1053
+ Repos without an `ai/` directory are skipped silently. This only applies to repos that have adopted the `ai/` folder standard.
1054
+
1055
+ For **patch** releases: warns but doesn't block. Hotfixes shouldn't be held up by docs.
1056
+ For **minor/major** releases: blocks the release. You can't ship a meaningful feature with stale product docs.
1057
+
1058
+ `--skip-product-check` overrides for exceptional cases.
1059
+
1060
+ ## Release notes quality gate
1061
+
1062
+ On 2026-03-11, the other CC session released memory-crystal v0.7.4. It read the Dev Guide (which now explicitly says "write a RELEASE-NOTES file on the branch"). It said it understood. Then it ran `wip-release patch --notes="MCP fix and agent ID config"` and published a one-liner to GitHub. The old `warnIfNotesAreThin()` function printed a warning to console. The agent ignored it.
1063
+
1064
+ The root cause was architectural, not behavioral. The warning ran at step 8 of the pipeline, AFTER the version was already bumped, committed, tagged, and pushed. By the time the warning appeared, the damage was done. And it was a warning, not a gate. Agents don't read warnings.
1065
+
1066
+ The fix:
1067
+ - `checkReleaseNotes()` replaces `warnIfNotesAreThin()`. It runs before the version bump, not after.
1068
+ - The CLI now tracks `notesSource`: where the notes came from (`file`, `dev-update`, `flag`, or `none`).
1069
+ - For minor/major releases: if notes came from a bare `--notes` flag instead of a `RELEASE-NOTES-v{version}.md` file, the release is **blocked**. The agent gets explicit instructions: "Write RELEASE-NOTES-v{version}.md (dashes not dots), commit it, then release."
1070
+ - For patch releases: warns if notes are short, but doesn't block.
1071
+
1072
+ ## Both gates follow the same pattern
1073
+
1074
+ The existing license compliance gate (step 0) checks `.license-guard.json` and blocks if licensing is wrong. The new product docs gate (step 0.5) and release notes gate (step 0.75) work the same way: check early, block before any changes, show status in `--dry-run`, give clear instructions on how to fix it.
1075
+
1076
+ The MCP server was also updated with `skipProductCheck` and `notesSource` passthrough so agents calling wip-release via MCP get the same enforcement.
1077
+
1078
+ ## 1.9.0 (2026-03-11)
1079
+
1080
+ README Formatter (section-based staging + deploy), Repo Init (ai/ directory scaffolding), Dev Guide overhaul with release notes workflow
1081
+
1082
+ ## 1.8.2 (2026-03-11)
1083
+
1084
+ # v1.8.2: Clean up release notes after release
1085
+
1086
+ RELEASE-NOTES files were piling up in the repo root. `wip-release` consumed them for the GitHub release and CHANGELOG but never cleaned up.
1087
+
1088
+ Now after consuming the file, `wip-release` moves all `RELEASE-NOTES-v*.md` files to `_trash/` as part of the version bump commit. We never delete anything.
1089
+
1090
+ `deploy-public.sh` also now excludes `_trash/` so these files stay private.
1091
+
1092
+ ## 1.8.1 (2026-03-11)
1093
+
1094
+ # v1.8.1: Fix CLI install when package name changed
1095
+
1096
+ When a tool's npm package gets renamed but the binary name stays the same, `npm install -g` fails with EEXIST. The stale symlink from the old package blocks the new one.
1097
+
1098
+ The installer now detects this: if the binary is a symlink pointing to a different package, it removes the stale link and retries. Only affects symlinks, only when the target doesn't match the package being installed.
1099
+
1100
+ Found on `wip-license-hook` (renamed from `@wipcomputer/license-hook` to `@wipcomputer/wip-license-hook`).
1101
+
1102
+ ## 1.8.0 (2026-03-11)
1103
+
1104
+ # v1.8.0: Fix CC Hook duplicates, add GitHub Issues convention
1105
+
1106
+ ## CC Hook duplicate detection fix
1107
+
1108
+ `wip-install` was adding duplicate PreToolUse hooks to `~/.claude/settings.json` every time it ran. After a few installs, there were 8 hooks when there should have been 2. The duplicates pointed to repo clones and `/tmp/` paths, violating the "never run tools from repo clones" rule.
1109
+
1110
+ The root cause: duplicate detection compared exact command strings. The same `guard.mjs` installed from different paths produced different strings, so each install added another entry.
1111
+
1112
+ The fix:
1113
+ - Match existing hooks by tool name in the path, not exact command string
1114
+ - Always prefer `~/.ldm/extensions/<tool>/guard.mjs` over source or temp paths
1115
+ - If a hook for the same tool exists at a different path, update it instead of adding a duplicate
1116
+
1117
+ ## GitHub Issues convention added to Dev Guide
1118
+
1119
+ We were tracking work in `ai/todos/` markdown files. Items got lost. GitHub Issues gives us tracking, cross-referencing, and visibility across agents.
1120
+
1121
+ Added to the public Dev Guide:
1122
+ - When to use GitHub Issues vs `ai/todos/`
1123
+ - Filing convention: `filed-by:<agent-id>` labels and attribution lines
1124
+ - Public vs private issue routing: public issues are the front door, private issues are the workshop
1125
+ - Agent ID naming convention: `[platform]-[agent]-[machine]`
1126
+
1127
+ Added to the private Dev Guide:
1128
+ - `filed-by:cc-mini` (blue) and `filed-by:oc-lesa-mini` (purple) label details
1129
+ - Org-wide deployment commands
1130
+ - Incident note: Memory Crystal agent ID drift
1131
+
1132
+ Both labels deployed across all wipcomputer repos.
1133
+
1134
+ ## 1.7.9 (2026-03-11)
1135
+
1136
+ Add GitHub Issues convention and filed-by workflow to the Dev Guide.
1137
+
1138
+ We've been tracking work in ai/todos/ markdown files. Items get lost. GitHub Issues gives us tracking, cross-referencing, and visibility across all agents. This release documents the full convention.
1139
+
1140
+ **Public Dev Guide (DEV-GUIDE-GENERAL-PUBLIC.md):**
1141
+ - New "GitHub Issues" section: when to use issues vs ai/todos/, filing convention with attribution lines and filed-by labels, public vs private issue routing workflow
1142
+ - Agent ID naming convention: [platform]-[agent]-[machine] format documented with examples
1143
+ - Public/private issue bridge: public issues are the front door (users), private issues are the workshop (team), releases connect them
1144
+
1145
+ **Private Dev Guide (ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md):**
1146
+ - filed-by label details: cc-mini (blue), oc-lesa-mini (purple), deployed org-wide
1147
+ - Commands for adding labels to new agents or repos
1148
+ - Incident note: Memory Crystal agent ID drift (4 IDs instead of 2), manual merge of 141K chunks, root cause and fix tracked in memory-crystal-private#33
1149
+
1150
+ **Org-wide:** filed-by:cc-mini and filed-by:oc-lesa-mini labels created on all wipcomputer repos.
1151
+
1152
+ ## 1.7.8 (2026-03-10)
1153
+
1154
+ # Dev Update: Smart Install + Platform Compatibility
1155
+
1156
+ **Date:** 2026-03-10 22:40 PST
1157
+ **Author:** Claude Code (cc-mini)
1158
+ **Version:** v1.7.8 (pending)
1159
+ **Branches:** cc-mini/smart-install, cc-mini/platform-compat-v2
1160
+
1161
+ ## Smart Install (wip-install)
1162
+
1163
+ Parker's feedback: "I want to make sure we're not going to replace stuff unless we need to. It should be smart enough to know I have this extension installed, and it's the same one."
1164
+
1165
+ The Universal Installer was doing blind `rm -rf` and re-copy on every run. Now it checks versions first:
1166
+
1167
+ - **Extensions (LDM + OpenClaw):** Reads `package.json` version from the installed extension. If it matches the source version, skip. If different, upgrade. If missing, fresh install. Dry-run shows "would upgrade v1.2.3 -> v1.2.4" vs "would deploy v1.2.4" vs "already at v1.2.4".
1168
+ - **CLI:** Checks `npm list -g` for the installed version. Same version = skip.
1169
+ - **MCP:** Checks if already registered at the same server path. Same path = skip.
1170
+ - **CC Hooks:** Already had duplicate detection (unchanged).
1171
+
1172
+ No more destroying things that don't need updating.
1173
+
1174
+ ## Platform Compatibility (SKILL.md)
1175
+
1176
+ Parker's feedback after testing with Grok: "Grok said 'I'll run wip-install' but it literally cannot. It's hallucinating capabilities."
1177
+
1178
+ First version listed platforms as "first-class / MCP-compatible / not compatible." Parker corrected: "We don't need to say 'not compatible' because Claude iOS can install stuff now. We just need to be clear about what the tool needs."
1179
+
1180
+ Rewrote to capability requirements:
1181
+
1182
+ | Interface | Requires |
1183
+ |-----------|----------|
1184
+ | CLI | Shell access |
1185
+ | MCP Server | MCP client support |
1186
+ | CC Hook | Claude Code CLI with hooks |
1187
+ | OpenClaw Plugin | OpenClaw runtime |
1188
+ | Skill | Ability to read this file |
1189
+ | Module | Node.js import |
1190
+
1191
+ Key instruction to agents: "Check which capabilities you have and match them to the table. Do not claim you can run commands you cannot execute."
1192
+
1193
+ This is future-proof. When a platform adds MCP or shell access, the SKILL.md doesn't need updating. The agent assesses itself.
1194
+
1195
+ ## Cross-Platform Testing Results
1196
+
1197
+ Three AIs read the same SKILL.md onboarding prompt:
1198
+
1199
+ - **Claude Code (another instance):** Read it, explained all tools correctly, offered dry-run first. Responded with "HOLY SHIT!!!" (impressed by the tooling).
1200
+ - **Lesa (OpenClaw, Claude Opus 4.6):** Perfect breakdown. Every tool categorized correctly. Called out the auto-detect dev updates feature specifically. Offered dry-run first.
1201
+ - **Grok (xAI):** Initially tried to roleplay as Lesa/Claude Code (read the attribution line and adopted the persona). When corrected, gave accurate breakdown. But claimed it would run `wip-install` when it cannot. This exposed the need for the Platform Compatibility section.
1202
+
1203
+ The SKILL.md is working. Three different AIs, three different platforms, all understood the toolbox correctly from one file.
1204
+
1205
+ ## 1.7.7 (2026-03-10)
1206
+
1207
+ # Dev Update: SKILL.md as the Real Interface
1208
+
1209
+ **Date:** 2026-03-10 22:10 PST
1210
+ **Author:** Claude Code (cc-mini)
1211
+ **Version:** v1.7.4
1212
+ **Branch:** cc-mini/skill-installer-details
1213
+
1214
+ ## The Insight
1215
+
1216
+ Parker said it plainly: "We're not doing READMEs anymore. This is not for humans."
1217
+
1218
+ The human interface is the AI. The AI's interface is the SKILL.md. If the skill doesn't contain everything needed to operate, the AI guesses. And it guesses wrong.
1219
+
1220
+ We proved this earlier in the session. Lesa read the toolbox and miscategorized Universal Installer under "Repo Management" because the SKILL.md had no category structure (fixed in v1.7.3). But even after categories, she still couldn't explain what the tools actually do operationally, because the SKILL.md was still a half-README with links and one-liners.
1221
+
1222
+ ## What We Researched
1223
+
1224
+ Parker pointed us to agentcard.sh/agent.txt as a reference. We researched three AI documentation conventions:
1225
+
1226
+ 1. **llms.txt** (llmstxt.org) ... a directory of links. Points to docs but doesn't contain them. An AI still has to fetch and read multiple files. Good for discovery, not for operation.
1227
+
1228
+ 2. **agent.txt / AgentCard** (agentcard.sh) ... self-contained operational manual. Everything in one file. An AI reads it and knows how to interact with the service. Closer to what we need, but designed for describing APIs/services, not developer tools.
1229
+
1230
+ 3. **SKILL.md** (ours) ... YAML frontmatter for machine parsing, then full operational detail. Designed specifically to teach an AI how to use developer tools. Not a pointer to docs. Not a summary. The complete manual.
1231
+
1232
+ We took the best from each: the discoverability mindset of llms.txt, the self-contained philosophy of agent.txt, and built SKILL.md as the standard for AI-native developer tool documentation.
1233
+
1234
+ ## What Changed in v1.7.4
1235
+
1236
+ The SKILL.md went from ~140 lines (descriptions + links) to ~475 lines (complete operational manual).
1237
+
1238
+ Every one of the 11 tools now has:
1239
+ - Complete commands with all flags and options
1240
+ - Step-by-step "what happens when you run it" sequences
1241
+ - Exact file paths (where it reads, where it writes)
1242
+ - Safety notes (what it deletes, what it overwrites, what to watch for)
1243
+ - How it works across different interfaces (CC Hook, OpenClaw Plugin, MCP server)
1244
+
1245
+ ### Specific additions worth noting:
1246
+
1247
+ **Universal Installer** got a full deployment table showing what each of the 6 interfaces does and where it writes. We read the install.js source code and documented that it does `rm -rf` on existing extension directories before copying. That's critical safety information an AI needs before running it.
1248
+
1249
+ **Release Pipeline** got all 13 steps documented (step 0: license gate through step 12: branch prune). Every flag, every file it touches, every decision point.
1250
+
1251
+ **Identity File Protection** got the exact list of protected files and the definition of "destructive" (replacing >50% of content). Also documented the difference between how the CC Hook and OpenClaw Plugin work.
1252
+
1253
+ **MCP section** got complete tool function names for all MCP-enabled tools, so an AI can add them to .mcp.json without guessing.
1254
+
1255
+ ## The "Teach Your AI" Framing
1256
+
1257
+ Parker's directive on the README: the first tool (Universal Installer) says "Teaches your AI to..." explicitly. The rest infer the pattern. You don't need to say "teaches" 11 times. The frame is set once, and a reader (human or AI) carries it forward.
1258
+
1259
+ Universal Installer's description changed from a generic "installs tools" to: "Teaches your AI to take anything you build and make it work across every AI interface. You write code in any language. This tool turns it into a CLI, MCP Server, OpenClaw Plugin, Skill, and Claude Code Hook."
1260
+
1261
+ ## Interface Coverage Table Iterations
1262
+
1263
+ We went through several iterations on the table format:
1264
+
1265
+ 1. **Separate tables per category** ... Parker: "too hard on the eyes"
1266
+ 2. **Single table, bold category divider rows** ... better, but needed numbering
1267
+ 3. **Added numbers 1-11 in a # column** ... Parker liked it
1268
+ 4. **Tried moving categories into the # column, removing numbers** ... Parker: "looks worse, change it back"
1269
+ 5. **Final: numbers + category divider rows, no dashes in empty cells** ... clean and scannable
1270
+
1271
+ The lesson: don't overthink table formatting. Numbers give anchoring. Category rows give structure. Empty cells are cleaner than dashes.
1272
+
1273
+ ## The Standard Going Forward
1274
+
1275
+ This is how we think SKILL.md files should be written for any tool in the toolbox:
1276
+
1277
+ 1. YAML frontmatter with name, version, interface list
1278
+ 2. One-paragraph description of what the tool teaches
1279
+ 3. Complete command reference with all flags
1280
+ 4. Step-by-step operational detail (what happens when you run it)
1281
+ 5. File paths (reads from, writes to)
1282
+ 6. Safety notes (destructive operations, prerequisites)
1283
+ 7. Interface-specific behavior (how it works as CLI vs Hook vs MCP vs Plugin)
1284
+
1285
+ The SKILL.md is the source of truth. READMEs exist for humans browsing GitHub. But the AI reads the SKILL.md, and the SKILL.md must be complete.
1286
+
1287
+ ## Release Notes Standard
1288
+
1289
+ We also established that release notes on GitHub should tell the story. Not just "bumped version" or a one-liner from `--notes`. The v1.7.4 release notes explain the thinking, the research, and what changed. This is how releases should read going forward.
1290
+
1291
+ Earlier releases (v1.7.1, v1.7.2) shipped with thin notes and we had to go back and manually update them via `gh release edit`. The tool (wip-release) uses the `--notes` flag, which encourages one-liners. For significant releases, we should write RELEASE-NOTES files on the branch and have the tool pick them up.
1292
+
1293
+ ## Files Changed
1294
+
1295
+ - `SKILL.md` ... complete rewrite (140 -> 475 lines)
1296
+ - `README.md` ... Interface Coverage table: numbered, category dividers, no dashes
1297
+ - `ai/feedback/2026-03-10--gpt--v1.7.1-readme-review.md` ... GPT rated the README 9.6/10
1298
+
1299
+ ## wip-release: Auto-Detect Dev Updates as Release Notes
1300
+
1301
+ Parker's feedback: "The release notes should be automated. I shouldn't have to keep telling you to do this."
1302
+
1303
+ We updated `wip-release` to auto-detect release notes from `ai/dev-updates/`. The priority order:
1304
+
1305
+ 1. `--notes-file=path` (explicit)
1306
+ 2. `RELEASE-NOTES-v{ver}.md` in repo root
1307
+ 3. `ai/dev-updates/YYYY-MM-DD*` (today's dev update files, most recent first)
1308
+ 4. `--notes="one-liner"` (fallback, but dev updates win if they have more content)
1309
+
1310
+ This means: write dev updates as you work (which we already do). When you run `wip-release`, it finds today's dev update and uses it as the full release notes. No more thin one-liners on GitHub releases. No more "this week's sauce, come on, man."
1311
+
1312
+ ## What's Next
1313
+
1314
+ - Consider making the SKILL.md standard a section in the Dev Guide
1315
+ - Operational guide for agent identities (Parker mentioned needing this)
1316
+
1317
+ ## 1.7.6 (2026-03-10)
1318
+
1319
+ README: onboarding prompt now does dry-run install first so users see what changes before committing
1320
+
1321
+ ## 1.7.5 (2026-03-10)
1322
+
1323
+ # Dev Update: SKILL.md as the Real Interface
1324
+
1325
+ **Date:** 2026-03-10 22:10 PST
1326
+ **Author:** Claude Code (cc-mini)
1327
+ **Version:** v1.7.4
1328
+ **Branch:** cc-mini/skill-installer-details
1329
+
1330
+ ## The Insight
1331
+
1332
+ Parker said it plainly: "We're not doing READMEs anymore. This is not for humans."
1333
+
1334
+ The human interface is the AI. The AI's interface is the SKILL.md. If the skill doesn't contain everything needed to operate, the AI guesses. And it guesses wrong.
1335
+
1336
+ We proved this earlier in the session. Lesa read the toolbox and miscategorized Universal Installer under "Repo Management" because the SKILL.md had no category structure (fixed in v1.7.3). But even after categories, she still couldn't explain what the tools actually do operationally, because the SKILL.md was still a half-README with links and one-liners.
1337
+
1338
+ ## What We Researched
1339
+
1340
+ Parker pointed us to agentcard.sh/agent.txt as a reference. We researched three AI documentation conventions:
1341
+
1342
+ 1. **llms.txt** (llmstxt.org) ... a directory of links. Points to docs but doesn't contain them. An AI still has to fetch and read multiple files. Good for discovery, not for operation.
1343
+
1344
+ 2. **agent.txt / AgentCard** (agentcard.sh) ... self-contained operational manual. Everything in one file. An AI reads it and knows how to interact with the service. Closer to what we need, but designed for describing APIs/services, not developer tools.
1345
+
1346
+ 3. **SKILL.md** (ours) ... YAML frontmatter for machine parsing, then full operational detail. Designed specifically to teach an AI how to use developer tools. Not a pointer to docs. Not a summary. The complete manual.
1347
+
1348
+ We took the best from each: the discoverability mindset of llms.txt, the self-contained philosophy of agent.txt, and built SKILL.md as the standard for AI-native developer tool documentation.
1349
+
1350
+ ## What Changed in v1.7.4
1351
+
1352
+ The SKILL.md went from ~140 lines (descriptions + links) to ~475 lines (complete operational manual).
1353
+
1354
+ Every one of the 11 tools now has:
1355
+ - Complete commands with all flags and options
1356
+ - Step-by-step "what happens when you run it" sequences
1357
+ - Exact file paths (where it reads, where it writes)
1358
+ - Safety notes (what it deletes, what it overwrites, what to watch for)
1359
+ - How it works across different interfaces (CC Hook, OpenClaw Plugin, MCP server)
1360
+
1361
+ ### Specific additions worth noting:
1362
+
1363
+ **Universal Installer** got a full deployment table showing what each of the 6 interfaces does and where it writes. We read the install.js source code and documented that it does `rm -rf` on existing extension directories before copying. That's critical safety information an AI needs before running it.
1364
+
1365
+ **Release Pipeline** got all 13 steps documented (step 0: license gate through step 12: branch prune). Every flag, every file it touches, every decision point.
1366
+
1367
+ **Identity File Protection** got the exact list of protected files and the definition of "destructive" (replacing >50% of content). Also documented the difference between how the CC Hook and OpenClaw Plugin work.
1368
+
1369
+ **MCP section** got complete tool function names for all MCP-enabled tools, so an AI can add them to .mcp.json without guessing.
1370
+
1371
+ ## The "Teach Your AI" Framing
1372
+
1373
+ Parker's directive on the README: the first tool (Universal Installer) says "Teaches your AI to..." explicitly. The rest infer the pattern. You don't need to say "teaches" 11 times. The frame is set once, and a reader (human or AI) carries it forward.
1374
+
1375
+ Universal Installer's description changed from a generic "installs tools" to: "Teaches your AI to take anything you build and make it work across every AI interface. You write code in any language. This tool turns it into a CLI, MCP Server, OpenClaw Plugin, Skill, and Claude Code Hook."
1376
+
1377
+ ## Interface Coverage Table Iterations
1378
+
1379
+ We went through several iterations on the table format:
1380
+
1381
+ 1. **Separate tables per category** ... Parker: "too hard on the eyes"
1382
+ 2. **Single table, bold category divider rows** ... better, but needed numbering
1383
+ 3. **Added numbers 1-11 in a # column** ... Parker liked it
1384
+ 4. **Tried moving categories into the # column, removing numbers** ... Parker: "looks worse, change it back"
1385
+ 5. **Final: numbers + category divider rows, no dashes in empty cells** ... clean and scannable
1386
+
1387
+ The lesson: don't overthink table formatting. Numbers give anchoring. Category rows give structure. Empty cells are cleaner than dashes.
1388
+
1389
+ ## The Standard Going Forward
1390
+
1391
+ This is how we think SKILL.md files should be written for any tool in the toolbox:
1392
+
1393
+ 1. YAML frontmatter with name, version, interface list
1394
+ 2. One-paragraph description of what the tool teaches
1395
+ 3. Complete command reference with all flags
1396
+ 4. Step-by-step operational detail (what happens when you run it)
1397
+ 5. File paths (reads from, writes to)
1398
+ 6. Safety notes (destructive operations, prerequisites)
1399
+ 7. Interface-specific behavior (how it works as CLI vs Hook vs MCP vs Plugin)
1400
+
1401
+ The SKILL.md is the source of truth. READMEs exist for humans browsing GitHub. But the AI reads the SKILL.md, and the SKILL.md must be complete.
1402
+
1403
+ ## Release Notes Standard
1404
+
1405
+ We also established that release notes on GitHub should tell the story. Not just "bumped version" or a one-liner from `--notes`. The v1.7.4 release notes explain the thinking, the research, and what changed. This is how releases should read going forward.
1406
+
1407
+ Earlier releases (v1.7.1, v1.7.2) shipped with thin notes and we had to go back and manually update them via `gh release edit`. The tool (wip-release) uses the `--notes` flag, which encourages one-liners. For significant releases, we should write RELEASE-NOTES files on the branch and have the tool pick them up.
1408
+
1409
+ ## Files Changed
1410
+
1411
+ - `SKILL.md` ... complete rewrite (140 -> 475 lines)
1412
+ - `README.md` ... Interface Coverage table: numbered, category dividers, no dashes
1413
+ - `ai/feedback/2026-03-10--gpt--v1.7.1-readme-review.md` ... GPT rated the README 9.6/10
1414
+
1415
+ ## wip-release: Auto-Detect Dev Updates as Release Notes
1416
+
1417
+ Parker's feedback: "The release notes should be automated. I shouldn't have to keep telling you to do this."
1418
+
1419
+ We updated `wip-release` to auto-detect release notes from `ai/dev-updates/`. The priority order:
1420
+
1421
+ 1. `--notes-file=path` (explicit)
1422
+ 2. `RELEASE-NOTES-v{ver}.md` in repo root
1423
+ 3. `ai/dev-updates/YYYY-MM-DD*` (today's dev update files, most recent first)
1424
+ 4. `--notes="one-liner"` (fallback, but dev updates win if they have more content)
1425
+
1426
+ This means: write dev updates as you work (which we already do). When you run `wip-release`, it finds today's dev update and uses it as the full release notes. No more thin one-liners on GitHub releases. No more "this week's sauce, come on, man."
1427
+
1428
+ ## What's Next
1429
+
1430
+ - Consider making the SKILL.md standard a section in the Dev Guide
1431
+ - Operational guide for agent identities (Parker mentioned needing this)
1432
+
1433
+ ## 1.7.4 (2026-03-10)
1434
+
1435
+ SKILL.md full operational rewrite for AI agents. Every tool now has complete commands, flags, step-by-step behavior, file paths, and safety notes. Interface Coverage table cleaned up: numbered tools, category dividers, no dashes.
1436
+
1437
+ ## 1.7.3 (2026-03-10)
1438
+
1439
+ Add category structure to SKILL.md matching README. Prevents AI from miscategorizing tools.
1440
+
1441
+ ## 1.7.2 (2026-03-10)
1442
+
1443
+ Reframe Universal Installer description, fix tense, update SKILL.md intro framing
1444
+
1445
+ ## 1.7.1 (2026-03-10)
1446
+
1447
+ Reframe tool descriptions with teach your AI pattern, file GPT and Grok feedback on v1.7.0
1448
+
1449
+ ## 1.7.0 (2026-03-10)
1450
+
1451
+ ## v1.7.0: Renamed to AI DevOps Toolbox, CLA, License Enforcement, Branch Prune, README Polish
1452
+
1453
+ This release renames the repo, adds contributor governance, makes licensing intent unmistakable, automates branch cleanup, and tightens the README based on a second round of external feedback.
1454
+
1455
+ The repo is now **AI DevOps Toolbox** (`wip-ai-devops-toolbox`). The name change reflects what this actually is: not just DevOps scripts, but AI-native development infrastructure.
1456
+
1457
+ Includes work from PRs #53, #54.
1458
+
1459
+ ---
1460
+
1461
+ ### Repo Rename: AI DevOps Toolbox
1462
+
1463
+ **What we did:** Renamed from "DevOps Toolbox" (`wip-devops-toolbox`) to "AI DevOps Toolbox" (`wip-ai-devops-toolbox`).
1464
+
1465
+ **Why:** The old name undersold what this is. "DevOps Toolbox" sounds like scripts. This is an interface architecture, an agent tool ecosystem, and a workflow framework for AI-assisted development. The name should say that.
1466
+
1467
+ **What changed:**
1468
+ - GitHub repos renamed: `wip-ai-devops-toolbox-private` and `wip-ai-devops-toolbox`
1469
+ - All internal references updated: README, TECHNICAL.md, SKILL.md, package.json, cross-repo references
1470
+
1471
+ ---
1472
+
1473
+ ### Contributor License Agreement (CLA)
1474
+
1475
+ **What we did:** Added `CLA.md` at the repo root and referenced it in the README License section.
1476
+
1477
+ **Why:** Without a CLA, contributors who submit PRs own their code. AGPL means we can't relicense their contributions commercially. We need contributors to grant WIP Computer, Inc. the right to use their contributions under any license, including commercial. This is standard open source governance. Apache, Google, Meta, and Anthropic all use similar agreements.
1478
+
1479
+ **How it works:** By submitting a PR, you agree to the CLA. Contributors keep their own copyright but grant WIP Computer, Inc. a broad license. Plain-English, no lawyer needed to understand it.
1480
+
1481
+ **New files:**
1482
+ - `CLA.md` ... the agreement itself
1483
+
1484
+ ---
1485
+
1486
+ ### Licensing Clarity
1487
+
1488
+ **What we did:** Made the licensing intent unmistakable with two new sentences.
1489
+
1490
+ **Why:** The dual MIT+AGPLv3 license is technically correct, but people still ask "can I use this?" The answer needed to be obvious: yes, use the tools however you want. The only thing that requires a commercial license is taking the tools themselves and reselling them.
1491
+
1492
+ **What changed:**
1493
+ - Added "Dual-license model designed to keep tools free while preventing commercial resellers" above the license block
1494
+ - Added "Using these tools to build your own software is fine. Reselling the tools themselves is what requires a commercial license" to the "Can I use this?" section
1495
+ - Updated `generateReadmeBlock()` in `tools/wip-license-guard/core.mjs` so every future repo gets the same wording automatically
1496
+
1497
+ ---
1498
+
1499
+ ### Branch Prune Automation
1500
+
1501
+ **What we did:** Built automatic branch cleanup into both `post-merge-rename.sh` and `wip-release`.
1502
+
1503
+ **Why:** Merged branches pile up on the remote. Before this release, the private repo had 30+ stale branches. The post-merge-rename script renamed them with `--merged-YYYY-MM-DD` but never cleaned up old ones. Manually deleting branches is a waste of time. We built these tools so we don't have to keep doing things manually.
1504
+
1505
+ **How it works:**
1506
+
1507
+ `post-merge-rename.sh --prune` does three things:
1508
+ 1. Renames any merged branches that don't have the `--merged` suffix yet
1509
+ 2. For each developer prefix (`cc-mini/`, `mini/`, `lesa-mini/`, etc.), keeps the last 3 `--merged` branches and deletes the rest from the remote
1510
+ 3. Finds stale branches that are fully merged into main but were never renamed, and deletes them
1511
+
1512
+ `wip-release` now runs prune automatically as step 11 after every release. No manual cleanup needed.
1513
+
1514
+ Rules: never deletes `main`, never deletes the current working branch, always keeps the last 3 per developer. `--dry-run` previews what would be deleted.
1515
+
1516
+ **Files changed:**
1517
+ - `scripts/post-merge-rename.sh` ... new `--prune` flag, stale branch detection, keep-last-3 logic
1518
+ - `tools/wip-release/core.mjs` ... step 11: automatic prune after every release
1519
+
1520
+ ---
1521
+
1522
+ ### License Enforcement Automation
1523
+
1524
+ **What we did:** Made license compliance automatic across three layers: CC Hook, wip-release gate, and one-command repo setup.
1525
+
1526
+ **Why:** `wip-license-guard` existed but was manual. Nobody remembered to run it. The dual-license + CLA standard from this release needs to be enforced, not just documented.
1527
+
1528
+ **How it works:**
1529
+
1530
+ **CC Hook** (`tools/wip-license-guard/hook.mjs`): PreToolUse hook for Claude Code. Intercepts `git commit` and `git push` commands. Checks LICENSE file, copyright, CLA.md, and README license section. Blocks if any check fails. Same pattern as `wip-file-guard`.
1531
+
1532
+ **wip-release gate** (step 0): Before bumping anything, wip-release checks license compliance. If `.license-guard.json` exists and any check fails, the release aborts with a clear message. No bad releases ship.
1533
+
1534
+ **`--from-standard` flag**: `wip-license-guard init --from-standard` applies WIP Computer defaults without prompting. Generates `.license-guard.json`, `LICENSE` (dual MIT+AGPLv3), and `CLA.md` in one command. For new repos, this is all you need.
1535
+
1536
+ **Files changed:**
1537
+ - `tools/wip-license-guard/hook.mjs` ... new CC Hook (PreToolUse, blocks git commit/push)
1538
+ - `tools/wip-license-guard/cli.mjs` ... `--from-standard` flag, CLA.md generation, CLA check in audit
1539
+ - `tools/wip-release/core.mjs` ... step 0: license compliance gate
1540
+
1541
+ ---
1542
+
1543
+ ### README Polish (GPT Feedback Round 2)
1544
+
1545
+ **What we did:** Three targeted improvements based on GPT's review of v1.6.0.
1546
+
1547
+ **Karpathy quote shortened.** The full two-paragraph quote was too heavy for the README. Compressed to one line: *As Andrej Karpathy said: "Apps are for people. Tools are for LLMs, and increasingly, LLMs are the ones using software."* with a source link. Same message, doesn't interrupt the flow.
1548
+
1549
+ **One-line "why" on every feature.** Each tool now leads with the problem it solves before describing what it does:
1550
+ - "AI agents forget release steps. This makes releases one command."
1551
+ - "Dependencies change licenses without telling you. This catches it."
1552
+ - "AI agents overwrite identity files by accident. This stops them."
1553
+ - "Repos end up everywhere. This snaps them back to where they belong."
1554
+
1555
+ **Feedback filed:**
1556
+ - `ai/feedback/2026-03-10--gpt--v1.6.0-readme-review.md`
1557
+ - `ai/feedback/2026-03-10--grok--v1.6.0-summary.md`
1558
+
1559
+ ---
1560
+
1561
+ ### Install
1562
+
1563
+ ```bash
1564
+ npm install -g @wipcomputer/universal-installer
1565
+ wip-install wipcomputer/wip-ai-devops-toolbox
1566
+ ```
1567
+
1568
+ Or update your local clone:
1569
+ ```bash
1570
+ git pull origin main
1571
+ ```
1572
+
1573
+ ---
1574
+
1575
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
1576
+
1577
+ ## 1.6.0 (2026-03-10)
1578
+
1579
+ ## v1.6.0: README Rewrite, Dual Licensing, License Guard, Release Notes Standard
1580
+
1581
+ Four systems that change how DevOps Toolbox presents itself, protects its licensing, and ships releases. The README is now for humans. Licensing is enforceable. Release notes tell a story.
1582
+
1583
+ This release spans PRs #46 through #50 and represents a complete rethink of how we present the toolbox, how we protect its licensing, and how we communicate what each release actually means.
1584
+
1585
+ ---
1586
+
1587
+ ### PR #46: License Format Standard
1588
+
1589
+ **What we did:** Rewrote the license section across the README and private Dev Guide to use a clear, scannable format that signals both openness and commercial intent.
1590
+
1591
+ **Why:** The old license section just said "MIT" in a badge. That's technically correct but it doesn't tell you the full story. We moved to dual licensing (MIT + AGPLv3) and needed a format that makes the distinction immediately clear: use it freely for personal work, need a commercial license if you're bundling it into something you sell.
1592
+
1593
+ **What changed:**
1594
+ - License section switched to a code block format for readability: MIT for all CLI tools, MCP servers, skills, and hooks. AGPLv3 for commercial redistribution, marketplace listings, or bundling into paid services.
1595
+ - Added "Commercial licenses available" as a one-line signal that this is a real product, not just an open source side project.
1596
+ - AGPL renamed to AGPLv3 throughout for version specificity. Grok's feedback confirmed this matters for clarity.
1597
+ - Private Dev Guide (`ai/DEV-GUIDE-private.md`) updated with the licensing standard so every repo going forward follows the same format.
1598
+ - Fixed "Claude Code CLI" to "Claude Code" in attribution across all files.
1599
+
1600
+ **Commits:** `Update license section formatting for readability`, `License section: code block with Grok-style wording`, `License: personal vs commercial distinction, add standard to dev guide`, `License: AGPL -> AGPLv3 for version specificity`
1601
+
1602
+ ---
1603
+
1604
+ ### PR #47: LICENSE Files Across All Tools
1605
+
1606
+ **What we did:** Updated the actual LICENSE file in the root and all 10 sub-tool directories to dual MIT + AGPLv3.
1607
+
1608
+ **Why:** PR #46 changed how we talk about the license. This PR changed the legal documents themselves. Every sub-tool had its own LICENSE file that still said plain MIT. They all needed to match the new dual-license standard, and they needed to match each other exactly.
1609
+
1610
+ **What changed:**
1611
+ - Root `LICENSE` rewritten to dual format. Section 1: MIT (full text). Section 2: GNU Affero General Public License v3.0 (commercial and cloud use). Starts with "Dual License: MIT + AGPLv3" so GitHub's license detection picks it up correctly.
1612
+ - All 10 `tools/*/LICENSE` files updated to identical dual-license text with correct copyright holder (WIP Computer, Inc.).
1613
+ - Bottom line on every LICENSE: "AGPLv3 for personal use is free. Commercial licenses available."
1614
+
1615
+ **Commits:** `LICENSE files: dual MIT+AGPLv3 on root and all sub-tools`
1616
+
1617
+ ---
1618
+
1619
+ ### PR #48: wip-license-guard (New Tool)
1620
+
1621
+ **What we did:** Built a new tool that enforces copyright, license format, and README structure across the toolbox.
1622
+
1623
+ **Why:** With 10 sub-tools, each needing its own LICENSE file, and a README standard that separates human content from technical content, manual enforcement doesn't scale. We needed a tool that catches drift before it ships. The tool also enforces the README standard from the session's feedback work: no install commands in the README (those go in TECHNICAL.md), no MCP config blocks, no Quick Start sections.
1624
+
1625
+ **How it works:**
1626
+ - Interactive first-run (`wip-license-guard init`) asks for copyright holder, license type (MIT, AGPLv3, or dual MIT+AGPL), year, and attribution. Saves config to `.license-guard.json`.
1627
+ - `wip-license-guard check` audits the repo against saved config. Checks LICENSE existence, copyright match, AGPLv3 terms (if dual-license), README license section, README structure.
1628
+ - `wip-license-guard check --fix` auto-repairs: generates missing LICENSE files, updates wrong copyright, creates dual-license text.
1629
+ - Toolbox-aware: automatically walks every `tools/` subdirectory and checks each sub-tool's LICENSE file.
1630
+ - README structure standard enforcement: warns if README contains Quick Start sections, `npm install -g` commands, MCP config blocks, or Architecture/API/Config headings that belong in TECHNICAL.md.
1631
+ - All 14 checks pass on this repo.
1632
+
1633
+ **New files:**
1634
+ - `tools/wip-license-guard/cli.mjs` (268 lines) ... CLI entry point. Commands: `init`, `check`, `check --fix`, `help`.
1635
+ - `tools/wip-license-guard/core.mjs` ... `generateLicense()` produces MIT, AGPL, or dual MIT+AGPLv3 LICENSE text. `generateReadmeBlock()` produces the README license section.
1636
+ - `.license-guard.json` ... config: copyright "WIP Computer, Inc.", license "MIT+AGPL", year 2026.
1637
+
1638
+ **Interfaces:** CLI, Module. Beta stability.
1639
+
1640
+ **Commits:** `Add wip-license-guard tool and .license-guard.json config`
1641
+
1642
+ ---
1643
+
1644
+ ### PR #49: SKILL.md v1.5.1
1645
+
1646
+ **What we did:** Updated the skill documentation that AI agents read when you say "read the SKILL.md."
1647
+
1648
+ **Why:** The SKILL.md was stuck at v1.4.0. It didn't include wip-license-guard (new in this release), didn't have the interface coverage matrix, and used incorrect tool names. When someone tells their AI to read the SKILL.md, it needs to be current and accurate. Stale skill docs mean the AI gives wrong answers about what the tools can do.
1649
+
1650
+ **What changed:**
1651
+ - Version bumped from v1.4.0 to v1.5.1.
1652
+ - Added interfaces column to tool table: CLI, Module, MCP, OpenClaw, Skill, CC Hook for every tool.
1653
+ - Added wip-license-guard to the tool list.
1654
+ - Fixed tool names: `deploy-public` (not `deploy-public.sh`), `post-merge-rename` (not `post-merge-rename.sh`).
1655
+ - Added "Talk to Your Tools" section with concrete MCP prompts: "Scan all dependencies for license changes" calls `license_scan`. "Check if memory-crystal can go public" calls `repo_permissions_check`. Etc.
1656
+ - Added license section matching the new README format.
1657
+ - Updated frontmatter description and capabilities.
1658
+ - Added SKILL.md staleness warning to wip-release: warns when SKILL.md version falls more than a patch behind the release version, so this can't happen again silently.
1659
+
1660
+ **Commits:** `SKILL.md: update to v1.5.1 with full tool table and interfaces`
1661
+
1662
+ ---
1663
+
1664
+ ### PR #50: README Rewrite + Release Notes Standard
1665
+
1666
+ **What we did:** Rewrote the entire README based on external feedback, and upgraded the release pipeline to enforce narrative release notes.
1667
+
1668
+ **Why:** External feedback from Grok and GPT confirmed what we suspected: the README was developer-brain. Install commands, MCP tool mappings, and Quick Start sections front and center. That's what developers write for themselves. It's not what someone landing on the repo needs to see. They want to know: what does this do for me?
1669
+
1670
+ The release notes problem came up during this same work. Every release was producing commit lists instead of stories. Parker had to manually rewrite the notes every time. That needed to be fixed at the tooling level.
1671
+
1672
+ **README changes:**
1673
+
1674
+ The README now follows a strict standard: tagline, "Teach Your AI to Dev" prompt block, features with stability tags, interface coverage matrix, and license. No install commands. No technical implementation details.
1675
+
1676
+ - **Removed Quick Start section.** Install commands belong in TECHNICAL.md, not the README. Added a guard in wip-license-guard to catch `npm install -g` commands and Quick Start headings in any README going forward.
1677
+ - **Removed "Talk to Your Tools" MCP examples.** These are for AIs, not humans. Moved to SKILL.md where they belong.
1678
+ - **Added Karpathy quote.** The sensor/actuator framing from Andrej Karpathy anchors the Features section. Both paragraphs, "Andrej Karpathy put it clearly:" intro, Source link. This is the future of software: not apps, tools.
1679
+ - **Added Interface Coverage matrix.** Single table showing all 10 tools and their six possible interfaces. At a glance you can see what ships as CLI, Module, MCP, OpenClaw, Skill, or CC Hook.
1680
+ - **Added "Can I use this?" section.** Plain-English licensing examples. "Yes, freely:" for personal use. "Need a commercial license:" for bundling into products. Last bullet: "Fork it and send us feedback via PRs (we'd love that)."
1681
+ - **Added License Guard to features list.** New tool from PR #48 needed to be in the features section.
1682
+
1683
+ **Release pipeline changes:**
1684
+
1685
+ Three changes to `wip-release` that make release notes a first-class part of the process:
1686
+
1687
+ 1. **Quality warning.** When `--notes` is missing, too short (under 50 characters), or looks like a changelog entry (starts with "fix:", "add:", "update:"), wip-release warns: "Explain what was built, why, and why it matters."
1688
+
1689
+ 2. **`--notes-file` flag.** Pass a markdown file with the full release narrative: `wip-release minor --notes-file=RELEASE-NOTES-v{version}.md`. This is how you write proper release notes and review them before they go live.
1690
+
1691
+ 3. **Commits fold under narrative.** Commit history is still included, but inside a collapsible `<details>` section labeled "What changed (commits)". The narrative is the headline. The commits are supporting detail.
1692
+
1693
+ **New convention:** `RELEASE-NOTES-v{version}.md` lives on the feature branch. It's part of the PR diff. You review the release notes alongside the code. When the PR merges, `wip-release` reads from the file. The notes you approved are the notes that ship.
1694
+
1695
+ **Files changed:**
1696
+ - `README.md` ... full rewrite
1697
+ - `TECHNICAL.md` ... received Quick Start and npm install commands from README
1698
+ - `tools/wip-release/core.mjs` ... `buildReleaseNotes()` restructured, new `warnIfNotesAreThin()`
1699
+ - `tools/wip-release/cli.js` ... new `--notes-file=path` flag
1700
+ - `tools/wip-license-guard/cli.mjs` ... README structure standard checks added
1701
+ - `RELEASE-NOTES-v{version}.md` ... new convention file
1702
+ - `ai/notes/2026-03-10--grok-feedback--readme-and-licensing.md` ... Grok feedback documented
1703
+ - `ai/notes/2026-03-10--gpt-feedback--product-and-adoption.md` ... GPT feedback documented
1704
+ - `ai/plan/current/2026-03-10--cc-mini--readme-polish-and-mcp-examples.md` ... 7-phase plan, all complete
1705
+
1706
+ **Commits:** `Add feedback notes, plan for README polish + MCP examples`, `README: golden path, MCP examples, interface matrix, license examples`, `Plan: mark phases 1-5 as DONE`, `README: add Karpathy quote on tools vs apps`, `wip-license-guard: add README structure standard checks`, `Move Quick Start to TECHNICAL.md, guard against install commands in README`, `Remove Talk to Your Tools section from README`, `README: full Karpathy argument with both quotes and source link`, `License: replace cloud instances bullet with fork/PR invitation`, `Karpathy quote: remove headline, inline attribution, semicolon`, `Fix Karpathy quote format: intro line, source outside blockquote`, `wip-release: narrative release notes standard`, `Add RELEASE-NOTES-v{version}.md for PR review`
1707
+
1708
+ ---
1709
+
1710
+ ### Install
1711
+
1712
+ ```bash
1713
+ npm install -g @wipcomputer/universal-installer
1714
+ wip-install wipcomputer/wip-ai-devops-toolbox
1715
+ ```
1716
+
1717
+ Or update your local clone:
1718
+ ```bash
1719
+ git pull origin main
1720
+ ```
1721
+
1722
+ ---
1723
+
1724
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
1725
+
1726
+ ## 1.4.0 (2026-03-09)
1727
+
1728
+ MCP unlock. All core tools are now agent-callable.
1729
+
1730
+ ### MCP Servers (new)
1731
+ - **wip-release**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `release`, `release_status`
1732
+ - **wip-license-hook**: `mcp-server.mjs` wrapping compiled `dist/`. Tools: `license_scan`, `license_audit`, `license_gate`, `license_ledger`
1733
+ - **wip-repo-permissions-hook**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `repo_permissions_check`, `repo_permissions_audit`
1734
+ - **wip-repos**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `repos_check`, `repos_sync_plan`, `repos_add`, `repos_move`, `repos_tree`
1735
+
1736
+ ### SKILL.md files (new)
1737
+ - **wip-repos**: added SKILL.md (was the only tool without one)
1738
+ - **deploy-public**: added `scripts/SKILL-deploy-public.md`
1739
+ - **post-merge-rename**: added `scripts/SKILL-post-merge-rename.md`
1740
+
1741
+ ### Interface updates
1742
+ - wip-release SKILL.md: interface updated from CLI to [cli, module, mcp], added MCP section
1743
+ - wip-license-hook SKILL.md: added version, interface [cli, mcp], added MCP section
1744
+ - wip-repo-permissions-hook SKILL.md: interface updated to [cli, module, mcp, hook, plugin], added MCP section
1745
+ - All 4 tools: `@modelcontextprotocol/sdk` added as dependency
1746
+
1747
+ ### Dev Guide updates
1748
+ - Added "Universal Installer Checklist" section to DEV-GUIDE-GENERAL-PUBLIC.md
1749
+ - Added "Universal Installer ... Dogfooding Rule" section to private Dev Guide
1750
+ - Documented the v1.3.0 zero-MCP-servers incident
1751
+
1752
+ ### Other
1753
+ - Root SKILL.md bumped to 1.4.0, added all missing tools (wip-file-guard, wip-universal-installer, wip-repos, LDM Dev Tools.app), added MCP Servers section
1754
+ - README source code table updated with mcp-server.mjs files
1755
+
1756
+ ## 1.3.0 (2026-03-09)
1757
+
1758
+ Toolbox consolidation. Three new tools added.
1759
+
1760
+ ### New tools
1761
+ - **wip-file-guard**: blocks destructive edits to protected identity files. For Claude Code CLI and OpenClaw. Previously standalone repo, now folded into toolbox.
1762
+ - **wip-universal-installer**: The Universal Interface specification for agent-native software. Six interfaces: CLI, Module, MCP Server, OpenClaw Plugin, Skill, Claude Code Hook. Previously standalone repo, now folded into toolbox.
1763
+ - **wip-repos**: repo manifest reconciler. Makes repos-manifest.json the single source of truth for repo organization. Like prettier for folder structure. New tool, built from scratch.
1764
+
1765
+ ### Other changes
1766
+ - `UNIVERSAL-INTERFACE.md` promoted to repo root (from wip-universal-installer SPEC.md)
1767
+ - README updated with all three new tools, source code table, install commands
1768
+ - Standalone repos renamed to `-deprecated` on GitHub
1769
+ - Toolbox now has 9 tools. All self-contained, zero shared dependencies.
1770
+
1771
+ ## 1.2.0 (2026-03-09)
1772
+
1773
+ Major repo reorganization and Dev Guide expansion.
1774
+
1775
+ ### Repo structure
1776
+ - Separated public Dev Guide from private conventions
1777
+ - `guide/DEV-GUIDE.md` → `DEV-GUIDE-GENERAL-PUBLIC.md` (genericized, root level, goes public)
1778
+ - `ai/DEV-GUIDE-private.md` → `ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md` (WIP-specific conventions)
1779
+ - `guide/scripts/` → `scripts/` (moved to root level)
1780
+ - Old `guide/` folder trashed
1781
+
1782
+ ### New Dev Guide sections
1783
+ - Post-merge branch rename convention (never delete branches, rename with `--merged-YYYY-MM-DD`)
1784
+ - Repo directory structure (standard layout, staging folder conventions, create as `-private` from day one)
1785
+ - The manifest (`repos-manifest.json` as source of truth for repo locations)
1786
+ - Privatize Before You Work rule
1787
+ - Cloudflare Workers deploy guard (commit before deploy, guarded npm scripts)
1788
+ - PR checklist for private repos (dev update, roadmap, readme-first, plan archival)
1789
+ - Expanded `_trash` convention
1790
+ - Warning: never use `--no-publish` before `deploy-public.sh`
1791
+
1792
+ ### New script
1793
+ - `scripts/post-merge-rename.sh`: scans for merged branches missing `--merged-YYYY-MM-DD` suffix and renames them. Runs automatically as wip-release step 10, or standalone.
1794
+
1795
+ ### README and SKILL.md
1796
+ - Added post-merge-rename.sh to tools section and source table
1797
+ - Fixed all paths for reorg
1798
+ - Updated Dev Guide description with new sections
1799
+
1800
+ ## 1.1.3 (2026-03-01)
1801
+
1802
+ - Fix npx package name in pre-pull.sh and pre-push.sh (@wipcomputer/license-hook → @wipcomputer/wip-license-hook)
1803
+ - Fix wip-release test script (cli.mjs → cli.js)
1804
+ - Clean up wip-release CHANGELOG blank lines
1805
+ - Add visibility-audit.sh to DEV-GUIDE .app structure diagram
1806
+ - Remove duplicate skill/SKILL.md subfolder
1807
+
1808
+ ## 1.1.2 (2026-03-01)
1809
+
1810
+ - SKILL.md: sync version to 1.1.2
1811
+ - CHANGELOG: add missing v1.1.0 and v1.1.1 entries
1812
+ - ldm-jobs README: add visibility-audit.sh documentation
1813
+
1814
+ ## 1.1.1 (2026-03-01)
1815
+
1816
+ - README: add wip-repo-permissions-hook section, source code table entry, cron schedule
1817
+ - SKILL.md: bump version, add repo-visibility-guard capability, add tool section
1818
+
1819
+ ## 1.1.0 (2026-03-01)
1820
+
1821
+ - New tool: wip-repo-permissions-hook. Blocks repos from going public without a -private counterpart
1822
+ - Surfaces: CLI (check, audit, can-publish), Claude Code PreToolUse hook, OpenClaw plugin
1823
+ - New cron job: visibility-audit.sh for LDM Dev Tools.app
1824
+ - DEV-GUIDE: add hard rule for public/private repo pattern
1825
+
1826
+ ## 1.0.4 (2026-03-01)
1827
+
1828
+ - DEV-GUIDE: replace inbox/punchlist system with per-agent todo files (To Do, Done, Deprecated. Never delete.)
1829
+
1830
+ ## 1.0.3 (2026-02-28)
1831
+
1832
+ - deploy-public.sh: auto-detect harness ID from private repo path (cc-mini/, cc-air/, oc-lesa-mini/)
1833
+
1834
+ ## 1.0.2 (2026-02-28)
1835
+
1836
+ - deploy-public.sh: fix branch prefix from mini/ to cc-mini/ per harness naming convention
1837
+
1838
+ ## 1.0.1 (2026-02-28)
1839
+
1840
+ - DEV-GUIDE: add multi-agent clone workflow and harness branch convention (cc-mini/, cc-air/, lesa-mini/)
1841
+
1842
+ ## 1.0.0 (2026-02-28)
1843
+
1844
+ - Production release: all tools battle-tested across 100+ repos, 200+ releases
1845
+ - All source code visible and auditable in repo (no closed binaries)
1846
+ - wip-license-hook bumped to v1.0.0
1847
+ - LDM Dev Tools.app job scripts extracted to tools/ldm-jobs/
1848
+ - Real-world example: wip-universal-installer release history
1849
+ - Source code table, build instructions, and dev guide in README
1850
+ - Standalone repos (wip-release, wip-license-hook) merged into umbrella
1851
+
1852
+ ## 0.2.1 (2026-02-28)
1853
+
1854
+ - deploy-public.sh: fix release sync for repos without package.json (falls back to latest git tag)
1855
+
1856
+ ## 0.2.0 (2026-02-28)
1857
+
1858
+ - deploy-public.sh: sync GitHub releases to public repos (pulls notes, rewrites references)
1859
+ - DEV-GUIDE: add release quality standards (contributors, release notes, npm, both repos)
1860
+ - DEV-GUIDE: add scheduled automation (.app pattern) documentation
1861
+ - DEV-GUIDE: add built-by attribution standard
1862
+ - LDM Dev Tools.app: macOS automation wrapper for cron jobs with Full Disk Access
1863
+ - Add .npmignore to exclude ai/ from npm packages
1864
+
1865
+ ## 0.1.1 (2026-02-27)
1866
+
1867
+ - DEV-GUIDE: add "never work on main" rule
1868
+ - DEV-GUIDE: clarify private repo is the only local clone needed
1869
+
1870
+ ## 0.1.0 (2026-02-27)
1871
+
1872
+ - Initial release: unified dev toolkit
1873
+ - Includes wip-release (v1.2.4) and wip-license-hook (v0.1.0)
1874
+ - DEV-GUIDE: general best practices for AI-assisted development
1875
+ - deploy-public.sh: private-to-public repo sync tool