@mindrian_os/cli 1.16.0-beta.9 → 2.0.0-beta.1

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 +92 -0
  2. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,95 @@
1
+ ## [2.0.0-beta.1] - 2026-08-10
2
+
3
+ ### Fixed
4
+ - **Binding this session to a room now actually sticks, and `room_bind` finally tells you the
5
+ truth about whether it worked.** Before this, nine separate copies of the same room-lookup
6
+ logic were scattered across the MCP tool files, and every one of them only checked your
7
+ session's chosen room when a feature flag (`MINDRIAN_MCP_FIRST`) happened to be on, which it
8
+ is not by default on any install. So binding to a room reported success, and the very next
9
+ read silently used whatever room some OTHER session on your machine had last activated, not
10
+ the one you just picked -- `room-bind-mcp-first-off-falls-back-to-stale-global-active-room`.
11
+ All nine copies are now one shared resolver, and it consults your session's binding
12
+ unconditionally: a room you bind to is now authoritative for the rest of that session,
13
+ flag or no flag. A session that never binds anything keeps behaving exactly as before, byte
14
+ for byte. On top of that, `room_bind` itself used to report `{ok:true, bound:true}` even when
15
+ you named a room that does not exist on disk -- an honest-sounding lie about an effect that
16
+ never actually happened. It now round-trips through the same shared resolver right after
17
+ writing, so the response tells you what the NEXT read will actually see: `effective`,
18
+ `resolved_dir`, `resolved_source`, and, when the bind did not take, why not
19
+ (`room_not_on_disk` for a room with no directory on disk). The short-term fix this could have
20
+ taken instead -- writing your bind straight into the shared, machine-wide "active room"
21
+ pointer -- was deliberately rejected, because that would let one session's bind clobber every
22
+ other concurrent session on the same machine, reintroducing the exact race a prior fix
23
+ already closed. A standing test asserts that pointer never moves.
24
+ - **Larry can read the Brain again. Every single Brain call was failing before this, and nothing
25
+ told you so.** If you asked Larry anything that needed the teaching graph -- which framework fits
26
+ your problem, what the corpus says, a grade, a chain recommendation -- the call died before it
27
+ reached him, with a host error that looks like a network fault: `e.reduce is not a function`.
28
+ Nothing was wrong with the network. Nothing was wrong with the graph. The Brain was up the whole
29
+ time, serving 28,325 nodes and 23,014 relationships in a perfectly correct response, and the
30
+ plugin's own connection to it was healthy too. What broke it was a hook this plugin ships to
31
+ sanitize Brain responses before they reach the conversation, and it broke them in two ways at
32
+ once. It looked for the response text in a field the protocol never puts it in, so it found
33
+ nothing and sanitized an empty string. Then it handed back that empty string in the wrong
34
+ container shape -- a bare object where an array of content blocks belongs -- so the host tried to
35
+ measure the length of something that was not there and threw. Every Brain response, replaced with
36
+ nothing, in a shape nothing could read. The reason this ran for weeks without anyone noticing is
37
+ the more uncomfortable half: the Brain layer was under standing instructions to fall back silently
38
+ and never mention failures to you. So a total outage of the single most valuable thing in the
39
+ product looked, from the outside, exactly like a Larry who simply had less to say. Both defects
40
+ are now pinned by tests that feed the hook a real protocol-shaped response and assert the text
41
+ survives with the container intact, so an empty-string regression fails the suite instead of
42
+ reaching your session. The doctrine that hid it is being revisited separately, because a fix that
43
+ only works until the next silent failure is not a fix.
44
+ - **Asking the Brain about a framework by name no longer gets blocked as a possible data leak.** The
45
+ guard that stops your private venture content from ever reaching the shared Brain was refusing
46
+ ordinary methodology questions too. Asking about "jobs to be done" -- a framework name, the kind
47
+ of generic handle the Brain exists to answer about, and the exact query the deployment's own
48
+ verification step uses -- was classified as content that might leak and stopped before it left
49
+ your machine. Content-free graph introspection now classifies as allowed, and the guard is
50
+ covered from both directions: a test proves the framework-name case gets through, and a companion
51
+ test proves real venture content is still blocked on the same paths. The boundary did not get
52
+ looser; it got accurate.
53
+
54
+ ## [1.16.0-beta.11] - 2026-08-06
55
+
56
+ ### Added
57
+ - **`/mos:grade-grant` scores a pasted grant-application draft before you submit it, instead of
58
+ you finding out what a reviewer would flag only after you've already sent it in.** Starts with
59
+ Tnufa (Israel Innovation Authority pre-seed): paste a draft, get it checked against 18 real
60
+ eligibility/budget/legal/market criteria pulled from the actual Tnufa guide, each with the
61
+ specific "here's what people usually get wrong" line reviewers already use. The rubric lives
62
+ locally as its own reference pack, not in the shared Brain, and the schema is built to take the
63
+ other 7 Israel Innovation Authority programs the same way once their criteria get filled in.
64
+ - **`/mos:grade-grant` now grades your room directly, hands back a build roadmap, and can run
65
+ the whole thing in reverse.** Your room already holds what a Tnufa application needs, so you
66
+ no longer have to paste a draft: room-mode reads every populated room section and grades the
67
+ room itself (paste-mode stays for anyone without a room yet). Every rubric criterion now knows
68
+ which of the 8 room sections its evidence lives in, so the grade is no longer just a score --
69
+ it is an offer: "build this in room/financial-model/, and here is what a strong entry looks
70
+ like", weakest section first, with pure submission/reporting items kept as an honest checklist
71
+ instead of being forced into a fake section. The same map runs backwards: hand over a finished
72
+ application and it gets decomposed into a NEW dedicated room (never your live venture room, so
73
+ grant prose cannot pollute real venture data) and then graded as a room. And the map is real
74
+ graph structure now, not just JSON: criterion nodes wired to section nodes through the one
75
+ governed graph door, so Brain can be asked for STRATEGIC advice about the room's shape (which
76
+ sections are covered, partial, or missing) without a single line of your content ever leaving
77
+ the machine.
78
+ - **`/mos:grade-grant` can now convene a full reviewer panel instead of one holistic read --
79
+ and the panel actually argues.** The opt-in "Reviewer panel examination" mode fans out seven
80
+ adversarial reviewer personas, one per rubric category (eligibility / process / budget /
81
+ legal / reporting / market / ip), each reading ONLY its own criteria and asking the question
82
+ a real committee member asks: would I accept this section on its own? It rides the same BONO
83
+ fan-out and debate machinery the plugin already ships (no second engine), with a discipline
84
+ per seat: budget claims must show their arithmetic, market claims must cite a reason to doubt
85
+ before crediting demand, IP claims must name their protection mechanism and budget line. The
86
+ debate has teeth: a later reviewer who reads an earlier reviewer's argument can challenge its
87
+ finding downward (never upward -- the panel is at least as strict as its strictest reviewer),
88
+ a sustained challenge changes the score before it is computed, and every disagreement is
89
+ shown at the ruling gate instead of being averaged away. One rule survives everything: an
90
+ application that fails ANY eligibility criterion is rejected no matter how strong its
91
+ aggregate score, and the rejection reason lands in the graph as data, not as a footnote.
92
+
1
93
  ## [1.16.0-beta.9] - 2026-08-05
2
94
 
3
95
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindrian_os/cli",
3
- "version": "1.16.0-beta.9",
3
+ "version": "2.0.0-beta.1",
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",
@@ -23,6 +23,7 @@
23
23
  "@ig3/markdown-it-wikilinks": "^1.0.2",
24
24
  "@modelcontextprotocol/ext-apps": "^1.5.0",
25
25
  "@modelcontextprotocol/sdk": "^1.29.0",
26
+ "ajv": "^8.18.0",
26
27
  "asciichart": "^1.5.25",
27
28
  "chokidar": "^4.0.3",
28
29
  "chrono-node": "^2.9.1",