@wipcomputer/wip-ai-devops-toolbox 1.9.20

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 (146) hide show
  1. package/.license-guard.json +7 -0
  2. package/.publish-skill.json +4 -0
  3. package/CHANGELOG.md +1120 -0
  4. package/CLA.md +19 -0
  5. package/DEV-GUIDE-GENERAL-PUBLIC.md +882 -0
  6. package/LICENSE +52 -0
  7. package/README.md +238 -0
  8. package/SKILL.md +728 -0
  9. package/TECHNICAL.md +282 -0
  10. package/UNIVERSAL-INTERFACE.md +180 -0
  11. package/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  12. package/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  13. package/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  14. package/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  15. package/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  16. package/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  17. package/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  18. package/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  19. package/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  20. package/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  21. package/_trash/guide 2/DEV-GUIDE.md +487 -0
  22. package/_trash/guide 2/scripts/deploy-public.sh +152 -0
  23. package/package.json +27 -0
  24. package/scripts/SKILL-deploy-public.md +61 -0
  25. package/scripts/SKILL-post-merge-rename.md +47 -0
  26. package/scripts/deploy-public.sh +264 -0
  27. package/scripts/post-merge-rename.sh +205 -0
  28. package/scripts/publish-skill.sh +134 -0
  29. package/tools/deploy-public/LICENSE +52 -0
  30. package/tools/deploy-public/README.md +31 -0
  31. package/tools/deploy-public/SKILL.md +71 -0
  32. package/tools/deploy-public/deploy-public.sh +264 -0
  33. package/tools/deploy-public/package.json +9 -0
  34. package/tools/ldm-jobs/LICENSE +52 -0
  35. package/tools/ldm-jobs/README.md +46 -0
  36. package/tools/ldm-jobs/backup.sh +16 -0
  37. package/tools/ldm-jobs/branch-protect.sh +39 -0
  38. package/tools/ldm-jobs/crystal-capture.sh +19 -0
  39. package/tools/ldm-jobs/setup-shell.sh +27 -0
  40. package/tools/ldm-jobs/visibility-audit.sh +27 -0
  41. package/tools/post-merge-rename/LICENSE +52 -0
  42. package/tools/post-merge-rename/README.md +29 -0
  43. package/tools/post-merge-rename/SKILL.md +57 -0
  44. package/tools/post-merge-rename/package.json +9 -0
  45. package/tools/post-merge-rename/post-merge-rename.sh +122 -0
  46. package/tools/wip-branch-guard/INSTALL.md +41 -0
  47. package/tools/wip-branch-guard/guard.mjs +259 -0
  48. package/tools/wip-branch-guard/package.json +11 -0
  49. package/tools/wip-file-guard/CHANGELOG.md +6 -0
  50. package/tools/wip-file-guard/LICENSE +52 -0
  51. package/tools/wip-file-guard/README.md +113 -0
  52. package/tools/wip-file-guard/REFERENCE.md +86 -0
  53. package/tools/wip-file-guard/SKILL.md +105 -0
  54. package/tools/wip-file-guard/guard.mjs +128 -0
  55. package/tools/wip-file-guard/openclaw.plugin.json +8 -0
  56. package/tools/wip-file-guard/package.json +27 -0
  57. package/tools/wip-file-guard/test.sh +119 -0
  58. package/tools/wip-license-guard/LICENSE +52 -0
  59. package/tools/wip-license-guard/README.md +32 -0
  60. package/tools/wip-license-guard/SKILL.md +65 -0
  61. package/tools/wip-license-guard/cli.mjs +464 -0
  62. package/tools/wip-license-guard/core.mjs +310 -0
  63. package/tools/wip-license-guard/hook.mjs +146 -0
  64. package/tools/wip-license-guard/package.json +15 -0
  65. package/tools/wip-license-hook/CHANGELOG.md +17 -0
  66. package/tools/wip-license-hook/LICENSE +52 -0
  67. package/tools/wip-license-hook/README.md +200 -0
  68. package/tools/wip-license-hook/SKILL.md +111 -0
  69. package/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  70. package/tools/wip-license-hook/dist/cli/index.js +170 -0
  71. package/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  72. package/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  73. package/tools/wip-license-hook/dist/core/detector.js +104 -0
  74. package/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  75. package/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  76. package/tools/wip-license-hook/dist/core/index.js +5 -0
  77. package/tools/wip-license-hook/dist/core/index.js.map +1 -0
  78. package/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  79. package/tools/wip-license-hook/dist/core/ledger.js +72 -0
  80. package/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  81. package/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  82. package/tools/wip-license-hook/dist/core/reporter.js +227 -0
  83. package/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  84. package/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  85. package/tools/wip-license-hook/dist/core/scanner.js +325 -0
  86. package/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  87. package/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  88. package/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  89. package/tools/wip-license-hook/mcp-server.mjs +119 -0
  90. package/tools/wip-license-hook/package-lock.json +54 -0
  91. package/tools/wip-license-hook/package.json +43 -0
  92. package/tools/wip-license-hook/src/cli/index.ts +189 -0
  93. package/tools/wip-license-hook/src/core/detector.ts +130 -0
  94. package/tools/wip-license-hook/src/core/index.ts +4 -0
  95. package/tools/wip-license-hook/src/core/ledger.ts +116 -0
  96. package/tools/wip-license-hook/src/core/reporter.ts +255 -0
  97. package/tools/wip-license-hook/src/core/scanner.ts +367 -0
  98. package/tools/wip-license-hook/tsconfig.json +16 -0
  99. package/tools/wip-readme-format/README.md +49 -0
  100. package/tools/wip-readme-format/SKILL.md +84 -0
  101. package/tools/wip-readme-format/format.mjs +570 -0
  102. package/tools/wip-readme-format/package.json +15 -0
  103. package/tools/wip-release/CHANGELOG.md +42 -0
  104. package/tools/wip-release/LICENSE +52 -0
  105. package/tools/wip-release/README.md +45 -0
  106. package/tools/wip-release/REFERENCE.md +100 -0
  107. package/tools/wip-release/SKILL.md +139 -0
  108. package/tools/wip-release/cli.js +161 -0
  109. package/tools/wip-release/core.mjs +1174 -0
  110. package/tools/wip-release/mcp-server.mjs +109 -0
  111. package/tools/wip-release/package.json +36 -0
  112. package/tools/wip-repo-init/README.md +38 -0
  113. package/tools/wip-repo-init/SKILL.md +77 -0
  114. package/tools/wip-repo-init/init.mjs +142 -0
  115. package/tools/wip-repo-init/package.json +11 -0
  116. package/tools/wip-repo-permissions-hook/LICENSE +52 -0
  117. package/tools/wip-repo-permissions-hook/README.md +86 -0
  118. package/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  119. package/tools/wip-repo-permissions-hook/cli.js +83 -0
  120. package/tools/wip-repo-permissions-hook/core.mjs +122 -0
  121. package/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  122. package/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  123. package/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  124. package/tools/wip-repo-permissions-hook/package.json +31 -0
  125. package/tools/wip-repos/LICENSE +52 -0
  126. package/tools/wip-repos/README.md +77 -0
  127. package/tools/wip-repos/SKILL.md +80 -0
  128. package/tools/wip-repos/cli.mjs +176 -0
  129. package/tools/wip-repos/core.mjs +290 -0
  130. package/tools/wip-repos/mcp-server.mjs +157 -0
  131. package/tools/wip-repos/package.json +34 -0
  132. package/tools/wip-universal-installer/CHANGELOG.md +57 -0
  133. package/tools/wip-universal-installer/LICENSE +52 -0
  134. package/tools/wip-universal-installer/README.md +81 -0
  135. package/tools/wip-universal-installer/REFERENCE.md +122 -0
  136. package/tools/wip-universal-installer/SKILL.md +87 -0
  137. package/tools/wip-universal-installer/SPEC.md +180 -0
  138. package/tools/wip-universal-installer/detect.mjs +130 -0
  139. package/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  140. package/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  141. package/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  142. package/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  143. package/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  144. package/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  145. package/tools/wip-universal-installer/install.js +930 -0
  146. package/tools/wip-universal-installer/package.json +36 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1120 @@
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.20 (2026-03-14)
36
+
37
+ Make root package publishable. npm install -g @wipcomputer/wip-ai-devops-toolbox now installs all 12 CLI tools.
38
+
39
+ ## 1.9.19 (2026-03-14)
40
+
41
+ Add websiteRepo to .publish-skill.json. Auto-publish SKILL.md to website on release. Fix install prompt URLs to use wip- prefix.
42
+
43
+ ## 1.9.18 (2026-03-14)
44
+
45
+ Rewrite SKILL.md install flow to use ldm install. Conversational AI-guided pattern matching Memory Crystal.
46
+
47
+ ## 1.9.17 (2026-03-14)
48
+
49
+ 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.
50
+
51
+ ## 1.9.16 (2026-03-14)
52
+
53
+ 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.
54
+
55
+ ## 1.9.15 (2026-03-14)
56
+
57
+ 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.
58
+
59
+ ## 1.9.14 (2026-03-14)
60
+
61
+ Add readme-license command to wip-license-guard. Scans all repos, applies standard license block, removes from sub-tools. License Guard now Stable.
62
+
63
+ ## 1.9.13 (2026-03-14)
64
+
65
+ Release.
66
+
67
+ ## 1.9.12 (2026-03-13)
68
+
69
+ 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.
70
+
71
+ ## 1.9.11 (2026-03-13)
72
+
73
+ wip-install bootstraps LDM OS silently when not on PATH
74
+
75
+ ## 1.9.10 (2026-03-13)
76
+
77
+ # Release Notes: AI DevOps Toolbox v1.9.10
78
+
79
+ **Fix: Release notes files on disk always beat --notes flag**
80
+
81
+ 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.
82
+
83
+ 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.
84
+
85
+ ## What changed
86
+
87
+ ### Notes priority is now enforced (highest wins):
88
+
89
+ 1. `--notes-file=path` ... explicit file path (always wins)
90
+ 2. `RELEASE-NOTES-v{ver}.md` ... in repo root (always wins over `--notes` flag)
91
+ 3. `ai/dev-updates/YYYY-MM-DD*` ... today's dev update (wins over `--notes` flag if longer)
92
+ 4. `--notes="text"` ... fallback only. Use for repos without release notes files.
93
+
94
+ If a RELEASE-NOTES file exists on disk, `--notes` is ignored and a warning is printed:
95
+
96
+ ```
97
+ ! --notes flag ignored: RELEASE-NOTES-v1-9-10.md takes priority
98
+ ```
99
+
100
+ Written notes on disk always take priority over a CLI one-liner. The agent wrote the file. The tool should use it.
101
+
102
+ ## Files changed
103
+
104
+ ```
105
+ tools/wip-release/cli.js | ~40 lines rewritten (notes cascade logic)
106
+ ```
107
+
108
+ ## Install
109
+
110
+ ```bash
111
+ git pull origin main
112
+ ```
113
+
114
+ ## Attribution
115
+
116
+ Built by Parker Todd Brooks, Lesa, and Claude Opus 4.6 at WIP.computer.
117
+
118
+ ## 1.9.9 (2026-03-13)
119
+
120
+ Enforce git worktrees as default workflow. wip-release blocks from worktrees, wip-install auto-adds .claude/worktrees/ to .gitignore, Dev Guide worktree section added.
121
+
122
+ ## 1.9.8 (2026-03-13)
123
+
124
+ wip-install delegates to ldm install when available
125
+
126
+ ## 1.9.7 (2026-03-13)
127
+
128
+ # Release Notes: AI DevOps Toolbox v1.9.7
129
+
130
+ ## LDM OS Integration
131
+
132
+ AI DevOps Toolbox now works with LDM OS when it's available.
133
+
134
+ ### wip-install delegates to ldm install
135
+
136
+ 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.
137
+
138
+ Supports `--dry-run` and `--json` passthrough to `ldm install`.
139
+
140
+ ### LDM OS tip
141
+
142
+ After standalone installs, the Toolbox prints a tip: "Run `ldm install` to see more skills you can add."
143
+
144
+ ### Universal Installer link
145
+
146
+ 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.
147
+
148
+ ### Part of LDM OS
149
+
150
+ README includes a "Part of LDM OS" section linking back to the LDM OS repo.
151
+
152
+ ## 1.9.6 (2026-03-12)
153
+
154
+ # v1.9.6 ... Enforcement Gates
155
+
156
+ Three fixes that move the release pipeline from "suggestions agents forget" to "gates that block."
157
+
158
+ ---
159
+
160
+ ## syncSkillVersion corrupted quoted versions (#71)
161
+
162
+ 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.
163
+
164
+ 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.
165
+
166
+ 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.
167
+
168
+ **Files changed:**
169
+ - `tools/wip-release/core.mjs` ... `syncSkillVersion()` regex fix
170
+ - `SKILL.md` ... repaired corrupted version back to `"1.9.5"`
171
+
172
+ ---
173
+
174
+ ## gh pr merge now always deletes branch (#74)
175
+
176
+ 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.
177
+
178
+ Also verified every merge uses `--merge` (never squash). Dev Guide updated with the new convention.
179
+
180
+ **Files changed:**
181
+ - `scripts/deploy-public.sh` ... added `--delete-branch`, removed manual cleanup
182
+ - `tools/deploy-public/deploy-public.sh` ... same
183
+ - `DEV-GUIDE-GENERAL-PUBLIC.md` ... updated merge examples
184
+ - `ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md` ... updated merge rules
185
+ - `ai/_trash/DEV-GUIDE-private.md` ... updated
186
+ - `ai/_sort/_trash/ai_old/_trash/DEV-GUIDE-private.md` ... updated
187
+
188
+ ---
189
+
190
+ ## wip-release blocks on stale remote branches (#75)
191
+
192
+ 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.
193
+
194
+ - **Patch:** warns with the list of stale branches (non-blocking)
195
+ - **Minor/major:** blocks the release. Clean up first.
196
+ - **`--skip-stale-check`:** override flag for emergencies
197
+
198
+ Follows the existing gate pattern: fetches with `--prune`, filters out `origin/main`, `origin/HEAD`, and `--merged-` branches. Fails gracefully if git commands error.
199
+
200
+ **Files changed:**
201
+ - `tools/wip-release/core.mjs` ... `checkStaleBranches()` function, integrated as gate 0.8
202
+ - `tools/wip-release/cli.js` ... `--skip-stale-check` flag, help text
203
+
204
+ ---
205
+
206
+ ## Diffstat
207
+
208
+ ```
209
+ 10 files changed, 102 insertions(+), 21 deletions(-)
210
+ ```
211
+
212
+ ## Install
213
+
214
+ ```bash
215
+ npm install -g @wipcomputer/wip-ai-devops-toolbox
216
+ ```
217
+
218
+ Or update an existing install:
219
+ ```bash
220
+ wip-install wipcomputer/wip-ai-devops-toolbox
221
+ ```
222
+
223
+ ---
224
+
225
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
226
+
227
+ ## 1.9.5 (2026-03-12)
228
+
229
+ wip-release: bump sub-tool versions in toolbox repos. Fixes #132.
230
+
231
+ ## 1.9.4 (2026-03-12)
232
+
233
+ wip-install: detect and migrate existing installs under different names. Fixes #128.
234
+
235
+ ## 1.9.3 (2026-03-12)
236
+
237
+ 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.
238
+
239
+ ## 1.9.2 (2026-03-12)
240
+
241
+ # v1.9.2: Distribution Pipeline Fix
242
+
243
+ 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.
244
+
245
+ This release fixes all of it.
246
+
247
+ ## What changed
248
+
249
+ ### Install fixes (#96, #110)
250
+ - CLI binaries now have correct executable permissions (git +x on all bin entry files)
251
+ - wip-license-hook dist/ committed to repo (TypeScript build output was gitignored)
252
+ - Installer auto-detects TypeScript projects and runs build if dist/ missing
253
+ - chmod +x safety net after every npm install -g
254
+ - SSH fallback when HTTPS clone fails (private repos)
255
+
256
+ ### SKILL.md spec compliance (#107, #108)
257
+ - All 12 SKILL.md files conform to agentskills.io spec
258
+ - name field: lowercase-hyphen format matching directory name
259
+ - Display names in metadata.display-name
260
+ - version, homepage, author in metadata block
261
+ - license: MIT on all files
262
+ - metadata.openclaw blocks with install instructions and emoji
263
+ - New SKILL.md created for wip-license-guard (was missing)
264
+
265
+ ### Distribution pipeline (#97, #100, #104)
266
+ - ClawHub publish now iterates all sub-tool SKILL.md files, not just root
267
+ - detectSkillSlug reads the name field from SKILL.md frontmatter
268
+ - deploy-public.sh runs npm publish from the public clone after code sync
269
+ - Handles both single repos and toolbox repos (iterates tools/*)
270
+ - Distribution summary at end of release: shows all targets with pass/fail
271
+ - syncSkillVersion handles quoted version strings in new metadata format
272
+
273
+ ## Install
274
+
275
+ ```bash
276
+ npm install -g @wipcomputer/wip-ai-devops-toolbox
277
+ wip-install wipcomputer/wip-ai-devops-toolbox
278
+ ```
279
+
280
+ Built by Parker Todd Brooks, Lesa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
281
+
282
+ ## 1.9.1 (2026-03-11)
283
+
284
+ # v1.9.1: Release gates ... product docs and release notes quality enforcement
285
+
286
+ 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.
287
+
288
+ ## Product docs gate
289
+
290
+ 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.
291
+
292
+ `wip-release` now checks three things before publishing:
293
+
294
+ 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.
295
+ 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.
296
+ 3. **Readme-first was updated.** Same check on `ai/product/readme-first-product.md`. The product bible should always describe what's actually built.
297
+
298
+ Repos without an `ai/` directory are skipped silently. This only applies to repos that have adopted the `ai/` folder standard.
299
+
300
+ For **patch** releases: warns but doesn't block. Hotfixes shouldn't be held up by docs.
301
+ For **minor/major** releases: blocks the release. You can't ship a meaningful feature with stale product docs.
302
+
303
+ `--skip-product-check` overrides for exceptional cases.
304
+
305
+ ## Release notes quality gate
306
+
307
+ 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.
308
+
309
+ 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.
310
+
311
+ The fix:
312
+ - `checkReleaseNotes()` replaces `warnIfNotesAreThin()`. It runs before the version bump, not after.
313
+ - The CLI now tracks `notesSource`: where the notes came from (`file`, `dev-update`, `flag`, or `none`).
314
+ - 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."
315
+ - For patch releases: warns if notes are short, but doesn't block.
316
+
317
+ ## Both gates follow the same pattern
318
+
319
+ 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.
320
+
321
+ The MCP server was also updated with `skipProductCheck` and `notesSource` passthrough so agents calling wip-release via MCP get the same enforcement.
322
+
323
+ ## 1.9.0 (2026-03-11)
324
+
325
+ README Formatter (section-based staging + deploy), Repo Init (ai/ directory scaffolding), Dev Guide overhaul with release notes workflow
326
+
327
+ ## 1.8.2 (2026-03-11)
328
+
329
+ # v1.8.2: Clean up release notes after release
330
+
331
+ RELEASE-NOTES files were piling up in the repo root. `wip-release` consumed them for the GitHub release and CHANGELOG but never cleaned up.
332
+
333
+ 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.
334
+
335
+ `deploy-public.sh` also now excludes `_trash/` so these files stay private.
336
+
337
+ ## 1.8.1 (2026-03-11)
338
+
339
+ # v1.8.1: Fix CLI install when package name changed
340
+
341
+ 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.
342
+
343
+ 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.
344
+
345
+ Found on `wip-license-hook` (renamed from `@wipcomputer/license-hook` to `@wipcomputer/wip-license-hook`).
346
+
347
+ ## 1.8.0 (2026-03-11)
348
+
349
+ # v1.8.0: Fix CC Hook duplicates, add GitHub Issues convention
350
+
351
+ ## CC Hook duplicate detection fix
352
+
353
+ `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.
354
+
355
+ 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.
356
+
357
+ The fix:
358
+ - Match existing hooks by tool name in the path, not exact command string
359
+ - Always prefer `~/.ldm/extensions/<tool>/guard.mjs` over source or temp paths
360
+ - If a hook for the same tool exists at a different path, update it instead of adding a duplicate
361
+
362
+ ## GitHub Issues convention added to Dev Guide
363
+
364
+ We were tracking work in `ai/todos/` markdown files. Items got lost. GitHub Issues gives us tracking, cross-referencing, and visibility across agents.
365
+
366
+ Added to the public Dev Guide:
367
+ - When to use GitHub Issues vs `ai/todos/`
368
+ - Filing convention: `filed-by:<agent-id>` labels and attribution lines
369
+ - Public vs private issue routing: public issues are the front door, private issues are the workshop
370
+ - Agent ID naming convention: `[platform]-[agent]-[machine]`
371
+
372
+ Added to the private Dev Guide:
373
+ - `filed-by:cc-mini` (blue) and `filed-by:oc-lesa-mini` (purple) label details
374
+ - Org-wide deployment commands
375
+ - Incident note: Memory Crystal agent ID drift
376
+
377
+ Both labels deployed across all wipcomputer repos.
378
+
379
+ ## 1.7.9 (2026-03-11)
380
+
381
+ Add GitHub Issues convention and filed-by workflow to the Dev Guide.
382
+
383
+ 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.
384
+
385
+ **Public Dev Guide (DEV-GUIDE-GENERAL-PUBLIC.md):**
386
+ - 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
387
+ - Agent ID naming convention: [platform]-[agent]-[machine] format documented with examples
388
+ - Public/private issue bridge: public issues are the front door (users), private issues are the workshop (team), releases connect them
389
+
390
+ **Private Dev Guide (ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md):**
391
+ - filed-by label details: cc-mini (blue), oc-lesa-mini (purple), deployed org-wide
392
+ - Commands for adding labels to new agents or repos
393
+ - 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
394
+
395
+ **Org-wide:** filed-by:cc-mini and filed-by:oc-lesa-mini labels created on all wipcomputer repos.
396
+
397
+ ## 1.7.8 (2026-03-10)
398
+
399
+ # Dev Update: Smart Install + Platform Compatibility
400
+
401
+ **Date:** 2026-03-10 22:40 PST
402
+ **Author:** Claude Code (cc-mini)
403
+ **Version:** v1.7.8 (pending)
404
+ **Branches:** cc-mini/smart-install, cc-mini/platform-compat-v2
405
+
406
+ ## Smart Install (wip-install)
407
+
408
+ 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."
409
+
410
+ The Universal Installer was doing blind `rm -rf` and re-copy on every run. Now it checks versions first:
411
+
412
+ - **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".
413
+ - **CLI:** Checks `npm list -g` for the installed version. Same version = skip.
414
+ - **MCP:** Checks if already registered at the same server path. Same path = skip.
415
+ - **CC Hooks:** Already had duplicate detection (unchanged).
416
+
417
+ No more destroying things that don't need updating.
418
+
419
+ ## Platform Compatibility (SKILL.md)
420
+
421
+ Parker's feedback after testing with Grok: "Grok said 'I'll run wip-install' but it literally cannot. It's hallucinating capabilities."
422
+
423
+ 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."
424
+
425
+ Rewrote to capability requirements:
426
+
427
+ | Interface | Requires |
428
+ |-----------|----------|
429
+ | CLI | Shell access |
430
+ | MCP Server | MCP client support |
431
+ | CC Hook | Claude Code CLI with hooks |
432
+ | OpenClaw Plugin | OpenClaw runtime |
433
+ | Skill | Ability to read this file |
434
+ | Module | Node.js import |
435
+
436
+ 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."
437
+
438
+ This is future-proof. When a platform adds MCP or shell access, the SKILL.md doesn't need updating. The agent assesses itself.
439
+
440
+ ## Cross-Platform Testing Results
441
+
442
+ Three AIs read the same SKILL.md onboarding prompt:
443
+
444
+ - **Claude Code (another instance):** Read it, explained all tools correctly, offered dry-run first. Responded with "HOLY SHIT!!!" (impressed by the tooling).
445
+ - **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.
446
+ - **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.
447
+
448
+ The SKILL.md is working. Three different AIs, three different platforms, all understood the toolbox correctly from one file.
449
+
450
+ ## 1.7.7 (2026-03-10)
451
+
452
+ # Dev Update: SKILL.md as the Real Interface
453
+
454
+ **Date:** 2026-03-10 22:10 PST
455
+ **Author:** Claude Code (cc-mini)
456
+ **Version:** v1.7.4
457
+ **Branch:** cc-mini/skill-installer-details
458
+
459
+ ## The Insight
460
+
461
+ Parker said it plainly: "We're not doing READMEs anymore. This is not for humans."
462
+
463
+ 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.
464
+
465
+ 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.
466
+
467
+ ## What We Researched
468
+
469
+ Parker pointed us to agentcard.sh/agent.txt as a reference. We researched three AI documentation conventions:
470
+
471
+ 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.
472
+
473
+ 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.
474
+
475
+ 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.
476
+
477
+ 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.
478
+
479
+ ## What Changed in v1.7.4
480
+
481
+ The SKILL.md went from ~140 lines (descriptions + links) to ~475 lines (complete operational manual).
482
+
483
+ Every one of the 11 tools now has:
484
+ - Complete commands with all flags and options
485
+ - Step-by-step "what happens when you run it" sequences
486
+ - Exact file paths (where it reads, where it writes)
487
+ - Safety notes (what it deletes, what it overwrites, what to watch for)
488
+ - How it works across different interfaces (CC Hook, OpenClaw Plugin, MCP server)
489
+
490
+ ### Specific additions worth noting:
491
+
492
+ **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.
493
+
494
+ **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.
495
+
496
+ **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.
497
+
498
+ **MCP section** got complete tool function names for all MCP-enabled tools, so an AI can add them to .mcp.json without guessing.
499
+
500
+ ## The "Teach Your AI" Framing
501
+
502
+ 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.
503
+
504
+ 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."
505
+
506
+ ## Interface Coverage Table Iterations
507
+
508
+ We went through several iterations on the table format:
509
+
510
+ 1. **Separate tables per category** ... Parker: "too hard on the eyes"
511
+ 2. **Single table, bold category divider rows** ... better, but needed numbering
512
+ 3. **Added numbers 1-11 in a # column** ... Parker liked it
513
+ 4. **Tried moving categories into the # column, removing numbers** ... Parker: "looks worse, change it back"
514
+ 5. **Final: numbers + category divider rows, no dashes in empty cells** ... clean and scannable
515
+
516
+ The lesson: don't overthink table formatting. Numbers give anchoring. Category rows give structure. Empty cells are cleaner than dashes.
517
+
518
+ ## The Standard Going Forward
519
+
520
+ This is how we think SKILL.md files should be written for any tool in the toolbox:
521
+
522
+ 1. YAML frontmatter with name, version, interface list
523
+ 2. One-paragraph description of what the tool teaches
524
+ 3. Complete command reference with all flags
525
+ 4. Step-by-step operational detail (what happens when you run it)
526
+ 5. File paths (reads from, writes to)
527
+ 6. Safety notes (destructive operations, prerequisites)
528
+ 7. Interface-specific behavior (how it works as CLI vs Hook vs MCP vs Plugin)
529
+
530
+ 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.
531
+
532
+ ## Release Notes Standard
533
+
534
+ 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.
535
+
536
+ 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.
537
+
538
+ ## Files Changed
539
+
540
+ - `SKILL.md` ... complete rewrite (140 -> 475 lines)
541
+ - `README.md` ... Interface Coverage table: numbered, category dividers, no dashes
542
+ - `ai/feedback/2026-03-10--gpt--v1.7.1-readme-review.md` ... GPT rated the README 9.6/10
543
+
544
+ ## wip-release: Auto-Detect Dev Updates as Release Notes
545
+
546
+ Parker's feedback: "The release notes should be automated. I shouldn't have to keep telling you to do this."
547
+
548
+ We updated `wip-release` to auto-detect release notes from `ai/dev-updates/`. The priority order:
549
+
550
+ 1. `--notes-file=path` (explicit)
551
+ 2. `RELEASE-NOTES-v{ver}.md` in repo root
552
+ 3. `ai/dev-updates/YYYY-MM-DD*` (today's dev update files, most recent first)
553
+ 4. `--notes="one-liner"` (fallback, but dev updates win if they have more content)
554
+
555
+ 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."
556
+
557
+ ## What's Next
558
+
559
+ - Consider making the SKILL.md standard a section in the Dev Guide
560
+ - Operational guide for agent identities (Parker mentioned needing this)
561
+
562
+ ## 1.7.6 (2026-03-10)
563
+
564
+ README: onboarding prompt now does dry-run install first so users see what changes before committing
565
+
566
+ ## 1.7.5 (2026-03-10)
567
+
568
+ # Dev Update: SKILL.md as the Real Interface
569
+
570
+ **Date:** 2026-03-10 22:10 PST
571
+ **Author:** Claude Code (cc-mini)
572
+ **Version:** v1.7.4
573
+ **Branch:** cc-mini/skill-installer-details
574
+
575
+ ## The Insight
576
+
577
+ Parker said it plainly: "We're not doing READMEs anymore. This is not for humans."
578
+
579
+ 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.
580
+
581
+ 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.
582
+
583
+ ## What We Researched
584
+
585
+ Parker pointed us to agentcard.sh/agent.txt as a reference. We researched three AI documentation conventions:
586
+
587
+ 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.
588
+
589
+ 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.
590
+
591
+ 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.
592
+
593
+ 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.
594
+
595
+ ## What Changed in v1.7.4
596
+
597
+ The SKILL.md went from ~140 lines (descriptions + links) to ~475 lines (complete operational manual).
598
+
599
+ Every one of the 11 tools now has:
600
+ - Complete commands with all flags and options
601
+ - Step-by-step "what happens when you run it" sequences
602
+ - Exact file paths (where it reads, where it writes)
603
+ - Safety notes (what it deletes, what it overwrites, what to watch for)
604
+ - How it works across different interfaces (CC Hook, OpenClaw Plugin, MCP server)
605
+
606
+ ### Specific additions worth noting:
607
+
608
+ **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.
609
+
610
+ **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.
611
+
612
+ **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.
613
+
614
+ **MCP section** got complete tool function names for all MCP-enabled tools, so an AI can add them to .mcp.json without guessing.
615
+
616
+ ## The "Teach Your AI" Framing
617
+
618
+ 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.
619
+
620
+ 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."
621
+
622
+ ## Interface Coverage Table Iterations
623
+
624
+ We went through several iterations on the table format:
625
+
626
+ 1. **Separate tables per category** ... Parker: "too hard on the eyes"
627
+ 2. **Single table, bold category divider rows** ... better, but needed numbering
628
+ 3. **Added numbers 1-11 in a # column** ... Parker liked it
629
+ 4. **Tried moving categories into the # column, removing numbers** ... Parker: "looks worse, change it back"
630
+ 5. **Final: numbers + category divider rows, no dashes in empty cells** ... clean and scannable
631
+
632
+ The lesson: don't overthink table formatting. Numbers give anchoring. Category rows give structure. Empty cells are cleaner than dashes.
633
+
634
+ ## The Standard Going Forward
635
+
636
+ This is how we think SKILL.md files should be written for any tool in the toolbox:
637
+
638
+ 1. YAML frontmatter with name, version, interface list
639
+ 2. One-paragraph description of what the tool teaches
640
+ 3. Complete command reference with all flags
641
+ 4. Step-by-step operational detail (what happens when you run it)
642
+ 5. File paths (reads from, writes to)
643
+ 6. Safety notes (destructive operations, prerequisites)
644
+ 7. Interface-specific behavior (how it works as CLI vs Hook vs MCP vs Plugin)
645
+
646
+ 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.
647
+
648
+ ## Release Notes Standard
649
+
650
+ 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.
651
+
652
+ 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.
653
+
654
+ ## Files Changed
655
+
656
+ - `SKILL.md` ... complete rewrite (140 -> 475 lines)
657
+ - `README.md` ... Interface Coverage table: numbered, category dividers, no dashes
658
+ - `ai/feedback/2026-03-10--gpt--v1.7.1-readme-review.md` ... GPT rated the README 9.6/10
659
+
660
+ ## wip-release: Auto-Detect Dev Updates as Release Notes
661
+
662
+ Parker's feedback: "The release notes should be automated. I shouldn't have to keep telling you to do this."
663
+
664
+ We updated `wip-release` to auto-detect release notes from `ai/dev-updates/`. The priority order:
665
+
666
+ 1. `--notes-file=path` (explicit)
667
+ 2. `RELEASE-NOTES-v{ver}.md` in repo root
668
+ 3. `ai/dev-updates/YYYY-MM-DD*` (today's dev update files, most recent first)
669
+ 4. `--notes="one-liner"` (fallback, but dev updates win if they have more content)
670
+
671
+ 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."
672
+
673
+ ## What's Next
674
+
675
+ - Consider making the SKILL.md standard a section in the Dev Guide
676
+ - Operational guide for agent identities (Parker mentioned needing this)
677
+
678
+ ## 1.7.4 (2026-03-10)
679
+
680
+ 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.
681
+
682
+ ## 1.7.3 (2026-03-10)
683
+
684
+ Add category structure to SKILL.md matching README. Prevents AI from miscategorizing tools.
685
+
686
+ ## 1.7.2 (2026-03-10)
687
+
688
+ Reframe Universal Installer description, fix tense, update SKILL.md intro framing
689
+
690
+ ## 1.7.1 (2026-03-10)
691
+
692
+ Reframe tool descriptions with teach your AI pattern, file GPT and Grok feedback on v1.7.0
693
+
694
+ ## 1.7.0 (2026-03-10)
695
+
696
+ ## v1.7.0: Renamed to AI DevOps Toolbox, CLA, License Enforcement, Branch Prune, README Polish
697
+
698
+ 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.
699
+
700
+ 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.
701
+
702
+ Includes work from PRs #53, #54.
703
+
704
+ ---
705
+
706
+ ### Repo Rename: AI DevOps Toolbox
707
+
708
+ **What we did:** Renamed from "DevOps Toolbox" (`wip-devops-toolbox`) to "AI DevOps Toolbox" (`wip-ai-devops-toolbox`).
709
+
710
+ **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.
711
+
712
+ **What changed:**
713
+ - GitHub repos renamed: `wip-ai-devops-toolbox-private` and `wip-ai-devops-toolbox`
714
+ - All internal references updated: README, TECHNICAL.md, SKILL.md, package.json, cross-repo references
715
+
716
+ ---
717
+
718
+ ### Contributor License Agreement (CLA)
719
+
720
+ **What we did:** Added `CLA.md` at the repo root and referenced it in the README License section.
721
+
722
+ **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.
723
+
724
+ **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.
725
+
726
+ **New files:**
727
+ - `CLA.md` ... the agreement itself
728
+
729
+ ---
730
+
731
+ ### Licensing Clarity
732
+
733
+ **What we did:** Made the licensing intent unmistakable with two new sentences.
734
+
735
+ **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.
736
+
737
+ **What changed:**
738
+ - Added "Dual-license model designed to keep tools free while preventing commercial resellers" above the license block
739
+ - 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
740
+ - Updated `generateReadmeBlock()` in `tools/wip-license-guard/core.mjs` so every future repo gets the same wording automatically
741
+
742
+ ---
743
+
744
+ ### Branch Prune Automation
745
+
746
+ **What we did:** Built automatic branch cleanup into both `post-merge-rename.sh` and `wip-release`.
747
+
748
+ **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.
749
+
750
+ **How it works:**
751
+
752
+ `post-merge-rename.sh --prune` does three things:
753
+ 1. Renames any merged branches that don't have the `--merged` suffix yet
754
+ 2. For each developer prefix (`cc-mini/`, `mini/`, `lesa-mini/`, etc.), keeps the last 3 `--merged` branches and deletes the rest from the remote
755
+ 3. Finds stale branches that are fully merged into main but were never renamed, and deletes them
756
+
757
+ `wip-release` now runs prune automatically as step 11 after every release. No manual cleanup needed.
758
+
759
+ Rules: never deletes `main`, never deletes the current working branch, always keeps the last 3 per developer. `--dry-run` previews what would be deleted.
760
+
761
+ **Files changed:**
762
+ - `scripts/post-merge-rename.sh` ... new `--prune` flag, stale branch detection, keep-last-3 logic
763
+ - `tools/wip-release/core.mjs` ... step 11: automatic prune after every release
764
+
765
+ ---
766
+
767
+ ### License Enforcement Automation
768
+
769
+ **What we did:** Made license compliance automatic across three layers: CC Hook, wip-release gate, and one-command repo setup.
770
+
771
+ **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.
772
+
773
+ **How it works:**
774
+
775
+ **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`.
776
+
777
+ **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.
778
+
779
+ **`--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.
780
+
781
+ **Files changed:**
782
+ - `tools/wip-license-guard/hook.mjs` ... new CC Hook (PreToolUse, blocks git commit/push)
783
+ - `tools/wip-license-guard/cli.mjs` ... `--from-standard` flag, CLA.md generation, CLA check in audit
784
+ - `tools/wip-release/core.mjs` ... step 0: license compliance gate
785
+
786
+ ---
787
+
788
+ ### README Polish (GPT Feedback Round 2)
789
+
790
+ **What we did:** Three targeted improvements based on GPT's review of v1.6.0.
791
+
792
+ **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.
793
+
794
+ **One-line "why" on every feature.** Each tool now leads with the problem it solves before describing what it does:
795
+ - "AI agents forget release steps. This makes releases one command."
796
+ - "Dependencies change licenses without telling you. This catches it."
797
+ - "AI agents overwrite identity files by accident. This stops them."
798
+ - "Repos end up everywhere. This snaps them back to where they belong."
799
+
800
+ **Feedback filed:**
801
+ - `ai/feedback/2026-03-10--gpt--v1.6.0-readme-review.md`
802
+ - `ai/feedback/2026-03-10--grok--v1.6.0-summary.md`
803
+
804
+ ---
805
+
806
+ ### Install
807
+
808
+ ```bash
809
+ npm install -g @wipcomputer/universal-installer
810
+ wip-install wipcomputer/wip-ai-devops-toolbox
811
+ ```
812
+
813
+ Or update your local clone:
814
+ ```bash
815
+ git pull origin main
816
+ ```
817
+
818
+ ---
819
+
820
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
821
+
822
+ ## 1.6.0 (2026-03-10)
823
+
824
+ ## v1.6.0: README Rewrite, Dual Licensing, License Guard, Release Notes Standard
825
+
826
+ 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.
827
+
828
+ 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.
829
+
830
+ ---
831
+
832
+ ### PR #46: License Format Standard
833
+
834
+ **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.
835
+
836
+ **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.
837
+
838
+ **What changed:**
839
+ - 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.
840
+ - Added "Commercial licenses available" as a one-line signal that this is a real product, not just an open source side project.
841
+ - AGPL renamed to AGPLv3 throughout for version specificity. Grok's feedback confirmed this matters for clarity.
842
+ - Private Dev Guide (`ai/DEV-GUIDE-private.md`) updated with the licensing standard so every repo going forward follows the same format.
843
+ - Fixed "Claude Code CLI" to "Claude Code" in attribution across all files.
844
+
845
+ **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`
846
+
847
+ ---
848
+
849
+ ### PR #47: LICENSE Files Across All Tools
850
+
851
+ **What we did:** Updated the actual LICENSE file in the root and all 10 sub-tool directories to dual MIT + AGPLv3.
852
+
853
+ **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.
854
+
855
+ **What changed:**
856
+ - 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.
857
+ - All 10 `tools/*/LICENSE` files updated to identical dual-license text with correct copyright holder (WIP Computer, Inc.).
858
+ - Bottom line on every LICENSE: "AGPLv3 for personal use is free. Commercial licenses available."
859
+
860
+ **Commits:** `LICENSE files: dual MIT+AGPLv3 on root and all sub-tools`
861
+
862
+ ---
863
+
864
+ ### PR #48: wip-license-guard (New Tool)
865
+
866
+ **What we did:** Built a new tool that enforces copyright, license format, and README structure across the toolbox.
867
+
868
+ **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.
869
+
870
+ **How it works:**
871
+ - 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`.
872
+ - `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.
873
+ - `wip-license-guard check --fix` auto-repairs: generates missing LICENSE files, updates wrong copyright, creates dual-license text.
874
+ - Toolbox-aware: automatically walks every `tools/` subdirectory and checks each sub-tool's LICENSE file.
875
+ - 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.
876
+ - All 14 checks pass on this repo.
877
+
878
+ **New files:**
879
+ - `tools/wip-license-guard/cli.mjs` (268 lines) ... CLI entry point. Commands: `init`, `check`, `check --fix`, `help`.
880
+ - `tools/wip-license-guard/core.mjs` ... `generateLicense()` produces MIT, AGPL, or dual MIT+AGPLv3 LICENSE text. `generateReadmeBlock()` produces the README license section.
881
+ - `.license-guard.json` ... config: copyright "WIP Computer, Inc.", license "MIT+AGPL", year 2026.
882
+
883
+ **Interfaces:** CLI, Module. Beta stability.
884
+
885
+ **Commits:** `Add wip-license-guard tool and .license-guard.json config`
886
+
887
+ ---
888
+
889
+ ### PR #49: SKILL.md v1.5.1
890
+
891
+ **What we did:** Updated the skill documentation that AI agents read when you say "read the SKILL.md."
892
+
893
+ **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.
894
+
895
+ **What changed:**
896
+ - Version bumped from v1.4.0 to v1.5.1.
897
+ - Added interfaces column to tool table: CLI, Module, MCP, OpenClaw, Skill, CC Hook for every tool.
898
+ - Added wip-license-guard to the tool list.
899
+ - Fixed tool names: `deploy-public` (not `deploy-public.sh`), `post-merge-rename` (not `post-merge-rename.sh`).
900
+ - 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.
901
+ - Added license section matching the new README format.
902
+ - Updated frontmatter description and capabilities.
903
+ - 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.
904
+
905
+ **Commits:** `SKILL.md: update to v1.5.1 with full tool table and interfaces`
906
+
907
+ ---
908
+
909
+ ### PR #50: README Rewrite + Release Notes Standard
910
+
911
+ **What we did:** Rewrote the entire README based on external feedback, and upgraded the release pipeline to enforce narrative release notes.
912
+
913
+ **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?
914
+
915
+ 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.
916
+
917
+ **README changes:**
918
+
919
+ 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.
920
+
921
+ - **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.
922
+ - **Removed "Talk to Your Tools" MCP examples.** These are for AIs, not humans. Moved to SKILL.md where they belong.
923
+ - **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.
924
+ - **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.
925
+ - **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)."
926
+ - **Added License Guard to features list.** New tool from PR #48 needed to be in the features section.
927
+
928
+ **Release pipeline changes:**
929
+
930
+ Three changes to `wip-release` that make release notes a first-class part of the process:
931
+
932
+ 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."
933
+
934
+ 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.
935
+
936
+ 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.
937
+
938
+ **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.
939
+
940
+ **Files changed:**
941
+ - `README.md` ... full rewrite
942
+ - `TECHNICAL.md` ... received Quick Start and npm install commands from README
943
+ - `tools/wip-release/core.mjs` ... `buildReleaseNotes()` restructured, new `warnIfNotesAreThin()`
944
+ - `tools/wip-release/cli.js` ... new `--notes-file=path` flag
945
+ - `tools/wip-license-guard/cli.mjs` ... README structure standard checks added
946
+ - `RELEASE-NOTES-v{version}.md` ... new convention file
947
+ - `ai/notes/2026-03-10--grok-feedback--readme-and-licensing.md` ... Grok feedback documented
948
+ - `ai/notes/2026-03-10--gpt-feedback--product-and-adoption.md` ... GPT feedback documented
949
+ - `ai/plan/current/2026-03-10--cc-mini--readme-polish-and-mcp-examples.md` ... 7-phase plan, all complete
950
+
951
+ **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`
952
+
953
+ ---
954
+
955
+ ### Install
956
+
957
+ ```bash
958
+ npm install -g @wipcomputer/universal-installer
959
+ wip-install wipcomputer/wip-ai-devops-toolbox
960
+ ```
961
+
962
+ Or update your local clone:
963
+ ```bash
964
+ git pull origin main
965
+ ```
966
+
967
+ ---
968
+
969
+ Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
970
+
971
+ ## 1.4.0 (2026-03-09)
972
+
973
+ MCP unlock. All core tools are now agent-callable.
974
+
975
+ ### MCP Servers (new)
976
+ - **wip-release**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `release`, `release_status`
977
+ - **wip-license-hook**: `mcp-server.mjs` wrapping compiled `dist/`. Tools: `license_scan`, `license_audit`, `license_gate`, `license_ledger`
978
+ - **wip-repo-permissions-hook**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `repo_permissions_check`, `repo_permissions_audit`
979
+ - **wip-repos**: `mcp-server.mjs` wrapping `core.mjs`. Tools: `repos_check`, `repos_sync_plan`, `repos_add`, `repos_move`, `repos_tree`
980
+
981
+ ### SKILL.md files (new)
982
+ - **wip-repos**: added SKILL.md (was the only tool without one)
983
+ - **deploy-public**: added `scripts/SKILL-deploy-public.md`
984
+ - **post-merge-rename**: added `scripts/SKILL-post-merge-rename.md`
985
+
986
+ ### Interface updates
987
+ - wip-release SKILL.md: interface updated from CLI to [cli, module, mcp], added MCP section
988
+ - wip-license-hook SKILL.md: added version, interface [cli, mcp], added MCP section
989
+ - wip-repo-permissions-hook SKILL.md: interface updated to [cli, module, mcp, hook, plugin], added MCP section
990
+ - All 4 tools: `@modelcontextprotocol/sdk` added as dependency
991
+
992
+ ### Dev Guide updates
993
+ - Added "Universal Installer Checklist" section to DEV-GUIDE-GENERAL-PUBLIC.md
994
+ - Added "Universal Installer ... Dogfooding Rule" section to private Dev Guide
995
+ - Documented the v1.3.0 zero-MCP-servers incident
996
+
997
+ ### Other
998
+ - 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
999
+ - README source code table updated with mcp-server.mjs files
1000
+
1001
+ ## 1.3.0 (2026-03-09)
1002
+
1003
+ Toolbox consolidation. Three new tools added.
1004
+
1005
+ ### New tools
1006
+ - **wip-file-guard**: blocks destructive edits to protected identity files. For Claude Code CLI and OpenClaw. Previously standalone repo, now folded into toolbox.
1007
+ - **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.
1008
+ - **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.
1009
+
1010
+ ### Other changes
1011
+ - `UNIVERSAL-INTERFACE.md` promoted to repo root (from wip-universal-installer SPEC.md)
1012
+ - README updated with all three new tools, source code table, install commands
1013
+ - Standalone repos renamed to `-deprecated` on GitHub
1014
+ - Toolbox now has 9 tools. All self-contained, zero shared dependencies.
1015
+
1016
+ ## 1.2.0 (2026-03-09)
1017
+
1018
+ Major repo reorganization and Dev Guide expansion.
1019
+
1020
+ ### Repo structure
1021
+ - Separated public Dev Guide from private conventions
1022
+ - `guide/DEV-GUIDE.md` → `DEV-GUIDE-GENERAL-PUBLIC.md` (genericized, root level, goes public)
1023
+ - `ai/DEV-GUIDE-private.md` → `ai/DEV-GUIDE-FOR-WIP-ONLY-PRIVATE.md` (WIP-specific conventions)
1024
+ - `guide/scripts/` → `scripts/` (moved to root level)
1025
+ - Old `guide/` folder trashed
1026
+
1027
+ ### New Dev Guide sections
1028
+ - Post-merge branch rename convention (never delete branches, rename with `--merged-YYYY-MM-DD`)
1029
+ - Repo directory structure (standard layout, staging folder conventions, create as `-private` from day one)
1030
+ - The manifest (`repos-manifest.json` as source of truth for repo locations)
1031
+ - Privatize Before You Work rule
1032
+ - Cloudflare Workers deploy guard (commit before deploy, guarded npm scripts)
1033
+ - PR checklist for private repos (dev update, roadmap, readme-first, plan archival)
1034
+ - Expanded `_trash` convention
1035
+ - Warning: never use `--no-publish` before `deploy-public.sh`
1036
+
1037
+ ### New script
1038
+ - `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.
1039
+
1040
+ ### README and SKILL.md
1041
+ - Added post-merge-rename.sh to tools section and source table
1042
+ - Fixed all paths for reorg
1043
+ - Updated Dev Guide description with new sections
1044
+
1045
+ ## 1.1.3 (2026-03-01)
1046
+
1047
+ - Fix npx package name in pre-pull.sh and pre-push.sh (@wipcomputer/license-hook → @wipcomputer/wip-license-hook)
1048
+ - Fix wip-release test script (cli.mjs → cli.js)
1049
+ - Clean up wip-release CHANGELOG blank lines
1050
+ - Add visibility-audit.sh to DEV-GUIDE .app structure diagram
1051
+ - Remove duplicate skill/SKILL.md subfolder
1052
+
1053
+ ## 1.1.2 (2026-03-01)
1054
+
1055
+ - SKILL.md: sync version to 1.1.2
1056
+ - CHANGELOG: add missing v1.1.0 and v1.1.1 entries
1057
+ - ldm-jobs README: add visibility-audit.sh documentation
1058
+
1059
+ ## 1.1.1 (2026-03-01)
1060
+
1061
+ - README: add wip-repo-permissions-hook section, source code table entry, cron schedule
1062
+ - SKILL.md: bump version, add repo-visibility-guard capability, add tool section
1063
+
1064
+ ## 1.1.0 (2026-03-01)
1065
+
1066
+ - New tool: wip-repo-permissions-hook. Blocks repos from going public without a -private counterpart
1067
+ - Surfaces: CLI (check, audit, can-publish), Claude Code PreToolUse hook, OpenClaw plugin
1068
+ - New cron job: visibility-audit.sh for LDM Dev Tools.app
1069
+ - DEV-GUIDE: add hard rule for public/private repo pattern
1070
+
1071
+ ## 1.0.4 (2026-03-01)
1072
+
1073
+ - DEV-GUIDE: replace inbox/punchlist system with per-agent todo files (To Do, Done, Deprecated. Never delete.)
1074
+
1075
+ ## 1.0.3 (2026-02-28)
1076
+
1077
+ - deploy-public.sh: auto-detect harness ID from private repo path (cc-mini/, cc-air/, oc-lesa-mini/)
1078
+
1079
+ ## 1.0.2 (2026-02-28)
1080
+
1081
+ - deploy-public.sh: fix branch prefix from mini/ to cc-mini/ per harness naming convention
1082
+
1083
+ ## 1.0.1 (2026-02-28)
1084
+
1085
+ - DEV-GUIDE: add multi-agent clone workflow and harness branch convention (cc-mini/, cc-air/, lesa-mini/)
1086
+
1087
+ ## 1.0.0 (2026-02-28)
1088
+
1089
+ - Production release: all tools battle-tested across 100+ repos, 200+ releases
1090
+ - All source code visible and auditable in repo (no closed binaries)
1091
+ - wip-license-hook bumped to v1.0.0
1092
+ - LDM Dev Tools.app job scripts extracted to tools/ldm-jobs/
1093
+ - Real-world example: wip-universal-installer release history
1094
+ - Source code table, build instructions, and dev guide in README
1095
+ - Standalone repos (wip-release, wip-license-hook) merged into umbrella
1096
+
1097
+ ## 0.2.1 (2026-02-28)
1098
+
1099
+ - deploy-public.sh: fix release sync for repos without package.json (falls back to latest git tag)
1100
+
1101
+ ## 0.2.0 (2026-02-28)
1102
+
1103
+ - deploy-public.sh: sync GitHub releases to public repos (pulls notes, rewrites references)
1104
+ - DEV-GUIDE: add release quality standards (contributors, release notes, npm, both repos)
1105
+ - DEV-GUIDE: add scheduled automation (.app pattern) documentation
1106
+ - DEV-GUIDE: add built-by attribution standard
1107
+ - LDM Dev Tools.app: macOS automation wrapper for cron jobs with Full Disk Access
1108
+ - Add .npmignore to exclude ai/ from npm packages
1109
+
1110
+ ## 0.1.1 (2026-02-27)
1111
+
1112
+ - DEV-GUIDE: add "never work on main" rule
1113
+ - DEV-GUIDE: clarify private repo is the only local clone needed
1114
+
1115
+ ## 0.1.0 (2026-02-27)
1116
+
1117
+ - Initial release: unified dev toolkit
1118
+ - Includes wip-release (v1.2.4) and wip-license-hook (v0.1.0)
1119
+ - DEV-GUIDE: general best practices for AI-assisted development
1120
+ - deploy-public.sh: private-to-public repo sync tool