@wipcomputer/wip-ai-devops-toolbox 1.9.49 → 1.9.51

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/CHANGELOG.md CHANGED
@@ -31,6 +31,47 @@
31
31
 
32
32
 
33
33
 
34
+
35
+ ## 1.9.51 (2026-03-24)
36
+
37
+ # Release Notes: wip-ai-devops-toolbox v1.9.51
38
+
39
+ ## Branch Guard: Workspace Files Allowlist (#185)
40
+
41
+ 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.
42
+
43
+ Previously only SHARED-CONTEXT.md was allowed. This broke Lesa's ability to edit her own workspace files during the migration to ~/wipcomputerinc/.
44
+
45
+ ## TECHNICAL.md: Backup Documentation
46
+
47
+ 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/).
48
+
49
+ ## 1.9.50 (2026-03-20)
50
+
51
+ # Release Notes: wip-ai-devops-toolbox v1.9.50
52
+
53
+ **wip-release: require product update doc on every release.**
54
+
55
+ ## What changed
56
+
57
+ 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.
58
+
59
+ 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.
60
+
61
+ ## Why
62
+
63
+ 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).
64
+
65
+ ## Issues closed
66
+
67
+ - #220
68
+
69
+ ## How to verify
70
+
71
+ ```bash
72
+ wip-release patch --dry-run
73
+ # Should warn if product update doc not modified since last release
74
+ ```
34
75
 
35
76
  ## 1.9.49 (2026-03-20)
36
77
 
package/SKILL.md CHANGED
@@ -5,7 +5,7 @@ license: MIT
5
5
  interface: [cli, module, mcp, skill, hook, plugin]
6
6
  metadata:
7
7
  display-name: "WIP AI DevOps Toolbox"
8
- version: "1.9.49"
8
+ version: "1.9.51"
9
9
  homepage: "https://github.com/wipcomputer/wip-ai-devops-toolbox"
10
10
  author: "Parker Todd Brooks"
11
11
  category: dev-tools
package/TECHNICAL.md CHANGED
@@ -60,19 +60,19 @@ Best practices for AI-assisted development teams. Covers release process, repo s
60
60
 
61
61
  macOS automation wrapper. A native `.app` bundle that runs scheduled jobs (backup, branch protection audit, etc.) with Full Disk Access. One app to grant permissions to, one place to add new automation.
62
62
 
63
- **Source:** Job scripts are plain shell, committed at [`tools/ldm-jobs/`](tools/ldm-jobs/):
63
+ **Source:** Job scripts are plain shell. The app provides a Full Disk Access wrapper.
64
64
 
65
- | Script | What it does |
66
- |--------|-------------|
67
- | [`backup.sh`](tools/ldm-jobs/backup.sh) | Daily backup |
68
- | [`branch-protect.sh`](tools/ldm-jobs/branch-protect.sh) | Audit and enforce branch protection across all org repos |
69
- | [`visibility-audit.sh`](tools/ldm-jobs/visibility-audit.sh) | Audit public repos for missing -private counterparts |
65
+ | Script | What it does | Source |
66
+ |--------|-------------|--------|
67
+ | `backup.sh` | Calls `~/.ldm/bin/ldm-backup.sh` (unified backup) | wip-ldm-os-private/scripts/ |
68
+ | [`branch-protect.sh`](tools/ldm-jobs/branch-protect.sh) | Audit and enforce branch protection across all org repos | tools/ldm-jobs/ |
69
+ | [`visibility-audit.sh`](tools/ldm-jobs/visibility-audit.sh) | Audit public repos for missing -private counterparts | tools/ldm-jobs/ |
70
70
 
71
- Scripts can be run standalone without the `.app`. The app provides a Full Disk Access wrapper for scripts that need it.
71
+ The backup script is deployed by `ldm install` to `~/.ldm/bin/`. It backs up ~/.ldm/, ~/.openclaw/, ~/.claude/, and the workspace. See `how-backup-works.md` in the workspace docs.
72
72
 
