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