@mindrian_os/cli 1.15.3-beta.44 → 1.15.3-beta.48

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 +109 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,112 @@
1
+ ## [1.15.3-beta.48] - 2026-07-26
2
+
3
+ ### Added
4
+ - **Room-graph density read (Phase 232.1).** `/mos:doctor` and `room_state status`/`get-state`
5
+ now self-report node/edge counts per `room.db`, read exclusively through a new read-only
6
+ `navigation.cjs` door (`openRoomDbReadOnlyForCaller`) -- never the mutating door, never a
7
+ direct `room.db` open. Closes SEED-074's own "suggested first move"
8
+ (`.planning/seeds/SEED-074-local-graph-read-layer-lacks-salience-and-query-time-joins.md`):
9
+ the seed's actual PageRank/Louvain/query-time-join target stays gated exactly as written;
10
+ this only makes its own trigger condition (measured room.db density) self-reported instead
11
+ of something a human has to remember to check by hand. No output string anywhere claims a
12
+ room graph is dense, at-risk, or healthy (hard guard, grep-verified). Goal-backward
13
+ verification PASS, 6/6 must-haves (`232.1-VERIFICATION.md`).
14
+ - Local reified-claim `ContradictionEvent` primitive (quick task 260725-9ca), with a hermetic
15
+ acceptance test.
16
+
17
+ ### Fixed
18
+ - **`room_bind` could report `ok:true` while a sibling MCP read tool silently resolved a
19
+ stale, unrelated room.** Root cause: 20 of 21 MCP tool call sites were missing the
20
+ `CLAUDE_CODE_SESSION_ID` stdio fallback that `room_bind` itself already had, so a
21
+ session-id mismatch between the bind call and a later read call could bind one room but
22
+ read another without ever surfacing an error. Fixed via one shared
23
+ `resolveEffectiveSessionId` helper, wired into all 21 sites; live-reproduced, then closed,
24
+ tests green. Full reproduction and root cause also filed in the `rethinking-mindrianos`
25
+ room per this repo's dev-research compositing rule.
26
+ - **Phase 232.1's own room-graph density census could silently drop a room that used the
27
+ `abs_path` registry field instead of `path`,** undermining the one thing the census exists
28
+ to be accurate about. `resolveRoomPath` now checks `abs_path` first, `path` as fallback,
29
+ matching the precedence every other production call site in this codebase already honors;
30
+ pinned by a mutation-verified regression test (reverted, confirmed red, restored, confirmed
31
+ green). The identical gap in the earlier, already-shipped `cascade-rooms-module.cjs` this
32
+ was copied from is left alone -- out of this phase's scope, tracked separately as
33
+ low-severity follow-up debt.
34
+
35
+ ## [1.15.3-beta.46] - 2026-07-23
36
+
37
+ ### Added
38
+ -
39
+
40
+ ### Fixed
41
+ - **The F.8 "bind session to room" Decision Gate (and any PRIMARY-path registry gate)
42
+ force-fired on turns whose ONLY content was an automated background-task-completion
43
+ notification, with zero real user text, blocking continuation with a Stop hook error even
44
+ though there was nothing for the navigator to decide that turn.** Root cause:
45
+ `precedingUserText` resolves to `''` for two very different reasons that
46
+ `scripts/check-card-fire.cjs` could not previously distinguish -- a genuinely terse HUMAN
47
+ turn ("ok", "go on") and a SYNTHETIC preceding transcript record (a `tool_result` envelope
48
+ from a background tool call, or an automated task-notification block) with no
49
+ human-authored text at all. `lib/core/gate-relevance.cjs`'s conservative low-signal branch
50
+ forced (assumed relevant) on both, which is only correct for the first -- there is no human
51
+ turn for a Decision Gate to be relevant or irrelevant to on the second. Fixed by adding a
52
+ new `preceding_user_text_source` signal (`'typed' | 'tool_result' | 'none'`), classified by
53
+ a new `classifyPrecedingUserContentSource` helper in `readTranscriptTurn` and threaded
54
+ through `deriveTurnSignals`; `classifyCardFire`'s PRIMARY-path relevance branch now bypasses
55
+ forcing immediately when the source is confirmed `'tool_result'`
56
+ (`reason: 'preceding-turn-synthetic-no-user-engagement'`), before ever reaching the
57
+ conservative low-signal branch. A genuinely terse human turn against the identical gate
58
+ still force-fires, unweakened (the WR-06/CR-06 floor). Live-reproduced 3 consecutive times
59
+ in one session; the mechanism itself was first diagnosed 2026-07-06 (as a fact, not yet
60
+ treated as a defect) and confirmed recurring 2026-07-11 and 2026-07-22. Full RCA:
61
+ `.planning/debug/resolved/room-bind-gate-fires-on-notification-only-turns.md`.
62
+ - **The semantic-edge derivation queue (`graph-derive-queue.json`) silently cleared itself
63
+ on every failed derivation, in every room, forever -- so no room has ever gotten a real
64
+ INFORMS/CONTRADICTS/CONVERGES cascade edge.** Root cause: `scripts/gsd-graph-derive-drain.cjs`'s
65
+ `drainDerive()` caught a `runDerivation` throw, pushed the failed room to `drained` anyway,
66
+ and rewrote the queue empty with no log -- destroying the retry signal on every SessionStart
67
+ run regardless of outcome. Two of the three originally-stacked causes (a dead standalone
68
+ Anthropic API key; the headless path computing a null single-pair derive with no real
69
+ artifact pairs) had already been resolved upstream by Phase 224-02's switch to local
70
+ embeddings; the silent-clear was the one still live. Fixed via a new `reconcileQueue()`: a
71
+ failed room is now kept and retried (capped at `MAX_DERIVE_ATTEMPTS=5`, then dropped
72
+ `permanent:true` and logged, never silently), and every failure appends to a new
73
+ `<room>/.mindrian/graph-derive-failures.json`. Root-caused by cross-referencing a TDS
74
+ "context rot" research thread against the live debug queue, not filed fresh. Full RCA:
75
+ `.planning/debug/graph-derive-silent-clear-dead-api-derivation.md`. Formalizing the
76
+ derivation transport, healing the ~16 already-damaged rooms, and a doctor health check
77
+ remain open (register items 4b-4e).
78
+ - **`room_search` applied its 50-result cap in raw filesystem-walk order, before any
79
+ relevance ranking -- so a genuinely relevant match in a late-traversed folder could lose to
80
+ 50 incidental early-folder hits, and a same-entity query could return dozens of
81
+ near-duplicate lines from one file.** Root cause: `lib/mcp/tools/room.cjs`'s `searchRoom`
82
+ was a plain `String.includes` grep that pushed matches in directory-entry order and
83
+ returned the instant either `SEARCH_MAX_RESULTS` (50) or `SEARCH_MAX_FILES` (500) was hit --
84
+ capped-then-never-ranked, not ranked-then-capped. Fixed via a rank-then-cap rewrite
85
+ (`collectMatches`/`rankMatches`): match density x0.7 + recency x0.3, with a 5-per-file slice
86
+ cap so one file can't monopolize the result budget. `graph_query` was audited in the same
87
+ pass and found already ranked correctly (a composite relevance score already lives in
88
+ `navigation/neighborhood.cjs`); `whitespace_scan` is unranked but uncapped, deferred pending
89
+ the graph-derive edge-density fix above (little signal to rank while most rooms carry
90
+ near-zero semantic edges). Full RCA: `.planning/debug/graph-query-results-unranked.md`.
91
+ - **The M:OS Canonical Design System v1.1 "bake into all HTML artifacts" mandate was only
92
+ ~30% actually landed, despite its own commit (`a9e1ee88`) and Phase 232-01 claiming it was
93
+ done.** The CSS bundle, loader (`mosStyleTag()`), and `lib/wiki/wiki-layout.cjs`'s
94
+ retokenization were real; `scripts/generate-deck.cjs`, `generate-hub.cjs`,
95
+ `generate-lobby.cjs`, and `generate-snapshot.cjs` had zero reference to `mosStyleTag()`,
96
+ `dashboard/index.html` had zero M:OS tokens, and the mandate's own doc
97
+ (`skills/ui-system/rules/design-system.md`) and `SKILL.md` section 0 did not exist. Wired
98
+ all 4 generators to `mosStyleTag()` (cream default, `data-theme="light"`), injected canonical
99
+ tokens plus a role-based CSS variable alias layer into `dashboard/index.html` and
100
+ `dashboard/export-template.html` (legacy `--mondrian-*`/`--ds-*` names aliased onto canonical
101
+ values in place, not renamed), and authored the missing mandate docs. Code review caught 2
102
+ real regressions before this shipped: (1) 3 of the 4 generators' own pre-existing `<style>`
103
+ blocks redeclared the same token names with old hex values LATER in the document, so the
104
+ mandate rendered in the markup but had zero visual effect by CSS cascade -- fixed by removing
105
+ the colliding redeclarations; (2) `dashboard/index.html`'s dark-to-light polarity flip broke
106
+ hardcoded Cytoscape graph-label colors and hover overlays tuned for the old dark theme --
107
+ fixed by repointing them at the resolved ink values. Both independently re-verified via
108
+ Playwright (`getComputedStyle`) against live-regenerated output, not just diffs.
109
+
1
110
  ## [1.15.3-beta.44] - 2026-07-23
2
111
 
3
112
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindrian_os/cli",
3
- "version": "1.15.3-beta.44",
3
+ "version": "1.15.3-beta.48",
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",