73
73
  ```bash
74
74
  # Run standalone
75
- bash tools/ldm-jobs/backup.sh
75
+ ~/.ldm/bin/ldm-backup.sh # or --dry-run to preview
76
76
  bash tools/ldm-jobs/branch-protect.sh
77
77
  bash tools/ldm-jobs/visibility-audit.sh
78
78
 
@@ -0,0 +1,24 @@
1
+ # Release Notes: wip-ai-devops-toolbox v1.9.50
2
+
3
+ **wip-release: require product update doc on every release.**
4
+
5
+ ## What changed
6
+
7
+ 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.
8
+
9
+ 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.
10
+
11
+ ## Why
12
+
13
+ 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).
14
+
15
+ ## Issues closed
16
+
17
+ - #220
18
+
19
+ ## How to verify
20
+
21
+ ```bash
22
+ wip-release patch --dry-run
23
+ # Should warn if product update doc not modified since last release
24
+ ```
@@ -0,0 +1,11 @@
1
+ # Release Notes: wip-ai-devops-toolbox v1.9.51
2
+
3
+ ## Branch Guard: Workspace Files Allowlist (#185)
4
+
5
+ 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.
6
+
7
+ Previously only SHARED-CONTEXT.md was allowed. This broke Lesa's ability to edit her own workspace files during the migration to ~/wipcomputerinc/.
8
+
9
+ ## TECHNICAL.md: Backup Documentation
10
+
11
+ 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/).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-ai-devops-toolbox",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "The complete AI DevOps toolkit for AI-assisted development teams.",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/deploy-public",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "Private-to-public repo sync. Excludes ai/ folder, creates PR, merges, cleans up branches.",
5
5
  "bin": {
6
6
  "deploy-public": "./deploy-public.sh"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/post-merge-rename",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "Post-merge branch renaming. Appends --merged-YYYY-MM-DD to preserve history.",
5
5
  "bin": {
6
6
  "post-merge-rename": "./post-merge-rename.sh"
@@ -313,6 +313,12 @@ This is a warning, not a block. If you need to create it here, retry.`);
313
313
  const SHARED_STATE_PATTERNS = [
314
314
  /CLAUDE\.md$/,
315
315
  /workspace\/SHARED-CONTEXT\.md$/,
316
+ /workspace\/TOOLS\.md$/,
317
+ /workspace\/MEMORY\.md$/,
318
+ /workspace\/IDENTITY\.md$/,
319
+ /workspace\/SOUL\.md$/,
320
+ /workspace\/WHERE-TO-WRITE\.md$/,
321
+ /workspace\/HEARTBEAT\.md$/,
316
322
  /workspace\/memory\/.*\.md$/,
317
323
  /\.ldm\/agents\/.*\/memory\/daily\/.*\.md$/,
318
324
  /\.ldm\/memory\/shared-log\.jsonl$/,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-branch-guard",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "PreToolUse hook that blocks all writes on main branch. Forces agents to work on branches or worktrees.",
5
5
  "type": "module",
6
6
  "main": "guard.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-file-guard",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "Hook that blocks destructive edits to protected identity files. For Claude Code CLI and OpenClaw.",
6
6
  "main": "guard.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-license-guard",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "License compliance for your own repos. Ensures correct copyright, dual-license blocks, and LICENSE files.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-license-hook",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "License rug-pull detection and dependency license compliance for open source projects",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-readme-format",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "Reformat any repo's README to follow the WIP Computer standard. Agent-first, human-readable.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -388,6 +388,20 @@ function checkProductDocs(repoPath) {
388
388
  }
389
389
  }
390
390
 
391
+ // 4. Product update doc: modified since last tag
392
+ const productUpdateDir = join(aiDir, 'dev-updates', 'product-update');
393
+ if (existsSync(productUpdateDir)) {
394
+ const puFiles = readdirSync(productUpdateDir).filter(f => f.endsWith('.md'));
395
+ if (puFiles.length > 0) {
396
+ const anyModified = puFiles.some(f =>
397
+ fileModifiedSinceLastTag(repoPath, `ai/dev-updates/product-update/${f}`)
398
+ );
399
+ if (!anyModified) {
400
+ missing.push('ai/dev-updates/product-update/ (product update doc not updated since last release)');
401
+ }
402
+ }
403
+ }
404
+
391
405
  return { missing, ok: missing.length === 0, skipped: false };
