@mindrian_os/cli 1.15.3-beta.42 → 1.15.3-beta.46

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.
Files changed (2) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,108 @@
1
+ ## [1.15.3-beta.46] - 2026-07-23
2
+
3
+ ### Added
4
+ -
5
+
6
+ ### Fixed
7
+ - **The F.8 "bind session to room" Decision Gate (and any PRIMARY-path registry gate)
8
+ force-fired on turns whose ONLY content was an automated background-task-completion
9
+ notification, with zero real user text, blocking continuation with a Stop hook error even
10
+ though there was nothing for the navigator to decide that turn.** Root cause:
11
+ `precedingUserText` resolves to `''` for two very different reasons that
12
+ `scripts/check-card-fire.cjs` could not previously distinguish -- a genuinely terse HUMAN
13
+ turn ("ok", "go on") and a SYNTHETIC preceding transcript record (a `tool_result` envelope
14
+ from a background tool call, or an automated task-notification block) with no
15
+ human-authored text at all. `lib/core/gate-relevance.cjs`'s conservative low-signal branch
16
+ forced (assumed relevant) on both, which is only correct for the first -- there is no human
17
+ turn for a Decision Gate to be relevant or irrelevant to on the second. Fixed by adding a
18
+ new `preceding_user_text_source` signal (`'typed' | 'tool_result' | 'none'`), classified by
19
+ a new `classifyPrecedingUserContentSource` helper in `readTranscriptTurn` and threaded
20
+ through `deriveTurnSignals`; `classifyCardFire`'s PRIMARY-path relevance branch now bypasses
21
+ forcing immediately when the source is confirmed `'tool_result'`
22
+ (`reason: 'preceding-turn-synthetic-no-user-engagement'`), before ever reaching the
23
+ conservative low-signal branch. A genuinely terse human turn against the identical gate
24
+ still force-fires, unweakened (the WR-06/CR-06 floor). Live-reproduced 3 consecutive times
25
+ in one session; the mechanism itself was first diagnosed 2026-07-06 (as a fact, not yet
26
+ treated as a defect) and confirmed recurring 2026-07-11 and 2026-07-22. Full RCA:
27
+ `.planning/debug/resolved/room-bind-gate-fires-on-notification-only-turns.md`.
28
+ - **The semantic-edge derivation queue (`graph-derive-queue.json`) silently cleared itself
29
+ on every failed derivation, in every room, forever -- so no room has ever gotten a real
30
+ INFORMS/CONTRADICTS/CONVERGES cascade edge.** Root cause: `scripts/gsd-graph-derive-drain.cjs`'s
31
+ `drainDerive()` caught a `runDerivation` throw, pushed the failed room to `drained` anyway,
32
+ and rewrote the queue empty with no log -- destroying the retry signal on every SessionStart
33
+ run regardless of outcome. Two of the three originally-stacked causes (a dead standalone
34
+ Anthropic API key; the headless path computing a null single-pair derive with no real
35
+ artifact pairs) had already been resolved upstream by Phase 224-02's switch to local
36
+ embeddings; the silent-clear was the one still live. Fixed via a new `reconcileQueue()`: a
37
+ failed room is now kept and retried (capped at `MAX_DERIVE_ATTEMPTS=5`, then dropped
38
+ `permanent:true` and logged, never silently), and every failure appends to a new
39
+ `<room>/.mindrian/graph-derive-failures.json`. Root-caused by cross-referencing a TDS
40
+ "context rot" research thread against the live debug queue, not filed fresh. Full RCA:
41
+ `.planning/debug/graph-derive-silent-clear-dead-api-derivation.md`. Formalizing the
42
+ derivation transport, healing the ~16 already-damaged rooms, and a doctor health check
43
+ remain open (register items 4b-4e).
44
+ - **`room_search` applied its 50-result cap in raw filesystem-walk order, before any
45
+ relevance ranking -- so a genuinely relevant match in a late-traversed folder could lose to
46
+ 50 incidental early-folder hits, and a same-entity query could return dozens of
47
+ near-duplicate lines from one file.** Root cause: `lib/mcp/tools/room.cjs`'s `searchRoom`
48
+ was a plain `String.includes` grep that pushed matches in directory-entry order and
49
+ returned the instant either `SEARCH_MAX_RESULTS` (50) or `SEARCH_MAX_FILES` (500) was hit --
50
+ capped-then-never-ranked, not ranked-then-capped. Fixed via a rank-then-cap rewrite
51
+ (`collectMatches`/`rankMatches`): match density x0.7 + recency x0.3, with a 5-per-file slice
52
+ cap so one file can't monopolize the result budget. `graph_query` was audited in the same
53
+ pass and found already ranked correctly (a composite relevance score already lives in
54
+ `navigation/neighborhood.cjs`); `whitespace_scan` is unranked but uncapped, deferred pending
55
+ the graph-derive edge-density fix above (little signal to rank while most rooms carry
56
+ near-zero semantic edges). Full RCA: `.planning/debug/graph-query-results-unranked.md`.
57
+ - **The M:OS Canonical Design System v1.1 "bake into all HTML artifacts" mandate was only
58
+ ~30% actually landed, despite its own commit (`a9e1ee88`) and Phase 232-01 claiming it was
59
+ done.** The CSS bundle, loader (`mosStyleTag()`), and `lib/wiki/wiki-layout.cjs`'s
60
+ retokenization were real; `scripts/generate-deck.cjs`, `generate-hub.cjs`,
61
+ `generate-lobby.cjs`, and `generate-snapshot.cjs` had zero reference to `mosStyleTag()`,
62
+ `dashboard/index.html` had zero M:OS tokens, and the mandate's own doc
63
+ (`skills/ui-system/rules/design-system.md`) and `SKILL.md` section 0 did not exist. Wired
64
+ all 4 generators to `mosStyleTag()` (cream default, `data-theme="light"`), injected canonical
65
+ tokens plus a role-based CSS variable alias layer into `dashboard/index.html` and
66
+ `dashboard/export-template.html` (legacy `--mondrian-*`/`--ds-*` names aliased onto canonical
67
+ values in place, not renamed), and authored the missing mandate docs. Code review caught 2
68
+ real regressions before this shipped: (1) 3 of the 4 generators' own pre-existing `<style>`
69
+ blocks redeclared the same token names with old hex values LATER in the document, so the
70
+ mandate rendered in the markup but had zero visual effect by CSS cascade -- fixed by removing
71
+ the colliding redeclarations; (2) `dashboard/index.html`'s dark-to-light polarity flip broke
72
+ hardcoded Cytoscape graph-label colors and hover overlays tuned for the old dark theme --
73
+ fixed by repointing them at the resolved ink values. Both independently re-verified via
74
+ Playwright (`getComputedStyle`) against live-regenerated output, not just diffs.
75
+
76
+ ## [1.15.3-beta.44] - 2026-07-23
77
+
78
+ ### Added
79
+ -
80
+
81
+ ### Fixed
82
+ - **Every Stop hook turn showed a raw Claude Code hook JSON validation error
83
+ ("Hook JSON output validation failed: - : Invalid input") instead of the intended calm
84
+ systemMessage, whenever `scripts/check-card-fire.cjs` force-blocked a turn to demand an
85
+ AskUserQuestion card fire.** Root cause: Claude Code's Stop-hook output schema does not
86
+ define a `hookSpecificOutput` variant for the Stop event at all (the union covers only
87
+ PreToolUse, UserPromptSubmit, and PostToolUse); including the key on a Stop envelope
88
+ rejects the WHOLE envelope (`additionalProperties: false`), not just that key, silently
89
+ replacing the carefully-set `decision`/`reason`/`systemMessage` with a raw schema-error
90
+ dump. This is the 4th live occurrence of the same defect class: fixed once in
91
+ `scripts/on-stop` (v1.10.9 -> v1.10.10, 2026-04-15), then reintroduced in
92
+ `scripts/feynman-minto-guardian.cjs` (under a since-corrected comment that had the rule
93
+ backwards), reintroduced again as a regression inside `scripts/on-stop` itself (the
94
+ Phase 198-09 MCP-first thin-adapter branch), and hit live by a real user via
95
+ `scripts/check-card-fire.cjs` today. Fixed at all 3 sites: `hookSpecificOutput` removed
96
+ outright (and removed from `check-card-fire.cjs`'s own envelope-key allowlist so it can't
97
+ silently slip back in); the calm, human-facing `decision`/`reason`/`systemMessage` fields
98
+ each branch already set are unaffected. New structural regression gate:
99
+ `scripts/check-hook-schema-compatibility.cjs` (previously unwired and, worse, encoding the
100
+ opposite/wrong rule) is corrected and wired into `scripts/verify-release` (section 16) --
101
+ it enumerates every script Claude Code registers as a Stop hook straight off
102
+ `hooks/hooks.json`, follows one level of subprocess invocation, and fails the release if
103
+ any of them would emit a Stop-shaped `hookSpecificOutput` again. Full RCA:
104
+ `.planning/debug/resolved/stop-hook-invalid-hookspecificoutput-schema.md`.
105
+
1
106
  ## [1.15.3-beta.42] - 2026-07-23
2
107
 
3
108
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindrian_os/cli",
3
- "version": "1.15.3-beta.42",
3
+ "version": "1.15.3-beta.46",
4
4
  "description": "Install MindrianOS into Claude Code with one command -- `npx @mindrian_os/cli`. Ships the MindrianOS plugin (Larry + PWS methodology + Data Room) plus a setup/diagnostics CLI (install/doctor/update).",
5
5
  "scripts": {
6
6
  "mcp": "node bin/mindrian-mcp-server.cjs",