@mindrian_os/cli 2.0.0-beta.3 → 2.0.0-beta.31

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 (1829) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/.mcp.json +14 -0
  3. package/CHANGELOG.md +467 -0
  4. package/agents/analogy-query-fetcher.md +119 -0
  5. package/agents/brain-query.md +91 -0
  6. package/agents/competitor-watch-fetcher.md +94 -0
  7. package/agents/framework-runner.md +258 -0
  8. package/agents/grading.md +216 -0
  9. package/agents/grant-reviewer.md +191 -0
  10. package/agents/investor.md +141 -0
  11. package/agents/larry-extended.md +215 -0
  12. package/agents/meeting-perspective-extractor.md +94 -0
  13. package/agents/opportunity-scanner.md +105 -0
  14. package/agents/persona-analyst.md +201 -0
  15. package/agents/research.md +103 -0
  16. package/agents/reverse-salient-agent.md +42 -0
  17. package/agents/vault-section-reviewer.md +107 -0
  18. package/assets/banner-showcase.html +537 -0
  19. package/assets/fonts/BebasNeue-Regular.ttf +0 -0
  20. package/assets/fonts/Inter-Bold.ttf +0 -0
  21. package/assets/fonts/Inter-Regular.ttf +0 -0
  22. package/assets/logo.svg +10 -0
  23. package/bin/local-chain-recommender.cjs +256 -0
  24. package/bin/mindrian-brain-mcp-client.cjs +319 -0
  25. package/bin/mindrian-mcp-server.cjs +445 -0
  26. package/bin/mindrian-mcp-shim.cjs +100 -0
  27. package/bin/mindrian-tools.cjs +784 -0
  28. package/commands/act.md +529 -0
  29. package/commands/admin.md +439 -0
  30. package/commands/agentshield.md +49 -0
  31. package/commands/analyze-needs.md +78 -0
  32. package/commands/analyze-systems.md +73 -0
  33. package/commands/analyze-timing.md +98 -0
  34. package/commands/auto-explore.md +85 -0
  35. package/commands/beautiful-question.md +76 -0
  36. package/commands/bono.md +152 -0
  37. package/commands/brain-derive.md +137 -0
  38. package/commands/build-knowledge.md +121 -0
  39. package/commands/build-thesis.md +94 -0
  40. package/commands/causal.md +269 -0
  41. package/commands/challenge-assumptions.md +78 -0
  42. package/commands/compare-ventures.md +117 -0
  43. package/commands/correct-reference-now.md +88 -0
  44. package/commands/dashboard.md +144 -0
  45. package/commands/deck.md +117 -0
  46. package/commands/deep-grade.md +214 -0
  47. package/commands/diagnose.md +131 -0
  48. package/commands/diagnostics.md +195 -0
  49. package/commands/dial-memory-refresh.md +113 -0
  50. package/commands/diffusion.md +129 -0
  51. package/commands/discover.md +221 -0
  52. package/commands/doctor.md +271 -0
  53. package/commands/dogfood-flush.md +130 -0
  54. package/commands/dominant-designs.md +76 -0
  55. package/commands/eureka.md +315 -0
  56. package/commands/explain-decision.md +135 -0
  57. package/commands/explore-domains.md +78 -0
  58. package/commands/explore-futures.md +67 -0
  59. package/commands/explore-opportunity.md +172 -0
  60. package/commands/explore-trends.md +78 -0
  61. package/commands/export.md +128 -0
  62. package/commands/feynman-timeline-refresh.md +102 -0
  63. package/commands/file-meeting.md +1195 -0
  64. package/commands/find-analogies.md +369 -0
  65. package/commands/find-bottlenecks.md +108 -0
  66. package/commands/find-connections.md +111 -0
  67. package/commands/funding.md +114 -0
  68. package/commands/futures.md +128 -0
  69. package/commands/grade-grant.md +297 -0
  70. package/commands/grade.md +257 -0
  71. package/commands/graph.md +218 -0
  72. package/commands/hat-briefing.md +163 -0
  73. package/commands/heal.md +72 -0
  74. package/commands/help.md +176 -0
  75. package/commands/hmi-status.md +75 -0
  76. package/commands/ignite.md +229 -0
  77. package/commands/ingest-methodology.md +128 -0
  78. package/commands/intel-pipeline.md +133 -0
  79. package/commands/jtbd.md +262 -0
  80. package/commands/leadership.md +113 -0
  81. package/commands/lean-canvas.md +74 -0
  82. package/commands/macro-trends.md +88 -0
  83. package/commands/map-unknowns.md +76 -0
  84. package/commands/memory-cortex-reach.md +79 -0
  85. package/commands/memory.md +213 -0
  86. package/commands/models.md +200 -0
  87. package/commands/mos-reason.md +489 -0
  88. package/commands/mos.md +162 -0
  89. package/commands/mullins.md +155 -0
  90. package/commands/mva-brief.md +86 -0
  91. package/commands/mva-option.md +119 -0
  92. package/commands/mva-report.md +76 -0
  93. package/commands/new-project.md +633 -0
  94. package/commands/new-surface.md +116 -0
  95. package/commands/onboard.md +489 -0
  96. package/commands/operator.md +168 -0
  97. package/commands/opportunities.md +177 -0
  98. package/commands/organize.md +74 -0
  99. package/commands/persona.md +276 -0
  100. package/commands/pipeline.md +167 -0
  101. package/commands/present.md +125 -0
  102. package/commands/publish.md +227 -0
  103. package/commands/pws-brain.md +154 -0
  104. package/commands/qualify-opportunity.md +113 -0
  105. package/commands/query.md +70 -0
  106. package/commands/radar.md +110 -0
  107. package/commands/reanalyze.md +124 -0
  108. package/commands/research.md +467 -0
  109. package/commands/room.md +385 -0
  110. package/commands/rooms.md +682 -0
  111. package/commands/root-cause.md +77 -0
  112. package/commands/rs-experts.md +153 -0
  113. package/commands/rs-explain.md +134 -0
  114. package/commands/rs-fetch.md +119 -0
  115. package/commands/rs-thesis.md +131 -0
  116. package/commands/scenario-plan.md +80 -0
  117. package/commands/scheduled-tasks.md +308 -0
  118. package/commands/score-innovation.md +78 -0
  119. package/commands/scout.md +379 -0
  120. package/commands/setup.md +658 -0
  121. package/commands/show.md +71 -0
  122. package/commands/skill.md +108 -0
  123. package/commands/snapshot.md +179 -0
  124. package/commands/speakers.md +118 -0
  125. package/commands/splash.md +55 -0
  126. package/commands/stance.md +91 -0
  127. package/commands/status.md +109 -0
  128. package/commands/structure-argument.md +82 -0
  129. package/commands/suggest-next.md +141 -0
  130. package/commands/systems-thinking.md +224 -0
  131. package/commands/think-hats.md +86 -0
  132. package/commands/trending-to-absurd.md +151 -0
  133. package/commands/update.md +256 -0
  134. package/commands/user-needs.md +77 -0
  135. package/commands/validate.md +77 -0
  136. package/commands/value-proposition.md +116 -0
  137. package/commands/vault.md +330 -0
  138. package/commands/visualize.md +71 -0
  139. package/commands/whitespace.md +541 -0
  140. package/commands/wiki.md +96 -0
  141. package/data/ROOM.md +47 -0
  142. package/data/brain-census.generated.json +2617 -0
  143. package/data/brain-orchestration-projection.json +4973 -0
  144. package/data/brain-packet-schema.json +545 -0
  145. package/data/brain-surface-contract.json +32 -0
  146. package/data/capability-ledger.json +391 -0
  147. package/data/capability-map-registry.json +23 -0
  148. package/data/command-registry.json +2433 -0
  149. package/data/connector-coverage-ledger.json +1618 -0
  150. package/data/connector-out-of-spine-allowlist.json +71 -0
  151. package/data/connector-registry.json +3637 -0
  152. package/data/corpus-stats-source.json +11 -0
  153. package/data/corpus-stats.generated.json +10 -0
  154. package/data/cross-domain-analogues.json +15 -0
  155. package/data/deck-aliases.json +6 -0
  156. package/data/deck-styles.json +85 -0
  157. package/data/deployment-surfaces.json +69 -0
  158. package/data/dispatch-framework-map.json +18 -0
  159. package/data/doctor-modules.json +206 -0
  160. package/data/dual-graph-health-baseline.json +12 -0
  161. package/data/eureka-critic-tags.json +32 -0
  162. package/data/first-reward-surfaces.json +66 -0
  163. package/data/first-touch-surfaces.json +60 -0
  164. package/data/flagship-floor-set.json +37 -0
  165. package/data/framework-names.json +121 -0
  166. package/data/grant-rubric-fixtures/early-stage-pre-seed.json +18 -0
  167. package/data/grant-rubric-fixtures/early-stage-round-a.json +18 -0
  168. package/data/grant-rubric-fixtures/early-stage-seed.json +18 -0
  169. package/data/grant-rubric-fixtures/hybrid-seed-incentive.json +18 -0
  170. package/data/grant-rubric-fixtures/rd-fund.json +18 -0
  171. package/data/grant-rubric-fixtures/regional-innovation-incubators.json +18 -0
  172. package/data/grant-rubric-fixtures/technology-incubators.json +18 -0
  173. package/data/grant-rubric-fixtures/tnufa.json +167 -0
  174. package/data/grant-rubric-schema.json +33 -0
  175. package/data/harness-fixtures/converged-room/.context/ROOM.md +13 -0
  176. package/data/harness-fixtures/converged-room/.intelligence/ROOM.md +13 -0
  177. package/data/harness-fixtures/converged-room/.snapshots/ROOM.md +13 -0
  178. package/data/harness-fixtures/converged-room/MINTO.md +19 -0
  179. package/data/harness-fixtures/converged-room/STATE.md +73 -0
  180. package/data/harness-fixtures/converged-room/USER.md +23 -0
  181. package/data/harness-fixtures/converged-room/assets/ROOM.md +13 -0
  182. package/data/harness-fixtures/converged-room/business-model/CONTEXT.md +32 -0
  183. package/data/harness-fixtures/converged-room/business-model/ROOM.md +36 -0
  184. package/data/harness-fixtures/converged-room/competitive-analysis/CONTEXT.md +33 -0
  185. package/data/harness-fixtures/converged-room/competitive-analysis/ROOM.md +35 -0
  186. package/data/harness-fixtures/converged-room/financial-model/CONTEXT.md +30 -0
  187. package/data/harness-fixtures/converged-room/financial-model/ROOM.md +35 -0
  188. package/data/harness-fixtures/converged-room/funding/CONTEXT.md +41 -0
  189. package/data/harness-fixtures/converged-room/funding/ROOM.md +35 -0
  190. package/data/harness-fixtures/converged-room/legal-ip/CONTEXT.md +30 -0
  191. package/data/harness-fixtures/converged-room/legal-ip/ROOM.md +35 -0
  192. package/data/harness-fixtures/converged-room/market-analysis/CONTEXT.md +32 -0
  193. package/data/harness-fixtures/converged-room/market-analysis/ROOM.md +35 -0
  194. package/data/harness-fixtures/converged-room/opportunity-bank/CONTEXT.md +39 -0
  195. package/data/harness-fixtures/converged-room/opportunity-bank/ROOM.md +36 -0
  196. package/data/harness-fixtures/converged-room/problem-definition/CONTEXT.md +32 -0
  197. package/data/harness-fixtures/converged-room/problem-definition/ROOM.md +36 -0
  198. package/data/harness-fixtures/converged-room/references/ROOM.md +13 -0
  199. package/data/harness-fixtures/converged-room/references/SECTION-SCHEMA.md +213 -0
  200. package/data/harness-fixtures/converged-room/references/SUB-SCHEMAS.md +91 -0
  201. package/data/harness-fixtures/converged-room/solution-design/CONTEXT.md +36 -0
  202. package/data/harness-fixtures/converged-room/solution-design/ROOM.md +36 -0
  203. package/data/harness-fixtures/converged-room/strategy/CONTEXT.md +35 -0
  204. package/data/harness-fixtures/converged-room/strategy/ROOM.md +35 -0
  205. package/data/harness-fixtures/converged-room/team/ROOM.md +13 -0
  206. package/data/harness-fixtures/converged-room/team-execution/CONTEXT.md +36 -0
  207. package/data/harness-fixtures/converged-room/team-execution/ROOM.md +35 -0
  208. package/data/harness-manifest.json +74 -0
  209. package/data/harness-policies/CONTEXT.md +55 -0
  210. package/data/harness-policies/_schema.json +42 -0
  211. package/data/harness-policies/contract-parity-larry.json +63 -0
  212. package/data/harness-policies/gate-card-fire.json +13 -0
  213. package/data/harness-policies/gate-graph-derive-health.json +13 -0
  214. package/data/harness-policies/gate-shape-declaration.json +13 -0
  215. package/data/harness-policies/gate-tool-honesty.json +13 -0
  216. package/data/harness-policies/gate-worktree-hygiene.json +13 -0
  217. package/data/harness-policies/memory-write-policy.json +28 -0
  218. package/data/harness-policies/registry-drift.json +13 -0
  219. package/data/harness-policies/release-payload-ceiling.json +13 -0
  220. package/data/harness-policies/voice-backend-noun-free.json +13 -0
  221. package/data/harness-policies/voice-fork-as-card.json +13 -0
  222. package/data/harness-policies/voice-glyph-present.json +13 -0
  223. package/data/harness-policies/voice-hyphens-only.json +13 -0
  224. package/data/help-groups.json +236 -0
  225. package/data/hitl-shape-backfill.json +777 -0
  226. package/data/hitl-shape-declaration-fixtures/invalid-bad-shape.json +5 -0
  227. package/data/hitl-shape-declaration-fixtures/invalid-missing-why.json +4 -0
  228. package/data/hitl-shape-declaration-fixtures/invalid-ranker-contradiction.json +6 -0
  229. package/data/hitl-shape-declaration-fixtures/invalid-skill-gap.json +3 -0
  230. package/data/hitl-shape-declaration-fixtures/valid-multi-stage.json +7 -0
  231. package/data/hitl-shape-declaration-fixtures/valid-single-shape.json +5 -0
  232. package/data/hitl-shape-declaration-fixtures/valid-skill-exempt.json +5 -0
  233. package/data/hitl-shape-declaration-schema.json +34 -0
  234. package/data/hitl-stages-fixtures/bono.json +10 -0
  235. package/data/hitl-stages-fixtures/pipeline-1.json +9 -0
  236. package/data/hitl-stages-fixtures/pipeline-2.json +9 -0
  237. package/data/hitl-stages-fixtures/pipeline-3.json +10 -0
  238. package/data/hitl-stages-fixtures/research.json +10 -0
  239. package/data/hitl-stages-fixtures/rs-convergence.json +10 -0
  240. package/data/hitl-stages-fixtures/rs-family.json +11 -0
  241. package/data/hitl-stages-fixtures/rs-reverse-salient.json +10 -0
  242. package/data/hitl-stages-fixtures/trending-to-absurd.json +11 -0
  243. package/data/hitl-stages-schema.json +26 -0
  244. package/data/mcp-tool-connectors.json +464 -0
  245. package/data/mva-agent-prompts.json +31 -0
  246. package/data/mva-deck-template.html +15 -0
  247. package/data/mva-heuristic-keywords.json +35 -0
  248. package/data/orchestration-command-ledger.json +576 -0
  249. package/data/orchestration-unwired-allowlist.json +6 -0
  250. package/data/portfolio-ahp-matrix.json +16 -0
  251. package/data/publish-needs.json +76 -0
  252. package/data/render-coverage-registry.json +1152 -0
  253. package/data/research-sources.json +58 -0
  254. package/data/roadmap-type-chains.json +28 -0
  255. package/data/room-blueprints.json +156 -0
  256. package/data/subagent-dispatch-grants.json +150 -0
  257. package/hooks/hooks.json +493 -0
  258. package/hooks/run-hook.cmd +64 -0
  259. package/lib/__init__.py +0 -0
  260. package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
  261. package/lib/agents/auto-explore-agent.cjs +1163 -0
  262. package/lib/agents/mva/brain-classic-traps.cjs +55 -0
  263. package/lib/agents/mva/brain-cross-domain.cjs +79 -0
  264. package/lib/agents/mva/brain-similar-ventures.cjs +93 -0
  265. package/lib/agents/mva/dashboard-graph-neighborhood.cjs +72 -0
  266. package/lib/agents/mva/index.cjs +42 -0
  267. package/lib/agents/mva/six-hats-red-black.cjs +137 -0
  268. package/lib/agents/mva/tavily-funding-scan.cjs +147 -0
  269. package/lib/agents/mva/test-all-six-agents.cjs +467 -0
  270. package/lib/agents/reverse-salient-agent.cjs +757 -0
  271. package/lib/agents/tension-hook-agent.cjs +586 -0
  272. package/lib/brain/ROOM.md +44 -0
  273. package/lib/brain/chain-recommender.cjs +784 -0
  274. package/lib/brain/curation-batch.cjs +519 -0
  275. package/lib/brain/framework-chain-slice.cjs +252 -0
  276. package/lib/brain/hypergraph-event-schema.cjs +184 -0
  277. package/lib/chat/chat-context.js +185 -0
  278. package/lib/chat/chat-panel.js +721 -0
  279. package/lib/chat/fabric-chat.cjs +288 -0
  280. package/lib/chat/generative-tools.js +219 -0
  281. package/lib/conversation/ROOM.md +39 -0
  282. package/lib/conversation/classifier-rules.json +38 -0
  283. package/lib/conversation/classifier.cjs +264 -0
  284. package/lib/conversation/operator-epistemic-cap.test.cjs +156 -0
  285. package/lib/conversation/operator.cjs +492 -0
  286. package/lib/conversation/operator.test.cjs +160 -0
  287. package/lib/copy/115-spec-strings.cjs +55 -0
  288. package/lib/core/__init__.py +0 -0
  289. package/lib/core/__nav-stub.cjs +14 -0
  290. package/lib/core/__pycache__/__init__.cpython-312.pyc +0 -0
  291. package/lib/core/__pycache__/rs-math.cpython-312.pyc +0 -0
  292. package/lib/core/__pycache__/rs_cache.cpython-312.pyc +0 -0
  293. package/lib/core/__pycache__/rs_corpus.cpython-312.pyc +0 -0
  294. package/lib/core/__pycache__/rs_corpus_exclude.cpython-312.pyc +0 -0
  295. package/lib/core/__pycache__/rs_hybrid.cpython-312.pyc +0 -0
  296. package/lib/core/__pycache__/rs_math.cpython-312.pyc +0 -0
  297. package/lib/core/__pycache__/rs_rooms.cpython-312.pyc +0 -0
  298. package/lib/core/abstraction-gate.cjs +133 -0
  299. package/lib/core/act-jtbd-blurb.cjs +231 -0
  300. package/lib/core/artifact-id.cjs +148 -0
  301. package/lib/core/asset-ops.cjs +151 -0
  302. package/lib/core/auto-commit-throttle.cjs +129 -0
  303. package/lib/core/bearer-token.cjs +199 -0
  304. package/lib/core/behavioral/observation-schema.cjs +86 -0
  305. package/lib/core/bono/cell-fanout.cjs +305 -0
  306. package/lib/core/bono/debate-composition.cjs +495 -0
  307. package/lib/core/bono/hat-governance.cjs +367 -0
  308. package/lib/core/bono/persona-research.cjs +288 -0
  309. package/lib/core/bono/reviewer-governance.cjs +331 -0
  310. package/lib/core/brain-client.cjs +2365 -0
  311. package/lib/core/brain-derivation-prompts.cjs +331 -0
  312. package/lib/core/brain-derivation-queue.cjs +535 -0
  313. package/lib/core/brain-derivation.cjs +740 -0
  314. package/lib/core/brain-md-schema.cjs +528 -0
  315. package/lib/core/brain-md-staleness.cjs +357 -0
  316. package/lib/core/brain-response-sanitize.cjs +396 -0
  317. package/lib/core/breakthrough/canary.cjs +134 -0
  318. package/lib/core/breakthrough/canary.test.cjs +136 -0
  319. package/lib/core/breakthrough/detectors.cjs +359 -0
  320. package/lib/core/breakthrough/detectors.test.cjs +333 -0
  321. package/lib/core/breakthrough/ethics-fence.cjs +129 -0
  322. package/lib/core/breakthrough/ethics-fence.test.cjs +178 -0
  323. package/lib/core/breakthrough/resurfacing.cjs +150 -0
  324. package/lib/core/breakthrough/resurfacing.test.cjs +233 -0
  325. package/lib/core/breakthrough/review-queue.cjs +168 -0
  326. package/lib/core/breakthrough/review-queue.test.cjs +160 -0
  327. package/lib/core/breakthrough/scanner-d17-d18.test.cjs +229 -0
  328. package/lib/core/breakthrough/scanner.cjs +435 -0
  329. package/lib/core/breakthrough/scanner.test.cjs +267 -0
  330. package/lib/core/breakthrough/schema.cjs +180 -0
  331. package/lib/core/breakthrough/schema.test.cjs +256 -0
  332. package/lib/core/breakthrough/scoring.cjs +293 -0
  333. package/lib/core/breakthrough/scoring.test.cjs +423 -0
  334. package/lib/core/breakthrough/verb-dispatch.cjs +230 -0
  335. package/lib/core/breakthrough/verb-dispatch.test.cjs +185 -0
  336. package/lib/core/breakthrough/voice-scaffold.cjs +249 -0
  337. package/lib/core/breakthrough/voice-scaffold.test.cjs +251 -0
  338. package/lib/core/bridge-writer.cjs +477 -0
  339. package/lib/core/cache-prune.cjs +314 -0
  340. package/lib/core/card-fire-gate.cjs +107 -0
  341. package/lib/core/card-fire-sidechannel.cjs +518 -0
  342. package/lib/core/chain-executor.cjs +939 -0
  343. package/lib/core/chain-retry.cjs +214 -0
  344. package/lib/core/chain-step-dispatcher.cjs +397 -0
  345. package/lib/core/chat-context-builder.cjs +253 -0
  346. package/lib/core/check-plugin-enabled.cjs +145 -0
  347. package/lib/core/close-loop-writer.cjs +492 -0
  348. package/lib/core/command-registration-check.cjs +246 -0
  349. package/lib/core/correlation-label-index.cjs +230 -0
  350. package/lib/core/correlation.cjs +112 -0
  351. package/lib/core/coverage-monitor.cjs +183 -0
  352. package/lib/core/coverage-rollup.cjs +232 -0
  353. package/lib/core/cross-room-aggregator.cjs +1127 -0
  354. package/lib/core/cross-room-store.cjs +292 -0
  355. package/lib/core/cross-room-triggers.cjs +222 -0
  356. package/lib/core/daily-briefing.cjs +438 -0
  357. package/lib/core/decision-axes.cjs +178 -0
  358. package/lib/core/decision-capture.cjs +618 -0
  359. package/lib/core/deck-design-rules.cjs +211 -0
  360. package/lib/core/deep-links.cjs +82 -0
  361. package/lib/core/directive-envelope.cjs +217 -0
  362. package/lib/core/directive-envelope.test.cjs +225 -0
  363. package/lib/core/dispatch-optimizer.cjs +354 -0
  364. package/lib/core/doc-text-extractor.cjs +133 -0
  365. package/lib/core/doctor/capability-ledger-module.cjs +170 -0
  366. package/lib/core/doctor/card-fire-health-module.cjs +159 -0
  367. package/lib/core/doctor/cascade-rooms-active-module.cjs +127 -0
  368. package/lib/core/doctor/cascade-rooms-module.cjs +184 -0
  369. package/lib/core/doctor/class-m-brain-smoke.cjs +479 -0
  370. package/lib/core/doctor/class-m-brain-smoke.test.cjs +448 -0
  371. package/lib/core/doctor/class-s-eureka-smoke.cjs +380 -0
  372. package/lib/core/doctor/deployment-surfaces-module.cjs +408 -0
  373. package/lib/core/doctor/deprecated-usage-module.cjs +155 -0
  374. package/lib/core/doctor/eureka-fts-health-module.cjs +236 -0
  375. package/lib/core/doctor/graph-derive-heal-retrofit-module.cjs +148 -0
  376. package/lib/core/doctor/graph-derive-health-module.cjs +486 -0
  377. package/lib/core/doctor/install-incomplete-module.cjs +320 -0
  378. package/lib/core/doctor/install-state-module.cjs +503 -0
  379. package/lib/core/doctor/mcp-surface-module.cjs +369 -0
  380. package/lib/core/doctor/mode-select-checkpoint-module.cjs +113 -0
  381. package/lib/core/doctor/plugin-enabled-state-module.cjs +86 -0
  382. package/lib/core/doctor/room-graph-density-module.cjs +181 -0
  383. package/lib/core/doctor/room-md-module.cjs +198 -0
  384. package/lib/core/doctor/shared.cjs +555 -0
  385. package/lib/core/doctor/stale-first-touch-copy-module.cjs +83 -0
  386. package/lib/core/doctor/statusline-visibility-module.cjs +295 -0
  387. package/lib/core/doctor/ui-compliance-module.cjs +223 -0
  388. package/lib/core/doctor/umbilical-module.cjs +486 -0
  389. package/lib/core/doctor/verify-surface-module.cjs +82 -0
  390. package/lib/core/doctor/voice-style-log-module.cjs +146 -0
  391. package/lib/core/domain-insight-sweep.cjs +224 -0
  392. package/lib/core/drift-baseline.cjs +362 -0
  393. package/lib/core/drift-runtime-reachability.cjs +283 -0
  394. package/lib/core/dual-path-detector.cjs +84 -0
  395. package/lib/core/dual-path-detector.test.cjs +334 -0
  396. package/lib/core/enrichment-queue.cjs +636 -0
  397. package/lib/core/eureka/ahp-weights.cjs +232 -0
  398. package/lib/core/eureka/analogy-fitness.cjs +326 -0
  399. package/lib/core/eureka/compression-meter.cjs +165 -0
  400. package/lib/core/eureka/embedding-classifier.cjs +226 -0
  401. package/lib/core/eureka/embedding-spine.cjs +563 -0
  402. package/lib/core/eureka/entity-classifier.cjs +232 -0
  403. package/lib/core/eureka/entity-extractor.cjs +356 -0
  404. package/lib/core/eureka/eureka-enable.cjs +228 -0
  405. package/lib/core/eureka/eureka-offer.cjs +225 -0
  406. package/lib/core/eureka/eureka-reach-runner.cjs +430 -0
  407. package/lib/core/eureka/explore-chain.cjs +834 -0
  408. package/lib/core/eureka/explored-artifact.cjs +456 -0
  409. package/lib/core/eureka/fts-index-lifecycle.cjs +265 -0
  410. package/lib/core/eureka/grade-grant-examine.cjs +544 -0
  411. package/lib/core/eureka/grade-grant.cjs +596 -0
  412. package/lib/core/eureka/hybrid-retrieve.cjs +256 -0
  413. package/lib/core/eureka/lateral-engine-adapter.cjs +118 -0
  414. package/lib/core/eureka/lexical-overlap.cjs +98 -0
  415. package/lib/core/eureka/online-pattern-query.cjs +142 -0
  416. package/lib/core/eureka/opportunity-harvest.cjs +752 -0
  417. package/lib/core/eureka/opportunity-statement.cjs +519 -0
  418. package/lib/core/eureka/portfolio-dimensions.cjs +255 -0
  419. package/lib/core/eureka/qualify-opportunity.cjs +607 -0
  420. package/lib/core/eureka/reasoning-mode.cjs +481 -0
  421. package/lib/core/eureka/report-html.cjs +368 -0
  422. package/lib/core/eureka/research-filing.cjs +547 -0
  423. package/lib/core/eureka/room-native-substrate.cjs +343 -0
  424. package/lib/core/eureka/tail-quadrant.cjs +177 -0
  425. package/lib/core/eureka/tri-modal-index.cjs +564 -0
  426. package/lib/core/eureka/vector-store.cjs +414 -0
  427. package/lib/core/eureka-critic.cjs +733 -0
  428. package/lib/core/eureka-deps-resolver.cjs +179 -0
  429. package/lib/core/expert-genesis.cjs +437 -0
  430. package/lib/core/expert-library.cjs +303 -0
  431. package/lib/core/exports-log.cjs +79 -0
  432. package/lib/core/feynman/ROOM.md +25 -0
  433. package/lib/core/feynman/dial-memory-renderer.cjs +279 -0
  434. package/lib/core/feynman/dial-memory-runner.cjs +173 -0
  435. package/lib/core/feynman/feynman-seed-writer.cjs +187 -0
  436. package/lib/core/feynman/timeline-renderer.cjs +197 -0
  437. package/lib/core/feynman/timeline-runner.cjs +281 -0
  438. package/lib/core/feynman-minto-invariants.cjs +609 -0
  439. package/lib/core/findings-wirer.cjs +360 -0
  440. package/lib/core/first-touch-version-stamper.cjs +113 -0
  441. package/lib/core/folder-memory-async.cjs +424 -0
  442. package/lib/core/folder-memory-shared.cjs +890 -0
  443. package/lib/core/folder-memory.cjs +546 -0
  444. package/lib/core/framework-chain-composer.cjs +583 -0
  445. package/lib/core/frontmatter-schemas.cjs +468 -0
  446. package/lib/core/fusion-router.cjs +540 -0
  447. package/lib/core/futures/causal-cue.cjs +91 -0
  448. package/lib/core/futures/orchestrator.cjs +1391 -0
  449. package/lib/core/futures/subsystem-render.cjs +164 -0
  450. package/lib/core/gate-relevance.cjs +278 -0
  451. package/lib/core/git-ops.cjs +141 -0
  452. package/lib/core/graph-backfill.cjs +562 -0
  453. package/lib/core/graph-candidate-producer.cjs +235 -0
  454. package/lib/core/graph-derivation.cjs +546 -0
  455. package/lib/core/graph-derive-classifier.cjs +352 -0
  456. package/lib/core/graph-ops.cjs +274 -0
  457. package/lib/core/graph-refine-loop.cjs +194 -0
  458. package/lib/core/graph-self-heal.cjs +289 -0
  459. package/lib/core/greeting-intent-detector.cjs +201 -0
  460. package/lib/core/grill-engine.cjs +459 -0
  461. package/lib/core/hat-persistence.cjs +274 -0
  462. package/lib/core/hsi-engine.cjs +439 -0
  463. package/lib/core/hsi-lsa.cjs +246 -0
  464. package/lib/core/hsi-spectral.cjs +554 -0
  465. package/lib/core/hsi-to-graph.test.cjs +168 -0
  466. package/lib/core/icm-forest.cjs +703 -0
  467. package/lib/core/ignite-branch-gate.cjs +66 -0
  468. package/lib/core/index.cjs +60 -0
  469. package/lib/core/insight-sensors.cjs +1000 -0
  470. package/lib/core/install-state.cjs +242 -0
  471. package/lib/core/integration-registry.cjs +232 -0
  472. package/lib/core/intel-pipeline.cjs +545 -0
  473. package/lib/core/intelligence-cascade.cjs +852 -0
  474. package/lib/core/issue-tree.cjs +269 -0
  475. package/lib/core/larry-thinness-acknowledgment.cjs +64 -0
  476. package/lib/core/larry-thinness-acknowledgment.test.cjs +97 -0
  477. package/lib/core/lazygraph-ops.cjs +1453 -0
  478. package/lib/core/lens-engine.cjs +434 -0
  479. package/lib/core/leverage-scan.cjs +218 -0
  480. package/lib/core/llm-name-suggester.cjs +194 -0
  481. package/lib/core/llm-name-suggester.test.cjs +132 -0
  482. package/lib/core/lru-cache.cjs +139 -0
  483. package/lib/core/mcp-dep-heal.cjs +475 -0
  484. package/lib/core/mcp-dep-heal.test.cjs +253 -0
  485. package/lib/core/mcp-profiles.cjs +185 -0
  486. package/lib/core/meeting-ops.cjs +54 -0
  487. package/lib/core/memory/governance-candidate-raiser.cjs +205 -0
  488. package/lib/core/memory/governance-candidate.cjs +95 -0
  489. package/lib/core/memory/reconcile-memory-runner.cjs +653 -0
  490. package/lib/core/memory-ops.cjs +641 -0
  491. package/lib/core/meter/gate-density-reader.cjs +112 -0
  492. package/lib/core/meter/transfer-reader.cjs +276 -0
  493. package/lib/core/meter/two-gauge.cjs +245 -0
  494. package/lib/core/methodology-ingest.cjs +346 -0
  495. package/lib/core/metrics/larryreach-loop-health.cjs +142 -0
  496. package/lib/core/migration-snapshot.cjs +287 -0
  497. package/lib/core/migration-snapshot.test.cjs +174 -0
  498. package/lib/core/migrations/ROOM.md +33 -0
  499. package/lib/core/migrations/phase-109-nodes-provenance.cjs +400 -0
  500. package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
  501. package/lib/core/migrations/phase-160-nodes-bitemporal.cjs +168 -0
  502. package/lib/core/migrations/phase-160-nodes-bitemporal.test.cjs +140 -0
  503. package/lib/core/migrations/phase-162-section-nodes.cjs +156 -0
  504. package/lib/core/migrations/phase-222-ranker-weights.cjs +62 -0
  505. package/lib/core/migrations/phase-224-edge-review-status.cjs +87 -0
  506. package/lib/core/mindrian-brain-shim.test.cjs +221 -0
  507. package/lib/core/mode-select-sidechannel.cjs +259 -0
  508. package/lib/core/model-profiles.cjs +246 -0
  509. package/lib/core/mullins-scaffold.cjs +258 -0
  510. package/lib/core/mullins-scaffold.test.cjs +128 -0
  511. package/lib/core/mva-agent-contract.cjs +170 -0
  512. package/lib/core/mva-agent-contract.test.cjs +169 -0
  513. package/lib/core/mva-budget.cjs +75 -0
  514. package/lib/core/mva-budget.test.cjs +68 -0
  515. package/lib/core/mva-classifier.cjs +392 -0
  516. package/lib/core/mva-classifier.test.cjs +248 -0
  517. package/lib/core/mva-deck-builder.cjs +452 -0
  518. package/lib/core/mva-deck-builder.test.cjs +287 -0
  519. package/lib/core/mva-detect.smoke.test.cjs +209 -0
  520. package/lib/core/mva-dispatcher.cjs +110 -0
  521. package/lib/core/mva-dispatcher.test.cjs +216 -0
  522. package/lib/core/mva-option-router.cjs +414 -0
  523. package/lib/core/mva-option-router.test.cjs +483 -0
  524. package/lib/core/mva-orchestrator.cjs +365 -0
  525. package/lib/core/mva-orchestrator.test.cjs +916 -0
  526. package/lib/core/mva-progressive-renderer.cjs +194 -0
  527. package/lib/core/mva-progressive-renderer.test.cjs +157 -0
  528. package/lib/core/mva-rule-linter.cjs +458 -0
  529. package/lib/core/mva-rule-linter.test.cjs +484 -0
  530. package/lib/core/mva-state.cjs +159 -0
  531. package/lib/core/mva-telemetry.cjs +58 -0
  532. package/lib/core/mva-telemetry.test.cjs +196 -0
  533. package/lib/core/mva-vercel-deploy.cjs +168 -0
  534. package/lib/core/mva-vercel-deploy.test.cjs +239 -0
  535. package/lib/core/nav-dial.cjs +440 -0
  536. package/lib/core/navigation/ROOM.md +15 -0
  537. package/lib/core/navigation/abstraction-claim.cjs +185 -0
  538. package/lib/core/navigation/calibration-gate.cjs +284 -0
  539. package/lib/core/navigation/calibration-log.cjs +141 -0
  540. package/lib/core/navigation/confirm-node.cjs +73 -0
  541. package/lib/core/navigation/dashboard-helpers.cjs +145 -0
  542. package/lib/core/navigation/edges.cjs +1150 -0
  543. package/lib/core/navigation/evidence-claim.cjs +186 -0
  544. package/lib/core/navigation/explanation.cjs +48 -0
  545. package/lib/core/navigation/file-evidence-readback.cjs +242 -0
  546. package/lib/core/navigation/focus.cjs +155 -0
  547. package/lib/core/navigation/get-domains-for-trends.cjs +277 -0
  548. package/lib/core/navigation/governance.cjs +101 -0
  549. package/lib/core/navigation/grant-rubric.cjs +218 -0
  550. package/lib/core/navigation/graph-export.cjs +325 -0
  551. package/lib/core/navigation/ingestion.cjs +109 -0
  552. package/lib/core/navigation/insights-stale.test.cjs +127 -0
  553. package/lib/core/navigation/insights.cjs +574 -0
  554. package/lib/core/navigation/lens-nodes.cjs +315 -0
  555. package/lib/core/navigation/memory-artifacts.cjs +437 -0
  556. package/lib/core/navigation/memory-cortex-packet.cjs +274 -0
  557. package/lib/core/navigation/memory-events.cjs +811 -0
  558. package/lib/core/navigation/neighborhood.cjs +79 -0
  559. package/lib/core/navigation/packet.cjs +420 -0
  560. package/lib/core/navigation/planning-artifacts.cjs +219 -0
  561. package/lib/core/navigation/projections.cjs +295 -0
  562. package/lib/core/navigation/ranker-weights.cjs +133 -0
  563. package/lib/core/navigation/reasoning-write.cjs +211 -0
  564. package/lib/core/navigation/reconcile-guard.cjs +98 -0
  565. package/lib/core/navigation/reified-claim.cjs +287 -0
  566. package/lib/core/navigation/research-preflight.cjs +156 -0
  567. package/lib/core/navigation/room-birth.cjs +1213 -0
  568. package/lib/core/navigation/room-context.cjs +380 -0
  569. package/lib/core/navigation/room-home.cjs +142 -0
  570. package/lib/core/navigation/spine-events.cjs +548 -0
  571. package/lib/core/navigation/synthetic-expert.cjs +177 -0
  572. package/lib/core/navigation/transitions.cjs +253 -0
  573. package/lib/core/navigation/typed-claim.cjs +208 -0
  574. package/lib/core/navigation/typed-domain.cjs +249 -0
  575. package/lib/core/navigation/typed-entity.cjs +236 -0
  576. package/lib/core/navigation/typed-frame.cjs +257 -0
  577. package/lib/core/navigation/typed-open-question.cjs +130 -0
  578. package/lib/core/navigation/typed-opportunity.cjs +418 -0
  579. package/lib/core/navigation-engine-offer.cjs +776 -0
  580. package/lib/core/navigation-engine-shared.cjs +256 -0
  581. package/lib/core/navigation-engine.cjs +1696 -0
  582. package/lib/core/navigation.cjs +686 -0
  583. package/lib/core/nl-graph-queries.cjs +164 -0
  584. package/lib/core/node-insert-epistemic.test.cjs +212 -0
  585. package/lib/core/node-insert-overrides.test.cjs +273 -0
  586. package/lib/core/node-insert.cjs +274 -0
  587. package/lib/core/npm-cli-resolve.cjs +151 -0
  588. package/lib/core/npm-cli-resolve.test.cjs +153 -0
  589. package/lib/core/npm-install-lock.cjs +326 -0
  590. package/lib/core/npm-install-lock.test.cjs +379 -0
  591. package/lib/core/numeric/sklearn-stopwords-v1.json +325 -0
  592. package/lib/core/numeric/svd.cjs +377 -0
  593. package/lib/core/numeric/tfidf.cjs +241 -0
  594. package/lib/core/offer-presenter.cjs +406 -0
  595. package/lib/core/opportunity-extractor.cjs +183 -0
  596. package/lib/core/opportunity-ops.cjs +1423 -0
  597. package/lib/core/orchestration-candidate-lift.cjs +284 -0
  598. package/lib/core/part8-egress-guard.cjs +536 -0
  599. package/lib/core/part8-egress-guard.test.cjs +194 -0
  600. package/lib/core/part8-egress-ontology.cjs +174 -0
  601. package/lib/core/part8-egress-ontology.test.cjs +133 -0
  602. package/lib/core/persona-ops.cjs +692 -0
  603. package/lib/core/persona-override.cjs +327 -0
  604. package/lib/core/persona-taxonomy.cjs +328 -0
  605. package/lib/core/pinecone-inference.cjs +176 -0
  606. package/lib/core/pitch-feedback-schemas.cjs +303 -0
  607. package/lib/core/planning/artifact-brain-packet.cjs +212 -0
  608. package/lib/core/planning/reconcile-runner.cjs +347 -0
  609. package/lib/core/platform-gates.cjs +120 -0
  610. package/lib/core/platform.cjs +257 -0
  611. package/lib/core/proactive-intelligence.cjs +528 -0
  612. package/lib/core/problem-type-router.cjs +315 -0
  613. package/lib/core/publish-needs-default-lane.cjs +110 -0
  614. package/lib/core/ralph-loop-gate.cjs +48 -0
  615. package/lib/core/reader/ab-harness.cjs +177 -0
  616. package/lib/core/reader/decide-projection-reader.cjs +358 -0
  617. package/lib/core/reasoning-ops.cjs +639 -0
  618. package/lib/core/recipe-maps.cjs +442 -0
  619. package/lib/core/recovery/case-file.cjs +358 -0
  620. package/lib/core/recovery/controller.cjs +1008 -0
  621. package/lib/core/recovery/dispatcher.cjs +533 -0
  622. package/lib/core/recovery/result-semantics.cjs +488 -0
  623. package/lib/core/recovery/stage-envelope.cjs +338 -0
  624. package/lib/core/refusal-messaging.cjs +569 -0
  625. package/lib/core/refusal-messaging.test.cjs +220 -0
  626. package/lib/core/repo-version.cjs +134 -0
  627. package/lib/core/research-cache.cjs +165 -0
  628. package/lib/core/research-cache.test.cjs +137 -0
  629. package/lib/core/research-context-extractor.cjs +283 -0
  630. package/lib/core/research-corpus.cjs +814 -0
  631. package/lib/core/research-corpus.test.cjs +280 -0
  632. package/lib/core/research-filing-selector.cjs +189 -0
  633. package/lib/core/resolve-active-room.cjs +602 -0
  634. package/lib/core/resolve-brain-key.cjs +273 -0
  635. package/lib/core/resolve-umbilical-target.cjs +288 -0
  636. package/lib/core/resolve-vercel-key.cjs +107 -0
  637. package/lib/core/resolve-vercel-key.test.cjs +137 -0
  638. package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
  639. package/lib/core/room-auto-create.cjs +318 -0
  640. package/lib/core/room-auto-create.test.cjs +198 -0
  641. package/lib/core/room-chooser.cjs +244 -0
  642. package/lib/core/room-classifier-strict-mode.cjs +235 -0
  643. package/lib/core/room-db.cjs +348 -0
  644. package/lib/core/room-discard-cascade.cjs +238 -0
  645. package/lib/core/room-discard-cascade.test.cjs +135 -0
  646. package/lib/core/room-name-validator.cjs +132 -0
  647. package/lib/core/room-name-validator.test.cjs +156 -0
  648. package/lib/core/room-naming-selector.cjs +357 -0
  649. package/lib/core/room-naming-selector.test.cjs +277 -0
  650. package/lib/core/room-open.cjs +259 -0
  651. package/lib/core/room-ops-async.cjs +92 -0
  652. package/lib/core/room-ops-shared.cjs +64 -0
  653. package/lib/core/room-ops-sync.cjs +70 -0
  654. package/lib/core/room-ops.cjs +32 -0
  655. package/lib/core/room-receipt-emit.cjs +63 -0
  656. package/lib/core/room-root.cjs +93 -0
  657. package/lib/core/room-skeleton-scaffold.cjs +669 -0
  658. package/lib/core/room-skeleton-scaffold.test.cjs +296 -0
  659. package/lib/core/room-type-detector.cjs +386 -0
  660. package/lib/core/rs-backend-dispatch.cjs +64 -0
  661. package/lib/core/rs-brain-substrate-prompts.cjs +129 -0
  662. package/lib/core/rs-brain-substrate.cjs +570 -0
  663. package/lib/core/rs-breakthrough-scorer.cjs +255 -0
  664. package/lib/core/rs-canon-violations.cjs +82 -0
  665. package/lib/core/rs-chain-feeder.cjs +381 -0
  666. package/lib/core/rs-commercial-assessor.cjs +280 -0
  667. package/lib/core/rs-corpus-quality-gate.cjs +62 -0
  668. package/lib/core/rs-differential-scorer.cjs +629 -0
  669. package/lib/core/rs-domain-analyzer.cjs +385 -0
  670. package/lib/core/rs-egress-prompts.cjs +113 -0
  671. package/lib/core/rs-egress-telemetry.cjs +225 -0
  672. package/lib/core/rs-egress-violations.cjs +53 -0
  673. package/lib/core/rs-engine.cjs +597 -0
  674. package/lib/core/rs-expert-brain-projection.cjs +280 -0
  675. package/lib/core/rs-expert-mapper.cjs +467 -0
  676. package/lib/core/rs-fetcher-academic.cjs +697 -0
  677. package/lib/core/rs-fetcher-experts.cjs +314 -0
  678. package/lib/core/rs-fetcher-industry.cjs +731 -0
  679. package/lib/core/rs-fetcher-patents.cjs +564 -0
  680. package/lib/core/rs-innovation-classifier.cjs +194 -0
  681. package/lib/core/rs-math.cjs +458 -0
  682. package/lib/core/rs-mind-map.cjs +656 -0
  683. package/lib/core/rs-neo4j-writer.cjs +388 -0
  684. package/lib/core/rs-nl-to-query.cjs +435 -0
  685. package/lib/core/rs-pinecone-bridge.cjs +344 -0
  686. package/lib/core/rs-preprocessor.cjs +350 -0
  687. package/lib/core/rs-query-matrix.cjs +316 -0
  688. package/lib/core/rs-query-to-text.cjs +438 -0
  689. package/lib/core/rs-sqlite-mirror.cjs +495 -0
  690. package/lib/core/rs-thesis-generator.cjs +188 -0
  691. package/lib/core/rs_cache.py +635 -0
  692. package/lib/core/rs_corpus.py +562 -0
  693. package/lib/core/rs_corpus_exclude.py +62 -0
  694. package/lib/core/rs_hybrid.py +589 -0
  695. package/lib/core/rs_math.py +287 -0
  696. package/lib/core/rs_rooms.py +196 -0
  697. package/lib/core/salient-governance.cjs +315 -0
  698. package/lib/core/scheduled-scanner.cjs +658 -0
  699. package/lib/core/scratchpad-ops.cjs +316 -0
  700. package/lib/core/seam-liveness.cjs +191 -0
  701. package/lib/core/seam-liveness.test.cjs +177 -0
  702. package/lib/core/section-8-trace-schema.cjs +138 -0
  703. package/lib/core/section-registry.cjs +167 -0
  704. package/lib/core/security/agentshield-adapters.test.cjs +104 -0
  705. package/lib/core/security/agentshield-run.cjs +343 -0
  706. package/lib/core/security/agentshield-scanner.cjs +314 -0
  707. package/lib/core/security/agentshield-scanner.test.cjs +259 -0
  708. package/lib/core/sensors/hat-scoping-table.cjs +103 -0
  709. package/lib/core/sensors/sensor-circularity.cjs +278 -0
  710. package/lib/core/sensors/sensor-content-relevance.cjs +407 -0
  711. package/lib/core/sensors/sensor-diffusion-adoption.cjs +230 -0
  712. package/lib/core/sensors/sensor-eureka.cjs +208 -0
  713. package/lib/core/sensors/sensor-expert-skill.cjs +293 -0
  714. package/lib/core/sensors/sensor-external-fact.cjs +184 -0
  715. package/lib/core/sensors/sensor-gate-approach.cjs +104 -0
  716. package/lib/core/sensors/sensor-jtbd-reweight.cjs +141 -0
  717. package/lib/core/sensors/sensor-lagging-component.cjs +115 -0
  718. package/lib/core/sensors/sensor-memory-cortex.cjs +111 -0
  719. package/lib/core/sensors/sensor-methodology-decision.cjs +131 -0
  720. package/lib/core/sensors/sensor-opportunity-harvest.cjs +195 -0
  721. package/lib/core/sensors/sensor-perspective-lock.cjs +174 -0
  722. package/lib/core/sensors/sensor-priority.cjs +183 -0
  723. package/lib/core/sensors/sensor-recency.cjs +151 -0
  724. package/lib/core/sensors/sensor-roadmap-type.cjs +421 -0
  725. package/lib/core/sensors/sensor-room-pick.cjs +238 -0
  726. package/lib/core/sensors/sensor-show-share.cjs +215 -0
  727. package/lib/core/sensors/sensor-temporal-blindness.cjs +123 -0
  728. package/lib/core/sensors/sensor-types.cjs +294 -0
  729. package/lib/core/sensors/sensor-url-ingest.cjs +234 -0
  730. package/lib/core/session-binding.cjs +208 -0
  731. package/lib/core/session-presence.cjs +404 -0
  732. package/lib/core/session-register.cjs +138 -0
  733. package/lib/core/session-state.cjs +144 -0
  734. package/lib/core/shallow-doc-parser.cjs +353 -0
  735. package/lib/core/shallow-doc-parser.test.cjs +226 -0
  736. package/lib/core/skill-activation-router.cjs +284 -0
  737. package/lib/core/skillopt-schemas.cjs +509 -0
  738. package/lib/core/stale-copy-scanner.cjs +190 -0
  739. package/lib/core/stance-state.cjs +153 -0
  740. package/lib/core/state-aware-router.cjs +78 -0
  741. package/lib/core/state-ops.cjs +80 -0
  742. package/lib/core/state-version.cjs +350 -0
  743. package/lib/core/statusline-cache.cjs +266 -0
  744. package/lib/core/statusline-liveness-gate.cjs +105 -0
  745. package/lib/core/surface-fence.cjs +127 -0
  746. package/lib/core/synthesizers/comparison-matrix.cjs +82 -0
  747. package/lib/core/synthesizers/convergence-map.cjs +107 -0
  748. package/lib/core/synthesizers/domain-hierarchy.cjs +138 -0
  749. package/lib/core/synthesizers/source-comparison.cjs +56 -0
  750. package/lib/core/synthesizers/tension-map.cjs +119 -0
  751. package/lib/core/synthetic-expert-behavior-gate.cjs +99 -0
  752. package/lib/core/synthetic-expert-construction-gate.cjs +170 -0
  753. package/lib/core/telemetry/schema.cjs +168 -0
  754. package/lib/core/telemetry/schema.test.cjs +124 -0
  755. package/lib/core/telemetry/validator.cjs +200 -0
  756. package/lib/core/telemetry/validator.test.cjs +188 -0
  757. package/lib/core/telemetry/writer.cjs +141 -0
  758. package/lib/core/telemetry/writer.test.cjs +331 -0
  759. package/lib/core/temporal/date-sync-gate.cjs +256 -0
  760. package/lib/core/temporal/date-sync-gate.test.cjs +191 -0
  761. package/lib/core/temporal/dual-stamp.cjs +172 -0
  762. package/lib/core/temporal/dual-stamp.test.cjs +172 -0
  763. package/lib/core/temporal/point-in-time.cjs +76 -0
  764. package/lib/core/temporal/point-in-time.test.cjs +169 -0
  765. package/lib/core/temporal/recency-decay.cjs +119 -0
  766. package/lib/core/temporal/recency-decay.test.cjs +140 -0
  767. package/lib/core/temporal/reference-now.cjs +281 -0
  768. package/lib/core/temporal/reference-now.test.cjs +225 -0
  769. package/lib/core/temporal/resolve-relative-time.cjs +116 -0
  770. package/lib/core/temporal/resolve-relative-time.test.cjs +138 -0
  771. package/lib/core/temporal/supersession.cjs +250 -0
  772. package/lib/core/temporal/supersession.test.cjs +103 -0
  773. package/lib/core/terminal-capability.cjs +88 -0
  774. package/lib/core/token-estimator.cjs +348 -0
  775. package/lib/core/tone-filter.cjs +147 -0
  776. package/lib/core/trending-to-absurd/orchestrator.cjs +341 -0
  777. package/lib/core/trending-to-absurd/stage7-roadmap.cjs +317 -0
  778. package/lib/core/trending-to-absurd/variance.cjs +169 -0
  779. package/lib/core/unknowns/bandit.cjs +332 -0
  780. package/lib/core/unknowns/corpus-adapter.cjs +327 -0
  781. package/lib/core/unknowns/dsp.cjs +356 -0
  782. package/lib/core/unknowns/edge-writer.cjs +211 -0
  783. package/lib/core/unknowns/iface.cjs +212 -0
  784. package/lib/core/unknowns/orchestrator.cjs +375 -0
  785. package/lib/core/unknowns/pattern-miner.cjs +214 -0
  786. package/lib/core/unknowns/rumsfeld-matrix.cjs +155 -0
  787. package/lib/core/unknowns/verdict.cjs +254 -0
  788. package/lib/core/update-path.cjs +57 -0
  789. package/lib/core/url-ingest.cjs +568 -0
  790. package/lib/core/user-archetype.cjs +284 -0
  791. package/lib/core/user-md-ops.cjs +578 -0
  792. package/lib/core/venture-shape-nudge.cjs +178 -0
  793. package/lib/core/venture-shape-nudge.test.cjs +266 -0
  794. package/lib/core/verb-reach-affinity.cjs +299 -0
  795. package/lib/core/visual-ops.cjs +692 -0
  796. package/lib/core/voice-transition-detector.cjs +125 -0
  797. package/lib/core/watched-sources.cjs +237 -0
  798. package/lib/core/write-lock.cjs +149 -0
  799. package/lib/graph/canvas-graph.js +467 -0
  800. package/lib/graph/constellation-config.cjs +299 -0
  801. package/lib/graph/graph-detail-panel.js +165 -0
  802. package/lib/hmi/ROOM.md +47 -0
  803. package/lib/hmi/across-session-memory.cjs +669 -0
  804. package/lib/hmi/agentshield-drift-gate.cjs +142 -0
  805. package/lib/hmi/brain-review-packet.cjs +221 -0
  806. package/lib/hmi/cortex-reach-adapter.cjs +271 -0
  807. package/lib/hmi/cross-room-memory.cjs +618 -0
  808. package/lib/hmi/decoy-tier.cjs +395 -0
  809. package/lib/hmi/depth-state.cjs +164 -0
  810. package/lib/hmi/dial-label-composer.cjs +410 -0
  811. package/lib/hmi/dial-presenter.cjs +508 -0
  812. package/lib/hmi/dial-reach-orchestrator.cjs +377 -0
  813. package/lib/hmi/dial-selector.cjs +239 -0
  814. package/lib/hmi/f1-pick-capture-cli.cjs +131 -0
  815. package/lib/hmi/f3-depth-capture-cli.cjs +77 -0
  816. package/lib/hmi/f4-scope-capture-cli.cjs +86 -0
  817. package/lib/hmi/f8-action-capture-cli.cjs +145 -0
  818. package/lib/hmi/f8-capture.test.cjs +77 -0
  819. package/lib/hmi/f9-ordered-capture-cli.cjs +138 -0
  820. package/lib/hmi/harvest-scope-state.cjs +202 -0
  821. package/lib/hmi/hats-persona-cache.cjs +142 -0
  822. package/lib/hmi/jtbd-classifier.cjs +219 -0
  823. package/lib/hmi/jtbd-state.cjs +263 -0
  824. package/lib/hmi/jtbd-taxonomy.json +402 -0
  825. package/lib/hmi/mindrian-ascii-logo.cjs +96 -0
  826. package/lib/hmi/part8-egress-gate.cjs +149 -0
  827. package/lib/hmi/reach-component-map.json +47 -0
  828. package/lib/hmi/reach-relevance-gate.cjs +147 -0
  829. package/lib/hmi/selector-dispatcher.cjs +1201 -0
  830. package/lib/hmi/selector-dispatcher.test.cjs +141 -0
  831. package/lib/hmi/selector-telemetry.cjs +269 -0
  832. package/lib/hmi/shape-f0-renderer.cjs +145 -0
  833. package/lib/hmi/shape-f1-fallback.cjs +80 -0
  834. package/lib/hmi/shape-f1-renderer.cjs +219 -0
  835. package/lib/hmi/shape-f2-renderer.cjs +132 -0
  836. package/lib/hmi/shape-f3-parity.test.cjs +64 -0
  837. package/lib/hmi/shape-f3-renderer.cjs +66 -0
  838. package/lib/hmi/shape-f4-parity.test.cjs +72 -0
  839. package/lib/hmi/shape-f4-renderer.cjs +72 -0
  840. package/lib/hmi/shape-f5-renderer.cjs +155 -0
  841. package/lib/hmi/shape-f6-plan-review-renderer.cjs +324 -0
  842. package/lib/hmi/shape-f6-renderer.cjs +144 -0
  843. package/lib/hmi/shape-f7-breakthrough-renderer.cjs +234 -0
  844. package/lib/hmi/shape-f7-breakthrough-renderer.test.cjs +233 -0
  845. package/lib/hmi/shape-f8-renderer.cjs +150 -0
  846. package/lib/hmi/shape-f8-renderer.test.cjs +70 -0
  847. package/lib/hmi/shape-f9-renderer.cjs +187 -0
  848. package/lib/hmi/shape-f9-renderer.test.cjs +80 -0
  849. package/lib/hmi/shape-g-renderer.cjs +219 -0
  850. package/lib/hmi/shape-h-renderer.cjs +222 -0
  851. package/lib/hmi/tier-check.cjs +63 -0
  852. package/lib/hmi/turn-text.cjs +268 -0
  853. package/lib/hmi/voice-color-mark.cjs +318 -0
  854. package/lib/hmi/voice-style-log.cjs +276 -0
  855. package/lib/import/PRECONDITIONS.md +41 -0
  856. package/lib/import/branding.cjs +210 -0
  857. package/lib/import/branding.test.cjs +235 -0
  858. package/lib/import/classifications-sync.cjs +104 -0
  859. package/lib/import/classifications-sync.test.cjs +129 -0
  860. package/lib/import/enricher.cjs +296 -0
  861. package/lib/import/enricher.test.cjs +273 -0
  862. package/lib/import/integration.test.cjs +376 -0
  863. package/lib/import/manifest.cjs +129 -0
  864. package/lib/import/manifest.schema.json +185 -0
  865. package/lib/import/manifest.test.cjs +123 -0
  866. package/lib/import/meeting-detector.cjs +92 -0
  867. package/lib/import/meeting-detector.test.cjs +100 -0
  868. package/lib/import/person-detector.cjs +229 -0
  869. package/lib/import/person-detector.test.cjs +149 -0
  870. package/lib/import/report.cjs +186 -0
  871. package/lib/import/report.test.cjs +186 -0
  872. package/lib/import/room-md-scaffolder.cjs +49 -0
  873. package/lib/import/router.cjs +224 -0
  874. package/lib/import/router.test.cjs +356 -0
  875. package/lib/import/run-all-tests.cjs +36 -0
  876. package/lib/import/smoke-test.cjs +213 -0
  877. package/lib/import/smoke-test.test.cjs +148 -0
  878. package/lib/import/undo.test.cjs +199 -0
  879. package/lib/import/vault-scanner.cjs +105 -0
  880. package/lib/import/vault-scanner.test.cjs +67 -0
  881. package/lib/lens-engine/correlation-resolver.cjs +174 -0
  882. package/lib/lens-engine/source-lens-driver.cjs +736 -0
  883. package/lib/mcp/adapter-client.cjs +103 -0
  884. package/lib/mcp/app-html/dashboard.html +316 -0
  885. package/lib/mcp/app-html/graph.html +428 -0
  886. package/lib/mcp/app-html/mindrian-platform.html +1841 -0
  887. package/lib/mcp/app-html/wiki.html +383 -0
  888. package/lib/mcp/app-views.cjs +322 -0
  889. package/lib/mcp/brain-composition-census.cjs +184 -0
  890. package/lib/mcp/brain-router.cjs +530 -0
  891. package/lib/mcp/capability-registry.cjs +62 -0
  892. package/lib/mcp/contract-version.cjs +59 -0
  893. package/lib/mcp/daemon-lifecycle.cjs +324 -0
  894. package/lib/mcp/gate-dedup.cjs +120 -0
  895. package/lib/mcp/gate-ledger.cjs +145 -0
  896. package/lib/mcp/gate-render.cjs +483 -0
  897. package/lib/mcp/hook-adapter-audit.cjs +199 -0
  898. package/lib/mcp/larry-context.cjs +42 -0
  899. package/lib/mcp/mcp-first-flag.cjs +147 -0
  900. package/lib/mcp/no-instructions.test.cjs +270 -0
  901. package/lib/mcp/pipeline-state.cjs +424 -0
  902. package/lib/mcp/prompts.cjs +421 -0
  903. package/lib/mcp/register-core-tools.cjs +78 -0
  904. package/lib/mcp/resources.cjs +359 -0
  905. package/lib/mcp/runtime-instructions.cjs +38 -0
  906. package/lib/mcp/session-catchup.cjs +349 -0
  907. package/lib/mcp/session-registry.cjs +113 -0
  908. package/lib/mcp/session-room.cjs +124 -0
  909. package/lib/mcp/sse-event-bus.cjs +98 -0
  910. package/lib/mcp/stop-gate-handler.cjs +589 -0
  911. package/lib/mcp/surface-detect.cjs +186 -0
  912. package/lib/mcp/tool-router.cjs +2113 -0
  913. package/lib/mcp/tools/chain.cjs +674 -0
  914. package/lib/mcp/tools/claim.cjs +180 -0
  915. package/lib/mcp/tools/context.cjs +92 -0
  916. package/lib/mcp/tools/dual-path.cjs +79 -0
  917. package/lib/mcp/tools/gate.cjs +392 -0
  918. package/lib/mcp/tools/graph-reason.cjs +130 -0
  919. package/lib/mcp/tools/graph.cjs +321 -0
  920. package/lib/mcp/tools/identity.cjs +174 -0
  921. package/lib/mcp/tools/room.cjs +449 -0
  922. package/lib/mcp/tools/sensors.cjs +450 -0
  923. package/lib/mcp/tools/status.cjs +183 -0
  924. package/lib/mcp/tools/stop-gate.cjs +103 -0
  925. package/lib/mcp/tools/views.cjs +382 -0
  926. package/lib/mcp/tree-watcher.cjs +199 -0
  927. package/lib/memory/.mindrian/auto-explore-mat-test-001.json +11 -0
  928. package/lib/memory/aaak-compress.cjs +403 -0
  929. package/lib/memory/aaak-compress.test.cjs +288 -0
  930. package/lib/memory/async-artifact-auto-commit.test.cjs +223 -0
  931. package/lib/memory/bearer-token.test.cjs +315 -0
  932. package/lib/memory/body-shape-coverage.test.cjs +268 -0
  933. package/lib/memory/brain-cache-lru.test.cjs +259 -0
  934. package/lib/memory/brain-client-query-shape.test.cjs +160 -0
  935. package/lib/memory/brain-cypher-chain-slice.test.cjs +368 -0
  936. package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
  937. package/lib/memory/brain-derivation-queue.test.cjs +553 -0
  938. package/lib/memory/brain-derivation.test.cjs +639 -0
  939. package/lib/memory/brain-derive-command.test.cjs +534 -0
  940. package/lib/memory/brain-derive-curation.test.cjs +243 -0
  941. package/lib/memory/brain-md-invariants-validator.test.cjs +704 -0
  942. package/lib/memory/brain-md-schema.test.cjs +467 -0
  943. package/lib/memory/brain-md-staleness.test.cjs +525 -0
  944. package/lib/memory/brain-server-resolution.test.cjs +314 -0
  945. package/lib/memory/brain-suggestion-template.test.cjs +200 -0
  946. package/lib/memory/chain-recommender-canonical.test.cjs +208 -0
  947. package/lib/memory/chain-recommender.test.cjs +233 -0
  948. package/lib/memory/chat-context.test.cjs +128 -0
  949. package/lib/memory/command-registry.test.cjs +220 -0
  950. package/lib/memory/connector-registry.test.cjs +94 -0
  951. package/lib/memory/correlation-label-index.test.cjs +119 -0
  952. package/lib/memory/correlation.test.cjs +253 -0
  953. package/lib/memory/cross-room-aggregator.test.cjs +909 -0
  954. package/lib/memory/curation-132-03-dedup-held-rename.test.cjs +251 -0
  955. package/lib/memory/curation-132-05-pseudonymize.test.cjs +205 -0
  956. package/lib/memory/curation-batch.test.cjs +213 -0
  957. package/lib/memory/dashboard-server.test.cjs +256 -0
  958. package/lib/memory/debouncer-drain-at-prompt.test.cjs +389 -0
  959. package/lib/memory/decision-capture.test.cjs +632 -0
  960. package/lib/memory/decision-capture.worker.cjs +70 -0
  961. package/lib/memory/doctor-deprecation-surface.test.cjs +188 -0
  962. package/lib/memory/dual-graph-health.test.cjs +485 -0
  963. package/lib/memory/explain-decision-command.test.cjs +521 -0
  964. package/lib/memory/explain-decision-footer.test.cjs +316 -0
  965. package/lib/memory/explored-materials-store.cjs +392 -0
  966. package/lib/memory/f-selector-ranker.test.cjs +593 -0
  967. package/lib/memory/feynman-minto-guardian.test.cjs +863 -0
  968. package/lib/memory/feynman-minto-invariants.test.cjs +554 -0
  969. package/lib/memory/feynman-prompts-drift.test.cjs +144 -0
  970. package/lib/memory/feynman-prompts.cjs +151 -0
  971. package/lib/memory/feynman-prompts.test.cjs +96 -0
  972. package/lib/memory/first-touch-version.test.cjs +198 -0
  973. package/lib/memory/folder-memory-quadruple.test.cjs +548 -0
  974. package/lib/memory/folder-memory.test.cjs +503 -0
  975. package/lib/memory/framework-chain-composer.test.cjs +549 -0
  976. package/lib/memory/frontmatter-schema-validator.test.cjs +344 -0
  977. package/lib/memory/guardian-onstop-reaches-user.test.cjs +396 -0
  978. package/lib/memory/heal-command.test.cjs +604 -0
  979. package/lib/memory/help-coverage.test.cjs +108 -0
  980. package/lib/memory/help-renderer.test.cjs +145 -0
  981. package/lib/memory/huji-run-one-async-parity.test.cjs +242 -0
  982. package/lib/memory/hypergraph-event-schema.test.cjs +116 -0
  983. package/lib/memory/index-artifact-transaction.test.cjs +333 -0
  984. package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +122 -0
  985. package/lib/memory/local-chain-recommender.test.cjs +172 -0
  986. package/lib/memory/mcp-input-validation.test.cjs +240 -0
  987. package/lib/memory/mcp-server-brain-deps.test.cjs +270 -0
  988. package/lib/memory/mcp-stack-fallback.test.cjs +433 -0
  989. package/lib/memory/minto-debounce-consumer-census.test.cjs +567 -0
  990. package/lib/memory/minto-debouncer.test.cjs +407 -0
  991. package/lib/memory/minto-debouncer.worker.cjs +46 -0
  992. package/lib/memory/minto-migration-v88.test.cjs +265 -0
  993. package/lib/memory/minto-schema-v88.test.cjs +390 -0
  994. package/lib/memory/mos-status-renderer.test.cjs +631 -0
  995. package/lib/memory/narrative-schema.cjs +376 -0
  996. package/lib/memory/narrative-schema.test.cjs +209 -0
  997. package/lib/memory/nav-dial.test.cjs +414 -0
  998. package/lib/memory/navigation-engine-core.test.cjs +712 -0
  999. package/lib/memory/navigation-engine-offer.test.cjs +404 -0
  1000. package/lib/memory/navigation-hook-resolver.test.cjs +177 -0
  1001. package/lib/memory/navigation-invariants.test.cjs +483 -0
  1002. package/lib/memory/navigation-projections.test.cjs +241 -0
  1003. package/lib/memory/navigation-write-edge.test.cjs +206 -0
  1004. package/lib/memory/offer-closer.test.cjs +258 -0
  1005. package/lib/memory/offer-presenter.test.cjs +554 -0
  1006. package/lib/memory/on-stop-snapshot.test.cjs +404 -0
  1007. package/lib/memory/orchestration-projection.test.cjs +706 -0
  1008. package/lib/memory/packet-chain-hint.test.cjs +407 -0
  1009. package/lib/memory/packet-schema-validation.test.cjs +317 -0
  1010. package/lib/memory/palette-consistency.test.cjs +127 -0
  1011. package/lib/memory/pending-tension-store.cjs +453 -0
  1012. package/lib/memory/per-command-jtbd-derivation.test.cjs +130 -0
  1013. package/lib/memory/per-command-teaching.test.cjs +110 -0
  1014. package/lib/memory/post-compact-reinjection.test.cjs +854 -0
  1015. package/lib/memory/post-write-triple.test.cjs +317 -0
  1016. package/lib/memory/pre-compact-snapshot.test.cjs +495 -0
  1017. package/lib/memory/precommit-real-commit.test.cjs +301 -0
  1018. package/lib/memory/problem-type-router.test.cjs +656 -0
  1019. package/lib/memory/query-efficiency-telemetry.test.cjs +612 -0
  1020. package/lib/memory/recompile-room-references.test.cjs +392 -0
  1021. package/lib/memory/recompile-room-references.worker.cjs +42 -0
  1022. package/lib/memory/record-decision-dual-write.test.cjs +454 -0
  1023. package/lib/memory/render-v2-disposition.test.cjs +199 -0
  1024. package/lib/memory/room-classifier-strict-mode.test.cjs +430 -0
  1025. package/lib/memory/room-minto-hook.test.cjs +398 -0
  1026. package/lib/memory/rs-discovery-engine.test.cjs +323 -0
  1027. package/lib/memory/run-feynman-tests.cjs +2101 -0
  1028. package/lib/memory/security-trifecta.test.cjs +329 -0
  1029. package/lib/memory/selector-alias-map.test.cjs +172 -0
  1030. package/lib/memory/selector-decisions.test.cjs +417 -0
  1031. package/lib/memory/selector-miss.test.cjs +290 -0
  1032. package/lib/memory/session-start-brain-staleness.test.cjs +363 -0
  1033. package/lib/memory/session-start-triple-injection.test.cjs +514 -0
  1034. package/lib/memory/sessionstart-banner-formatter.cjs +318 -0
  1035. package/lib/memory/sessionstart-coordinator.test.cjs +446 -0
  1036. package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
  1037. package/lib/memory/skill-activation-router.test.cjs +465 -0
  1038. package/lib/memory/skill-vs-code-drift.test.cjs +257 -0
  1039. package/lib/memory/soft-alias.test.cjs +144 -0
  1040. package/lib/memory/spine-events-correlation.test.cjs +198 -0
  1041. package/lib/memory/stale-copy-scanner.test.cjs +294 -0
  1042. package/lib/memory/stamp-artifact-write.test.cjs +304 -0
  1043. package/lib/memory/state-aware-router.test.cjs +90 -0
  1044. package/lib/memory/statusline-active-room-write.test.cjs +245 -0
  1045. package/lib/memory/statusline-active-room.test.cjs +315 -0
  1046. package/lib/memory/statusline-minto-segment.test.cjs +292 -0
  1047. package/lib/memory/statusline-two-row.test.cjs +338 -0
  1048. package/lib/memory/suggest-next-workflow.test.cjs +176 -0
  1049. package/lib/memory/sync-async-entry-points.test.cjs +204 -0
  1050. package/lib/memory/terminal-capability.test.cjs +155 -0
  1051. package/lib/memory/test-bridge-writer-enhanced.cjs +452 -0
  1052. package/lib/memory/test-rs-brain-substrate-shape.cjs +529 -0
  1053. package/lib/memory/test-rs-brain-substrate.cjs +636 -0
  1054. package/lib/memory/test-rs-breakthrough-scorer.cjs +375 -0
  1055. package/lib/memory/test-rs-canon-violations.cjs +218 -0
  1056. package/lib/memory/test-rs-chain-feeder-core.cjs +344 -0
  1057. package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +297 -0
  1058. package/lib/memory/test-rs-commercial-assessor.cjs +385 -0
  1059. package/lib/memory/test-rs-differential-scorer.cjs +480 -0
  1060. package/lib/memory/test-rs-discovery-engine.cjs +648 -0
  1061. package/lib/memory/test-rs-domain-analyzer.cjs +492 -0
  1062. package/lib/memory/test-rs-egress-primitives.cjs +420 -0
  1063. package/lib/memory/test-rs-expert-mapper.cjs +547 -0
  1064. package/lib/memory/test-rs-explain-command.cjs +443 -0
  1065. package/lib/memory/test-rs-fetcher-academic.cjs +848 -0
  1066. package/lib/memory/test-rs-fetcher-experts.cjs +496 -0
  1067. package/lib/memory/test-rs-fetcher-industry.cjs +702 -0
  1068. package/lib/memory/test-rs-fetcher-patents.cjs +674 -0
  1069. package/lib/memory/test-rs-innovation-classifier.cjs +301 -0
  1070. package/lib/memory/test-rs-mind-map.cjs +646 -0
  1071. package/lib/memory/test-rs-neo4j-writer.cjs +518 -0
  1072. package/lib/memory/test-rs-nl-to-query.cjs +449 -0
  1073. package/lib/memory/test-rs-pinecone-bridge.cjs +282 -0
  1074. package/lib/memory/test-rs-preprocessor.cjs +433 -0
  1075. package/lib/memory/test-rs-query-matrix.cjs +391 -0
  1076. package/lib/memory/test-rs-query-to-text.cjs +551 -0
  1077. package/lib/memory/test-rs-sqlite-mirror.cjs +649 -0
  1078. package/lib/memory/test-rs-thesis-generator.cjs +360 -0
  1079. package/lib/memory/triple-context-formatter.cjs +473 -0
  1080. package/lib/memory/triple-context-formatter.test.cjs +442 -0
  1081. package/lib/memory/user-md-persona.test.cjs +565 -0
  1082. package/lib/memory/userpromptsubmit-integration.test.cjs +787 -0
  1083. package/lib/memory/validators/README.md +157 -0
  1084. package/lib/memory/validators/brain-md-invariants.cjs +475 -0
  1085. package/lib/memory/validators/brain-substrate-invariants.cjs +285 -0
  1086. package/lib/memory/validators/external-academic-invariants.cjs +249 -0
  1087. package/lib/memory/validators/external-industry-invariants.cjs +271 -0
  1088. package/lib/memory/validators/external-patents-invariants.cjs +266 -0
  1089. package/lib/memory/validators/minto-invariants.cjs +62 -0
  1090. package/lib/memory/validators/navigation-invariants.cjs +340 -0
  1091. package/lib/memory/validators/queue-health.cjs +95 -0
  1092. package/lib/memory/validators/snapshot-integrity.cjs +129 -0
  1093. package/lib/memory/validators/stale-lifecycle.cjs +116 -0
  1094. package/lib/memory/vault-section-minto-generator-atomic.test.cjs +556 -0
  1095. package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +73 -0
  1096. package/lib/memory/workflow-layer-e2e.test.cjs +262 -0
  1097. package/lib/memory/write-lock-atomic.test.cjs +137 -0
  1098. package/lib/memory/write-lock-atomic.worker.cjs +55 -0
  1099. package/lib/parity/check-parity.cjs +83 -0
  1100. package/lib/presentation/presentation-server.cjs +101 -0
  1101. package/lib/presentation/presentation-watcher.cjs +123 -0
  1102. package/lib/quickview/hub-server.cjs +719 -0
  1103. package/lib/quickview/server.cjs +533 -0
  1104. package/lib/render/JTBD-PALETTES.md +145 -0
  1105. package/lib/render/ROOM.md +111 -0
  1106. package/lib/render/render-v2.cjs +532 -0
  1107. package/lib/render/render-v2.test.cjs +267 -0
  1108. package/lib/render/render.cjs +65 -0
  1109. package/lib/sessionstart/budget-compressor.cjs +130 -0
  1110. package/lib/sessionstart/contributor-interface.cjs +134 -0
  1111. package/lib/sessionstart/contributor-isolator.cjs +128 -0
  1112. package/lib/sessionstart/precedence-ladder.cjs +47 -0
  1113. package/lib/state/ROOM.md +46 -0
  1114. package/lib/state/state-md-parser.cjs +215 -0
  1115. package/lib/statusline/ROOM.md +38 -0
  1116. package/lib/statusline/banner-suppression.cjs +50 -0
  1117. package/lib/statusline/cockpit-renderer.cjs +443 -0
  1118. package/lib/statusline/cockpit-signals.cjs +312 -0
  1119. package/lib/statusline/cockpit-telemetry.cjs +152 -0
  1120. package/lib/statusline/ctx-window.cjs +135 -0
  1121. package/lib/statusline/governing-thought-truncator.cjs +45 -0
  1122. package/lib/statusline/next-move-cache.cjs +235 -0
  1123. package/lib/statusline/ratification-next.cjs +164 -0
  1124. package/lib/statusline/room-health-cache.cjs +200 -0
  1125. package/lib/statusline/surface-detect.cjs +85 -0
  1126. package/lib/statusline/two-row-renderer.cjs +207 -0
  1127. package/lib/statusline/version-resolver.cjs +81 -0
  1128. package/lib/ui/design-system.cjs +19 -0
  1129. package/lib/update-bootstrap.sh.template +145 -0
  1130. package/lib/vault/frontmatter-schema.cjs +297 -0
  1131. package/lib/vault/room-scanner.cjs +365 -0
  1132. package/lib/vault/wikilink-builder.cjs +231 -0
  1133. package/lib/vault/wikilink-builder.test.cjs +182 -0
  1134. package/lib/wiki/briefing.cjs +193 -0
  1135. package/lib/wiki/editor-dist/wiki-editor.css +1 -0
  1136. package/lib/wiki/editor-dist/wiki-editor.js +1327 -0
  1137. package/lib/wiki/graph-links.cjs +281 -0
  1138. package/lib/wiki/page-renderer.cjs +229 -0
  1139. package/lib/wiki/room-home.cjs +353 -0
  1140. package/lib/wiki/wiki-chat.cjs +81 -0
  1141. package/lib/wiki/wiki-export.cjs +364 -0
  1142. package/lib/wiki/wiki-layout.cjs +1143 -0
  1143. package/lib/wiki/wiki-search.cjs +142 -0
  1144. package/lib/wiki/wiki-server.cjs +748 -0
  1145. package/lib/wiki/wiki-watcher.cjs +105 -0
  1146. package/lib/workflow/ROOM.md +47 -0
  1147. package/lib/workflow/chain-source.cjs +179 -0
  1148. package/lib/workflow/command-resolver.cjs +155 -0
  1149. package/lib/workflow/command-resolver.test.cjs +235 -0
  1150. package/lib/workflow/cross-room-umbilical-closer.cjs +364 -0
  1151. package/lib/workflow/dial-close-reach.cjs +405 -0
  1152. package/lib/workflow/f-selector-ranker.cjs +1148 -0
  1153. package/lib/workflow/f1-pick-consumer.cjs +232 -0
  1154. package/lib/workflow/f3-depth-consumer.cjs +98 -0
  1155. package/lib/workflow/f4-scope-consumer.cjs +112 -0
  1156. package/lib/workflow/f8-consumer.test.cjs +82 -0
  1157. package/lib/workflow/f8-fanout-consumer.cjs +208 -0
  1158. package/lib/workflow/f9-consumer.test.cjs +71 -0
  1159. package/lib/workflow/f9-ordered-consumer.cjs +199 -0
  1160. package/lib/workflow/local-chain-recommender.cjs +330 -0
  1161. package/lib/workflow/memory-cascade-f9-adapter.cjs +273 -0
  1162. package/lib/workflow/memory-governance-closer.cjs +384 -0
  1163. package/lib/workflow/offer-closer.cjs +407 -0
  1164. package/lib/workflow/reach-hedge-ranker.cjs +809 -0
  1165. package/lib/workflow/reach-reject-reader.cjs +372 -0
  1166. package/lib/workflow/reconcile-f9-adapter.cjs +299 -0
  1167. package/lib/workflow/selector-decisions.cjs +478 -0
  1168. package/lib/workflow/session-binding-consumer.cjs +249 -0
  1169. package/npm-shrinkwrap.json +1544 -0
  1170. package/output-styles/destijl.md +67 -0
  1171. package/package.json +22 -4
  1172. package/pipelines/PWS_grading/01-deep-grade.md +48 -0
  1173. package/pipelines/PWS_grading/02-mullins.md +50 -0
  1174. package/pipelines/PWS_grading/03-build-thesis.md +60 -0
  1175. package/pipelines/PWS_grading/04-structure-argument.md +77 -0
  1176. package/pipelines/PWS_grading/CHAIN.md +79 -0
  1177. package/pipelines/analogy/01-decompose.md +80 -0
  1178. package/pipelines/analogy/02-abstract.md +87 -0
  1179. package/pipelines/analogy/03-search.md +135 -0
  1180. package/pipelines/analogy/04-transfer.md +101 -0
  1181. package/pipelines/analogy/05-validate.md +106 -0
  1182. package/pipelines/analogy/CHAIN.md +73 -0
  1183. package/pipelines/discovery/01-explore-domains.md +44 -0
  1184. package/pipelines/discovery/02-think-hats.md +50 -0
  1185. package/pipelines/discovery/03-analyze-needs.md +54 -0
  1186. package/pipelines/discovery/CHAIN.md +48 -0
  1187. package/pipelines/thesis/01-structure-argument.md +45 -0
  1188. package/pipelines/thesis/02-challenge-assumptions.md +48 -0
  1189. package/pipelines/thesis/03-build-thesis.md +54 -0
  1190. package/pipelines/thesis/CHAIN.md +48 -0
  1191. package/references/brain/causal-directives.md +91 -0
  1192. package/references/brain/causal-enrichment.cypher +165 -0
  1193. package/references/brain/command-triggers-schema.md +15 -0
  1194. package/references/brain/graph-architecture.md +317 -0
  1195. package/references/brain/query-patterns.md +504 -0
  1196. package/references/brain/room-hierarchy-schema.md +218 -0
  1197. package/references/brain/schema.md +86 -0
  1198. package/references/capability-radar/capabilities-index.md +269 -0
  1199. package/references/capability-radar/changelog-cache.md +95 -0
  1200. package/references/causal/causal-schema.md +103 -0
  1201. package/references/design/email-template-standard.md +169 -0
  1202. package/references/design/graph-visualization-standard.md +178 -0
  1203. package/references/design/newsletter-email-template.html +307 -0
  1204. package/references/document-generation.md +179 -0
  1205. package/references/hsi/HSI-TOOLS-REFERENCE.md +222 -0
  1206. package/references/import-config.md +141 -0
  1207. package/references/integrations/detection-patterns.md +101 -0
  1208. package/references/meeting/artifact-template.md +377 -0
  1209. package/references/meeting/cross-meeting-intelligence.md +216 -0
  1210. package/references/meeting/cross-relationship-patterns.md +202 -0
  1211. package/references/meeting/extraction-perspectives.md +225 -0
  1212. package/references/meeting/filing-protocol.md +222 -0
  1213. package/references/meeting/knowledge-typing.md +242 -0
  1214. package/references/meeting/live-join-interface.md +244 -0
  1215. package/references/meeting/section-mapping.md +192 -0
  1216. package/references/meeting/segment-classification.md +258 -0
  1217. package/references/meeting/speaker-profile-template.md +219 -0
  1218. package/references/meeting/summary-template.md +348 -0
  1219. package/references/meeting/transcript-patterns.md +226 -0
  1220. package/references/methodology/analyze-needs.md +135 -0
  1221. package/references/methodology/analyze-systems.md +121 -0
  1222. package/references/methodology/analyze-timing.md +149 -0
  1223. package/references/methodology/beautiful-question.md +109 -0
  1224. package/references/methodology/build-knowledge.md +161 -0
  1225. package/references/methodology/build-thesis-scored.md +60 -0
  1226. package/references/methodology/build-thesis.md +237 -0
  1227. package/references/methodology/causal-loop-diagrams.md +65 -0
  1228. package/references/methodology/challenge-assumptions.md +127 -0
  1229. package/references/methodology/diagnose.md +169 -0
  1230. package/references/methodology/dominant-designs.md +212 -0
  1231. package/references/methodology/explore-domains.md +147 -0
  1232. package/references/methodology/explore-futures.md +163 -0
  1233. package/references/methodology/explore-trends.md +129 -0
  1234. package/references/methodology/find-bottlenecks.md +131 -0
  1235. package/references/methodology/grade.md +211 -0
  1236. package/references/methodology/huji-stage-a-intake.md +246 -0
  1237. package/references/methodology/index.md +34 -0
  1238. package/references/methodology/leadership.md +200 -0
  1239. package/references/methodology/lean-canvas.md +116 -0
  1240. package/references/methodology/leverage-scan-signatures.md +83 -0
  1241. package/references/methodology/macro-trends.md +192 -0
  1242. package/references/methodology/map-unknowns.md +137 -0
  1243. package/references/methodology/mullins-7-domains.md +104 -0
  1244. package/references/methodology/problem-types.md +65 -0
  1245. package/references/methodology/root-cause.md +178 -0
  1246. package/references/methodology/rubric-huji.md +160 -0
  1247. package/references/methodology/sapphire-encoding.md +355 -0
  1248. package/references/methodology/scenario-plan.md +190 -0
  1249. package/references/methodology/score-innovation.md +154 -0
  1250. package/references/methodology/skillopt-judge-rubric.md +48 -0
  1251. package/references/methodology/skillopt-queries-rubric.md +60 -0
  1252. package/references/methodology/skillopt-refute-rubric.md +59 -0
  1253. package/references/methodology/skillopt-review-rubric.md +72 -0
  1254. package/references/methodology/skillopt-revise-rubric.md +48 -0
  1255. package/references/methodology/structure-argument.md +158 -0
  1256. package/references/methodology/systems-thinking.md +231 -0
  1257. package/references/methodology/think-hats.md +147 -0
  1258. package/references/methodology/triz-matrix.json +751 -0
  1259. package/references/methodology/triz-principles.md +501 -0
  1260. package/references/methodology/user-needs.md +199 -0
  1261. package/references/methodology/validate.md +163 -0
  1262. package/references/methodology/value-proposition.md +244 -0
  1263. package/references/opportunities/funding-lifecycle.md +103 -0
  1264. package/references/opportunities/grant-api-patterns.md +99 -0
  1265. package/references/opportunities/opportunity-template.md +84 -0
  1266. package/references/opportunities/tnufa-rubric.md +81 -0
  1267. package/references/personality/assessment-philosophy.md +72 -0
  1268. package/references/personality/lexicon.md +100 -0
  1269. package/references/personality/persona-chains.md +56 -0
  1270. package/references/personality/pws-lexicon-full.md +499 -0
  1271. package/references/personality/voice-dna.md +156 -0
  1272. package/references/personas/hat-perspectives.md +76 -0
  1273. package/references/personas/persona-template.md +63 -0
  1274. package/references/pipeline/act-output-contract.md +88 -0
  1275. package/references/pipeline/chains-index.md +39 -0
  1276. package/references/pws-profile-generation.md +79 -0
  1277. package/references/reasoning/reasoning-schema.md +143 -0
  1278. package/references/reasoning/reasoning-template.md +68 -0
  1279. package/references/reasoning/run-template.md +38 -0
  1280. package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +209 -0
  1281. package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +375 -0
  1282. package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +575 -0
  1283. package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +272 -0
  1284. package/references/security/agentshield-baseline.json +8 -0
  1285. package/references/security/cve-db.json +220 -0
  1286. package/references/taxonomy/TAXONOMY.md +192 -0
  1287. package/references/templates/MINTO.md +36 -0
  1288. package/references/user-research/2026-04-05-leah-lawrence-session.md +202 -0
  1289. package/references/vault-kit/README.md +35 -0
  1290. package/references/vault-kit/app.json +12 -0
  1291. package/references/vault-kit/appearance.json +12 -0
  1292. package/references/vault-kit/graph.json +35 -0
  1293. package/references/vault-kit/snippets/mindrian-destijl.css +297 -0
  1294. package/references/vault-kit/templates/new-artifact.md +37 -0
  1295. package/references/vault-kit/templates/new-meeting-note.md +35 -0
  1296. package/references/vault-kit/templates/new-team-profile.md +29 -0
  1297. package/references/vault-kit/templates/new-xref.md +35 -0
  1298. package/references/visual/ROOM.md +55 -0
  1299. package/references/visual/palette.json +54 -0
  1300. package/references/visual/symbol-system.md +151 -0
  1301. package/scripts/189-plurai-gate-check.cjs +88 -0
  1302. package/scripts/198-plurai-gate-check.cjs +118 -0
  1303. package/scripts/198-rollback-rehearsal.cjs +233 -0
  1304. package/scripts/83-scope-injection.test.cjs +648 -0
  1305. package/scripts/PYTHON_GATES.md +78 -0
  1306. package/scripts/__pycache__/compute-hsi.cpython-312.pyc +0 -0
  1307. package/scripts/__pycache__/detect-reverse-salients.cpython-312.pyc +0 -0
  1308. package/scripts/__pycache__/rs-engine.cpython-312.pyc +0 -0
  1309. package/scripts/act-command.cjs +518 -0
  1310. package/scripts/admin-brain-write.cjs +442 -0
  1311. package/scripts/admin-command-gate.cjs +178 -0
  1312. package/scripts/agentshield-scan-cli.cjs +226 -0
  1313. package/scripts/agentshield-sessionstart-scan.cjs +282 -0
  1314. package/scripts/analogy-fitness-report.cjs +266 -0
  1315. package/scripts/analyze-room +1079 -0
  1316. package/scripts/apply-teaching-content.cjs +298 -0
  1317. package/scripts/async-artifact-auto-commit.cjs +485 -0
  1318. package/scripts/audit-active-phase-resolver.cjs +160 -0
  1319. package/scripts/audit-body-shape-coverage.cjs +213 -0
  1320. package/scripts/auto-explore-drain.cjs +274 -0
  1321. package/scripts/auto-explore-fingerprint.cjs +354 -0
  1322. package/scripts/auto-explore-fire.cjs +359 -0
  1323. package/scripts/backfill-correlation-id.cjs +425 -0
  1324. package/scripts/backfill-hitl-shape.cjs +276 -0
  1325. package/scripts/backfill-hitl-shape.test.cjs +307 -0
  1326. package/scripts/backup-modifications +68 -0
  1327. package/scripts/banner +182 -0
  1328. package/scripts/brain-derivation-drain.cjs +291 -0
  1329. package/scripts/brain-derive-command.cjs +846 -0
  1330. package/scripts/brain-normalize-books.cypher +505 -0
  1331. package/scripts/brain-normalize-final.cypher +1355 -0
  1332. package/scripts/brain-normalize-problemtype.cypher +475 -0
  1333. package/scripts/brain-normalize-supplement.cypher +449 -0
  1334. package/scripts/brain-normalize-targeted.cypher +344 -0
  1335. package/scripts/brain-normalize-v194.cypher +61 -0
  1336. package/scripts/brain-normalize.cypher +530 -0
  1337. package/scripts/brain-response-sanitize-hook.cjs +165 -0
  1338. package/scripts/build-brain-census.cjs +957 -0
  1339. package/scripts/build-brain-packet-schema.cjs +225 -0
  1340. package/scripts/build-command-registry.cjs +587 -0
  1341. package/scripts/build-connector-registry.cjs +1331 -0
  1342. package/scripts/build-corpus-stats.cjs +408 -0
  1343. package/scripts/build-dist-bundles.cjs +495 -0
  1344. package/scripts/build-ecosystem-graph.cjs +490 -0
  1345. package/scripts/build-graph +1462 -0
  1346. package/scripts/build-graph-from-sqlite.cjs +97 -0
  1347. package/scripts/build-harness-manifest.cjs +1090 -0
  1348. package/scripts/build-jtbd-nudges +205 -0
  1349. package/scripts/build-new-surface.cjs +805 -0
  1350. package/scripts/build-orchestration-projection.cjs +1221 -0
  1351. package/scripts/build-render-coverage.cjs +637 -0
  1352. package/scripts/build-skill-mirrors.cjs +681 -0
  1353. package/scripts/cache-hitrate-report.cjs +216 -0
  1354. package/scripts/causal-to-graph.cjs +163 -0
  1355. package/scripts/check-abstraction-fixture-neutral.cjs +160 -0
  1356. package/scripts/check-admin-identity.cjs +212 -0
  1357. package/scripts/check-brain-tool-liveness.cjs +502 -0
  1358. package/scripts/check-card-fire.cjs +1809 -0
  1359. package/scripts/check-cirs-declaration.cjs +279 -0
  1360. package/scripts/check-deck-design.cjs +104 -0
  1361. package/scripts/check-dual-graph-health.cjs +645 -0
  1362. package/scripts/check-first-touch-drift.cjs +220 -0
  1363. package/scripts/check-flagship-floor.cjs +391 -0
  1364. package/scripts/check-framework-vocabulary-drift.cjs +563 -0
  1365. package/scripts/check-gate-seam.cjs +178 -0
  1366. package/scripts/check-graph-derive-health.cjs +208 -0
  1367. package/scripts/check-graph-export-typemap.cjs +118 -0
  1368. package/scripts/check-help-coverage.cjs +290 -0
  1369. package/scripts/check-hitl-stages.cjs +219 -0
  1370. package/scripts/check-hook-schema-compatibility.cjs +231 -0
  1371. package/scripts/check-hsi-deps +42 -0
  1372. package/scripts/check-kuzu-reintroduction.cjs +251 -0
  1373. package/scripts/check-onboard +43 -0
  1374. package/scripts/check-onboard-statusline.cjs +363 -0
  1375. package/scripts/check-palette-consistency.cjs +106 -0
  1376. package/scripts/check-pending-ambiguous.cjs +244 -0
  1377. package/scripts/check-pending-breakthrough.cjs +189 -0
  1378. package/scripts/check-pending-breakthrough.test.cjs +166 -0
  1379. package/scripts/check-pending-naming-decision.cjs +97 -0
  1380. package/scripts/check-plugin-path-anchoring.cjs +830 -0
  1381. package/scripts/check-publish-needs.cjs +126 -0
  1382. package/scripts/check-registry-drift.cjs +206 -0
  1383. package/scripts/check-release-payload-ceiling.cjs +269 -0
  1384. package/scripts/check-render-coverage.cjs +558 -0
  1385. package/scripts/check-research-isomorphism.cjs +446 -0
  1386. package/scripts/check-reward-before-investment.cjs +261 -0
  1387. package/scripts/check-room-blueprints.cjs +213 -0
  1388. package/scripts/check-schema-aliases.cjs +532 -0
  1389. package/scripts/check-shape-declaration.cjs +958 -0
  1390. package/scripts/check-shape-declaration.test.cjs +185 -0
  1391. package/scripts/check-skill-spec.cjs +312 -0
  1392. package/scripts/check-skill-vs-code-drift.cjs +178 -0
  1393. package/scripts/check-substrate.cjs +513 -0
  1394. package/scripts/check-tool-honesty.cjs +1601 -0
  1395. package/scripts/check-update +60 -0
  1396. package/scripts/check-version-and-sha.cjs +366 -0
  1397. package/scripts/check-voice-style.cjs +184 -0
  1398. package/scripts/check-worktree-hygiene.cjs +530 -0
  1399. package/scripts/classify-insight +59 -0
  1400. package/scripts/coherence-smoke-test.cjs +489 -0
  1401. package/scripts/compute-bayesian-surprise.py +175 -0
  1402. package/scripts/compute-blindspot-mass.py +209 -0
  1403. package/scripts/compute-disruption-index.py +211 -0
  1404. package/scripts/compute-element-novelty.py +254 -0
  1405. package/scripts/compute-external-whitespace.py +563 -0
  1406. package/scripts/compute-hsi.py +947 -0
  1407. package/scripts/compute-meetings-intelligence +716 -0
  1408. package/scripts/compute-opportunity-state +17 -0
  1409. package/scripts/compute-state +393 -0
  1410. package/scripts/compute-team +1112 -0
  1411. package/scripts/compute-whitespace-embeddings.py +464 -0
  1412. package/scripts/compute-whitespace-gaps.py +562 -0
  1413. package/scripts/compute_topic_forest.py +684 -0
  1414. package/scripts/consolidate-pinecone.py +265 -0
  1415. package/scripts/context-monitor +943 -0
  1416. package/scripts/create-speaker-profile +311 -0
  1417. package/scripts/cross-room-detect.cjs +195 -0
  1418. package/scripts/csv-to-idea-graph.cjs +755 -0
  1419. package/scripts/ctxl-eval.cjs +846 -0
  1420. package/scripts/curation-132-03-dedup-held-rename.cjs +395 -0
  1421. package/scripts/curation-132-05-pseudonymize.cjs +189 -0
  1422. package/scripts/derive-verb-reach-affinity.cjs +507 -0
  1423. package/scripts/detect-reverse-salients.py +242 -0
  1424. package/scripts/diagnostics-command.cjs +345 -0
  1425. package/scripts/dial-memory-refresh-command.cjs +147 -0
  1426. package/scripts/discover-analogy-whitespace.py +433 -0
  1427. package/scripts/discover-hsi-whitespace.py +352 -0
  1428. package/scripts/discover-rs-whitespace.py +327 -0
  1429. package/scripts/discovery-cycle.cjs +625 -0
  1430. package/scripts/disposition-render-v2.cjs +229 -0
  1431. package/scripts/doctor-preflight-format.cjs +101 -0
  1432. package/scripts/doctor.cjs +4327 -0
  1433. package/scripts/dogfood-bridge/append-to-queue.sh +59 -0
  1434. package/scripts/dogfood-bridge/path-filter.cjs +86 -0
  1435. package/scripts/dogfood-derive.cjs +158 -0
  1436. package/scripts/dogfood-emit.cjs +126 -0
  1437. package/scripts/empathy-observation-emit.cjs +108 -0
  1438. package/scripts/enrichment-queue-append.cjs +157 -0
  1439. package/scripts/ensure-brain-baseline.cjs +117 -0
  1440. package/scripts/entity-extract.cjs +1135 -0
  1441. package/scripts/eureka-command.cjs +687 -0
  1442. package/scripts/eureka-critic-run.cjs +662 -0
  1443. package/scripts/eureka-portfolio-report.cjs +2038 -0
  1444. package/scripts/eureka-room-report.cjs +419 -0
  1445. package/scripts/explain-decision-command.cjs +499 -0
  1446. package/scripts/export-pinecone-embeddings.cjs +516 -0
  1447. package/scripts/extract-room-intelligence.cjs +714 -0
  1448. package/scripts/fetch-brain-baseline.cjs +190 -0
  1449. package/scripts/fetch-brain-baseline.py +360 -0
  1450. package/scripts/feynman-minto-guardian.cjs +672 -0
  1451. package/scripts/feynman-timeline-refresh-command.cjs +270 -0
  1452. package/scripts/file-asset +253 -0
  1453. package/scripts/fire-sensor-event.cjs +83 -0
  1454. package/scripts/first-install-router.cjs +968 -0
  1455. package/scripts/frontmatter-schema-validator.cjs +339 -0
  1456. package/scripts/fts-index-drain.cjs +221 -0
  1457. package/scripts/generate-chat-embed.cjs +179 -0
  1458. package/scripts/generate-deck.cjs +322 -0
  1459. package/scripts/generate-export.cjs +474 -0
  1460. package/scripts/generate-hub.cjs +2553 -0
  1461. package/scripts/generate-lobby.cjs +718 -0
  1462. package/scripts/generate-presentation.cjs +988 -0
  1463. package/scripts/generate-presentation.test.cjs +405 -0
  1464. package/scripts/generate-section-intelligence.cjs +330 -0
  1465. package/scripts/generate-snapshot.cjs +1410 -0
  1466. package/scripts/generate-standalone +159 -0
  1467. package/scripts/git-ops +211 -0
  1468. package/scripts/graph-heal-pipeline.cjs +321 -0
  1469. package/scripts/gsd-artifact-graph-hook.cjs +219 -0
  1470. package/scripts/gsd-graph-derive-drain.cjs +571 -0
  1471. package/scripts/gsd-graph-derive-sweep.cjs +195 -0
  1472. package/scripts/heal-command.cjs +1365 -0
  1473. package/scripts/hedge-refit-pipeline.cjs +207 -0
  1474. package/scripts/help-renderer.cjs +303 -0
  1475. package/scripts/hmi-compliance-poll.cjs +451 -0
  1476. package/scripts/hmi-status-command.cjs +510 -0
  1477. package/scripts/hooked-rescore-117.cjs +224 -0
  1478. package/scripts/hooks/pre-commit +533 -0
  1479. package/scripts/hooks/pre-commit-room-minto-guard.cmd +43 -0
  1480. package/scripts/hooks/pre-commit-room-minto-guard.sh +533 -0
  1481. package/scripts/hsi-to-graph.cjs +194 -0
  1482. package/scripts/huji-batch.cjs +821 -0
  1483. package/scripts/huji-eval.cjs +1158 -0
  1484. package/scripts/huji-intake.cjs +563 -0
  1485. package/scripts/huji-pin-smoketest.cjs +454 -0
  1486. package/scripts/huji-run-one-async.cjs +305 -0
  1487. package/scripts/huji-run-one.cjs +671 -0
  1488. package/scripts/install-pre-commit.sh +113 -0
  1489. package/scripts/intent-classifier +106 -0
  1490. package/scripts/intent-classifier.cjs +3620 -0
  1491. package/scripts/interpret-whitespace.cjs +691 -0
  1492. package/scripts/jtbd-command.cjs +810 -0
  1493. package/scripts/jtbd-update.cjs +299 -0
  1494. package/scripts/label-topic-forest.cjs +667 -0
  1495. package/scripts/learn-from-usage +168 -0
  1496. package/scripts/lib/__pycache__/ensure_ml_deps.cpython-312.pyc +0 -0
  1497. package/scripts/lib/ensure_ml_deps.py +97 -0
  1498. package/scripts/load-embeddings-into-neo4j.cjs +569 -0
  1499. package/scripts/memory-artifact-graph-hook.cjs +191 -0
  1500. package/scripts/memory-command.cjs +687 -0
  1501. package/scripts/memory-completion-detector.cjs +217 -0
  1502. package/scripts/memory-lifecycle.cjs +620 -0
  1503. package/scripts/memory-resume-nudge.cjs +233 -0
  1504. package/scripts/methodology-ingest-local.sh +36 -0
  1505. package/scripts/migrate-brain-mcp-from-http-to-stdio.cjs +190 -0
  1506. package/scripts/migrate-brain-mcp-from-http-to-stdio.test.cjs +242 -0
  1507. package/scripts/migrate-hats-to-roomdb.cjs +217 -0
  1508. package/scripts/migrate-lazygraph.cjs +250 -0
  1509. package/scripts/migrate-minto-schema-v88.cjs +296 -0
  1510. package/scripts/migrate-plugin-root-refs.cjs +168 -0
  1511. package/scripts/migrate-room-sections-v275.cjs +556 -0
  1512. package/scripts/migrate-rooms +417 -0
  1513. package/scripts/migrate-skill-frontmatter.cjs +472 -0
  1514. package/scripts/migrate-stale-user-settings.cjs +296 -0
  1515. package/scripts/migrate-telemetry-v1.cjs +384 -0
  1516. package/scripts/migrate-telemetry-v1.test.cjs +356 -0
  1517. package/scripts/minto-debouncer.cjs +428 -0
  1518. package/scripts/mos-status.cjs +622 -0
  1519. package/scripts/mva-detect.cjs +229 -0
  1520. package/scripts/mva-run.cjs +36 -0
  1521. package/scripts/on-agent-complete +163 -0
  1522. package/scripts/on-cwd-changed +149 -0
  1523. package/scripts/on-file-changed +68 -0
  1524. package/scripts/on-stop +617 -0
  1525. package/scripts/on-task-complete +194 -0
  1526. package/scripts/operator-command.cjs +858 -0
  1527. package/scripts/operator-update.cjs +308 -0
  1528. package/scripts/part8-egress-guard-hook.cjs +229 -0
  1529. package/scripts/pipeline-command.cjs +271 -0
  1530. package/scripts/post-compact +383 -0
  1531. package/scripts/post-update-activation.cjs +339 -0
  1532. package/scripts/post-write +283 -0
  1533. package/scripts/power-demo-prompt.md +621 -0
  1534. package/scripts/pre-compact +273 -0
  1535. package/scripts/preflight-auto-explore.cjs +314 -0
  1536. package/scripts/preflight-doctor.cjs +225 -0
  1537. package/scripts/preflight-release-drift.cjs +168 -0
  1538. package/scripts/preflight-tension-surface.cjs +414 -0
  1539. package/scripts/probe-brain-contract.cjs +502 -0
  1540. package/scripts/publish-ops +346 -0
  1541. package/scripts/query-efficiency-telemetry.cjs +364 -0
  1542. package/scripts/query-semantic-scholar.cjs +545 -0
  1543. package/scripts/reapply-modifications +49 -0
  1544. package/scripts/reassign-primary.cjs +125 -0
  1545. package/scripts/recompile-room-references.cjs +601 -0
  1546. package/scripts/release-beta-preflight.sh +69 -0
  1547. package/scripts/render-pdf +588 -0
  1548. package/scripts/render-viz +190 -0
  1549. package/scripts/research-speaker +239 -0
  1550. package/scripts/resolve-room +204 -0
  1551. package/scripts/restore-post-compact-context.cjs +320 -0
  1552. package/scripts/room-auto-create-nudge.cjs +136 -0
  1553. package/scripts/room-naming-selector.cjs +201 -0
  1554. package/scripts/room-registry +767 -0
  1555. package/scripts/rs-discovery-engine.cjs +725 -0
  1556. package/scripts/rs-engine.py +2073 -0
  1557. package/scripts/rs-experts-command.cjs +300 -0
  1558. package/scripts/rs-explain-command.cjs +323 -0
  1559. package/scripts/rs-fetch-command.cjs +170 -0
  1560. package/scripts/rs-thesis-command.cjs +203 -0
  1561. package/scripts/rs-vector-bridge.cjs +410 -0
  1562. package/scripts/run-harness.cjs +890 -0
  1563. package/scripts/scout-cadence-guard.cjs +323 -0
  1564. package/scripts/scout-cadence-runner.cjs +509 -0
  1565. package/scripts/scout-telemetry-aggregator.cjs +268 -0
  1566. package/scripts/sealed-walker.py +96 -0
  1567. package/scripts/seed-brain-commands.cjs +324 -0
  1568. package/scripts/self-update +105 -0
  1569. package/scripts/sentinel-deadline-monitor +241 -0
  1570. package/scripts/sentinel-health-check +198 -0
  1571. package/scripts/sentinel-snapshot +42 -0
  1572. package/scripts/serve-dashboard +103 -0
  1573. package/scripts/serve-dashboard-live +932 -0
  1574. package/scripts/serve-presentation +97 -0
  1575. package/scripts/serve-wiki +90 -0
  1576. package/scripts/session-end-presence.cjs +79 -0
  1577. package/scripts/session-start +1942 -0
  1578. package/scripts/sessionstart-coordinator.cjs +249 -0
  1579. package/scripts/sessionstart-npm-reconcile.cjs +111 -0
  1580. package/scripts/sessionstart-post-update-preflight.cjs +303 -0
  1581. package/scripts/sessionstart-reference-now-seed.cjs +137 -0
  1582. package/scripts/setup-hooks.sh +112 -0
  1583. package/scripts/skillopt-codereview.cjs +830 -0
  1584. package/scripts/skillopt-eval.cjs +519 -0
  1585. package/scripts/skillopt-funnel.cjs +1076 -0
  1586. package/scripts/skillopt-genqueries.cjs +571 -0
  1587. package/scripts/skillopt-inventory.cjs +319 -0
  1588. package/scripts/skillopt-merge.cjs +656 -0
  1589. package/scripts/skillopt-triggerloop.cjs +1126 -0
  1590. package/scripts/soft-alias-runner.cjs +116 -0
  1591. package/scripts/stamp-artifact-write.cjs +276 -0
  1592. package/scripts/stamp-firing-block.cjs +325 -0
  1593. package/scripts/state-write.cjs +97 -0
  1594. package/scripts/statusline-fallback-echo.cjs +297 -0
  1595. package/scripts/statusline-mos +116 -0
  1596. package/scripts/statusline-mos-dispatch +127 -0
  1597. package/scripts/suggest-next-command.cjs +416 -0
  1598. package/scripts/sweep-skill-descriptions.cjs +263 -0
  1599. package/scripts/sync-rooms-brain +438 -0
  1600. package/scripts/sync-rooms-graph +264 -0
  1601. package/scripts/telemetry-command-invocation.cjs +120 -0
  1602. package/scripts/test-doctor-recovery.cjs +242 -0
  1603. package/scripts/test-fresh-install.md +140 -0
  1604. package/scripts/track-analytics +156 -0
  1605. package/scripts/transcribe-audio +148 -0
  1606. package/scripts/transcript-ingest.cjs +225 -0
  1607. package/scripts/update-icm-index +153 -0
  1608. package/scripts/v182-brain-optimize.cypher +1191 -0
  1609. package/scripts/validate-model-profiles +93 -0
  1610. package/scripts/vault-content-reformatter.cjs +581 -0
  1611. package/scripts/vault-export-orchestrator.cjs +400 -0
  1612. package/scripts/vault-footer-injector.cjs +315 -0
  1613. package/scripts/vault-import.cjs +839 -0
  1614. package/scripts/vault-integration-test.cjs +318 -0
  1615. package/scripts/vault-regenerate-all.cjs +216 -0
  1616. package/scripts/vault-regenerate-all.test.cjs +138 -0
  1617. package/scripts/vault-rules-generator.cjs +220 -0
  1618. package/scripts/vault-section-minto-generator.cjs +1642 -0
  1619. package/scripts/vault-section-minto-generator.integration.test.cjs +576 -0
  1620. package/scripts/vault-section-minto-generator.test.cjs +291 -0
  1621. package/scripts/vault-section-state-generator.cjs +385 -0
  1622. package/scripts/vault-welcome-generator.cjs +403 -0
  1623. package/scripts/vault-wikilink-injector.cjs +449 -0
  1624. package/scripts/verify-phase-132.cjs +338 -0
  1625. package/scripts/verify-release +744 -0
  1626. package/scripts/whitespace-command.cjs +831 -0
  1627. package/scripts/whitespace-to-brain.cjs +383 -0
  1628. package/scripts/whitespace-to-graph.cjs +220 -0
  1629. package/scripts/wikilink-batch.cjs +102 -0
  1630. package/scripts/wikilink-file.cjs +139 -0
  1631. package/scripts/write-bridge-artifacts.cjs +140 -0
  1632. package/scripts/write-scope-check +12 -0
  1633. package/scripts/write-scope-check.cjs +461 -0
  1634. package/scripts/write-whitespace-sections.cjs +483 -0
  1635. package/settings.json +7 -0
  1636. package/skills/act/SKILL.md +523 -0
  1637. package/skills/admin/SKILL.md +437 -0
  1638. package/skills/agentshield/SKILL.md +50 -0
  1639. package/skills/analyze-needs/SKILL.md +74 -0
  1640. package/skills/analyze-systems/SKILL.md +69 -0
  1641. package/skills/analyze-timing/SKILL.md +94 -0
  1642. package/skills/auto-explore/SKILL.md +84 -0
  1643. package/skills/beautiful-question/SKILL.md +72 -0
  1644. package/skills/bono/SKILL.md +146 -0
  1645. package/skills/brain-connector/SKILL.md +206 -0
  1646. package/skills/brain-derive/SKILL.md +140 -0
  1647. package/skills/build-knowledge/SKILL.md +118 -0
  1648. package/skills/build-thesis/SKILL.md +90 -0
  1649. package/skills/causal/SKILL.md +265 -0
  1650. package/skills/challenge-assumptions/SKILL.md +74 -0
  1651. package/skills/client-discovery-interview/SKILL.md +94 -0
  1652. package/skills/client-discovery-interview/discovery-scaffold.json +41 -0
  1653. package/skills/client-discovery-interview/question-bank.md +149 -0
  1654. package/skills/compare-ventures/SKILL.md +113 -0
  1655. package/skills/context-engine/SKILL.md +169 -0
  1656. package/skills/conversation-mode/SKILL.md +189 -0
  1657. package/skills/correct-reference-now/SKILL.md +86 -0
  1658. package/skills/dashboard/SKILL.md +142 -0
  1659. package/skills/deck/SKILL.md +113 -0
  1660. package/skills/deep-grade/SKILL.md +210 -0
  1661. package/skills/diagnose/SKILL.md +128 -0
  1662. package/skills/diagnostics/SKILL.md +193 -0
  1663. package/skills/dial-memory-refresh/SKILL.md +116 -0
  1664. package/skills/diffusion/SKILL.md +125 -0
  1665. package/skills/discover/SKILL.md +216 -0
  1666. package/skills/doctor/SKILL.md +269 -0
  1667. package/skills/dogfood-flush/SKILL.md +133 -0
  1668. package/skills/dominant-designs/SKILL.md +72 -0
  1669. package/skills/eureka/SKILL.md +313 -0
  1670. package/skills/explain-decision/SKILL.md +138 -0
  1671. package/skills/explore-domains/SKILL.md +74 -0
  1672. package/skills/explore-futures/SKILL.md +64 -0
  1673. package/skills/explore-opportunity/SKILL.md +168 -0
  1674. package/skills/explore-trends/SKILL.md +74 -0
  1675. package/skills/export/SKILL.md +126 -0
  1676. package/skills/feynman-timeline-refresh/SKILL.md +105 -0
  1677. package/skills/file-meeting/SKILL.md +1190 -0
  1678. package/skills/find-analogies/SKILL.md +360 -0
  1679. package/skills/find-bottlenecks/SKILL.md +104 -0
  1680. package/skills/find-connections/SKILL.md +108 -0
  1681. package/skills/funding/SKILL.md +110 -0
  1682. package/skills/futures/SKILL.md +124 -0
  1683. package/skills/grade/SKILL.md +252 -0
  1684. package/skills/grade-grant/SKILL.md +293 -0
  1685. package/skills/graph/SKILL.md +216 -0
  1686. package/skills/hat-briefing/SKILL.md +160 -0
  1687. package/skills/heal/SKILL.md +69 -0
  1688. package/skills/help/SKILL.md +172 -0
  1689. package/skills/hmi-status/SKILL.md +73 -0
  1690. package/skills/ignite/SKILL.md +225 -0
  1691. package/skills/ingest-methodology/SKILL.md +125 -0
  1692. package/skills/intel-pipeline/SKILL.md +128 -0
  1693. package/skills/intelligence-orchestrator/SKILL.md +262 -0
  1694. package/skills/jtbd/SKILL.md +261 -0
  1695. package/skills/larry-personality/SKILL.md +570 -0
  1696. package/skills/larry-personality/framework-chains.md +92 -0
  1697. package/skills/larry-personality/mode-engine.md +185 -0
  1698. package/skills/leadership/SKILL.md +109 -0
  1699. package/skills/lean-canvas/SKILL.md +70 -0
  1700. package/skills/macro-trends/SKILL.md +84 -0
  1701. package/skills/map-unknowns/SKILL.md +72 -0
  1702. package/skills/memory/SKILL.md +212 -0
  1703. package/skills/memory-cortex-reach/SKILL.md +80 -0
  1704. package/skills/models/SKILL.md +197 -0
  1705. package/skills/mos/SKILL.md +160 -0
  1706. package/skills/mos-deck-engine/SKILL.md +329 -0
  1707. package/skills/mos-reason/SKILL.md +484 -0
  1708. package/skills/mullins/SKILL.md +151 -0
  1709. package/skills/mullins-scaffold/SKILL.md +132 -0
  1710. package/skills/mullins-scaffold/scaffold.json +223 -0
  1711. package/skills/mva-brief/SKILL.md +87 -0
  1712. package/skills/mva-option/SKILL.md +120 -0
  1713. package/skills/mva-pipeline/SKILL.md +158 -0
  1714. package/skills/mva-report/SKILL.md +79 -0
  1715. package/skills/new-project/SKILL.md +629 -0
  1716. package/skills/new-surface/SKILL.md +112 -0
  1717. package/skills/onboard/SKILL.md +485 -0
  1718. package/skills/operator/SKILL.md +167 -0
  1719. package/skills/opportunities/SKILL.md +171 -0
  1720. package/skills/organize/SKILL.md +69 -0
  1721. package/skills/persona/SKILL.md +272 -0
  1722. package/skills/pipeline/SKILL.md +164 -0
  1723. package/skills/present/SKILL.md +123 -0
  1724. package/skills/publish/SKILL.md +224 -0
  1725. package/skills/pws-brain/SKILL.md +152 -0
  1726. package/skills/pws-methodology/SKILL.md +92 -0
  1727. package/skills/qualify-opportunity/SKILL.md +111 -0
  1728. package/skills/query/SKILL.md +68 -0
  1729. package/skills/radar/SKILL.md +106 -0
  1730. package/skills/reanalyze/SKILL.md +122 -0
  1731. package/skills/research/SKILL.md +462 -0
  1732. package/skills/room/SKILL.md +381 -0
  1733. package/skills/room-passive/SKILL.md +174 -0
  1734. package/skills/room-proactive/SKILL.md +344 -0
  1735. package/skills/rooms/SKILL.md +678 -0
  1736. package/skills/root-cause/SKILL.md +73 -0
  1737. package/skills/rs-experts/SKILL.md +151 -0
  1738. package/skills/rs-explain/SKILL.md +130 -0
  1739. package/skills/rs-fetch/SKILL.md +115 -0
  1740. package/skills/rs-thesis/SKILL.md +129 -0
  1741. package/skills/scenario-plan/SKILL.md +76 -0
  1742. package/skills/scheduled-tasks/SKILL.md +301 -0
  1743. package/skills/score-innovation/SKILL.md +74 -0
  1744. package/skills/scout/SKILL.md +370 -0
  1745. package/skills/setup/SKILL.md +654 -0
  1746. package/skills/show/SKILL.md +68 -0
  1747. package/skills/skill/SKILL.md +104 -0
  1748. package/skills/snapshot/SKILL.md +178 -0
  1749. package/skills/speakers/SKILL.md +116 -0
  1750. package/skills/splash/SKILL.md +54 -0
  1751. package/skills/stance/SKILL.md +89 -0
  1752. package/skills/status/SKILL.md +107 -0
  1753. package/skills/structure-argument/SKILL.md +78 -0
  1754. package/skills/suggest-next/SKILL.md +137 -0
  1755. package/skills/systems-thinking/SKILL.md +220 -0
  1756. package/skills/think-hats/SKILL.md +82 -0
  1757. package/skills/trending-to-absurd/SKILL.md +100 -0
  1758. package/skills/ui-system/SKILL.md +474 -0
  1759. package/skills/ui-system/design-system/M-OS-DESIGN-SYSTEM.md +273 -0
  1760. package/skills/ui-system/design-system/SPEC.md +72 -0
  1761. package/skills/ui-system/design-system/image-prompt-style.md +29 -0
  1762. package/skills/ui-system/design-system/mos-design-system.css +240 -0
  1763. package/skills/ui-system/rules/design-system.md +60 -0
  1764. package/skills/ui-system/rules/dual-palette.md +156 -0
  1765. package/skills/ui-system/rules/glyph-disambiguation.md +171 -0
  1766. package/skills/ui-system/rules/shape-f-zero-and-six.md +169 -0
  1767. package/skills/update/SKILL.md +254 -0
  1768. package/skills/user-needs/SKILL.md +73 -0
  1769. package/skills/validate/SKILL.md +73 -0
  1770. package/skills/value-proposition/SKILL.md +141 -0
  1771. package/skills/vault/SKILL.md +326 -0
  1772. package/skills/visualize/SKILL.md +69 -0
  1773. package/skills/whitespace/SKILL.md +539 -0
  1774. package/skills/wiki/SKILL.md +94 -0
  1775. package/templates/_base.html +20 -0
  1776. package/templates/chat-panel.html +205 -0
  1777. package/templates/constellation-chat-hooks.js +89 -0
  1778. package/templates/constellation.html +1272 -0
  1779. package/templates/destijl-base.css +268 -0
  1780. package/templates/discovery/discovery-brief-template.md +97 -0
  1781. package/templates/due-diligence.html +49 -0
  1782. package/templates/executive-summary.html +40 -0
  1783. package/templates/icm/CLAUDE.md +31 -0
  1784. package/templates/icm/GROUP-CLAUDE.md +33 -0
  1785. package/templates/icm/INDEX.md +26 -0
  1786. package/templates/import/stage-contracts/01-ingest.md +34 -0
  1787. package/templates/import/stage-contracts/02-classify.md +48 -0
  1788. package/templates/import/stage-contracts/03-route.md +42 -0
  1789. package/templates/import/stage-contracts/04-enrich.md +40 -0
  1790. package/templates/investment-thesis.html +25 -0
  1791. package/templates/meeting-report.html +361 -0
  1792. package/templates/presentation/dashboard.html +1150 -0
  1793. package/templates/presentation/deck.html +540 -0
  1794. package/templates/presentation/diagrams.html +437 -0
  1795. package/templates/presentation/graph.html +391 -0
  1796. package/templates/presentation/insights.html +548 -0
  1797. package/templates/presentation/wiki.html +533 -0
  1798. package/templates/profile.html +136 -0
  1799. package/templates/room-context/last-session.md +56 -0
  1800. package/templates/room-context/methodology-history.md +28 -0
  1801. package/templates/room-context/rejection-log.md +25 -0
  1802. package/templates/room-context/weekly-digest.md +54 -0
  1803. package/templates/room-skeleton/MINTO.md.tmpl +19 -0
  1804. package/templates/room-skeleton/ROOM.md.identity.tmpl +13 -0
  1805. package/templates/room-skeleton/ROOM.md.section.tmpl +33 -0
  1806. package/templates/room-skeleton/STATE.md.tmpl +33 -0
  1807. package/templates/room-skeleton/USER.md.tmpl +23 -0
  1808. package/templates/room-skeleton/references/.gitkeep +0 -0
  1809. package/templates/room-skeleton/references/SECTION-SCHEMA.md +213 -0
  1810. package/templates/room-skeleton/references/SUB-SCHEMAS.md +91 -0
  1811. package/templates/room-skeleton/section-contracts/.gitkeep +0 -0
  1812. package/templates/room-skeleton/section-contracts/business-model.md +32 -0
  1813. package/templates/room-skeleton/section-contracts/competitive-analysis.md +33 -0
  1814. package/templates/room-skeleton/section-contracts/financial-model.md +30 -0
  1815. package/templates/room-skeleton/section-contracts/funding.md +41 -0
  1816. package/templates/room-skeleton/section-contracts/legal-ip.md +30 -0
  1817. package/templates/room-skeleton/section-contracts/market-analysis.md +32 -0
  1818. package/templates/room-skeleton/section-contracts/opportunity-bank.md +39 -0
  1819. package/templates/room-skeleton/section-contracts/problem-definition.md +32 -0
  1820. package/templates/room-skeleton/section-contracts/solution-design.md +36 -0
  1821. package/templates/room-skeleton/section-contracts/strategy.md +35 -0
  1822. package/templates/room-skeleton/section-contracts/team-execution.md +36 -0
  1823. package/templates/shared.css +427 -0
  1824. package/templates/showcase/blueprint.html +432 -0
  1825. package/templates/showcase/library.html +571 -0
  1826. package/templates/showcase/narrative.html +361 -0
  1827. package/templates/showcase/overview.html +468 -0
  1828. package/templates/showcase/synthesis.html +473 -0
  1829. package/templates/signature-footer.html +34 -0
