@massu/core 2.0.0 → 2.1.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,51 @@ 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.1.0] - 2026-07-22
14
+
15
+ ### Added
16
+
17
+ - **Zero-onus hook Node bootstrap — `@massu/core` now makes ITSELF run under a compatible
18
+ Node instead of crashing.** `2.0.0` removed the native `better-sqlite3` ABI for Node
19
+ `>= 22.13` by defaulting to `node:sqlite`, but three residual gaps remained: a sub-floor
20
+ Node still broke a bare hook, the installer permitted the hook and MCP-server launchers to
21
+ diverge, and `doctor` verified hooks were *configured* but never that they *execute*. This
22
+ release closes all three (CR-70):
23
+ - **Self-bootstrapping launcher.** A single chokepoint at the top of the CLI
24
+ (`bootstrapNodeOrExit`, above the subcommand dispatch, so it covers both the `hook-runner`
25
+ and MCP-server paths) checks the running Node against the floor. At or above the floor it
26
+ is a no-op single version compare; below the floor it discovers a compatible Node from a
27
+ **strict absolute-path allowlist** (nvm / fnm / volta install dirs + Homebrew kegs —
28
+ never bare `PATH`/`which`) and re-execs under it with full stdin/stdout/exit-code
29
+ fidelity. If no compatible Node exists it fails **loud** with a copy-paste install remedy
30
+ — never a silent hook crash. Opt out with `MASSU_NO_NODE_BOOTSTRAP=1` (still fails loud
31
+ below the floor).
32
+ - **Installer launch symmetry.** The `.mcp.json` server command and the hook commands are
33
+ locked to one launch mechanism (`npx -y @massu/core@<version>`, the hook only appending
34
+ `hook-runner <name>`), so the wrapped-server / bare-hooks asymmetry that masked the
35
+ original incident cannot be reintroduced.
36
+ - **Truthful hook health.** `massu doctor` now runs a real canary hook end-to-end under the
37
+ current Node and reports **RED** on any runtime failure (`ERR_DLOPEN_FAILED`, non-zero
38
+ exit, timeout) — extending the truthful-doctor probe from database construction to hook
39
+ execution.
40
+
41
+ Zero customer action required: upgrading `@massu/core` is the entire fix. Enforced by five
42
+ drift-guards + pattern-scanner Checks 47/48/49 (CR-70). Plan:
43
+ `plan-2026-07-22-zero-onus-hook-node-bootstrap`. Incident:
44
+ `docs/incidents/2026-07-22-native-abi-hooks-bare-node-launch.md`.
45
+
46
+ ## [2.0.1] - 2026-07-22
47
+
48
+ ### Fixed
49
+
50
+ - **`massu doctor` now recognizes hooks committed in `.claude/settings.json`, not only
51
+ `.claude/settings.local.json`.** Claude Code reads and merges both files, but doctor's
52
+ "Hooks Config" and "Shell Hooks" checks inspected only `settings.local.json` — so a project
53
+ that version-controls its hooks in the committed `settings.json` (the norm for a shared/
54
+ governance config) reported "No hooks configured" and an overall **UNHEALTHY** verdict even
55
+ though every hook was wired and firing. Both checks now count the union of hooks across
56
+ `settings.json` + `settings.local.json`. Guarded by `doctor-hooks-config.test.ts`.
57
+
13
58
  ## [2.0.0] - 2026-07-21
14
59
 
15
60
  **Breaking release.** The local database engine now defaults to Node's built-in