392
406
  }
393
407
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-release",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "One-command release pipeline. Bumps version, updates changelog + SKILL.md, publishes to npm + GitHub.",
6
6
  "main": "core.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-repo-init",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "description": "Scaffold the standard ai/ directory structure in any repo",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,63 @@
1
+ # todos/
2
+
3
+ One todo file per person or agent. Three sections per file: To Do, Done, Deprecated.
4
+
5
+ ## What This Folder Is
6
+
7
+ Todos that are specific to this repo. Each person or agent who works on this repo gets one file. The file tracks what they need to do, what they've done, and what got dropped.
8
+
9
+ For cross-repo work or bigger items, use GitHub Issues. Todos here are for repo-scoped tasks that don't need the overhead of an issue.
10
+
11
+ ## Files
12
+
13
+ One file per person/agent. Name it `[Name]-todo.md`.
14
+
15
+ Example:
16
+
17
+ | File | Who |
18
+ |------|-----|
19
+ | `Parker-todo.md` | Parker (human tasks: reviews, credentials, approvals) |
20
+ | `CC-Mini-todo.md` | Claude Code on Mac Mini (code, builds, deploys) |
21
+
22
+ Create the file when that person/agent first has work to do. No empty placeholder files.
23
+
24
+ ## File Format
25
+
26
+ ```markdown
27
+ # [Name] Todos
28
+
29
+ **Last updated:** YYYY-MM-DD
30
+
31
+ ## To Do
32
+
33
+ - [ ] Task description
34
+ - [ ] Task description (blocked by: reason)
35
+
36
+ ## Done
37
+
38
+ - [x] Task description (YYYY-MM-DD)
39
+ - [x] Task description (YYYY-MM-DD)
40
+
41
+ ## Deprecated
42
+
43
+ - ~~Task description~~ ... reason. (YYYY-MM-DD)
44
+ ```
45
+
46
+ ## Rules
47
+
48
+ - **Never delete anything.** Items move between sections, never off the page.
49
+ - **To Do** ... work that needs to happen.
50
+ - **Done** ... completed work. Check the box, add the date.
51
+ - **Deprecated** ... planned but no longer needed. Strikethrough, add the reason and date. Not the same as Done. Done means it shipped. Deprecated means the requirement changed.
52
+ - **Update the date** at the top of the file every time you edit it.
53
+ - **One file per person/agent.** No dated files, no subfolders, no inboxes.
54
+ - **Blocked items** stay in To Do with a `(blocked by: reason)` note. Don't move them to a separate section.
55
+
56
+ ## When to Use Todos vs GitHub Issues
57
+
58
+ | Use | When |
59
+ |-----|------|
60
+ | **Todo file** | Quick tasks, repo-scoped work, things you'll do this session or this week |
61
+ | **GitHub Issue** | Bugs, feature requests, cross-repo work, things that need tracking or discussion |
62
+
63
+ Both is fine. File an issue AND add a todo that references it. The todo is your personal checklist. The issue is the team's record.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-repo-permissions-hook",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "Repo visibility guard. Blocks repos from going public without a -private counterpart.",
6
6
  "main": "core.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-repos",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "Repo manifest reconciler. Single source of truth for repo organization. Like prettier for folder structure.",
6
6
  "main": "core.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/universal-installer",
3
- "version": "1.9.49",
3
+ "version": "1.9.51",
4
4
  "type": "module",
5
5
  "description": "The Universal Interface specification for agent-native software. Teaches your AI how to build repos with every interface: CLI, Module, MCP Server, OpenClaw Plugin, Skill, Claude Code Hook.",
6
6
  "main": "detect.mjs",