@mindrian_os/cli 1.15.3-beta.14 → 1.15.3-beta.18

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 (3) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/README.md +4 -2
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,132 @@
1
+ ## [1.15.3-beta.18] - 2026-07-13
2
+
3
+ ### Added
4
+ -
5
+
6
+ ## [1.15.3-beta.16] - 2026-07-13
7
+
8
+ ### Added
9
+ - **Opportunity follow-through: surfaced opportunities stop dying as files and one-liners.**
10
+ Every opportunity now flows through the Harvest Formula lifecycle (candidate -> qualified ->
11
+ explored -> promoted | parked | retired) as a real graph node with append-only stage history -
12
+ who advanced it, why, and on what evidence, at every step.
13
+ - **Eureka statements now bank as proposed opportunity nodes.** The portfolio scan's ranked
14
+ statements get a REAL awaited Grounding Guard verdict (a bounded async resolution pass over
15
+ the Phase 212 critic - previously the sync emitter could never await it, so nothing ever
16
+ banked on a live run). Statements the critic passes bank as `opportunity` nodes with
17
+ DERIVED_FROM evidence edges; statements it rejects stay honestly unbanked with the verdict
18
+ named. Tunable via `MINDRIAN_OPPORTUNITY_BANK_PREDICATE` (critic | critic+tail | all).
19
+ - **Harvest sensor (SENS-14): graph events become scored opportunity candidates.** A producer
20
+ on the insight-sensor rail harvests candidates from five lanes (eureka proposals, bridges,
21
+ contradictions, whitespace, meeting filings), classifies each through the Gibson Four-Lens
22
+ (leveraging_resources / challenging_orthodoxies / understanding_needs / harnessing_trends),
23
+ and scores them with HarvestIndex_v1. The bridge lane rides the real extraction edge
24
+ vocabulary (COMPETES_WITH / USES_COMPONENT / SUPPLIES_TO), so it finds genuine cross-entity
25
+ signal on real rooms, not just fixture edges.
26
+ - **Qualification Decision Gate (`/mos:qualify-opportunity`).** Harvested candidates come to
27
+ YOU at a real card showing why each one qualified (Q1..Q8 rubric verdicts + machine-readiness
28
+ components; an unknown is typed `unknown`, never a fabricated zero). Five verbs:
29
+ Qualify+file, Park, Retire, Explore, Skip. A Skip writes a typed REJECTED_BECAUSE edge -
30
+ rejection is data the ranker learns from. Nothing qualifies without your explicit verb.
31
+ - **[Explore]: one explicit action turns a qualified opportunity into deep research**
32
+ (`/mos:explore-opportunity`). Runs the explored-stage chain - deep research, diffusion and
33
+ timing, analogies, web validation - and files a Minto-shaped opportunity artifact (governing
34
+ thought + SCQA + cited sources) into `opportunity-bank/` plus a research corpus artifact into
35
+ `research/`, both through the navigation.cjs gates with typed evidence edges. When the
36
+ engine cannot run, the surface OFFERS an LLM manual fallback at a card - honestly labeled
37
+ `engine_mode: llm_manual_baseline`, never silent, never the default.
38
+ - **Frontmatter metadata extraction slice.** Artifact frontmatter (methodology, status,
39
+ created) now lands as graph properties during extraction, so engines reason over what the
40
+ files already declare.
41
+ - **Web ingestion agent: any URL becomes room knowledge in one governed move.** Paste a link
42
+ in conversation, or run `/mos:research <url>`, and after you approve at the card the page
43
+ is fetched (Tavily Extract, server-side clean markdown), filed as a cited research artifact
44
+ in `research/` (source URL, capture date, content hash, review status: proposed), and its
45
+ entities land in the room graph so every engine can use them. Nothing is ever fetched or
46
+ filed without your explicit verb ([Ingest] [Ingest+Explore] [Skip]).
47
+ - **Pasted-URL sensor (SENS-15).** A bare URL in your turn offers an ingest card
48
+ contextually - it never auto-files, and it stays quiet for URLs inside code blocks,
49
+ quotes, or ones the room already ingested.
50
+ - **Content-hash idempotency + SUPERSEDES versioning.** Re-ingesting an unchanged page is an
51
+ honest no-op; a changed page files a NEW version linked to the prior one - history is
52
+ append-only, nothing is overwritten.
53
+ - **Watched sources: crawl-and-learn on cadence.** Register sources in
54
+ `.mindrian/watched-sources.json` and the scout cadence re-ingests changed pages under a
55
+ per-run cap (default 2), with cadence provenance stamped on every artifact. Findings
56
+ surface as candidates at existing gates - never auto-qualified.
57
+ - **Provider honesty everywhere (research_mode envelope).** Every ingest and research run
58
+ names which provider produced the bytes (tavily-extract / webfetch / manual), which mode
59
+ it ran in (normal / web_degraded_local_fallback / local_only / insufficient_evidence),
60
+ and never reports success with empty results. A failed fetch is a typed refusal, not a
61
+ silent empty.
62
+ - **Part 8 + inbound safety on the new surface.** Outbound carries the URL only through the
63
+ audited egress chokepoint; inbound web content is data end to end (prompt-injection
64
+ inert, size-bounded, path-safe filing, no symlink escape), adversarially test-pinned.
65
+ - **Every research/recovery stage now produces a typed envelope instead of guessing from an
66
+ empty result.** `lib/core/recovery/stage-envelope.cjs` gives all 13 pipeline stages
67
+ (retrieval, discovery, filing, and more) one shared shape: status (ok / empty_valid /
68
+ degraded / failed / blocked), a named failure_class from a frozen 13-class vocabulary,
69
+ retryable, provenance, and timestamps. A zero-result stage and a broken stage used to look
70
+ identical (both "empty"); now they carry different, typed reasons, and a validator enforces
71
+ the pairing rules (a failed/blocked stage MUST name its class; an ok stage MUST NOT).
72
+ - **When a research engine breaks, Mindrian now recovers through a real 6-tier ladder instead
73
+ of just failing.** `dispatchRecovery` reads the typed envelopes and tries, in order: (0)
74
+ nothing wrong, (1) one bounded idempotent retry for a transient failure, (2) a local
75
+ governed substitute (your room's own corpus, or its cache, honestly labeled - never "live"
76
+ when it isn't), (3) an OFFERED high-effort LLM recovery pass at a Decision Gate (never
77
+ silent, never the default), (4) naming the smallest missing thing a human needs to fix (a
78
+ credential, an engine), (5) honest termination when nothing worked - a partial result
79
+ naming exactly which engines are still down, never a complete-looking bundle papering over
80
+ a gap.
81
+ - **Running out of Claude spend mid-recovery is now its own honestly-named failure, not a
82
+ retry loop.** `spend_limit_exceeded` is a structural, first-class failure_class: it forces
83
+ `retryable:false` at the moment the envelope is built (not just checked later), and
84
+ short-circuits straight past every retry/substitute/LLM-recovery tier to a plain human
85
+ message: "raise your limit at claude.ai/settings/usage, or wait for the monthly reset."
86
+ This closes a real gap this exact session hit: four parallel agents stalling out on an
87
+ account spend cap, with no honest way for the system to say so.
88
+ - **The high-effort LLM recovery pass runs through a 7-step, resumable, audited case file,
89
+ never a black box.** A gate-offered recovery run (diagnose -> plan -> execute -> validate
90
+ -> reconcile -> resume -> surface) journals every step to a real case file under
91
+ `.mindrian/recovery/<run_id>/` so a crash mid-run resumes exactly where it left off, never
92
+ re-doing completed steps. Five hard fences, each proven by an adversarial test: the
93
+ Brain-egress boundary can't be weakened from inside a recovery run, an unknown component
94
+ can never be silently upgraded to "supported," every write still goes through the one real
95
+ writer (no raw DB access from a recovery hook), a filing is only ever called "recovered" if
96
+ a readback actually confirms it landed, and hostile text embedded in a source (a fake
97
+ instruction, a fake tool call) is always treated as inert data, never executed.
98
+ - **Recovery outcomes are now honestly composed, never inferred.** `composeRecoveryResult`
99
+ derives one of five outcomes (recovered / partial_recovery / degraded_recovery /
100
+ manual_intervention_required / insufficient_evidence) strictly from what actually happened:
101
+ "recovered" requires every stage envelope to validate AND any attempted filing to be
102
+ readback-confirmed - one unconfirmed filing forces `partial_recovery`, never a false
103
+ "recovered." The result rides as an additive `research_mode` + disclosure field on every
104
+ touched surface (research, opportunity exploration, URL ingestion) without changing any
105
+ existing field's meaning.
106
+ - **A gap in one accessible corpus is never reported as "this doesn't exist."** The
107
+ vantage-error lesson from this exact release wave (an external research pass wrongly
108
+ concluded a shipped phase was "missing" because it only checked one gitignored, unpushed
109
+ corpus) is now a structural, permanent rule: the only gap scope the recovery composer can
110
+ ever emit is `corpus` (a provisional, vantage-scoped gap), never `project` (a claim of
111
+ project-level nonexistence) - enforced by a source scan that fails the build if that ever
112
+ changes, plus a permanent regression fixture that encodes this exact mistake so it can
113
+ never silently return.
114
+ - **14-class recovery matrix, offline and permanent.** Every named failure class (network
115
+ timeout, missing credential, contract violation, policy block, cadence-vs-on-demand,
116
+ multi-engine outage, spend limit, vantage-scoped gap, and more) is asserted end to end
117
+ through the real dispatch and controller seams, with zero network calls - two of the
118
+ fourteen (the vantage rule and spend_limit_exceeded) are locked as PERMANENT fixtures
119
+ precisely because this session discovered both the hard way.
120
+
121
+ ### Fixed
122
+ - **Windows FTS5 crash: eureka degrades bi-modal instead of dying.** On machines whose Node
123
+ SQLite lacks the FTS5 module, the tri-modal index used to crash the whole scan with
124
+ `no such module: fts5`. A capability probe now selects the backend up front: with FTS5 the
125
+ lexical leg runs as before; without it the scan runs honestly on the two remaining legs
126
+ (vector + graph) and stamps `fts_backend: absent (bi-modal degrade)` in provenance. Never a
127
+ crash, never a silent lie. Live-validated on the exact Windows machine that exposed the bug
128
+ (corepower-isolation, 219-VERIFICATION.md Section 4).
129
+
1
130
  ## [1.15.3-beta.14] - 2026-07-12
