worclaude 2.4.6 → 2.4.8
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 +25 -0
- package/package.json +1 -1
- package/src/commands/doctor.js +2 -1
- package/src/core/remover.js +1 -0
- package/src/core/scaffolder.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ All notable changes to worclaude are documented in this file. Format loosely fol
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [2.4.8] — 2026-04-20
|
|
8
|
+
|
|
9
|
+
Bug fix release — `worclaude doctor` reported `File integrity: 1/54 files missing` on every v2.4.6+ install. `checkHashIntegrity` resolved every `workflow-meta.json` `fileHashes` key under `.claude/`, so `root/AGENTS.md` (tracked at project root since v2.4.6) got looked up at `.claude/root/AGENTS.md` — which doesn't exist. `worclaude upgrade` already handled the `root/` prefix correctly; only doctor had missed the update.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- `worclaude doctor` now uses the shared `resolveKeyPath` helper from `src/core/file-categorizer.js` for every `fileHashes` key, so `root/<path>` entries resolve at the project root and `hooks/<name>` entries resolve under `.claude/hooks/`. No behavior change for `agents/`, `commands/`, or `skills/` keys.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- `docs/reference/configuration.md` — `fileHashes` example extended with `hooks/` and `root/` entries and a one-line description of the key-prefix vocabulary. The field description no longer claims scope is "all files in `.claude/`" — that stopped being true in v2.4.6 when `root/AGENTS.md` started being tracked.
|
|
18
|
+
|
|
19
|
+
## [2.4.7] — 2026-04-20
|
|
20
|
+
|
|
21
|
+
Bug fix release — the learn-capture Stop hook writes `.claude/.stop-hook-active` as a runtime re-entry guard, but the scaffolded `.gitignore` never covered it. Every project scaffolded or upgraded to 2.4.6 saw a dirty `git status` right after the Stop hook fired. `worclaude delete` also left the now-stale line in `.gitignore`. Both are fixed symmetrically.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- `worclaude init` and `worclaude upgrade` now append `.claude/.stop-hook-active` to `.gitignore`. Pre-v2.4.7 installs pick up the missing entry on the next `upgrade`.
|
|
26
|
+
- `worclaude delete` now removes the `.claude/.stop-hook-active` line from `.gitignore` alongside the other worclaude entries. `.claude-backup-*/` and `.claude/learnings/` remain intentionally preserved so personal/backup content stays ignored after uninstall.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- `docs/reference/configuration.md` — gitignore entries reference now lists all 7 entries (previously out of date — missing `.claude/learnings/` too) with a one-line note on the stop-hook flag.
|
|
31
|
+
|
|
7
32
|
## [2.4.6] — 2026-04-19
|
|
8
33
|
|
|
9
34
|
Bug fix release — `worclaude upgrade` was silently no-oping when the installed and CLI versions matched, even when on-disk files were missing. `worclaude doctor` flagged drift, but the upgrade command refused to reconcile it. This release adds a drift-repair pass to `upgrade` and exposes new flags.
|
package/package.json
CHANGED
package/src/commands/doctor.js
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
TEMPLATE_SKILLS,
|
|
12
12
|
} from '../data/agents.js';
|
|
13
13
|
import { hasClaudeMdMemoryGuidance, readClaudeMd } from '../core/drift-checks.js';
|
|
14
|
+
import { resolveKeyPath } from '../core/file-categorizer.js';
|
|
14
15
|
import * as display from '../utils/display.js';
|
|
15
16
|
|
|
16
17
|
// Check categories
|
|
@@ -534,7 +535,7 @@ async function checkHashIntegrity(projectRoot, meta) {
|
|
|
534
535
|
let intact = 0;
|
|
535
536
|
|
|
536
537
|
for (const [relPath, storedHash] of Object.entries(meta.fileHashes)) {
|
|
537
|
-
const fullPath =
|
|
538
|
+
const fullPath = resolveKeyPath(relPath, projectRoot);
|
|
538
539
|
if (!(await fileExists(fullPath))) {
|
|
539
540
|
missing++;
|
|
540
541
|
} else {
|
package/src/core/remover.js
CHANGED
|
@@ -188,6 +188,7 @@ export async function cleanGitignore(projectRoot) {
|
|
|
188
188
|
'.claude/settings.local.json',
|
|
189
189
|
'.claude/workflow-meta.json',
|
|
190
190
|
'.claude/worktrees/',
|
|
191
|
+
'.claude/.stop-hook-active',
|
|
191
192
|
]);
|
|
192
193
|
|
|
193
194
|
const filtered = lines.filter((line) => !REMOVE_LINES.has(line.trim()));
|
package/src/core/scaffolder.js
CHANGED