@massu/core 2.0.0 → 2.2.0

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
@@ -10,6 +10,70 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
10
10
  > redistributed under the **Apache License 2.0**. Full license + NOTICE:
11
11
  > `packages/core/assets/embedder/MODEL-LICENSE`.
12
12
 
13
+ ## [2.2.0] - 2026-07-22
14
+
15
+ ### Added
16
+
17
+ - **Windows Node bootstrap — CR-70 Layer 2 auto-recovery now covers Windows.** `2.1.0` shipped
18
+ the self-bootstrapping launcher that re-execs massu under a compatible installed Node when the
19
+ running Node is below the floor — but discovery was Unix-only (a slash-rooted allowlist, a POSIX
20
+ ownership gate). On Windows it degraded to a correct-but-manual winget/nodejs.org remedy. `2.2.0`
21
+ extends the SAME chokepoint, floor SoT, and re-exec to Windows: discovery now enumerates the
22
+ Windows install layouts (nvm-windows, fnm, volta, scoop, the MSI / winget / Chocolatey
23
+ `C:\Program Files\nodejs`, and `%LOCALAPPDATA%\Programs\nodejs`) from their env pointers only —
24
+ never `%PATH%` / `where.exe` — with a strict absolute-path allowlist-root containment trust gate
25
+ (the `getuid` analogue). A Windows customer with a compatible Node already installed now gets the
26
+ identical zero-onus auto-fix on `npm i -g @massu/core@2.2.0`; otherwise the already-shipped
27
+ correct Windows loud remedy. The POSIX path is byte-for-byte unchanged (regression-guarded). A
28
+ real `windows-latest` CI leg (`Windows Bootstrap Gate`) proves re-exec fidelity, installer
29
+ symmetry, and the doctor canary at runtime on Windows. No new Canonical Rule — Windows parity of
30
+ CR-70, folded into `canonical-rules-detail.md#cr-70`.
31
+
32
+ ## [2.1.0] - 2026-07-22
33
+
34
+ ### Added
35
+
36
+ - **Zero-onus hook Node bootstrap — `@massu/core` now makes ITSELF run under a compatible
37
+ Node instead of crashing.** `2.0.0` removed the native `better-sqlite3` ABI for Node
38
+ `>= 22.13` by defaulting to `node:sqlite`, but three residual gaps remained: a sub-floor
39
+ Node still broke a bare hook, the installer permitted the hook and MCP-server launchers to
40
+ diverge, and `doctor` verified hooks were *configured* but never that they *execute*. This
41
+ release closes all three (CR-70):
42
+ - **Self-bootstrapping launcher.** A single chokepoint at the top of the CLI
43
+ (`bootstrapNodeOrExit`, above the subcommand dispatch, so it covers both the `hook-runner`
44
+ and MCP-server paths) checks the running Node against the floor. At or above the floor it
45
+ is a no-op single version compare; below the floor it discovers a compatible Node from a
46
+ **strict absolute-path allowlist** (nvm / fnm / volta install dirs + Homebrew kegs —
47
+ never bare `PATH`/`which`) and re-execs under it with full stdin/stdout/exit-code
48
+ fidelity. If no compatible Node exists it fails **loud** with a copy-paste install remedy
49
+ — never a silent hook crash. Opt out with `MASSU_NO_NODE_BOOTSTRAP=1` (still fails loud
50
+ below the floor).
51
+ - **Installer launch symmetry.** The `.mcp.json` server command and the hook commands are
52
+ locked to one launch mechanism (`npx -y @massu/core@<version>`, the hook only appending
53
+ `hook-runner <name>`), so the wrapped-server / bare-hooks asymmetry that masked the
54
+ original incident cannot be reintroduced.
55
+ - **Truthful hook health.** `massu doctor` now runs a real canary hook end-to-end under the
56
+ current Node and reports **RED** on any runtime failure (`ERR_DLOPEN_FAILED`, non-zero
57
+ exit, timeout) — extending the truthful-doctor probe from database construction to hook
58
+ execution.
59
+
60
+ Zero customer action required: upgrading `@massu/core` is the entire fix. Enforced by five
61
+ drift-guards + pattern-scanner Checks 47/48/49 (CR-70). Plan:
62
+ `plan-2026-07-22-zero-onus-hook-node-bootstrap`. Incident:
63
+ `docs/incidents/2026-07-22-native-abi-hooks-bare-node-launch.md`.
64
+
65
+ ## [2.0.1] - 2026-07-22
66
+
67
+ ### Fixed
68
+
69
+ - **`massu doctor` now recognizes hooks committed in `.claude/settings.json`, not only
70
+ `.claude/settings.local.json`.** Claude Code reads and merges both files, but doctor's
71
+ "Hooks Config" and "Shell Hooks" checks inspected only `settings.local.json` — so a project
72
+ that version-controls its hooks in the committed `settings.json` (the norm for a shared/
73
+ governance config) reported "No hooks configured" and an overall **UNHEALTHY** verdict even
74
+ though every hook was wired and firing. Both checks now count the union of hooks across
75
+ `settings.json` + `settings.local.json`. Guarded by `doctor-hooks-config.test.ts`.
76
+
13
77
  ## [2.0.0] - 2026-07-21
14
78
 
15
79
  **Breaking release.** The local database engine now defaults to Node's built-in