2
131
 
3
132
  ### Added
package/README.md CHANGED
@@ -50,7 +50,7 @@ You talk; the room writes itself. Every conversation, every meeting, every decis
50
50
 
51
51
  ### The room surfaces what you cannot see
52
52
 
53
- Every time you add something new, the system compares it against everything already there. Larry tells you what just changed, what contradicts what, what connects to what, and what is now missing. You decide: APPROVE, REJECT (with a reason), or DEFER. The reason becomes part of the room. The next scan is smarter.
53
+ Every time you add something new, the system compares it against everything already there. Larry tells you what just changed, what contradicts what, what connects to what, and what is now missing. You decide: APPROVE, REJECT (with a reason), or DEFER. The reason becomes part of the room. The next scan is smarter. When a scan surfaces an opportunity, it does not stop at a headline: you qualify it at a card, and one explicit Explore turns it into cited deep research filed in your opportunity bank. The web works the same way: paste a URL and, once you approve, the page is filed as a cited source in your room and compared against everything already there. When something breaks mid-research, it tells you exactly what happened and what it tried next, never a silent empty result.
54
54
 
55
55
  ---
56
56
 
@@ -121,12 +121,14 @@ The commands below are internals. You never have to memorize them or type them.
121
121
  /mos:bono # a six-hats research-and-debate team on your question
122
122
  /mos:map-unknowns # hunt the claims you are most confident about, and wrong
123
123
  /mos:file-meeting # paste a transcript, Larry files it
124
+ /mos:research <url> # paste a link, approve the card, the page becomes cited room knowledge
124
125
  /mos:opportunities # what grants match this room right now
126
+ /mos:qualify-opportunity # judge a surfaced opportunity at a card; Explore turns it into research
125
127
  /mos:graph "what is the weakest assumption in my financial model?"
126
128
  /mos:grade # honest assessment against real ventures
127
129
  ```
128
130
 
129
- That is a slice of 107 commands across 14 skills and 9 agents. If you do not know which one to run, that is the normal case. Just talk: Larry reaches for the right one.
131
+ That is a slice of 110 commands across 14 skills and 9 agents. If you do not know which one to run, that is the normal case. Just talk: Larry reaches for the right one.
130
132
 
131
133
  ---
132
134
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindrian_os/cli",
3
- "version": "1.15.3-beta.14",
3
+ "version": "1.15.3-beta.18",
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",