@wipcomputer/wip-ai-devops-toolbox 1.9.41 → 1.9.43
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 +50 -0
- package/SKILL.md +1 -1
- 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 +5 -0
- 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/cli.js +2 -1
- package/tools/wip-release/core.mjs +12 -3
- 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
package/CHANGELOG.md
CHANGED
|
@@ -31,6 +31,56 @@
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
+
|
|
35
|
+
## 1.9.43 (2026-03-17)
|
|
36
|
+
|
|
37
|
+
# Guard non-repo files fix + UTC date fix
|
|
38
|
+
|
|
39
|
+
Two bugs fixed in one PR.
|
|
40
|
+
|
|
41
|
+
## Bug 1: Guard blocks files outside git repos (#77)
|
|
42
|
+
|
|
43
|
+
**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.
|
|
44
|
+
|
|
45
|
+
**Fix:** If `findRepoRoot(filePath)` returns null for Write/Edit operations, allow immediately. The guard only protects git repos from direct-on-main edits.
|
|
46
|
+
|
|
47
|
+
**File:** `tools/wip-branch-guard/guard.mjs`
|
|
48
|
+
|
|
49
|
+
## Bug 2: UTC date mismatch in wip-release
|
|
50
|
+
|
|
51
|
+
**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.
|
|
52
|
+
|
|
53
|
+
**Fix:** Replaced all three instances of `toISOString()` date extraction with explicit local date construction using `getFullYear()/getMonth()/getDate()`.
|
|
54
|
+
|
|
55
|
+
**Files:**
|
|
56
|
+
- `tools/wip-release/cli.js` (line 80, dev-update detection)
|
|
57
|
+
- `tools/wip-release/core.mjs` (line 92, CHANGELOG date)
|
|
58
|
+
- `tools/wip-release/core.mjs` (line 582, product docs sync date)
|
|
59
|
+
|
|
60
|
+
## 1.9.42 (2026-03-17)
|
|
61
|
+
|
|
62
|
+
# Guard non-repo files fix + UTC date fix
|
|
63
|
+
|
|
64
|
+
Two bugs fixed in one PR.
|
|
65
|
+
|
|
66
|
+
## Bug 1: Guard blocks files outside git repos (#77)
|
|
67
|
+
|
|
68
|
+
**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.
|
|
69
|
+
|
|
70
|
+
**Fix:** If `findRepoRoot(filePath)` returns null for Write/Edit operations, allow immediately. The guard only protects git repos from direct-on-main edits.
|
|
71
|
+
|
|
72
|
+
**File:** `tools/wip-branch-guard/guard.mjs`
|
|
73
|
+
|
|
74
|
+
## Bug 2: UTC date mismatch in wip-release
|
|
75
|
+
|
|
76
|
+
**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.
|
|
77
|
+
|
|
78
|
+
**Fix:** Replaced all three instances of `toISOString()` date extraction with explicit local date construction using `getFullYear()/getMonth()/getDate()`.
|
|
79
|
+
|
|
80
|
+
**Files:**
|
|
81
|
+
- `tools/wip-release/cli.js` (line 80, dev-update detection)
|
|
82
|
+
- `tools/wip-release/core.mjs` (line 92, CHANGELOG date)
|
|
83
|
+
- `tools/wip-release/core.mjs` (line 582, product docs sync date)
|
|
34
84
|
|
|
35
85
|
## 1.9.41 (2026-03-17)
|
|
36
86
|
|
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.
|
|
8
|
+
version: "1.9.43"
|
|
9
9
|
homepage: "https://github.com/wipcomputer/wip-ai-devops-toolbox"
|
|
10
10
|
author: "Parker Todd Brooks"
|
|
11
11
|
category: dev-tools
|
package/package.json
CHANGED
|
@@ -218,6 +218,11 @@ async function main() {
|
|
|
218
218
|
if (filePath) {
|
|
219
219
|
// Walk up from file path to find .git directory
|
|
220
220
|
repoDir = findRepoRoot(filePath);
|
|
221
|
+
if (!repoDir) {
|
|
222
|
+
// File is outside any git repo (e.g. ~/.claude/plans/, /tmp/).
|
|
223
|
+
// The guard only protects git repos. Allow it.
|
|
224
|
+
process.exit(0);
|
|
225
|
+
}
|
|
221
226
|
}
|
|
222
227
|
|
|
223
228
|
if (!repoDir && command) {
|
package/tools/wip-release/cli.js
CHANGED
|
@@ -77,7 +77,8 @@ let notesSource = (notes !== null && notes !== undefined && notes !== '') ? 'fla
|
|
|
77
77
|
const { readdirSync } = await import('node:fs');
|
|
78
78
|
const devUpdatesDir = join(process.cwd(), 'ai', 'dev-updates');
|
|
79
79
|
if (existsSync(devUpdatesDir)) {
|
|
80
|
-
const
|
|
80
|
+
const d = new Date();
|
|
81
|
+
const today = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
|
|
81
82
|
const todayFiles = readdirSync(devUpdatesDir)
|
|
82
83
|
.filter(f => f.startsWith(today) && f.endsWith('.md'))
|
|
83
84
|
.sort()
|
|
@@ -89,7 +89,8 @@ export function syncSkillVersion(repoPath, newVersion) {
|
|
|
89
89
|
*/
|
|
90
90
|
export function updateChangelog(repoPath, newVersion, notes) {
|
|
91
91
|
const changelogPath = join(repoPath, 'CHANGELOG.md');
|
|
92
|
-
const
|
|
92
|
+
const d = new Date();
|
|
93
|
+
const date = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
|
|
93
94
|
|
|
94
95
|
// Bug fix #121: never silently default to "Release." when notes are empty.
|
|
95
96
|
// If notes are empty at this point, warn loudly.
|
|
@@ -134,7 +135,14 @@ function trashReleaseNotes(repoPath) {
|
|
|
134
135
|
for (const f of files) {
|
|
135
136
|
renameSync(join(repoPath, f), join(trashDir, f));
|
|
136
137
|
execFileSync('git', ['add', join('_trash', f)], { cwd: repoPath, stdio: 'pipe' });
|
|
137
|
-
|
|
138
|
+
// Only git rm if the file was tracked (committed or staged).
|
|
139
|
+
// Untracked scaffolded files from failed releases just need the rename.
|
|
140
|
+
try {
|
|
141
|
+
execFileSync('git', ['ls-files', '--error-unmatch', f], { cwd: repoPath, stdio: 'pipe' });
|
|
142
|
+
execFileSync('git', ['rm', '--cached', f], { cwd: repoPath, stdio: 'pipe' });
|
|
143
|
+
} catch {
|
|
144
|
+
// File wasn't tracked. Rename already moved it.
|
|
145
|
+
}
|
|
138
146
|
}
|
|
139
147
|
return files.length;
|
|
140
148
|
}
|
|
@@ -579,7 +587,8 @@ function checkInterfaceCoverage(repoPath) {
|
|
|
579
587
|
*/
|
|
580
588
|
function syncProductDocs(repoPath, newVersion) {
|
|
581
589
|
let updated = 0;
|
|
582
|
-
const
|
|
590
|
+
const td = new Date();
|
|
591
|
+
const today = `${td.getFullYear()}-${String(td.getMonth()+1).padStart(2,'0')}-${String(td.getDate()).padStart(2,'0')}`;
|
|
583
592
|
|
|
584
593
|
// 1. roadmap.md
|
|
585
594
|
const roadmapPath = join(repoPath, 'ai', 'product', 'plans-prds', 'roadmap.md');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wipcomputer/universal-installer",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.43",
|
|
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",
|