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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "worclaude",
3
- "version": "2.4.6",
3
+ "version": "2.4.8",
4
4
  "description": "The Workflow Layer for Claude Code — scaffold agents, commands, skills, hooks, and memory into any project",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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 = path.join(projectRoot, '.claude', ...relPath.split('/'));
538
+ const fullPath = resolveKeyPath(relPath, projectRoot);
538
539
  if (!(await fileExists(fullPath))) {
539
540
  missing++;
540
541
  } else {
@@ -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()));
@@ -54,6 +54,7 @@ export async function updateGitignore(projectDir) {
54
54
  '.claude/worktrees/',
55
55
  '.claude-backup-*/',
56
56
  '.claude/learnings/',
57
+ '.claude/.stop-hook-active',
57
58
  ];
58
59
  const header = '# Worclaude (generated workflow files)';
59
60