@@ -0,0 +1,1365 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * Copyright (c) 2026 Mindrian. BSL 1.1.
4
+ * (Business Source License 1.1; SPDX BUSL-1.1; see LICENSE.)
5
+ *
6
+ * Phase 94.1-01 -- /mos:heal command orchestrator.
7
+ *
8
+ * Wraps the 10-step room wiring heal recipe dog-fooded on the mindrianOS
9
+ * room on 2026-04-29. Source-of-truth recipe at:
10
+ * ~/MindrianRooms/mindrianOS/methodology/2026-04-29-v1-11-0-room-
11
+ * wiring-heal-process.md
12
+ *
13
+ * Canon traceability:
14
+ * Part 7 (Reuse Before Build): wraps existing scripts/migrate-lazygraph
15
+ * .cjs + scripts/vault-section-state-generator.cjs + scripts/vault-
16
+ * section-minto-generator.cjs + scripts/compute-state. Zero net-new
17
+ * methodology.
18
+ * Part 4 (Every Choice Is Graph Data): writes .mindrian/heal-log.json
19
+ * capturing every section touched + every transition + every result.
20
+ * Part 8 (Graph Boundary): heal is LOCAL-only. Reads STATE.md / ROOM.md
21
+ * / MINTO.md, runs local graph rebuild, writes local heal-log. Zero
22
+ * Brain queries; brain-derivation-queue is only enqueued (read-only),
23
+ * never drained inside heal (drain deferred to v1.12 candidate plan).
24
+ *
25
+ * USAGE
26
+ * node scripts/heal-command.cjs # heal cwd as room
27
+ * node scripts/heal-command.cjs <room-dir> # heal specific room
28
+ * node scripts/heal-command.cjs --dry-run # plan only, zero mutation
29
+ * node scripts/heal-command.cjs --skip-step <N> # skip step N for re-runs
30
+ * node scripts/heal-command.cjs --section <s> # restrict to one section
31
+ *
32
+ * runHeal(roomDir, opts) -> heal-log envelope (per <interfaces> in PLAN).
33
+ *
34
+ * EXIT CODES
35
+ * 0 any-step-success (one or more steps succeeded; default healthy run)
36
+ * 2 no-step-success (every step errored; rare hard failure)
37
+ *
38
+ * NEVER throws on per-section failure. Always completes all 10 steps with
39
+ * status logged. Mega-section MINTO writes that fail FEYNMINTO-01 budget
40
+ * are gracefully degraded: status='blocked_feynminto_01' + tier-0
41
+ * fallback + heal continues.
42
+ */
43
+
44
+ 'use strict';
45
+
46
+ const fs = require('node:fs');
47
+ const path = require('node:path');
48
+ const { spawnSync } = require('node:child_process');
49
+
50
+ const SCHEMA_VERSION = '1.0';
51
+
52
+ const CANONICAL_SECTIONS = [
53
+ 'problem-definition',
54
+ 'market-analysis',
55
+ 'solution-design',
56
+ 'business-model',
57
+ 'competitive-analysis',
58
+ 'team-execution',
59
+ 'legal-ip',
60
+ 'financial-model',
61
+ ];
62
+
63
+ const STEP_NAMES = [
64
+ 'step_01_backup',
65
+ 'step_02_scaffold_sections',
66
+ 'step_03_section_seed',
67
+ 'step_04_lazygraph_rebuild',
68
+ 'step_05_backfill_room_md',
69
+ 'step_06_section_state',
70
+ 'step_07_section_minto',
71
+ 'step_08_queue_check',
72
+ 'step_09_root_state',
73
+ 'step_10_invariant_scan',
74
+ 'step_11_hats_migration',
75
+ ];
76
+
77
+ const REPO_ROOT = path.resolve(__dirname, '..');
78
+ const SCRIPT_MIGRATE = path.join(REPO_ROOT, 'scripts', 'migrate-lazygraph.cjs');
79
+ const SCRIPT_HATS = path.join(REPO_ROOT, 'scripts', 'migrate-hats-to-roomdb.cjs');
80
+ const SCRIPT_SECTION_STATE = path.join(REPO_ROOT, 'scripts', 'vault-section-state-generator.cjs');
81
+ const SCRIPT_SECTION_MINTO = path.join(REPO_ROOT, 'scripts', 'vault-section-minto-generator.cjs');
82
+ const SCRIPT_COMPUTE_STATE = path.join(REPO_ROOT, 'scripts', 'compute-state');
83
+
84
+ // ---------- Helpers ----------
85
+
86
+ function utcStamp() {
87
+ // YYYYMMDD-HHMMSS UTC
88
+ const d = new Date();
89
+ const y = d.getUTCFullYear();
90
+ const m = String(d.getUTCMonth() + 1).padStart(2, '0');
91
+ const day = String(d.getUTCDate()).padStart(2, '0');
92
+ const hh = String(d.getUTCHours()).padStart(2, '0');
93
+ const mm = String(d.getUTCMinutes()).padStart(2, '0');
94
+ const ss = String(d.getUTCSeconds()).padStart(2, '0');
95
+ return y + m + day + '-' + hh + mm + ss;
96
+ }
97
+
98
+ function nowIso() {
99
+ return new Date().toISOString();
100
+ }
101
+
102
+ function safeMkdir(p) {
103
+ try { fs.mkdirSync(p, { recursive: true }); } catch (_e) { /* best effort */ }
104
+ }
105
+
106
+ function safeReadFile(p) {
107
+ try { return fs.readFileSync(p, 'utf8'); } catch (_e) { return null; }
108
+ }
109
+
110
+ function safeWriteFile(p, body) {
111
+ try {
112
+ safeMkdir(path.dirname(p));
113
+ fs.writeFileSync(p, body, 'utf8');
114
+ return true;
115
+ } catch (_e) {
116
+ return false;
117
+ }
118
+ }
119
+
120
+ function copyFileBestEffort(src, dst) {
121
+ try {
122
+ const body = fs.readFileSync(src);
123
+ safeMkdir(path.dirname(dst));
124
+ fs.writeFileSync(dst, body);
125
+ return true;
126
+ } catch (_e) {
127
+ return false;
128
+ }
129
+ }
130
+
131
+ function listSectionDirs(roomDir) {
132
+ // Returns canonical section names that exist on disk under roomDir,
133
+ // PLUS any extension section directories (excluding hidden/dot dirs
134
+ // and .heal-backup).
135
+ const out = new Set();
136
+ try {
137
+ for (const entry of fs.readdirSync(roomDir, { withFileTypes: true })) {
138
+ if (!entry.isDirectory()) continue;
139
+ if (entry.name.startsWith('.')) continue;
140
+ if (entry.name === 'node_modules') continue;
141
+ out.add(entry.name);
142
+ }
143
+ } catch (_e) { /* best effort */ }
144
+ return Array.from(out).sort();
145
+ }
146
+
147
+ function hasArtifacts(sectionDir) {
148
+ try {
149
+ const files = fs.readdirSync(sectionDir);
150
+ for (const f of files) {
151
+ if (f === 'ROOM.md' || f === 'STATE.md' || f === 'MINTO.md' || f === 'BRAIN.md') continue;
152
+ if (f.endsWith('.md')) return true;
153
+ }
154
+ } catch (_e) { /* best effort */ }
155
+ return false;
156
+ }
157
+
158
+ function nowMs() { return Date.now(); }
159
+
160
+ // ---------- Step implementations ----------
161
+
162
+ /**
163
+ * Step 1: Backup current state.
164
+ * - Create .heal-backup/<TS>/ (UTC YYYYMMDD-HHMMSS).
165
+ * - Copy .mindrian/invariant-report.json + minto-stale.json +
166
+ * brain-derivation-queue.json (if present).
167
+ * - Copy root STATE.md + per-section ROOM.md / STATE.md / MINTO.md.
168
+ * - Idempotent: backup is timestamped so re-runs land in distinct dirs.
169
+ * - Best-effort: missing files skip silently.
170
+ */
171
+ function step01Backup(ctx) {
172
+ const start = nowMs();
173
+ if (ctx.dryRun) {
174
+ return {
175
+ status: 'skipped',
176
+ duration_ms: nowMs() - start,
177
+ details: { reason: 'dry-run', planned_backup_dir: ctx.backupDir },
178
+ };
179
+ }
180
+
181
+ let copied = 0;
182
+ safeMkdir(ctx.backupDir);
183
+
184
+ const mindrianFiles = [
185
+ 'invariant-report.json',
186
+ 'minto-stale.json',
187
+ 'brain-derivation-queue.json',
188
+ ];
189
+ for (const f of mindrianFiles) {
190
+ const src = path.join(ctx.roomDir, '.mindrian', f);
191
+ if (fs.existsSync(src)) {
192
+ const dst = path.join(ctx.backupDir, '.mindrian', f);
193
+ if (copyFileBestEffort(src, dst)) copied++;
194
+ }
195
+ }
196
+
197
+ // Root STATE.md
198
+ const rootState = path.join(ctx.roomDir, 'STATE.md');
199
+ if (fs.existsSync(rootState)) {
200
+ if (copyFileBestEffort(rootState, path.join(ctx.backupDir, 'STATE.md'))) copied++;
201
+ }
202
+
203
+ // Per-section MOC files.
204
+ const sections = listSectionDirs(ctx.roomDir);
205
+ for (const s of sections) {
206
+ for (const moc of ['ROOM.md', 'STATE.md', 'MINTO.md']) {
207
+ const src = path.join(ctx.roomDir, s, moc);
208
+ if (fs.existsSync(src)) {
209
+ if (copyFileBestEffort(src, path.join(ctx.backupDir, s, moc))) copied++;
210
+ }
211
+ }
212
+ }
213
+
214
+ return {
215
+ status: copied > 0 ? 'ok' : 'skipped',
216
+ duration_ms: nowMs() - start,
217
+ details: { backup_dir: ctx.backupDir, files_copied: copied },
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Step 2: Create missing canonical sections.
223
+ * - Idempotent mkdir for each of 8 canonical sections.
224
+ * - Records which sections were newly created vs already present.
225
+ */
226
+ function step02ScaffoldSections(ctx) {
227
+ const start = nowMs();
228
+ const created = [];
229
+ const present = [];
230
+
231
+ for (const s of CANONICAL_SECTIONS) {
232
+ const sectionDir = path.join(ctx.roomDir, s);
233
+ if (fs.existsSync(sectionDir)) {
234
+ present.push(s);
235
+ continue;
236
+ }
237
+ if (ctx.dryRun) {
238
+ created.push(s);
239
+ continue;
240
+ }
241
+ try {
242
+ fs.mkdirSync(sectionDir, { recursive: true });
243
+ created.push(s);
244
+ } catch (_e) {
245
+ // ignore; will surface via missing-section in later steps
246
+ }
247
+ }
248
+
249
+ return {
250
+ status: ctx.dryRun ? 'skipped' : (created.length > 0 ? 'ok' : 'skipped'),
251
+ duration_ms: nowMs() - start,
252
+ details: { created, already_present: present },
253
+ };
254
+ }
255
+
256
+ /**
257
+ * Step 3: Write a section seed in any newly-created section.
258
+ * - Filename: 01-section-seed.md
259
+ * - Contains: section purpose + what goes here + 2-3 open questions.
260
+ * - Skipped for sections that already have at least one artifact.
261
+ */
262
+ function step03SectionSeed(ctx) {
263
+ const start = nowMs();
264
+ const seeded = [];
265
+ const skipped = [];
266
+
267
+ for (const s of CANONICAL_SECTIONS) {
268
+ const sectionDir = path.join(ctx.roomDir, s);
269
+ if (!fs.existsSync(sectionDir)) {
270
+ skipped.push({ section: s, reason: 'directory_absent' });
271
+ continue;
272
+ }
273
+ if (hasArtifacts(sectionDir)) {
274
+ skipped.push({ section: s, reason: 'artifacts_present' });
275
+ continue;
276
+ }
277
+ if (ctx.dryRun) {
278
+ seeded.push(s);
279
+ continue;
280
+ }
281
+
282
+ const seedPath = path.join(sectionDir, '01-section-seed.md');
283
+ if (fs.existsSync(seedPath)) {
284
+ skipped.push({ section: s, reason: 'seed_already_present' });
285
+ continue;
286
+ }
287
+
288
+ const body =
289
+ '---\n' +
290
+ 'title: ' + s + ' section seed\n' +
291
+ 'section: ' + s + '\n' +
292
+ 'date: ' + new Date().toISOString().slice(0, 10) + '\n' +
293
+ 'kind: section-seed\n' +
294
+ '---\n\n' +
295
+ '# ' + s + '\n\n' +
296
+ '## Purpose\n\n' +
297
+ 'Capture artifacts, evidence, and open questions for the ' + s + '\n' +
298
+ 'subsystem of the venture.\n\n' +
299
+ '## What goes here\n\n' +
300
+ '- Claims with evidence tier (Academic / Operational / Practitioner / None)\n' +
301
+ '- Cross-references to other sections via wikilinks\n' +
302
+ '- Decision history and rejection reasons (Canon Part 4)\n\n' +
303
+ '## Open questions\n\n' +
304
+ '1. What is the strongest evidence currently available?\n' +
305
+ '2. What assumptions are still untested?\n' +
306
+ '3. Which other sections does this connect to?\n';
307
+
308
+ if (safeWriteFile(seedPath, body)) {
309
+ seeded.push(s);
310
+ } else {
311
+ skipped.push({ section: s, reason: 'write_failed' });
312
+ }
313
+ }
314
+
315
+ return {
316
+ status: ctx.dryRun ? 'skipped' : (seeded.length > 0 ? 'ok' : 'skipped'),
317
+ duration_ms: nowMs() - start,
318
+ details: { seeded, skipped },
319
+ };
320
+ }
321
+
322
+ /**
323
+ * Step 4: Refresh .mindrian/room.db.
324
+ * - Wraps scripts/migrate-lazygraph.cjs --force.
325
+ * - Captures stdout/stderr; exit code maps to status.
326
+ */
327
+ function step04LazygraphRebuild(ctx) {
328
+ const start = nowMs();
329
+ if (ctx.dryRun) {
330
+ return {
331
+ status: 'skipped',
332
+ duration_ms: nowMs() - start,
333
+ details: { reason: 'dry-run', would_invoke: 'migrate-lazygraph.cjs --force' },
334
+ };
335
+ }
336
+
337
+ const result = spawnSync(
338
+ process.execPath,
339
+ [SCRIPT_MIGRATE, ctx.roomDir, '--force'],
340
+ { encoding: 'utf8', timeout: 120000 }
341
+ );
342
+
343
+ if (result.error) {
344
+ return {
345
+ status: 'error_spawn',
346
+ duration_ms: nowMs() - start,
347
+ details: { reason: String(result.error.message || result.error) },
348
+ };
349
+ }
350
+
351
+ // Check that .mindrian/room.db was actually created.
352
+ const dbPath = path.join(ctx.roomDir, '.mindrian', 'room.db');
353
+ const dbExists = fs.existsSync(dbPath);
354
+
355
+ return {
356
+ status: result.status === 0 && dbExists ? 'ok' : 'error_rebuild',
357
+ duration_ms: nowMs() - start,
358
+ details: {
359
+ exit_code: result.status,
360
+ db_exists: dbExists,
361
+ stdout_tail: tailLines(result.stdout, 5),
362
+ stderr_tail: tailLines(result.stderr, 3),
363
+ },
364
+ };
365
+ }
366
+
367
+ function tailLines(s, n) {
368
+ if (typeof s !== 'string' || !s) return '';
369
+ const lines = s.trim().split('\n');
370
+ return lines.slice(-n).join('\n');
371
+ }
372
+
373
+ /**
374
+ * Step 5: Backfill missing ROOM.md per section.
375
+ * - For each canonical section directory: write ROOM.md if absent.
376
+ * - Frontmatter: section, purpose, methodology, parent, status.
377
+ */
378
+ function step05BackfillRoomMd(ctx) {
379
+ const start = nowMs();
380
+ const written = [];
381
+ const present = [];
382
+
383
+ for (const s of CANONICAL_SECTIONS) {
384
+ const sectionDir = path.join(ctx.roomDir, s);
385
+ if (!fs.existsSync(sectionDir)) continue;
386
+
387
+ const roomMd = path.join(sectionDir, 'ROOM.md');
388
+ if (fs.existsSync(roomMd)) {
389
+ present.push(s);
390
+ continue;
391
+ }
392
+ if (ctx.dryRun) {
393
+ written.push(s);
394
+ continue;
395
+ }
396
+
397
+ const purpose = sectionPurpose(s);
398
+ const methodology = sectionMethodology(s);
399
+ const body =
400
+ '---\n' +
401
+ 'section: ' + s + '\n' +
402
+ 'purpose: ' + purpose + '\n' +
403
+ 'methodology: ' + methodology + '\n' +
404
+ 'parent: ../STATE.md\n' +
405
+ 'status: active\n' +
406
+ '---\n\n' +
407
+ '# ' + s + '\n\n' +
408
+ purpose + '\n';
409
+
410
+ if (safeWriteFile(roomMd, body)) {
411
+ written.push(s);
412
+ }
413
+ }
414
+
415
+ return {
416
+ status: ctx.dryRun ? 'skipped' : (written.length > 0 ? 'ok' : 'skipped'),
417
+ duration_ms: nowMs() - start,
418
+ details: { written, already_present: present },
419
+ };
420
+ }
421
+
422
+ function sectionPurpose(s) {
423
+ const map = {
424
+ 'problem-definition': 'Frame the wicked problem and capture root-cause hypotheses',
425
+ 'market-analysis': 'Size the opportunity, segment customers, evidence demand',
426
+ 'solution-design': 'Architect the response, capture feasibility, model trade-offs',
427
+ 'business-model': 'Capture revenue model, unit economics, pricing strategy',
428
+ 'competitive-analysis': 'Map direct + indirect competitors and the moat thesis',
429
+ 'team-execution': 'Document team, hiring plan, milestones, execution cadence',
430
+ 'legal-ip': 'Track entity structure, IP ownership, regulatory exposure',
431
+ 'financial-model': 'Project revenue, burn, runway, funding asks',
432
+ };
433
+ return map[s] || ('Working artifacts for the ' + s + ' subsystem');
434
+ }
435
+
436
+ function sectionMethodology(s) {
437
+ const map = {
438
+ 'problem-definition': 'wicked-problem-framing',
439
+ 'market-analysis': 'jtbd-segmentation',
440
+ 'solution-design': 'system-architecture',
441
+ 'business-model': 'business-model-canvas',
442
+ 'competitive-analysis': 'porter-five-forces',
443
+ 'team-execution': 'first-who-then-what',
444
+ 'legal-ip': 'ip-strategy-mapping',
445
+ 'financial-model': 'unit-economics',
446
+ };
447
+ return map[s] || 'general';
448
+ }
449
+
450
+ /**
451
+ * Step 6: Generate per-section STATE.md.
452
+ * - Wraps scripts/vault-section-state-generator.cjs.
453
+ * - Captures stdout/stderr; exit code maps to status.
454
+ */
455
+ function step06SectionState(ctx) {
456
+ const start = nowMs();
457
+ if (ctx.dryRun) {
458
+ return {
459
+ status: 'skipped',
460
+ duration_ms: nowMs() - start,
461
+ details: { reason: 'dry-run', would_invoke: 'vault-section-state-generator.cjs' },
462
+ };
463
+ }
464
+
465
+ const result = spawnSync(
466
+ process.execPath,
467
+ [SCRIPT_SECTION_STATE, ctx.roomDir],
468
+ { encoding: 'utf8', timeout: 120000 }
469
+ );
470
+
471
+ if (result.error) {
472
+ return {
473
+ status: 'error_spawn',
474
+ duration_ms: nowMs() - start,
475
+ details: { reason: String(result.error.message || result.error) },
476
+ };
477
+ }
478
+
479
+ // Count how many sections now have STATE.md.
480
+ let stateMdCount = 0;
481
+ for (const s of CANONICAL_SECTIONS) {
482
+ if (fs.existsSync(path.join(ctx.roomDir, s, 'STATE.md'))) stateMdCount++;
483
+ }
484
+
485
+ return {
486
+ status: result.status === 0 && stateMdCount > 0 ? 'ok' : 'error_state_gen',
487
+ duration_ms: nowMs() - start,
488
+ details: {
489
+ exit_code: result.status,
490
+ sections_with_state_md: stateMdCount,
491
+ stdout_tail: tailLines(result.stdout, 5),
492
+ stderr_tail: tailLines(result.stderr, 3),
493
+ },
494
+ };
495
+ }
496
+
497
+ /**
498
+ * Step 7: Generate or refresh MINTO.md per section.
499
+ * - For each canonical section with at least one artifact: invoke
500
+ * vault-section-minto-generator.cjs --write --section <s> (no
501
+ * narrative -> tier-0 path; safe and deterministic).
502
+ * - On FEYNMINTO-01 budget rejection (regex 'budget exceeded' OR
503
+ * 'FEYNMINTO-01' in stderr/stdout): record blocked_feynminto_01 +
504
+ * tier-0 fallback already happened by the writer's design (the
505
+ * tier-0 entry point is the no-narrative path itself, so the only
506
+ * way FEYNMINTO-01 fires here is the per-section invariant rejection
507
+ * of the tier-0 body which is byte-pinned and large for mega-sections).
508
+ * - NEVER throws. Always continues to the next section.
509
+ * - Per-section opt-in: if ctx.section is set, restrict to that one.
510
+ */
511
+ function step07SectionMinto(ctx) {
512
+ const start = nowMs();
513
+ if (ctx.dryRun) {
514
+ return {
515
+ status: 'skipped',
516
+ duration_ms: nowMs() - start,
517
+ details: {
518
+ reason: 'dry-run',
519
+ would_invoke: 'vault-section-minto-generator.cjs --write per section',
520
+ },
521
+ };
522
+ }
523
+
524
+ const sectionsToProcess = ctx.section
525
+ ? [ctx.section]
526
+ : CANONICAL_SECTIONS.filter(function (s) {
527
+ return fs.existsSync(path.join(ctx.roomDir, s)) && hasArtifacts(path.join(ctx.roomDir, s));
528
+ });
529
+
530
+ const perSection = [];
531
+ let okCount = 0;
532
+ let blockedCount = 0;
533
+ let errorCount = 0;
534
+ let skippedCount = 0;
535
+
536
+ for (const s of sectionsToProcess) {
537
+ const sStart = nowMs();
538
+ const result = spawnSync(
539
+ process.execPath,
540
+ [SCRIPT_SECTION_MINTO, ctx.roomDir, '--write', '--section', s],
541
+ { encoding: 'utf8', timeout: 60000 }
542
+ );
543
+
544
+ let status;
545
+ let detail = {};
546
+ detail.duration_ms = nowMs() - sStart;
547
+ detail.exit_code = result.status;
548
+ detail.stderr_tail = tailLines(result.stderr, 3);
549
+ detail.stdout_tail = tailLines(result.stdout, 3);
550
+
551
+ if (result.error) {
552
+ status = 'error_spawn';
553
+ detail.reason = String(result.error.message || result.error);
554
+ errorCount++;
555
+ } else {
556
+ const combined = (result.stdout || '') + '\n' + (result.stderr || '');
557
+ const budgetExceeded =
558
+ /Narrative body token budget exceeded/i.test(combined) ||
559
+ /FEYNMINTO-01/i.test(combined) ||
560
+ /budget exceeded/i.test(combined);
561
+
562
+ const mintoPath = path.join(ctx.roomDir, s, 'MINTO.md');
563
+ const wroteMinto = fs.existsSync(mintoPath);
564
+
565
+ if (budgetExceeded) {
566
+ // Even if the tier-0 path was rejected by the invariants gate,
567
+ // we record graceful degradation. v1.12 will fix the budget;
568
+ // v1.11.1 respects the limit.
569
+ status = 'blocked_feynminto_01';
570
+ detail.reason = 'FEYNMINTO-01 budget exceeded; tier-0 fallback attempted';
571
+ detail.minto_written = wroteMinto;
572
+ blockedCount++;
573
+ } else if (result.status === 0 && wroteMinto) {
574
+ status = 'ok';
575
+ detail.minto_written = true;
576
+ okCount++;
577
+ } else if (result.status === 0) {
578
+ status = 'skipped';
579
+ detail.reason = 'generator exit 0 but no MINTO.md present (likely empty section)';
580
+ skippedCount++;
581
+ } else {
582
+ status = 'error_minto_gen';
583
+ detail.minto_written = wroteMinto;
584
+ errorCount++;
585
+ }
586
+ }
587
+
588
+ perSection.push({ section: s, status: status, detail: detail });
589
+ }
590
+
591
+ // Roll-up status. If at least one section blocked but the heal kept
592
+ // going for the rest, we report ok (any-section-success) and leave
593
+ // per-section blocked records in details. If ALL sections blocked or
594
+ // errored, we report error_all_blocked or error_all_errored.
595
+ let rollUp;
596
+ if (sectionsToProcess.length === 0) {
597
+ rollUp = 'skipped';
598
+ } else if (okCount > 0) {
599
+ rollUp = blockedCount > 0 ? 'ok_with_blocked' : 'ok';
600
+ } else if (blockedCount > 0 && errorCount === 0) {
601
+ rollUp = 'blocked_feynminto_01';
602
+ } else if (errorCount > 0 && blockedCount === 0) {
603
+ rollUp = 'error_minto_gen';
604
+ } else if (blockedCount > 0 || errorCount > 0) {
605
+ rollUp = 'blocked_feynminto_01';
606
+ } else {
607
+ rollUp = 'skipped';
608
+ }
609
+
610
+ return {
611
+ status: rollUp,
612
+ duration_ms: nowMs() - start,
613
+ details: {
614
+ sections_processed: sectionsToProcess.length,
615
+ ok_count: okCount,
616
+ blocked_count: blockedCount,
617
+ error_count: errorCount,
618
+ skipped_count: skippedCount,
619
+ per_section: perSection,
620
+ },
621
+ };
622
+ }
623
+
624
+ /**
625
+ * Step 8: brain-derivation-queue read-only check.
626
+ * - Read .mindrian/brain-derivation-queue.json (if present).
627
+ * - Report queue depth + age of oldest entry.
628
+ * - Does NOT drain. Drain hook deferred to v1.12 candidate plan.
629
+ * - Canon Part 8 boundary preserved: queue is LOCAL data; heal never
630
+ * contacts Brain; queue stays untouched until the v1.12 drain hook.
631
+ */
632
+ function step08QueueCheck(ctx) {
633
+ const start = nowMs();
634
+ const queuePath = path.join(ctx.roomDir, '.mindrian', 'brain-derivation-queue.json');
635
+
636
+ if (!fs.existsSync(queuePath)) {
637
+ return {
638
+ status: 'skipped',
639
+ duration_ms: nowMs() - start,
640
+ details: { reason: 'no_queue_file', queue_path: queuePath },
641
+ };
642
+ }
643
+
644
+ const raw = safeReadFile(queuePath);
645
+ if (!raw) {
646
+ return {
647
+ status: 'skipped',
648
+ duration_ms: nowMs() - start,
649
+ details: { reason: 'queue_file_unreadable' },
650
+ };
651
+ }
652
+
653
+ let parsed;
654
+ try {
655
+ parsed = JSON.parse(raw);
656
+ } catch (_e) {
657
+ return {
658
+ status: 'error_queue_parse',
659
+ duration_ms: nowMs() - start,
660
+ details: { reason: 'queue_file_malformed_json' },
661
+ };
662
+ }
663
+
664
+ const entries = Array.isArray(parsed) ? parsed : (parsed.queue || []);
665
+ let oldestIso = null;
666
+ for (const e of entries) {
667
+ if (e && typeof e.enqueued_at === 'string') {
668
+ if (oldestIso === null || e.enqueued_at < oldestIso) {
669
+ oldestIso = e.enqueued_at;
670
+ }
671
+ }
672
+ }
673
+
674
+ let oldestAgeDays = null;
675
+ if (oldestIso) {
676
+ const t = Date.parse(oldestIso);
677
+ if (!Number.isNaN(t)) {
678
+ oldestAgeDays = Math.floor((Date.now() - t) / (24 * 60 * 60 * 1000));
679
+ }
680
+ }
681
+
682
+ return {
683
+ status: 'ok',
684
+ duration_ms: nowMs() - start,
685
+ details: {
686
+ queue_depth: entries.length,
687
+ oldest_enqueued_at: oldestIso,
688
+ oldest_age_days: oldestAgeDays,
689
+ drain_status: 'not_drained_by_design_v1.11.1',
690
+ v1_12_candidate: 'brain-derivation-queue auto-drain hook',
691
+ },
692
+ };
693
+ }
694
+
695
+ /**
696
+ * Step 9: Recompute root STATE.md.
697
+ * - Wraps scripts/compute-state via bash; stdout redirects to STATE.md.
698
+ * - Atomic: write to STATE.md.tmp then rename.
699
+ */
700
+ function step09RootState(ctx) {
701
+ const start = nowMs();
702
+ if (ctx.dryRun) {
703
+ return {
704
+ status: 'skipped',
705
+ duration_ms: nowMs() - start,
706
+ details: { reason: 'dry-run', would_invoke: 'bash scripts/compute-state' },
707
+ };
708
+ }
709
+
710
+ const result = spawnSync(
711
+ 'bash',
712
+ [SCRIPT_COMPUTE_STATE, ctx.roomDir],
713
+ { encoding: 'utf8', timeout: 60000 }
714
+ );
715
+
716
+ if (result.error) {
717
+ return {
718
+ status: 'error_spawn',
719
+ duration_ms: nowMs() - start,
720
+ details: { reason: String(result.error.message || result.error) },
721
+ };
722
+ }
723
+
724
+ if (result.status !== 0) {
725
+ return {
726
+ status: 'error_compute_state',
727
+ duration_ms: nowMs() - start,
728
+ details: {
729
+ exit_code: result.status,
730
+ stderr_tail: tailLines(result.stderr, 3),
731
+ },
732
+ };
733
+ }
734
+
735
+ const body = result.stdout || '';
736
+ const target = path.join(ctx.roomDir, 'STATE.md');
737
+ const tmp = target + '.heal.tmp';
738
+ try {
739
+ fs.writeFileSync(tmp, body, 'utf8');
740
+ fs.renameSync(tmp, target);
741
+ } catch (e) {
742
+ return {
743
+ status: 'error_state_write',
744
+ duration_ms: nowMs() - start,
745
+ details: { reason: String(e.message || e) },
746
+ };
747
+ }
748
+
749
+ return {
750
+ status: 'ok',
751
+ duration_ms: nowMs() - start,
752
+ details: {
753
+ bytes_written: Buffer.byteLength(body, 'utf8'),
754
+ state_md: target,
755
+ },
756
+ };
757
+ }
758
+
759
+ /**
760
+ * Step 10: On-stop invariant scan (passive).
761
+ * - Reads .mindrian/invariant-report.json if present.
762
+ * - The report is written by the on-stop hook on the next /mos:*
763
+ * command, NOT by heal itself. This step records the current
764
+ * state of the report file for the heal-log so the user knows
765
+ * what severity to expect.
766
+ */
767
+ function step10InvariantScan(ctx) {
768
+ const start = nowMs();
769
+ const reportPath = path.join(ctx.roomDir, '.mindrian', 'invariant-report.json');
770
+
771
+ if (!fs.existsSync(reportPath)) {
772
+ return {
773
+ status: 'skipped',
774
+ duration_ms: nowMs() - start,
775
+ details: {
776
+ reason: 'no_report_yet',
777
+ note: 'Report writes on next /mos:* command via on-stop hook',
778
+ },
779
+ };
780
+ }
781
+
782
+ const raw = safeReadFile(reportPath);
783
+ if (!raw) {
784
+ return {
785
+ status: 'skipped',
786
+ duration_ms: nowMs() - start,
787
+ details: { reason: 'report_unreadable' },
788
+ };
789
+ }
790
+
791
+ let parsed;
792
+ try {
793
+ parsed = JSON.parse(raw);
794
+ } catch (_e) {
795
+ return {
796
+ status: 'error_report_parse',
797
+ duration_ms: nowMs() - start,
798
+ details: { reason: 'invariant_report_malformed_json' },
799
+ };
800
+ }
801
+
802
+ let highestSeverity = 'info';
803
+ let violationCount = 0;
804
+ if (Array.isArray(parsed.violations)) {
805
+ violationCount = parsed.violations.length;
806
+ for (const v of parsed.violations) {
807
+ if (v && v.severity === 'error') highestSeverity = 'error';
808
+ else if (v && v.severity === 'warning' && highestSeverity !== 'error') highestSeverity = 'warning';
809
+ }
810
+ }
811
+
812
+ return {
813
+ status: 'ok',
814
+ duration_ms: nowMs() - start,
815
+ details: {
816
+ violation_count: violationCount,
817
+ highest_severity: highestSeverity,
818
+ report_path: reportPath,
819
+ },
820
+ };
821
+ }
822
+
823
+ /**
824
+ * Step 11: Run pending room.db migrations (Phase 130 hats -> room.db).
825
+ * - Wraps scripts/migrate-hats-to-roomdb.cjs (idempotent: writes a sentinel
826
+ * memory_event and skips on re-run, so safe to run every heal).
827
+ * - Runs AFTER step04 (lazygraph rebuild) so room.db is guaranteed to exist;
828
+ * the migration refuses with reason "no_room_db" otherwise.
829
+ * - This is what makes `doctor --heal-room` the single per-room "wire it"
830
+ * command -- no more orphaned migration scripts a human must know to run.
831
+ */
832
+ function step11HatsMigration(ctx) {
833
+ const start = nowMs();
834
+ if (ctx.dryRun) {
835
+ return {
836
+ status: 'skipped',
837
+ duration_ms: nowMs() - start,
838
+ details: { reason: 'dry-run', would_invoke: 'migrate-hats-to-roomdb.cjs' },
839
+ };
840
+ }
841
+
842
+ const result = spawnSync(
843
+ process.execPath,
844
+ [SCRIPT_HATS, ctx.roomDir],
845
+ { encoding: 'utf8', timeout: 120000 }
846
+ );
847
+
848
+ if (result.error) {
849
+ return {
850
+ status: 'error_spawn',
851
+ duration_ms: nowMs() - start,
852
+ details: { reason: String(result.error.message || result.error) },
853
+ };
854
+ }
855
+
856
+ // The migration prints a JSON envelope: { ok, migrated, skipped, reason }.
857
+ let parsed = null;
858
+ try { parsed = JSON.parse(result.stdout || '{}'); } catch (_e) { parsed = null; }
859
+
860
+ // Idempotent skip (already migrated) is a success, not a failure.
861
+ const ok = parsed && (parsed.ok === true || parsed.skipped === true);
862
+ return {
863
+ status: ok ? 'ok' : 'error_migration',
864
+ duration_ms: nowMs() - start,
865
+ details: {
866
+ exit_code: result.status,
867
+ migrated: parsed && Array.isArray(parsed.migrated) ? parsed.migrated.length : 0,
868
+ skipped: !!(parsed && parsed.skipped),
869
+ reason: parsed && parsed.reason ? parsed.reason : null,
870
+ stderr_tail: tailLines(result.stderr, 3),
871
+ },
872
+ };
873
+ }
874
+
875
+ // ---------- Room validation ----------
876
+
877
+ /**
878
+ * assertIsRoom(dir) -> { ok: bool, reason: string }
879
+ *
880
+ * A directory is a legitimate room when it carries at least one of:
881
+ * .room-root (sentinel written by /mos:new-project and sentinel-health-check)
882
+ * STATE.md (root room state file, written on first heal or new-project)
883
+ * ROOM.md (ICM Layer 0 identity file, present in every room)
884
+ *
885
+ * Absence of all three is a strong signal the directory was never set up as a
886
+ * room. Requiring all three would be too strict -- brand-new rooms may only
887
+ * have .room-root before their first heal.
888
+ */
889
+ function assertIsRoom(dir) {
890
+ const sentinels = ['.room-root', 'STATE.md', 'ROOM.md'];
891
+ for (const s of sentinels) {
892
+ if (fs.existsSync(path.join(dir, s))) {
893
+ return { ok: true, reason: 'found sentinel: ' + s };
894
+ }
895
+ }
896
+ return {
897
+ ok: false,
898
+ reason:
899
+ 'directory does not appear to be a room -- none of ' +
900
+ sentinels.join(', ') + ' found in: ' + dir,
901
+ };
902
+ }
903
+
904
+ /**
905
+ * isContainerDir(dir) -> { container: bool, childRooms: string[] }
906
+ *
907
+ * A directory is a sub-rooms CONTAINER (not a room itself) when 2 or more of
908
+ * its direct child directories each carry a .room-root sentinel. This is the
909
+ * exact pattern of a sub-rooms/ folder: each sub-room has .room-root, but
910
+ * the container itself is just a grouping directory.
911
+ *
912
+ * Threshold is 2 (not 1) so that a room that happens to have one sub-room
913
+ * inside it is not misidentified as a container.
914
+ */
915
+ function isContainerDir(dir) {
916
+ const childRooms = [];
917
+ try {
918
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
919
+ if (!entry.isDirectory()) continue;
920
+ if (entry.name.startsWith('.')) continue;
921
+ const sentinel = path.join(dir, entry.name, '.room-root');
922
+ if (fs.existsSync(sentinel)) {
923
+ childRooms.push(entry.name);
924
+ }
925
+ }
926
+ } catch (_e) { /* best effort */ }
927
+ return { container: childRooms.length >= 2, childRooms };
928
+ }
929
+
930
+ /** Build a structured error envelope (mirrors the room-not-found pattern). */
931
+ function buildErrorEnvelope(resolved, errorStatus, reason) {
932
+ return {
933
+ schema_version: SCHEMA_VERSION,
934
+ started_at: nowIso(),
935
+ ended_at: nowIso(),
936
+ room_dir: resolved,
937
+ backup_dir: '.heal-backup/' + utcStamp(),
938
+ steps: STEP_NAMES.map(function (name) {
939
+ return {
940
+ step: name,
941
+ status: errorStatus,
942
+ duration_ms: 0,
943
+ details: { reason: reason },
944
+ };
945
+ }),
946
+ summary: { ok_count: 0, skipped_count: 0, blocked_count: 0, error_count: 10, exit_code: 2 },
947
+ };
948
+ }
949
+
950
+ // ---------- Orchestrator ----------
951
+
952
+ /**
953
+ * runHeal(roomDir, opts) -> heal-log envelope.
954
+ *
955
+ * @param {string} roomDir - absolute or relative path to the room
956
+ * @param {object} [opts]
957
+ * @param {boolean} [opts.dryRun] - plan-only, zero mutation
958
+ * @param {Array<number>} [opts.skipSteps] - 1-indexed step numbers to skip
959
+ * @param {string} [opts.section] - restrict step 7 to one section
960
+ * @param {boolean} [opts.silent] - suppress console output
961
+ * @param {boolean} [opts.skipRoomCheck] - bypass room validation (internal use only)
962
+ * @returns {Promise<object>} heal-log envelope
963
+ */
964
+ async function runHeal(roomDir, opts) {
965
+ opts = opts || {};
966
+ const dryRun = !!opts.dryRun;
967
+ const skipSteps = Array.isArray(opts.skipSteps) ? opts.skipSteps : [];
968
+ const section = opts.section || null;
969
+ const silent = !!opts.silent;
970
+ const skipRoomCheck = !!opts.skipRoomCheck;
971
+
972
+ const resolved = path.resolve(roomDir);
973
+ if (!fs.existsSync(resolved)) {
974
+ // Build a minimal envelope reporting the room-not-found error.
975
+ return buildErrorEnvelope(
976
+ resolved,
977
+ 'error_room_not_found',
978
+ 'room_dir does not exist: ' + resolved
979
+ );
980
+ }
981
+
982
+ // OBS-2 WRITE-ORDERING INVARIANT (Phase 139 Plan-01 S1):
983
+ // This guard block runs BEFORE any step executes and BEFORE any .mindrian/
984
+ // mkdir or heal-log.json / .heal-backup/ write. On a rejected target it
985
+ // `return buildErrorEnvelope(...)` -- which only constructs an in-memory
986
+ // object, it writes ZERO bytes to disk. The step loop (step01Backup creates
987
+ // .heal-backup/, the closing block creates .mindrian/heal-log.json) is
988
+ // reachable ONLY past this point. Running heal from a non-room cwd
989
+ // (~/dev/<repo>) therefore makes ZERO room-artifact writes to that target.
990
+ // tests/test-heal-obs2-regression.cjs asserts this floor.
991
+ //
992
+ // Guard: detect sub-rooms container before the room-sentinel check so the
993
+ // error message names the specific child rooms that gave it away.
994
+ if (!skipRoomCheck) {
995
+ const containerCheck = isContainerDir(resolved);
996
+ if (containerCheck.container) {
997
+ const msg =
998
+ '[heal] Refusing to heal: "' + resolved + '" looks like a sub-rooms ' +
999
+ 'CONTAINER, not a room. It contains ' + containerCheck.childRooms.length +
1000
+ ' child directories that each carry a .room-root sentinel (' +
1001
+ containerCheck.childRooms.slice(0, 5).join(', ') +
1002
+ (containerCheck.childRooms.length > 5 ? ', ...' : '') +
1003
+ '). Pass the parent room directory explicitly, e.g.:\n' +
1004
+ ' node scripts/heal-command.cjs ' + path.dirname(resolved);
1005
+ if (!silent) process.stderr.write(msg + '\n');
1006
+ return buildErrorEnvelope(resolved, 'error_container_dir', msg);
1007
+ }
1008
+
1009
+ const roomCheck = assertIsRoom(resolved);
1010
+ if (!roomCheck.ok) {
1011
+ const msg =
1012
+ '[heal] Refusing to heal: "' + resolved + '" does not appear to be a ' +
1013
+ 'room (' + roomCheck.reason + '). ' +
1014
+ 'Pass the room directory explicitly or run /mos:new-project to create one.';
1015
+ if (!silent) process.stderr.write(msg + '\n');
1016
+ return buildErrorEnvelope(resolved, 'error_not_a_room', msg);
1017
+ }
1018
+ }
1019
+
1020
+ const ts = utcStamp();
1021
+ const backupDir = path.join(resolved, '.heal-backup', ts);
1022
+ const ctx = {
1023
+ roomDir: resolved,
1024
+ backupDir: backupDir,
1025
+ dryRun: dryRun,
1026
+ section: section,
1027
+ };
1028
+
1029
+ const env = {
1030
+ schema_version: SCHEMA_VERSION,
1031
+ started_at: nowIso(),
1032
+ ended_at: null,
1033
+ room_dir: resolved,
1034
+ backup_dir: dryRun ? '(dry-run; would be ' + path.relative(resolved, backupDir) + ')' : backupDir,
1035
+ steps: [],
1036
+ summary: null,
1037
+ };
1038
+
1039
+ const stepFns = [
1040
+ step01Backup,
1041
+ step02ScaffoldSections,
1042
+ step03SectionSeed,
1043
+ step04LazygraphRebuild,
1044
+ step05BackfillRoomMd,
1045
+ step06SectionState,
1046
+ step07SectionMinto,
1047
+ step08QueueCheck,
1048
+ step09RootState,
1049
+ step10InvariantScan,
1050
+ step11HatsMigration,
1051
+ ];
1052
+
1053
+ for (let i = 0; i < stepFns.length; i++) {
1054
+ const stepNum = i + 1;
1055
+ const stepName = STEP_NAMES[i];
1056
+
1057
+ if (skipSteps.indexOf(stepNum) !== -1) {
1058
+ env.steps.push({
1059
+ step: stepName,
1060
+ status: 'skipped',
1061
+ duration_ms: 0,
1062
+ details: { reason: 'skipped_by_flag --skip-step ' + stepNum },
1063
+ });
1064
+ if (!silent) console.log('[heal] step ' + stepNum + ' ' + stepName + ': skipped (flag)');
1065
+ continue;
1066
+ }
1067
+
1068
+ let stepResult;
1069
+ try {
1070
+ stepResult = stepFns[i](ctx);
1071
+ } catch (e) {
1072
+ stepResult = {
1073
+ status: 'error_uncaught',
1074
+ duration_ms: 0,
1075
+ details: { reason: String(e.message || e) },
1076
+ };
1077
+ }
1078
+
1079
+ // Defensive shape: ensure all keys present.
1080
+ if (!stepResult) stepResult = { status: 'error_no_result', duration_ms: 0, details: {} };
1081
+ if (typeof stepResult.status !== 'string') stepResult.status = 'error_bad_status';
1082
+ if (typeof stepResult.duration_ms !== 'number') stepResult.duration_ms = 0;
1083
+ if (!stepResult.details || typeof stepResult.details !== 'object') stepResult.details = {};
1084
+
1085
+ env.steps.push({
1086
+ step: stepName,
1087
+ status: stepResult.status,
1088
+ duration_ms: stepResult.duration_ms,
1089
+ details: stepResult.details,
1090
+ });
1091
+
1092
+ if (!silent) {
1093
+ console.log(
1094
+ '[heal] step ' + stepNum + ' ' + stepName + ': ' +
1095
+ stepResult.status + ' (' + stepResult.duration_ms + 'ms)'
1096
+ );
1097
+ }
1098
+ }
1099
+
1100
+ // Summary.
1101
+ let okCount = 0, skippedCount = 0, blockedCount = 0, errorCount = 0;
1102
+ for (const s of env.steps) {
1103
+ if (s.status === 'ok' || s.status === 'ok_with_blocked') okCount++;
1104
+ else if (s.status === 'skipped') skippedCount++;
1105
+ else if (typeof s.status === 'string' && s.status.startsWith('blocked_')) blockedCount++;
1106
+ else if (typeof s.status === 'string' && s.status.startsWith('error_')) errorCount++;
1107
+ else skippedCount++; // unknown -> skipped bucket
1108
+ }
1109
+ // Exit 0 if any step succeeded or any step blocked-but-graceful.
1110
+ // Exit 2 only when zero useful work happened (no ok, no blocked).
1111
+ const exitCode = (okCount > 0 || blockedCount > 0 || skippedCount === env.steps.length) ? 0 : 2;
1112
+ env.summary = {
1113
+ ok_count: okCount,
1114
+ skipped_count: skippedCount,
1115
+ blocked_count: blockedCount,
1116
+ error_count: errorCount,
1117
+ exit_code: exitCode,
1118
+ };
1119
+
1120
+ env.ended_at = nowIso();
1121
+
1122
+ // Write heal-log.json (skip in dry-run; mutating .mindrian/ in dry-run
1123
+ // would violate T1's no-mutation contract).
1124
+ if (!dryRun) {
1125
+ const mindrianDir = path.join(resolved, '.mindrian');
1126
+ safeMkdir(mindrianDir);
1127
+ const logPath = path.join(mindrianDir, 'heal-log.json');
1128
+ try {
1129
+ fs.writeFileSync(logPath, JSON.stringify(env, null, 2) + '\n', 'utf8');
1130
+ } catch (_e) { /* best effort; envelope still returned */ }
1131
+ }
1132
+
1133
+ return env;
1134
+ }
1135
+
1136
+ // ---------- CLI ----------
1137
+
1138
+ function parseCliArgs(argv) {
1139
+ const out = {
1140
+ roomDir: null,
1141
+ dryRun: false,
1142
+ skipSteps: [],
1143
+ section: null,
1144
+ recursive: false,
1145
+ };
1146
+ for (let i = 0; i < argv.length; i++) {
1147
+ const a = argv[i];
1148
+ if (a === '--dry-run') {
1149
+ out.dryRun = true;
1150
+ } else if (a === '--skip-step') {
1151
+ const n = parseInt(argv[i + 1], 10);
1152
+ if (!Number.isNaN(n) && n >= 1 && n <= 11) {
1153
+ out.skipSteps.push(n);
1154
+ i++;
1155
+ }
1156
+ } else if (a === '--recursive') {
1157
+ out.recursive = true;
1158
+ } else if (a === '--section') {
1159
+ out.section = argv[i + 1] || null;
1160
+ i++;
1161
+ } else if (a === '--help' || a === '-h') {
1162
+ printUsage();
1163
+ process.exit(0);
1164
+ } else if (!a.startsWith('--') && !out.roomDir) {
1165
+ out.roomDir = a;
1166
+ }
1167
+ }
1168
+ if (!out.roomDir) {
1169
+ // Prefer the registry's active room over the raw shell CWD. The CWD is
1170
+ // unreliable: any prior `cd` in the same session (e.g. sentineling
1171
+ // sub-rooms) leaves the shell pointing at a non-room directory, and heal
1172
+ // would silently scaffold spurious sections there.
1173
+ //
1174
+ // Resolution order:
1175
+ // 1. Explicit positional arg (already handled above).
1176
+ // 2. room-registry get-active (trusts the user's registered active room).
1177
+ // 3. CWD fallback (kept for bare-install / no-registry scenarios, but
1178
+ // runHeal's room validation guard will catch misfires here).
1179
+ const registryActiveRoom = resolveActiveRoomFromRegistry();
1180
+ out.roomDir = registryActiveRoom || process.cwd();
1181
+ }
1182
+ return out;
1183
+ }
1184
+
1185
+ /**
1186
+ * resolveActiveRoomFromRegistry() -> string|null
1187
+ *
1188
+ * Queries `scripts/room-registry get-active` synchronously. Returns the
1189
+ * absolute path of the active room, or null if the registry is unavailable,
1190
+ * the active room is unset, or the resolved path does not exist on disk.
1191
+ *
1192
+ * Intentionally swallows all errors -- this is a best-effort enhancement, not
1193
+ * a hard dependency. If the registry is absent or broken, we fall back to CWD
1194
+ * and let the room validation guard in runHeal() catch any misfire.
1195
+ */
1196
+ function resolveActiveRoomFromRegistry() {
1197
+ try {
1198
+ const registryScript = path.join(REPO_ROOT, 'scripts', 'room-registry');
1199
+ if (!fs.existsSync(registryScript)) return null;
1200
+
1201
+ const result = spawnSync('bash', [registryScript, 'get-active'], {
1202
+ encoding: 'utf8',
1203
+ timeout: 3000,
1204
+ });
1205
+ if (result.status !== 0) return null;
1206
+
1207
+ const activeName = (result.stdout || '').trim();
1208
+ if (!activeName) return null;
1209
+
1210
+ // The registry stores room names, not paths. Fetch the path via `read`.
1211
+ const readResult = spawnSync('bash', [registryScript, 'read', activeName], {
1212
+ encoding: 'utf8',
1213
+ timeout: 3000,
1214
+ });
1215
+ if (readResult.status !== 0) return null;
1216
+
1217
+ let roomData;
1218
+ try { roomData = JSON.parse(readResult.stdout || '{}'); } catch (_e) { return null; }
1219
+
1220
+ const roomPath = roomData.path || '';
1221
+ if (!roomPath) return null;
1222
+
1223
+ // The path field may be relative (to ROOMS_HOME) or absolute.
1224
+ const roomsHome = process.env.MINDRIAN_ROOMS_HOME ||
1225
+ path.join(require('os').homedir(), 'MindrianRooms');
1226
+ const resolved = path.isAbsolute(roomPath)
1227
+ ? roomPath
1228
+ : path.join(roomsHome, roomPath);
1229
+
1230
+ return fs.existsSync(resolved) ? resolved : null;
1231
+ } catch (_e) {
1232
+ return null;
1233
+ }
1234
+ }
1235
+
1236
+ function printUsage() {
1237
+ process.stdout.write(
1238
+ 'Usage: node scripts/heal-command.cjs [room-dir] [--dry-run]\n' +
1239
+ ' [--skip-step <N>] [--section <name>] [--recursive]\n\n' +
1240
+ ' --recursive heal EVERY registered room (the "wire all rooms" sweep)\n' +
1241
+ '/mos:heal -- 10-step room wiring heal orchestrator.\n' +
1242
+ 'Wraps the recipe at ~/MindrianRooms/mindrianOS/methodology/\n' +
1243
+ '2026-04-29-v1-11-0-room-wiring-heal-process.md.\n\n' +
1244
+ 'When room-dir is omitted, resolution order is:\n' +
1245
+ ' 1. room-registry get-active (preferred -- immune to shell CWD drift)\n' +
1246
+ ' 2. Current working directory (fallback; validated as a real room)\n\n' +
1247
+ 'heal refuses to operate on directories that are not rooms:\n' +
1248
+ ' - No .room-root, STATE.md, or ROOM.md found -> error_not_a_room\n' +
1249
+ ' - 2+ child dirs each have .room-root -> error_container_dir\n'
1250
+ );
1251
+ }
1252
+
1253
+ // Read ~/MindrianRooms/.rooms/registry.json (honoring MINDRIAN_ROOMS_HOME) and
1254
+ // return an array of { name, path } for every registered room with a resolvable
1255
+ // path. Returns [] when no registry exists. The single "wire all rooms" source
1256
+ // of truth -- same registry doctor.cjs class B/C reads.
1257
+ function readRegistryRooms() {
1258
+ const home = process.env.MINDRIAN_ROOMS_HOME ||
1259
+ path.join(require('os').homedir(), 'MindrianRooms');
1260
+ const registryPath = path.join(home, '.rooms', 'registry.json');
1261
+ if (!fs.existsSync(registryPath)) return [];
1262
+ let reg;
1263
+ try { reg = JSON.parse(fs.readFileSync(registryPath, 'utf8')); } catch (_e) { return []; }
1264
+ const rooms = (reg.registry && reg.registry.rooms) || reg.rooms || {};
1265
+ const out = [];
1266
+ for (const name of Object.keys(rooms)) {
1267
+ const entry = rooms[name] || {};
1268
+ // Skip archived/sealed rooms -- they are intentionally out of the active set.
1269
+ if (entry.status === 'archived' || entry.sealed === true) continue;
1270
+ const p = entry.path || '';
1271
+ if (!p) continue;
1272
+ const resolved = path.isAbsolute(p) ? p : path.join(home, p);
1273
+ if (fs.existsSync(resolved)) out.push({ name: name, path: resolved });
1274
+ }
1275
+ return out;
1276
+ }
1277
+
1278
+ // Recursive sweep: heal every registered room. This is the single
1279
+ // "wire all rooms" command -- each room runs the full 11-step heal
1280
+ // (room.db creation at step 4, then the hats->room.db migration at step 11),
1281
+ // idempotent, so re-running is safe. Per-room failures never abort the sweep.
1282
+ async function runHealRecursive(opts) {
1283
+ const rooms = readRegistryRooms();
1284
+ if (rooms.length === 0) {
1285
+ console.log('[heal --recursive] no registry at ~/MindrianRooms/.rooms/registry.json -- nothing to sweep.');
1286
+ return 0;
1287
+ }
1288
+ console.log('[heal --recursive] sweeping ' + rooms.length + ' registered room(s)' +
1289
+ (opts.dryRun ? ' (dry-run)' : '') + '...\n');
1290
+ let okRooms = 0, errRooms = 0;
1291
+ for (const room of rooms) {
1292
+ let env;
1293
+ try {
1294
+ env = await runHeal(room.path, {
1295
+ dryRun: opts.dryRun,
1296
+ skipSteps: opts.skipSteps,
1297
+ section: opts.section,
1298
+ silent: true,
1299
+ });
1300
+ } catch (e) {
1301
+ errRooms++;
1302
+ console.log(' error ' + room.name + ' -- ' + String(e && e.message || e));
1303
+ continue;
1304
+ }
1305
+ const s = env.summary || {};
1306
+ const bad = (s.error_count || 0) > 0;
1307
+ if (bad) errRooms++; else okRooms++;
1308
+ console.log(
1309
+ ' ' + (bad ? 'warn ' : 'ok ') + ' ' + room.name +
1310
+ ' (ok=' + (s.ok_count || 0) + ' err=' + (s.error_count || 0) +
1311
+ ' skip=' + (s.skipped_count || 0) + ')'
1312
+ );
1313
+ }
1314
+ console.log('\n[heal --recursive] done: ' + okRooms + ' healed, ' + errRooms + ' with errors.');
1315
+ // Exit 0 as long as the sweep ran; per-room errors are reported, not fatal.
1316
+ return 0;
1317
+ }
1318
+
1319
+ async function main() {
1320
+ const opts = parseCliArgs(process.argv.slice(2));
1321
+
1322
+ // --recursive: sweep every registered room (the "wire all rooms" command).
1323
+ if (opts.recursive) {
1324
+ const code = await runHealRecursive(opts);
1325
+ process.exit(code);
1326
+ }
1327
+
1328
+ const env = await runHeal(opts.roomDir, {
1329
+ dryRun: opts.dryRun,
1330
+ skipSteps: opts.skipSteps,
1331
+ section: opts.section,
1332
+ });
1333
+
1334
+ // Render brief summary to stdout.
1335
+ console.log('');
1336
+ console.log('heal-log.json: ' + path.join(env.room_dir, '.mindrian', 'heal-log.json'));
1337
+ console.log(
1338
+ 'summary: ' +
1339
+ 'ok=' + env.summary.ok_count + ' ' +
1340
+ 'blocked=' + env.summary.blocked_count + ' ' +
1341
+ 'skipped=' + env.summary.skipped_count + ' ' +
1342
+ 'error=' + env.summary.error_count + ' ' +
1343
+ 'exit_code=' + env.summary.exit_code
1344
+ );
1345
+
1346
+ process.exit(env.summary.exit_code);
1347
+ }
1348
+
1349
+ if (require.main === module) {
1350
+ main().catch(function (e) {
1351
+ console.error('heal-command crashed: ' + (e && e.message));
1352
+ if (e && e.stack) console.error(e.stack);
1353
+ process.exit(2);
1354
+ });
1355
+ }
1356
+
1357
+ module.exports = {
1358
+ runHeal,
1359
+ assertIsRoom,
1360
+ isContainerDir,
1361
+ resolveActiveRoomFromRegistry,
1362
+ STEP_NAMES,
1363
+ CANONICAL_SECTIONS,
1364
+ SCHEMA_VERSION,
1365
+ };