@mindrian_os/cli 2.0.0-beta.29 → 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 +41 -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,1135 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ /*
4
+ * Copyright (c) 2026 Mindrian. BSL 1.1.
5
+ * Phase 218-03 (D-03) -- the standalone entity-extraction pipeline dispatcher.
6
+ *
7
+ * This is a verbatim SHAPE-CLONE of scripts/eureka-command.cjs: a process.argv
8
+ * switch-case router (no Commander/yargs -- CLAUDE.md convention) with the verbs
9
+ * run | start | status | report | help, a positional ROOM_DIR SUBCOMMAND, the
10
+ * 3-line What/Why/Fix error (never a stack trace), a status.json for observable
11
+ * detached runs, and a main(argv) that returns a numeric exit code (the testable
12
+ * seam via module.exports = { main }).
13
+ *
14
+ * WHY a standalone script and NOT a /mos: command (D-03): this adds ZERO Canon
15
+ * Part 11 CIRS surface. There is no new command, agent, pipeline, or skill to
16
+ * govern -- build-connector-registry.cjs --check must stay green as proof no
17
+ * surface leaked. The pipeline is a plain script the navigator (or a future
18
+ * governed command) shells.
19
+ *
20
+ * WHAT it does (the vertical wiring that makes Phase 218 real):
21
+ * 1. openRoomDb(roomDir, { allowExtension: true }) -- single-writer,
22
+ * open-work-close, with the Plan 218-02 D-05 busy-wait window.
23
+ * 2. Walk the room's artifact .md files via the memory_artifact provenance map
24
+ * (each memory_artifact node carries props.path -> its .md file), reading the
25
+ * real prose off disk.
26
+ * 3. extractEntities(text, { sourceArtifactId }) (Plan 218-02) per artifact ->
27
+ * bounded, typed {entities, relations, frameworkTerms} candidates, zero egress.
28
+ * 3b. Tier-2 semantic pass (two-tier, quick-task 260714-k44 over 260714-hzx):
29
+ * tier-2a is the LOCAL embedding classifier (embedding-classifier.cjs) -- zero
30
+ * egress, delegating to the embedding-spine boundary -- which resolves the
31
+ * confident majority of tier-1 survivors WHAT vs WHY for free. Only the
32
+ * low-margin residual escalates to tier-2b (entity-classifier.cjs, unchanged),
33
+ * called per artifact for the escalated names ONLY. WHAT flows through step 4
34
+ * unchanged; WHY joins the frameworkTerms signal merged onto the source
35
+ * artifact inside the transaction; NOISE (a tier-2b-only verdict) drops. The
36
+ * whole pass runs to completion BEFORE the transaction opens, so neither tier
37
+ * ever holds the write lock. Every degrade is honest: no LLM means the
38
+ * embedding best-guess with a disclosed low-confidence count, never a silent
39
+ * WHAT; an unavailable encoder degrades the whole tier to the prior hzx
40
+ * behavior verbatim (per-artifact tier-2b when keyed, else every-survivor WHAT).
41
+ * 4. ONE explicit D-05 BEGIN/COMMIT/ROLLBACK transaction (node:sqlite has NO
42
+ * .transaction() helper, RESEARCH Pitfall 3) around the whole batch:
43
+ * navigation.writeEntityNode per entity, navigation.writeEdge per
44
+ * entity->artifact DESCRIBES link and per entity->entity relation. A
45
+ * mid-batch error rolls back ALL of it (T-218-09).
46
+ * 5. Phase 219-02 (D-11, REQ-5): inside the SAME transaction, a deterministic
47
+ * zero-LLM frontmatter METADATA pass lifts scalar frontmatter fields
48
+ * (methodology, created/date, status, section, confidence) onto each
49
+ * exact memory_artifact node as additive JSON props via the insertNode
50
+ * UPSERT (merge discipline: existing props + review_status never
51
+ * clobbered; non-scalar values skipped, never thrown on).
52
+ * 6. AFTER commit, a route-a best-effort re-embed via the EXISTING
53
+ * tri-modal-index.indexNodes path (REQ-3), in its OWN try/catch that degrades
54
+ * to lexical-only and NEVER throws or rolls back the entity writes (T-218-10,
55
+ * the degrade-never-throw contract).
56
+ *
57
+ * Phase 219-02 seam (D-16): runExtraction(db, roomDir, sessionId, max, opts)
58
+ * accepts an OPTIONAL opts.paths allowlist of roomDir-relative artifact paths;
59
+ * when present only those artifacts are collected (scoped-incremental -- the
60
+ * post-filing extraction Plan 05 invokes). Default behavior (no opts.paths) is
61
+ * byte-identical to the 218 full-room pass.
62
+ *
63
+ * CANON POSTURE:
64
+ * - Part 8 (Graph Boundary): THIS FILE'S OWN CODE and the tier-1 extractor make
65
+ * ZERO network reach -- no URL, no socket, no remote call -- and the grep gate
66
+ * enforces it. Tier-2a (embedding-classifier.cjs) is ALSO fully local and
67
+ * zero-egress: it delegates to the embedding-spine boundary (generic model
68
+ * weights by id only, no user bytes). The ONLY remote model reach in the whole
69
+ * pipeline lives inside the tier-2b classifier module
70
+ * (lib/core/eureka/entity-classifier.cjs), which documents its own boundary: a
71
+ * LOCAL classification call over the Anthropic LLM transport, never the Brain
72
+ * surface, degrade-to-passthrough -- and now for the escalated residual only.
73
+ * The re-embed uses the already-vendored local paths only.
74
+ * - Part 9 (Memory Locality): every entity node is born review_status='proposed'
75
+ * via navigation.writeEntityNode; only a human confirmNode promotes it. This
76
+ * script writes ONLY through the navigation chokepoint -- NO raw INSERT INTO
77
+ * nodes/edges anywhere (the aggregator greps for this).
78
+ *
79
+ * CJS, node built-ins only, process.argv switch-case router. No em-dashes, no
80
+ * emoji anywhere.
81
+ *
82
+ * Usage:
83
+ * node scripts/entity-extract.cjs ROOM_DIR SUBCOMMAND [--session <id>] [--max <n>]
84
+ * node scripts/entity-extract.cjs --help
85
+ *
86
+ * Subcommands:
87
+ * run run the extraction in-process; write nodes+edges + status.json; block until done
88
+ * start fire-and-return: spawn the run detached, print paths, exit 0 immediately
89
+ * status print status.json as one JSON line (or {"state":"none"})
90
+ * report print a one-line human summary of the last run (or a 3-line error)
91
+ * help show usage
92
+ */
93
+
94
+ const fs = require('node:fs');
95
+ const path = require('node:path');
96
+ const { spawn } = require('node:child_process');
97
+
98
+ const { openRoomDb, closeRoomDb } = require('../lib/core/room-db.cjs');
99
+ const navigation = require('../lib/core/navigation.cjs');
100
+ const { insertNode, ALLOWED_EPISTEMIC_TYPES } = require('../lib/core/node-insert.cjs');
101
+
102
+ // R17-02: preserve whatever epistemic_type an existing row already carries
103
+ // (never silently reclassify it during a metadata-only refresh); fall back
104
+ // to 'observation' for a pre-R17-02 row that predates this field (these two
105
+ // call sites operate on already-indexed Artifact nodes -- system-bookkeeping
106
+ // class, same as the lazygraph-ops.cjs / rs-engine.cjs Artifact writers).
107
+ function existingOrDefaultEpistemicType(props) {
108
+ return (typeof props.epistemic_type === 'string' && ALLOWED_EPISTEMIC_TYPES.has(props.epistemic_type))
109
+ ? props.epistemic_type
110
+ : 'observation';
111
+ }
112
+ const { extractEntities } = require('../lib/core/eureka/entity-extractor.cjs');
113
+ const triModal = require('../lib/core/eureka/tri-modal-index.cjs');
114
+ // Tier-2a (quick-task 260714-k44): the LOCAL embedding WHAT-vs-WHY classifier. It
115
+ // is fully local and zero-egress (it delegates to the embedding-spine boundary),
116
+ // resolves the confident majority of candidates for free, and hands only the
117
+ // low-margin residual to tier-2b below. The dispatcher body in THIS file stays
118
+ // zero-network (grep-gated); the embedding tier adds no transport of its own.
119
+ const entityEmbedClassifier = require('../lib/core/eureka/embedding-classifier.cjs');
120
+ // Tier-2b (quick-task 260714-hzx): the semantic WHAT / WHY / NOISE classifier
121
+ // module. It is the ONLY model reach in this pipeline and documents its own
122
+ // boundary; it is now the ESCALATION-ONLY path, called per artifact for just the
123
+ // candidates tier-2a could not confidently resolve. resolveAnthropicKey gates
124
+ // whether that escalation runs at all (Part 7 reuse of the mva-classifier
125
+ // resolver, never a copy).
126
+ const entityClassifier = require('../lib/core/eureka/entity-classifier.cjs');
127
+ const { resolveAnthropicKey } = require('../lib/core/mva-classifier.cjs');
128
+ // Phase 219-02 (D-11, REQ-5): the SHIPPED zero-dep frontmatter parser (Canon
129
+ // Part 7 reuse-before-build -- never a new YAML parser). Deterministic,
130
+ // zero-LLM, zero network.
131
+ const { parseFrontmatter } = require('../lib/core/opportunity-ops.cjs');
132
+
133
+ // ---------------------------------------------------------------------------
134
+ // Path contract: everything this command writes lives under here. The subdir is
135
+ // .mindrian/entity-extract/ -- it NEVER collides with .mindrian/eureka/ (Pitfall
136
+ // 5: two independent pipelines must not share a status.json).
137
+ // ---------------------------------------------------------------------------
138
+
139
+ function reportDir(roomDir) { return path.join(roomDir, '.mindrian', 'entity-extract'); }
140
+ function statusPath(roomDir) { return path.join(reportDir(roomDir), 'status.json'); }
141
+
142
+ // ---------------------------------------------------------------------------
143
+ // Small helpers (verbatim from eureka-command.cjs).
144
+ // ---------------------------------------------------------------------------
145
+
146
+ function dirExists(p) {
147
+ try { return fs.statSync(p).isDirectory(); } catch (_e) { return false; }
148
+ }
149
+
150
+ function fileExists(p) {
151
+ try { return fs.statSync(p).isFile(); } catch (_e) { return false; }
152
+ }
153
+
154
+ // The 3-line What / Why / Fix error, to stderr. Never a stack trace.
155
+ function printError(what, why, fix) {
156
+ process.stderr.write('entity-extract: ' + what + '\n');
157
+ process.stderr.write(' Why: ' + why + '\n');
158
+ process.stderr.write(' Fix: ' + fix + '\n');
159
+ }
160
+
161
+ function writeStatus(roomDir, obj) {
162
+ fs.mkdirSync(reportDir(roomDir), { recursive: true });
163
+ fs.writeFileSync(statusPath(roomDir), JSON.stringify(obj) + '\n', 'utf8');
164
+ }
165
+
166
+ const USAGE = [
167
+ 'entity-extract -- tier-1 entity extraction over a room, writing proposed',
168
+ 'company/technology/market nodes + typed edges through navigation.',
169
+ '',
170
+ 'Usage:',
171
+ ' node scripts/entity-extract.cjs ROOM_DIR SUBCOMMAND [--session <id>] [--max <n>]',
172
+ '',
173
+ 'Subcommands:',
174
+ ' run run the extraction in-process; write nodes+edges + status.json; block until done',
175
+ ' start fire-and-return: spawn the run detached, print paths, exit 0 immediately',
176
+ ' status print status.json as one JSON line (or {"state":"none"})',
177
+ ' report print a one-line human summary of the last run (or a 3-line error)',
178
+ ' help show this usage',
179
+ '',
180
+ 'Flags:',
181
+ ' --session <id> the session id every extracted node is minted under (default entity-extract)',
182
+ ' --max <n> maxPerArtifact extraction cap forwarded to the extractor (default 25)',
183
+ ].join('\n');
184
+
185
+ // ---------------------------------------------------------------------------
186
+ // argv parse: ROOM_DIR SUBCOMMAND [flags].
187
+ // ---------------------------------------------------------------------------
188
+
189
+ function parseArgs(argv) {
190
+ const out = { roomDir: null, sub: null, session: 'entity-extract', max: 25, sessionProvided: false, maxProvided: false, help: false };
191
+ const positional = [];
192
+ for (let i = 0; i < argv.length; i += 1) {
193
+ const a = argv[i];
194
+ switch (a) {
195
+ case '-h':
196
+ case '--help': out.help = true; break;
197
+ case '--session': out.session = String(argv[i += 1] || ''); out.sessionProvided = true; break;
198
+ case '--max': out.max = parseInt(argv[i += 1], 10); out.maxProvided = true; break;
199
+ default: positional.push(a); break;
200
+ }
201
+ }
202
+ if (!out.session) out.session = 'entity-extract';
203
+ if (!Number.isFinite(out.max) || out.max <= 0) out.max = 25;
204
+ out.roomDir = positional[0] || null;
205
+ out.sub = (positional[1] || '').toLowerCase();
206
+ return out;
207
+ }
208
+
209
+ // ---------------------------------------------------------------------------
210
+ // The extraction core: walk artifacts, extract, batch-write through navigation.
211
+ // Returns { artifacts, entitiesWritten, edgesWritten, embedded }.
212
+ // ---------------------------------------------------------------------------
213
+
214
+ // Collect the room's artifact prose. Two tiers (T-218-VD-4, live-verified
215
+ // against the corepower-isolation room):
216
+ //
217
+ // (a) memory_artifact-backed files (kind in ROOM/STATE/MINTO/BRAIN/FEYNMAN/
218
+ // USER/DRIFT -- the closed vocabulary memory-artifacts.cjs's
219
+ // MEMORY_KIND_SET enforces). Each carries props.path; read the real file
220
+ // off disk, keyed by its OWN memory_artifact node id (exact per-file
221
+ // provenance) -- the original behavior, unchanged.
222
+ //
223
+ // (b) every OTHER .md file in a section directory. Live-verified gap: a
224
+ // room's actual named analysis documents (e.g.
225
+ // "mv-mft-competitive-landscape.md", "reverse-salient-analysis.md") are
226
+ // NOT memory_artifact-kinded -- the closed MEMORY_KIND_SET this module
227
+ // does not own cannot register a new kind per filename, and inventing a
228
+ // synthetic node id nothing else points at would break REQ-1's "edge
229
+ // back to its memory_artifact" contract. Instead, these files' entities
230
+ // link back to their SECTION's existing memory_artifact:<section>:ROOM
231
+ // node (preferring the ROOM kind, falling back to whatever memory_artifact
232
+ // exists for that section, then the room root). Coarser provenance
233
+ // (section-level, not exact-file-level) but always a REAL, already-
234
+ // materialized DESCRIBES target -- a section with no anchor at all is
235
+ // skipped, never given an invented one.
236
+ //
237
+ // Phase 219-02 additions (both ADDITIVE -- a two-arg call is byte-identical):
238
+ // - allowPaths (optional array of roomDir-relative paths): the D-16
239
+ // scoped-incremental seam. When present, ONLY artifacts whose path is in
240
+ // the allowlist are collected, so filing one explore-chain artifact never
241
+ // triggers a full-room re-extract.
242
+ // - each artifact entry now also carries { relPath, exact }: exact=true when
243
+ // the entry's artifactId IS the memory_artifact node of that very file
244
+ // (tier a); exact=false for the tier-b section-anchor fallback. The
245
+ // metadata pass writes ONLY to exact nodes (a section anchor represents a
246
+ // DIFFERENT file; writing another file's frontmatter onto it would lie).
247
+ function collectArtifacts(db, roomDir, allowPaths) {
248
+ const allowSet = (Array.isArray(allowPaths) && allowPaths.length > 0)
249
+ ? new Set(allowPaths.map(function (p) { return path.normalize(String(p)); }))
250
+ : null;
251
+ const isAllowed = function (rel) {
252
+ return allowSet === null || allowSet.has(path.normalize(rel));
253
+ };
254
+
255
+ const rows = db.prepare("SELECT id, properties FROM nodes WHERE type = 'memory_artifact'").all();
256
+ const artifacts = [];
257
+ const coveredPaths = new Set(); // roomDir-relative paths already read via memory_artifact
258
+ const sectionAnchor = new Map(); // section name ("_root" included) -> a valid memory_artifact node id
259
+
260
+ for (const row of rows) {
261
+ let props = {};
262
+ try { props = JSON.parse(row.properties || '{}'); } catch (_e) { props = {}; }
263
+ const rel = props && typeof props.path === 'string' ? props.path : null;
264
+ if (rel) {
265
+ if (isAllowed(rel)) {
266
+ const abs = path.join(roomDir, rel);
267
+ let text = null;
268
+ try { text = fs.readFileSync(abs, 'utf8'); } catch (_e) { text = null; }
269
+ if (text) {
270
+ artifacts.push({ artifactId: row.id, text: text, relPath: rel, exact: true });
271
+ coveredPaths.add(path.normalize(rel));
272
+ }
273
+ } else {
274
+ // Scoped run only: mark the filtered-out memory_artifact-backed path
275
+ // covered so tier (b) never re-reads it under a section anchor. On the
276
+ // default path (no allowlist) this branch is unreachable, so the
277
+ // default collection stays byte-identical to the 218 behavior.
278
+ coveredPaths.add(path.normalize(rel));
279
+ }
280
+ }
281
+ const section = props && typeof props.section === 'string' ? props.section : null;
282
+ if (section) {
283
+ const isRoomKind = props && props.kind === 'ROOM';
284
+ if (isRoomKind || !sectionAnchor.has(section)) sectionAnchor.set(section, row.id);
285
+ }
286
+ }
287
+
288
+ let sectionDirs = [];
289
+ try {
290
+ sectionDirs = fs.readdirSync(roomDir, { withFileTypes: true })
291
+ .filter(function (d) { return d.isDirectory() && d.name.charAt(0) !== '.'; })
292
+ .map(function (d) { return d.name; });
293
+ } catch (_e) { sectionDirs = []; }
294
+
295
+ for (const section of sectionDirs) {
296
+ const anchor = sectionAnchor.get(section) || sectionAnchor.get('_root');
297
+ if (!anchor) continue; // no valid DESCRIBES target for this section -- skip, never invent one
298
+ let files = [];
299
+ try { files = fs.readdirSync(path.join(roomDir, section)); } catch (_e) { files = []; }
300
+ for (const fname of files) {
301
+ if (!/\.md$/i.test(fname)) continue;
302
+ const rel = path.join(section, fname);
303
+ if (coveredPaths.has(path.normalize(rel))) continue;
304
+ if (!isAllowed(rel)) continue;
305
+ const abs = path.join(roomDir, rel);
306
+ let text = null;
307
+ try { text = fs.readFileSync(abs, 'utf8'); } catch (_e) { text = null; }
308
+ if (!text) continue;
309
+ artifacts.push({ artifactId: anchor, text: text, relPath: rel, exact: false });
310
+ coveredPaths.add(path.normalize(rel));
311
+ }
312
+ }
313
+
314
+ return artifacts;
315
+ }
316
+
317
+ // Phase 219-02 (D-11): the frontmatter keys the metadata pass lifts onto the
318
+ // artifact node as ADDITIVE JSON props. Values are JSON scalars ONLY
319
+ // (string/number/boolean); lists/objects/null are skipped (the frontmatter-
320
+ // injection threat T-219-05: a non-scalar never lands, a serialize failure
321
+ // skips the artifact with a counted warning, never a throw).
322
+ const METADATA_FM_KEYS = ['methodology', 'created', 'date', 'status', 'section', 'confidence'];
323
+
324
+ // applyArtifactMetadata(db, art) -- the per-artifact metadata merge, called
325
+ // INSIDE the D-05 batch transaction. Read the node's current props, merge the
326
+ // scalar frontmatter keys, write back through the shared insertNode UPSERT
327
+ // (ON CONFLICT updates type+properties only -- review_status and the
328
+ // provenance columns are NEVER touched). The structural `section` prop is
329
+ // scaffold-owned: it is only filled when absent, never overwritten by a
330
+ // conflicting frontmatter value (it anchors tier-b collection and ICM
331
+ // placement). All other metadata keys refresh on every run (metadata-owned).
332
+ // Returns 'applied' | 'skipped' | 'none'. NEVER throws.
333
+ function applyArtifactMetadata(db, art) {
334
+ try {
335
+ let fm = null;
336
+ try { fm = parseFrontmatter(art.text); } catch (_e) { return 'skipped'; }
337
+ if (!fm || typeof fm !== 'object') return 'none';
338
+
339
+ const row = db.prepare('SELECT id, type, properties FROM nodes WHERE id = ?').get(art.artifactId);
340
+ if (!row) return 'none';
341
+ let props = {};
342
+ try { props = JSON.parse(row.properties || '{}'); } catch (_e) { props = {}; }
343
+ if (!props || typeof props !== 'object' || Array.isArray(props)) props = {};
344
+
345
+ let changed = false;
346
+ for (const key of METADATA_FM_KEYS) {
347
+ const v = fm[key];
348
+ const isScalar = (typeof v === 'string' && v.length > 0)
349
+ || typeof v === 'number' || typeof v === 'boolean';
350
+ if (!isScalar) continue;
351
+ if (key === 'section' && typeof props.section === 'string' && props.section.length > 0) {
352
+ continue; // structural section wins; never clobbered by frontmatter
353
+ }
354
+ if (props[key] !== v) {
355
+ props[key] = v;
356
+ changed = true;
357
+ }
358
+ }
359
+ if (!changed) return 'none';
360
+
361
+ let propsJson;
362
+ try { propsJson = JSON.stringify(props); } catch (_e) { return 'skipped'; }
363
+ // The node already exists (we just SELECTed it), so this UPSERT takes the
364
+ // ON CONFLICT branch: properties refresh, review_status + provenance
365
+ // columns stay exactly as they were (merge discipline, assumption A5).
366
+ insertNode(db, row.id, row.type, propsJson, { epistemic_type: existingOrDefaultEpistemicType(props) });
367
+ return 'applied';
368
+ } catch (_e) {
369
+ return 'skipped'; // defensive: one bad artifact never kills the batch
370
+ }
371
+ }
372
+
373
+ // Tier-2 (quick-task 260714-hzx): the number of framework (WHY) terms merged onto
374
+ // any single artifact node is bounded (the T-219-05 scalar-only discipline).
375
+ const FRAMEWORK_TERM_CAP = 25;
376
+
377
+ // artifactExcerpt(text) -- the first ~10 non-empty prose lines of an artifact,
378
+ // capped at 600 chars, passed to the classifier module for domain context. Skips
379
+ // headings and fence markers so the excerpt is representative prose, never a wall
380
+ // of scaffolding. Pure, never throws.
381
+ function artifactExcerpt(text) {
382
+ try {
383
+ const lines = String(text || '').split(/\r?\n/);
384
+ const picked = [];
385
+ for (const raw of lines) {
386
+ const line = raw.trim();
387
+ if (!line) continue;
388
+ if (line.charAt(0) === '#') continue; // heading
389
+ if (/^```/.test(line)) continue; // fence marker
390
+ picked.push(line);
391
+ if (picked.length >= 10) break;
392
+ }
393
+ return picked.join(' ').slice(0, 600);
394
+ } catch (_e) {
395
+ return '';
396
+ }
397
+ }
398
+
399
+ // fallbackLabels(names) -- the pass-through label map: every candidate 'what'.
400
+ function fallbackLabels(names) {
401
+ const labels = {};
402
+ for (const n of names) labels[n] = 'what';
403
+ return labels;
404
+ }
405
+
406
+ // routeLabel(e, label, whatEntities, whyTerms, lowConfidence) -- apply one resolved
407
+ // label to one entity: WHAT keeps the entity flowing (byte-identical write path), WHY
408
+ // joins the framework-term signal on its source artifact, NOISE drops. Returns the
409
+ // applied label so the caller can tally the NOISE drops. The optional lowConfidence
410
+ // flag (quick 260715-cu8) rides a WHY term through to its artifact node so a term that
411
+ // landed via the no-LLM embedding best-guess is disclosed per-term, not just in the
412
+ // aggregate status.json counter. All existing call sites stay unflagged (confident);
413
+ // only the runTier2 no-LLM escalation branch passes it true.
414
+ //
415
+ // quick 260719 (RCA handoff-eureka-entity-noise): the SAME lowConfidence flag now
416
+ // also rides a WHAT entity. A WHAT that arrived via the no-LLM embedding best-guess
417
+ // is stamped e.evidenceTier = 'low_confidence' so the entity NODE carries that
418
+ // provenance at write time (navigation.writeEntityNode already persists evidenceTier)
419
+ // and the eureka pairing pass can exclude an unverified regex hit. This closes the
420
+ // noise the handoff traced: tier-1 hits like "Windows" / "CSFs" that the embedding
421
+ // tier could not resolve, with no tier-2b LLM available to reroute them to NOISE
422
+ // (the NOISE class only ever runs keyed, and no key resolves keyless).
423
+ function routeLabel(e, label, whatEntities, whyTerms, lowConfidence) {
424
+ if (label === 'why') {
425
+ const entry = { name: e.name, sourceArtifactId: e.sourceArtifactId };
426
+ if (lowConfidence === true) entry.lowConfidence = true;
427
+ whyTerms.push(entry);
428
+ } else if (label === 'noise') {
429
+ return 'noise';
430
+ } else {
431
+ if (lowConfidence === true) e.evidenceTier = 'low_confidence';
432
+ whatEntities.push(e);
433
+ }
434
+ return label;
435
+ }
436
+
437
+ // runDegradeHzx(...) -- the verbatim prior (quick-task 260714-hzx) per-artifact
438
+ // pass, used ONLY when tier-2a (the embedding tier) is unavailable (ok:false).
439
+ // Groups every survivor by artifact and asks tier-2b for all of that artifact's
440
+ // candidates when keyed, else the every-name-WHAT fallback. classifier_source
441
+ // stays model/fallback/mixed exactly as before this quick task. This preserves
442
+ // "an unavailable encoder means the prior behavior verbatim".
443
+ async function runDegradeHzx(textById, byArtifact, tier1WhyTerms, classifyImpl, keyPresent) {
444
+ const whatEntities = [];
445
+ const whyTerms = tier1WhyTerms.slice();
446
+ let droppedNoise = 0;
447
+ let usedModel = false;
448
+ let usedFallback = false;
449
+
450
+ for (const [artifactId, arr] of byArtifact) {
451
+ const names = arr.map(function (e) { return e.name; });
452
+ let result;
453
+ if (!keyPresent) {
454
+ result = { labels: fallbackLabels(names), source: 'fallback' };
455
+ } else {
456
+ const excerpt = artifactExcerpt(textById.get(artifactId) || '');
457
+ try {
458
+ result = await classifyImpl({ names: names, excerpt: excerpt });
459
+ } catch (_e) {
460
+ result = { labels: fallbackLabels(names), source: 'fallback' };
461
+ }
462
+ if (!result || typeof result !== 'object' || !result.labels || typeof result.labels !== 'object') {
463
+ result = { labels: fallbackLabels(names), source: 'fallback' };
464
+ }
465
+ }
466
+ if (result.source === 'model') usedModel = true;
467
+ else usedFallback = true;
468
+
469
+ for (const e of arr) {
470
+ const raw = result.labels[e.name];
471
+ const label = (raw === 'why' || raw === 'noise') ? raw : 'what';
472
+ // quick 260719: in the tier-2a-unavailable degrade, a WHAT sourced from the
473
+ // every-name-WHAT fallback (neither semantic tier ran) is stamped evidenceTier
474
+ // 'fallback' as HONEST PROVENANCE only. Unlike 'low_confidence', 'fallback' is
475
+ // DELIBERATELY NOT excluded from eureka pairing: when the encoder is
476
+ // unavailable these fallback entities are the ONLY substrate the room has, so
477
+ // excluding them would empty the ranked list and break Decision 8 (graceful
478
+ // degradation everywhere; proven by tests/test-218-noise-reduction.cjs). The
479
+ // pairing exclusion set (LOW_TRUST_EVIDENCE_TIERS in
480
+ // scripts/eureka-portfolio-report.cjs) is low_confidence ONLY. A model-sourced
481
+ // WHAT stays unstamped (evidenceTier 'None').
482
+ if (label === 'what' && result.source !== 'model') e.evidenceTier = 'fallback';
483
+ if (routeLabel(e, label, whatEntities, whyTerms) === 'noise') droppedNoise += 1;
484
+ }
485
+ }
486
+
487
+ let classifierSource;
488
+ if (usedModel && usedFallback) classifierSource = 'mixed';
489
+ else if (usedModel) classifierSource = 'model';
490
+ else classifierSource = 'fallback';
491
+
492
+ return {
493
+ whatEntities: whatEntities,
494
+ whyTerms: whyTerms,
495
+ droppedNoise: droppedNoise,
496
+ classifierSource: classifierSource,
497
+ embeddingResolved: 0,
498
+ escalated: 0,
499
+ modelResolved: usedModel ? whatEntities.length + (whyTerms.length - tier1WhyTerms.length) + droppedNoise : 0,
500
+ lowConfidence: 0,
501
+ };
502
+ }
503
+
504
+ // runTier2(artifacts, entities, tier1WhyTerms, classifyImpl, embedClassifyImpl,
505
+ // keyPresent) -- the LOCKED two-tier semantic pass. Tier-2a (the embedding
506
+ // classifier) runs first over ALL unique survivor names in ONE call; confident
507
+ // candidates resolve for free. Only the low-margin residual escalates to tier-2b
508
+ // (the LLM classifier), grouped per artifact, escalated names ONLY. Every model
509
+ // call completes here, BEFORE the caller opens the D-05 transaction, so neither
510
+ // tier holds the write lock. Returns
511
+ // { whatEntities, whyTerms, droppedNoise, classifierSource,
512
+ // embeddingResolved, escalated, modelResolved, lowConfidence }.
513
+ async function runTier2(artifacts, entities, tier1WhyTerms, classifyImpl, embedClassifyImpl, keyPresent) {
514
+ const textById = new Map();
515
+ for (const art of artifacts) textById.set(art.artifactId, art.text);
516
+
517
+ const byArtifact = new Map(); // artifactId -> [entity]
518
+ for (const e of entities) {
519
+ if (!byArtifact.has(e.sourceArtifactId)) byArtifact.set(e.sourceArtifactId, []);
520
+ byArtifact.get(e.sourceArtifactId).push(e);
521
+ }
522
+
523
+ // Tier-2a: ONE embedding call over the unique candidate names (the module
524
+ // batches the embedding internally). A dedup keeps the reference-vs-candidate
525
+ // scoring bounded regardless of how many artifacts share a name.
526
+ const uniqueNames = Array.from(new Set(entities.map(function (e) { return e.name; })));
527
+ let embed = null;
528
+ try {
529
+ embed = await embedClassifyImpl({ names: uniqueNames });
530
+ } catch (_e) {
531
+ embed = { ok: false, error: 'embed_failed' };
532
+ }
533
+
534
+ // Tier-2a unavailable -> the ENTIRE tier degrades to the prior hzx behavior.
535
+ if (!embed || embed.ok !== true || !embed.results || typeof embed.results !== 'object') {
536
+ return runDegradeHzx(textById, byArtifact, tier1WhyTerms, classifyImpl, keyPresent);
537
+ }
538
+
539
+ const whatEntities = [];
540
+ const whyTerms = tier1WhyTerms.slice(); // tier-1 structural WHY seed (zero model cost)
541
+ let droppedNoise = 0;
542
+ let embeddingResolved = 0;
543
+ let escalated = 0;
544
+ let modelResolved = 0;
545
+ let lowConfidence = 0;
546
+
547
+ // Partition: confident embedding results resolve now; unconfident ones (or a
548
+ // missing result) collect into the per-artifact escalation set, carrying their
549
+ // embedding best-guess label as the no-LLM / failed-LLM fallback.
550
+ const escByArtifact = new Map(); // artifactId -> [{ e, bestGuess }]
551
+ for (const e of entities) {
552
+ const er = embed.results[e.name];
553
+ if (er && er.confident === true && (er.label === 'what' || er.label === 'why')) {
554
+ routeLabel(e, er.label, whatEntities, whyTerms);
555
+ embeddingResolved += 1;
556
+ } else {
557
+ const bestGuess = (er && (er.label === 'what' || er.label === 'why')) ? er.label : 'what';
558
+ if (!escByArtifact.has(e.sourceArtifactId)) escByArtifact.set(e.sourceArtifactId, []);
559
+ escByArtifact.get(e.sourceArtifactId).push({ e: e, bestGuess: bestGuess });
560
+ escalated += 1;
561
+ }
562
+ }
563
+
564
+ // Tier-2b escalation: per artifact, the escalated names ONLY.
565
+ for (const [artifactId, items] of escByArtifact) {
566
+ const escNames = items.map(function (it) { return it.e.name; });
567
+ let modelLabels = null;
568
+ if (keyPresent) {
569
+ const excerpt = artifactExcerpt(textById.get(artifactId) || '');
570
+ let result;
571
+ try {
572
+ result = await classifyImpl({ names: escNames, excerpt: excerpt });
573
+ } catch (_e) {
574
+ result = null;
575
+ }
576
+ // Accept model labels only when the call succeeded with source 'model';
577
+ // a throw, a bad shape, or a fallback source routes THIS artifact's
578
+ // escalated candidates to the embedding best-guess (disclosed low-confidence).
579
+ if (result && typeof result === 'object' && result.labels
580
+ && typeof result.labels === 'object' && result.source === 'model') {
581
+ modelLabels = result.labels;
582
+ }
583
+ }
584
+
585
+ for (const it of items) {
586
+ if (modelLabels) {
587
+ const raw = modelLabels[it.e.name];
588
+ const label = (raw === 'why' || raw === 'noise' || raw === 'what') ? raw : it.bestGuess;
589
+ if (routeLabel(it.e, label, whatEntities, whyTerms) === 'noise') droppedNoise += 1;
590
+ modelResolved += 1;
591
+ } else {
592
+ // No LLM (no key, or the escalation failed): the embedding best-guess
593
+ // stands, counted as low-confidence -- NEVER a silent WHAT default. The
594
+ // lowConfidence flag threads the disclosure per-term to the artifact node
595
+ // (quick 260715-cu8), not just into the aggregate lowConfidence counter.
596
+ routeLabel(it.e, it.bestGuess, whatEntities, whyTerms, true);
597
+ lowConfidence += 1;
598
+ }
599
+ }
600
+ }
601
+
602
+ // classifier_source honesty (K44-REQ-3): which tier actually resolved candidates.
603
+ const resolvedByEmbedding = embeddingResolved > 0 || lowConfidence > 0;
604
+ const resolvedByModel = modelResolved > 0;
605
+ let classifierSource;
606
+ if (resolvedByModel && resolvedByEmbedding) classifierSource = 'mixed';
607
+ else if (resolvedByModel) classifierSource = 'model';
608
+ else if (resolvedByEmbedding) classifierSource = 'embedding';
609
+ else classifierSource = 'fallback'; // nothing resolved semantically (no candidates)
610
+
611
+ return {
612
+ whatEntities: whatEntities,
613
+ whyTerms: whyTerms,
614
+ droppedNoise: droppedNoise,
615
+ classifierSource: classifierSource,
616
+ embeddingResolved: embeddingResolved,
617
+ escalated: escalated,
618
+ modelResolved: modelResolved,
619
+ lowConfidence: lowConfidence,
620
+ };
621
+ }
622
+
623
+ // applyFrameworkTerms(db, artifactId, terms) -- the WHY-signal merge, called
624
+ // INSIDE the D-05 transaction alongside the metadata pass. Mirrors
625
+ // applyArtifactMetadata EXACTLY: SELECT the node, parse props, union the new
626
+ // framework terms with any existing props.framework_terms (comma-split), and write
627
+ // back SCALAR PROPS ONLY via the shared insertNode UPSERT: framework_terms
628
+ // (comma-joined, capped), framework_term_count (number), and -- additively, quick
629
+ // 260715-cu8 -- framework_terms_low_confidence (comma-joined subset naming the terms
630
+ // that landed via the no-LLM embedding best-guess degrade). `terms` is an array of
631
+ // { name, lowConfidence } entries (a bare string is tolerated and treated confident).
632
+ // Scalars only (T-219-05); never a new node type, never an edge; review_status and
633
+ // provenance are never touched. Returns 'applied' | 'skipped' | 'none'. NEVER throws.
634
+ //
635
+ // Reader-audit finding (planning_findings item 3, quick 260715-cu8): framework_terms
636
+ // has NO production readers outside this pipeline. A grep (node_modules + .planning
637
+ // excluded) shows the ONLY writer is this file and the ONLY readers are
638
+ // tests/test-218-what-why-classifier.cjs and tests/test-218-extend-to-artifacts.cjs,
639
+ // both via substring indexOf checks on the comma-joined string. framework_terms stays
640
+ // a plain comma-joined scalar (byte-compatible for those substring readers); the new
641
+ // framework_terms_low_confidence is a purely additive sibling scalar that cannot break
642
+ // any existing reader.
643
+ function applyFrameworkTerms(db, artifactId, terms) {
644
+ try {
645
+ const row = db.prepare('SELECT id, type, properties FROM nodes WHERE id = ?').get(artifactId);
646
+ if (!row) return 'none';
647
+ let props = {};
648
+ try { props = JSON.parse(row.properties || '{}'); } catch (_e) { props = {}; }
649
+ if (!props || typeof props !== 'object' || Array.isArray(props)) props = {};
650
+
651
+ // Normalize the incoming WHY terms. Preserve order for first-seen casing;
652
+ // split into the incoming name list, the low-confidence names, and the set of
653
+ // names that arrived CONFIDENT this call (a bare string counts as confident).
654
+ const incomingNames = [];
655
+ const incomingLowConf = [];
656
+ const incomingConfidentKeys = new Set();
657
+ for (const t of terms) {
658
+ let name, low;
659
+ if (typeof t === 'string') { name = t; low = false; }
660
+ else if (t && typeof t === 'object') { name = t.name; low = t.lowConfidence === true; }
661
+ else { continue; }
662
+ if (typeof name !== 'string' || name.length === 0) continue;
663
+ incomingNames.push(name);
664
+ if (low) incomingLowConf.push(name);
665
+ else incomingConfidentKeys.add(name.toLowerCase());
666
+ }
667
+
668
+ const existing = (typeof props.framework_terms === 'string' && props.framework_terms.length > 0)
669
+ ? props.framework_terms.split(',').map(function (s) { return s.trim(); }).filter(Boolean)
670
+ : [];
671
+
672
+ // Union existing + new, case-insensitive dedup, first-seen casing wins, capped.
673
+ const seen = new Set();
674
+ const merged = [];
675
+ for (const t of existing.concat(incomingNames)) {
676
+ if (typeof t !== 'string' || t.length === 0) continue;
677
+ const k = t.toLowerCase();
678
+ if (seen.has(k)) continue;
679
+ seen.add(k);
680
+ merged.push(t);
681
+ if (merged.length >= FRAMEWORK_TERM_CAP) break;
682
+ }
683
+ if (merged.length === 0) return 'none';
684
+
685
+ props.framework_terms = merged.join(', ');
686
+ props.framework_term_count = merged.length;
687
+
688
+ // Sibling scalar prop maintenance (quick 260715-cu8): union the prior low-conf
689
+ // names with this call's low-conf names, DROP any that arrived confident this
690
+ // call (upgrade wins), prune to the merged framework_terms set (subset
691
+ // invariant), dedup case-insensitively, cap. Write when non-empty; DELETE when
692
+ // empty (never an empty string). Same scalar-only merge discipline as above.
693
+ const existingLow = (typeof props.framework_terms_low_confidence === 'string' && props.framework_terms_low_confidence.length > 0)
694
+ ? props.framework_terms_low_confidence.split(',').map(function (s) { return s.trim(); }).filter(Boolean)
695
+ : [];
696
+ const mergedKeys = new Set(merged.map(function (m) { return m.toLowerCase(); }));
697
+ const lowSeen = new Set();
698
+ const lowMerged = [];
699
+ for (const t of existingLow.concat(incomingLowConf)) {
700
+ if (typeof t !== 'string' || t.length === 0) continue;
701
+ const k = t.toLowerCase();
702
+ if (lowSeen.has(k)) continue; // case-insensitive dedup, first-seen casing
703
+ if (incomingConfidentKeys.has(k)) continue; // confident this call -> upgrade removes the marker
704
+ if (!mergedKeys.has(k)) continue; // subset invariant: only names present in framework_terms
705
+ lowSeen.add(k);
706
+ lowMerged.push(t);
707
+ if (lowMerged.length >= FRAMEWORK_TERM_CAP) break;
708
+ }
709
+ if (lowMerged.length > 0) {
710
+ props.framework_terms_low_confidence = lowMerged.join(', ');
711
+ } else {
712
+ delete props.framework_terms_low_confidence;
713
+ }
714
+
715
+ let propsJson;
716
+ try { propsJson = JSON.stringify(props); } catch (_e) { return 'skipped'; }
717
+ // The node already exists (just SELECTed), so this UPSERT takes the ON
718
+ // CONFLICT branch: properties refresh, review_status + provenance untouched.
719
+ insertNode(db, row.id, row.type, propsJson, { epistemic_type: existingOrDefaultEpistemicType(props) });
720
+ return 'applied';
721
+ } catch (_e) {
722
+ return 'skipped';
723
+ }
724
+ }
725
+
726
+ async function runExtraction(db, roomDir, sessionId, maxPerArtifact, opts) {
727
+ const options = opts || {};
728
+ // opts.paths (optional, ADDITIVE): the D-16 scoped-incremental allowlist.
729
+ // Absent -> full-room collection, byte-identical to the 218 behavior.
730
+ const artifacts = collectArtifacts(db, roomDir, options.paths);
731
+
732
+ // Aggregate all candidates first (pure, no writes yet). Tier-1 now also yields
733
+ // a structural WHY seed (frameworkTerms) at zero model cost -- these never go to
734
+ // the model, they are already known framework vocabulary.
735
+ const rawEntities = []; // { entityType, name, sourceArtifactId }
736
+ const relations = []; // { source, target, edge_type }
737
+ const tier1WhyTerms = []; // { name, sourceArtifactId }
738
+ for (const art of artifacts) {
739
+ const res = extractEntities(art.text, { sourceArtifactId: art.artifactId, maxPerArtifact: maxPerArtifact });
740
+ for (const e of res.entities) rawEntities.push(e);
741
+ for (const r of res.relations) relations.push(r);
742
+ if (Array.isArray(res.frameworkTerms)) {
743
+ for (const t of res.frameworkTerms) tier1WhyTerms.push(t);
744
+ }
745
+ }
746
+
747
+ // Tier-2 (two-tier, quick-task 260714-k44): the semantic pass runs AFTER
748
+ // aggregation and strictly BEFORE db.exec('BEGIN'). Tier-2a (the embedding
749
+ // classifier) resolves the confident majority for free; only the low-margin
750
+ // residual escalates to tier-2b (the LLM classifier). Two additive seams mirror
751
+ // the classifyImpl idiom:
752
+ // opts.embedClassifyImpl - the tier-2a surrogate (defaults to the real
753
+ // classifyByEmbedding); a test injects deterministic embedding verdicts.
754
+ // opts.classifyImpl - the tier-2b surrogate (defaults to the real
755
+ // classifyArtifactCandidates); injecting it bypasses the key gate.
756
+ // opts._forceNoLlm - test-only: forces keyPresent false so the honest
757
+ // no-LLM degrade leg is deterministic regardless of the machine key state.
758
+ const classifyInjected = typeof options.classifyImpl === 'function';
759
+ const classifyImpl = classifyInjected
760
+ ? options.classifyImpl
761
+ : entityClassifier.classifyArtifactCandidates;
762
+ const embedInjected = typeof options.embedClassifyImpl === 'function';
763
+ const embedClassifyImpl = embedInjected
764
+ ? options.embedClassifyImpl
765
+ : entityEmbedClassifier.classifyByEmbedding;
766
+ const forceNoLlm = options._forceNoLlm === true;
767
+ const keyPresent = forceNoLlm
768
+ ? false
769
+ : (classifyInjected ? true : (resolveAnthropicKey() !== null));
770
+
771
+ const tier2 = await runTier2(artifacts, rawEntities, tier1WhyTerms, classifyImpl, embedClassifyImpl, keyPresent);
772
+ const entities = tier2.whatEntities;
773
+
774
+ // CR-01 fix (code review, phase 231, 2026-07-19): the same entity name can
775
+ // appear in more than one artifact. Tier-2a classifies each unique name ONCE
776
+ // globally, but tier-2b escalation runs PER ARTIFACT with a separate network
777
+ // call each time, so an ordinary transient failure on just one of those calls
778
+ // can leave two entries for the same name disagreeing on evidenceTier (one
779
+ // 'None'/trusted, one 'low_confidence'). Both entries write to the SAME node
780
+ // id (ENTITY_NODE_ID is minted from name alone), and node-insert.cjs's
781
+ // ON CONFLICT is a full overwrite, never a merge -- so without this pass,
782
+ // whichever entry happens to write LAST in array order wins outright,
783
+ // silently flipping a trusted entity to excluded (or vice versa) based on
784
+ // filesystem read order, not evidence. This mirrors the "confident upgrade
785
+ // wins" reconciliation applyFrameworkTerms() already does for the WHY side.
786
+ // NOTE: this only NORMALIZES evidenceTier across same-name entries in place
787
+ // -- it does not remove any entries, so every artifact that mentions the
788
+ // entity still gets its own DESCRIBES edge in the write loop below.
789
+ (function reconcileEvidenceTierAcrossDuplicateNames() {
790
+ const trustRank = { None: 2, fallback: 1, low_confidence: 0 };
791
+ const rankOf = function (tier) { return trustRank[tier || 'None']; };
792
+ // Map.get() returns undefined both for "key absent" and for "key present
793
+ // with value undefined" (a trusted entity's evidenceTier is legitimately
794
+ // undefined) -- those are NOT the same thing here, so track presence with
795
+ // .has() rather than an undefined check, and never store the literal
796
+ // `undefined` value itself (normalize it to the 'None' string).
797
+ const bestByName = new Map(); // name -> highest-trust evidenceTier seen ('None'/'fallback'/'low_confidence')
798
+ for (const e of entities) {
799
+ const tier = e.evidenceTier || 'None';
800
+ if (!bestByName.has(e.name) || rankOf(tier) > rankOf(bestByName.get(e.name))) {
801
+ bestByName.set(e.name, tier);
802
+ }
803
+ }
804
+ for (const e of entities) {
805
+ const winner = bestByName.get(e.name);
806
+ e.evidenceTier = winner === 'None' ? undefined : winner;
807
+ }
808
+ })();
809
+
810
+ // Relation filter: an edge endpoint node exists only for a surviving WHAT name.
811
+ // Drop any relation whose source or target was rerouted to WHY or dropped.
812
+ const whatNames = new Set(entities.map(function (e) { return e.name; }));
813
+ const survivingRelations = relations.filter(function (r) {
814
+ return whatNames.has(r.source) && whatNames.has(r.target);
815
+ });
816
+
817
+ // Aggregate the WHY terms per artifact for the in-transaction merge. Each entry
818
+ // carries { name, lowConfidence } (quick 260715-cu8) so applyFrameworkTerms can
819
+ // maintain the per-term disclosure sibling prop; a bare confident term reduces to
820
+ // lowConfidence:false.
821
+ const whyByArtifact = new Map(); // artifactId -> [{ name, lowConfidence }]
822
+ for (const t of tier2.whyTerms) {
823
+ if (!whyByArtifact.has(t.sourceArtifactId)) whyByArtifact.set(t.sourceArtifactId, []);
824
+ whyByArtifact.get(t.sourceArtifactId).push({ name: t.name, lowConfidence: t.lowConfidence === true });
825
+ }
826
+
827
+ let entitiesWritten = 0;
828
+ let edgesWritten = 0;
829
+ let metadataApplied = 0;
830
+ let metadataSkipped = 0;
831
+ let frameworkApplied = 0;
832
+ let frameworkSkipped = 0;
833
+
834
+ // D-05 batch: ONE explicit transaction around the whole node+edge batch.
835
+ // node:sqlite has NO .transaction() helper (Pitfall 3) -- BEGIN/COMMIT/ROLLBACK
836
+ // via db.exec. A mid-batch error rolls back ALL of it (T-218-09).
837
+ db.exec('BEGIN');
838
+ try {
839
+ // 1. Entity nodes -- born review_status='proposed' via the chokepoint.
840
+ for (const e of entities) {
841
+ const r = navigation.writeEntityNode(db, {
842
+ entityType: e.entityType,
843
+ name: e.name,
844
+ sessionId: sessionId,
845
+ // quick 260719: carry the provenance stamp threaded onto the entity by
846
+ // routeLabel / runDegradeHzx. A confident entity leaves this undefined and
847
+ // writeEntityNode defaults evidenceTier to 'None' (byte-identical to the
848
+ // prior write). A low_confidence / fallback WHAT lands stamped so the eureka
849
+ // pairing pass excludes an unverified regex hit.
850
+ evidenceTier: e.evidenceTier,
851
+ });
852
+ if (r && r.ok) entitiesWritten += 1;
853
+ }
854
+ // 2. entity -> artifact DESCRIBES links (provenance). Direction source=entity
855
+ // target=memory_artifact. Routed through navigation.writeEdge (never raw
856
+ // SQL). The target is a real memory_artifact node (collectArtifacts).
857
+ for (const e of entities) {
858
+ const entityId = navigation.ENTITY_NODE_ID(sessionId, e.name);
859
+ const r = navigation.writeEdge(db, {
860
+ source_id: entityId,
861
+ target_id: e.sourceArtifactId,
862
+ edge_type: 'DESCRIBES',
863
+ properties: { relation: 'describes', entity_node: entityId },
864
+ });
865
+ if (r && r.ok) edgesWritten += 1;
866
+ }
867
+ // 3. entity -> entity domain-relationship edges. The extractor names the
868
+ // endpoints; ENTITY_NODE_ID resolves each name to the same node id
869
+ // writeEntityNode minted under this sessionId. Only relations whose BOTH
870
+ // endpoints survived tier-2 as WHAT are written (a WHY/NOISE endpoint has
871
+ // no entity node to point at).
872
+ for (const rel of survivingRelations) {
873
+ const srcId = navigation.ENTITY_NODE_ID(sessionId, rel.source);
874
+ const tgtId = navigation.ENTITY_NODE_ID(sessionId, rel.target);
875
+ const r = navigation.writeEdge(db, {
876
+ source_id: srcId,
877
+ target_id: tgtId,
878
+ edge_type: rel.edge_type,
879
+ properties: { relation: String(rel.edge_type).toLowerCase() },
880
+ });
881
+ if (r && r.ok) edgesWritten += 1;
882
+ }
883
+ // 4. Phase 219-02 (D-11, REQ-5): the frontmatter metadata pass, INSIDE the
884
+ // same D-05 transaction. Only EXACT artifacts (the node IS that file)
885
+ // receive metadata -- a tier-b section anchor stands for a different
886
+ // file, so writing another file's frontmatter onto it would lie.
887
+ // Deterministic, zero-LLM, zero network; a skip is counted, never a
888
+ // throw (the batch survives, T-219-05).
889
+ for (const art of artifacts) {
890
+ if (!art.exact) continue;
891
+ const outcome = applyArtifactMetadata(db, art);
892
+ if (outcome === 'applied') metadataApplied += 1;
893
+ else if (outcome === 'skipped') metadataSkipped += 1;
894
+ }
895
+ // 5. Tier-2 (quick-task 260714-hzx): the framework-term (WHY) merge, INSIDE
896
+ // the same D-05 transaction. Two scalar props only (framework_terms +
897
+ // framework_term_count); never a new node type, never an edge. A per-
898
+ // artifact failure is counted and skipped, never thrown (the batch
899
+ // survives). Merges onto the WHY term's source artifact node regardless of
900
+ // exact/anchor -- the term names framework vocabulary observed in that
901
+ // file's prose, attributed to its provenance artifact.
902
+ for (const [artifactId, terms] of whyByArtifact) {
903
+ const outcome = applyFrameworkTerms(db, artifactId, terms);
904
+ if (outcome === 'applied') frameworkApplied += 1;
905
+ else if (outcome === 'skipped') frameworkSkipped += 1;
906
+ }
907
+ db.exec('COMMIT');
908
+ } catch (err) {
909
+ db.exec('ROLLBACK');
910
+ throw err;
911
+ }
912
+
913
+ // Route-a best-effort re-embed (REQ-3, Open Q2). AFTER commit, in its OWN
914
+ // try/catch: a slow/absent encoder degrades to lexical-only and must NEVER
915
+ // throw or roll back the entity writes (T-218-10). indexNodes is idempotent
916
+ // (per-node DELETE-then-INSERT), so re-running is safe.
917
+ let embedded = false;
918
+ // Tier-2 additive result fields (entitiesWhat / termsWhy / droppedNoise /
919
+ // classifierSource) ride both the success and the degrade branch identically.
920
+ const tier2Result = {
921
+ entitiesWhat: entities.length,
922
+ termsWhy: tier2.whyTerms.length,
923
+ droppedNoise: tier2.droppedNoise,
924
+ classifierSource: tier2.classifierSource,
925
+ frameworkApplied: frameworkApplied,
926
+ frameworkSkipped: frameworkSkipped,
927
+ // Two-tier (quick-task 260714-k44) additive per-tier counts: how many
928
+ // candidates each tier resolved, how many escalated, and how many landed on a
929
+ // disclosed low-confidence embedding best-guess (never a silent WHAT).
930
+ tier2Embedding: tier2.embeddingResolved,
931
+ tier2Escalated: tier2.escalated,
932
+ tier2Model: tier2.modelResolved,
933
+ tier2LowConfidence: tier2.lowConfidence,
934
+ };
935
+ return triModal.indexNodes(db, { roomDir: roomDir })
936
+ .then(function (idx) {
937
+ embedded = !!(idx && idx.embedded);
938
+ return Object.assign({
939
+ artifacts: artifacts.length,
940
+ entitiesWritten: entitiesWritten,
941
+ edgesWritten: edgesWritten,
942
+ embedded: embedded,
943
+ metadataApplied: metadataApplied,
944
+ metadataSkipped: metadataSkipped,
945
+ }, tier2Result);
946
+ })
947
+ .catch(function () {
948
+ // Degrade-never-throw: the entity writes are already committed.
949
+ return Object.assign({
950
+ artifacts: artifacts.length,
951
+ entitiesWritten: entitiesWritten,
952
+ edgesWritten: edgesWritten,
953
+ embedded: false,
954
+ metadataApplied: metadataApplied,
955
+ metadataSkipped: metadataSkipped,
956
+ }, tier2Result);
957
+ });
958
+ }
959
+
960
+ // ---------------------------------------------------------------------------
961
+ // Subcommands.
962
+ // ---------------------------------------------------------------------------
963
+
964
+ async function cmdRun(opts) {
965
+ const roomDir = opts.roomDir;
966
+ if (!dirExists(roomDir)) {
967
+ printError('room directory not found', String(roomDir) + ' is not a directory', 'pass a valid room path, or run /mos:new-project');
968
+ return 1;
969
+ }
970
+
971
+ const startedAt = new Date().toISOString();
972
+ writeStatus(roomDir, { state: 'running', started_at: startedAt, pid: process.pid });
973
+
974
+ let db = null;
975
+ try {
976
+ db = openRoomDb(roomDir, { allowExtension: true });
977
+ const result = await runExtraction(db, roomDir, opts.session, opts.max);
978
+ writeStatus(roomDir, {
979
+ state: 'done',
980
+ started_at: startedAt,
981
+ finished_at: new Date().toISOString(),
982
+ pid: process.pid,
983
+ artifacts: result.artifacts,
984
+ entities: result.entitiesWritten,
985
+ edges: result.edgesWritten,
986
+ embedded: result.embedded,
987
+ metadata_applied: result.metadataApplied,
988
+ metadata_skipped: result.metadataSkipped,
989
+ // Tier-2 (quick-task 260714-hzx) additive observability keys.
990
+ entities_what: result.entitiesWhat,
991
+ terms_why: result.termsWhy,
992
+ dropped_noise: result.droppedNoise,
993
+ classifier_source: result.classifierSource,
994
+ framework_applied: result.frameworkApplied,
995
+ framework_skipped: result.frameworkSkipped,
996
+ // Two-tier (quick-task 260714-k44) additive per-tier observability keys.
997
+ tier2_embedding: result.tier2Embedding,
998
+ tier2_escalated: result.tier2Escalated,
999
+ tier2_model: result.tier2Model,
1000
+ tier2_low_confidence: result.tier2LowConfidence,
1001
+ session: opts.session,
1002
+ });
1003
+ return 0;
1004
+ } catch (err) {
1005
+ const msg = String(err && err.message ? err.message : err).split('\n')[0];
1006
+ writeStatus(roomDir, {
1007
+ state: 'failed',
1008
+ started_at: startedAt,
1009
+ finished_at: new Date().toISOString(),
1010
+ pid: process.pid,
1011
+ error: msg,
1012
+ });
1013
+ printError('entity extraction failed', msg, 'inspect ' + statusPath(roomDir) + ' then re-run entity-extract');
1014
+ return 1;
1015
+ } finally {
1016
+ if (db) { try { closeRoomDb(db); } catch (_e) { /* already closed */ } }
1017
+ }
1018
+ }
1019
+
1020
+ function cmdStart(opts) {
1021
+ const roomDir = opts.roomDir;
1022
+ if (!dirExists(roomDir)) {
1023
+ printError('room directory not found', String(roomDir) + ' is not a directory', 'pass a valid room path, or run /mos:new-project');
1024
+ return 1;
1025
+ }
1026
+ fs.mkdirSync(reportDir(roomDir), { recursive: true });
1027
+
1028
+ const forwarded = [];
1029
+ if (opts.sessionProvided) forwarded.push('--session', String(opts.session));
1030
+ if (opts.maxProvided) forwarded.push('--max', String(opts.max));
1031
+
1032
+ const child = spawn(process.execPath, [__filename, roomDir, 'run'].concat(forwarded), {
1033
+ detached: true,
1034
+ stdio: 'ignore',
1035
+ });
1036
+ child.unref();
1037
+
1038
+ process.stdout.write('entity extraction started (background)\n');
1039
+ process.stdout.write('status: ' + statusPath(roomDir) + '\n');
1040
+ return 0;
1041
+ }
1042
+
1043
+ function cmdStatus(opts) {
1044
+ const roomDir = opts.roomDir;
1045
+ const sp = statusPath(roomDir);
1046
+ if (fileExists(sp)) {
1047
+ let parsed = null;
1048
+ try { parsed = JSON.parse(fs.readFileSync(sp, 'utf8')); } catch (_e) { parsed = null; }
1049
+ if (parsed) {
1050
+ process.stdout.write(JSON.stringify(parsed) + '\n');
1051
+ return 0;
1052
+ }
1053
+ }
1054
+ process.stdout.write(JSON.stringify({ state: 'none' }) + '\n');
1055
+ return 0;
1056
+ }
1057
+
1058
+ function cmdReport(opts) {
1059
+ const roomDir = opts.roomDir;
1060
+ const sp = statusPath(roomDir);
1061
+ if (!fileExists(sp)) {
1062
+ printError('no extraction run yet', 'no status.json for this room', 'run entity-extract ROOM_DIR run');
1063
+ return 1;
1064
+ }
1065
+ let parsed = null;
1066
+ try { parsed = JSON.parse(fs.readFileSync(sp, 'utf8')); } catch (_e) { parsed = null; }
1067
+ if (!parsed) {
1068
+ printError('unreadable status', statusPath(roomDir) + ' is not valid JSON', 're-run entity-extract ROOM_DIR run');
1069
+ return 1;
1070
+ }
1071
+ if (parsed.state === 'done') {
1072
+ // Two-tier (quick-task 260714-k44): disclose the per-tier split. The
1073
+ // low-confidence count is printed explicitly when > 0 -- an embedding
1074
+ // best-guess resolution is disclosed, never dressed up as a full resolution.
1075
+ const lowConf = parsed.tier2_low_confidence || 0;
1076
+ const lowConfNote = lowConf > 0 ? ', ' + lowConf + ' low-confidence' : '';
1077
+ process.stdout.write(
1078
+ 'entity-extract done: ' + (parsed.entities || 0) + ' entities, ' + (parsed.edges || 0) +
1079
+ ' edges from ' + (parsed.artifacts || 0) + ' artifacts (embedded=' + (parsed.embedded ? 'yes' : 'no') + '); ' +
1080
+ 'tier-2: ' + (parsed.entities_what || 0) + ' what, ' + (parsed.terms_why || 0) + ' why, ' +
1081
+ (parsed.dropped_noise || 0) + ' noise (classifier=' + (parsed.classifier_source || 'fallback') + '); ' +
1082
+ 'routing: ' + (parsed.tier2_embedding || 0) + ' embedding, ' + (parsed.tier2_escalated || 0) +
1083
+ ' escalated, ' + (parsed.tier2_model || 0) + ' model' + lowConfNote + '\n'
1084
+ );
1085
+ } else if (parsed.state === 'running') {
1086
+ process.stdout.write('entity-extract running (started ' + (parsed.started_at || '?') + ')\n');
1087
+ } else if (parsed.state === 'failed') {
1088
+ process.stdout.write('entity-extract failed: ' + (parsed.error || 'unknown error') + '\n');
1089
+ } else {
1090
+ process.stdout.write(JSON.stringify(parsed) + '\n');
1091
+ }
1092
+ return 0;
1093
+ }
1094
+
1095
+ // ---------------------------------------------------------------------------
1096
+ // main -- the testable seam. Returns a numeric exit code (async for run).
1097
+ // ---------------------------------------------------------------------------
1098
+
1099
+ async function main(argv) {
1100
+ const opts = parseArgs(argv);
1101
+
1102
+ if (opts.help || !opts.roomDir) {
1103
+ process.stdout.write(USAGE + '\n');
1104
+ return 0;
1105
+ }
1106
+
1107
+ switch (opts.sub) {
1108
+ case 'run': return cmdRun(opts);
1109
+ case 'start': return cmdStart(opts);
1110
+ case 'status': return cmdStatus(opts);
1111
+ case 'report': return cmdReport(opts);
1112
+ case 'help': process.stdout.write(USAGE + '\n'); return 0;
1113
+ default:
1114
+ printError('unknown subcommand', 'no subcommand "' + opts.sub + '"', 'run one of: run | start | status | report | help');
1115
+ return 1;
1116
+ }
1117
+ }
1118
+
1119
+ if (require.main === module) {
1120
+ main(process.argv.slice(2)).then(function (code) { process.exit(code); });
1121
+ }
1122
+
1123
+ // runExtraction is exported ADDITIVELY (Phase 219-02) so the D-16 post-filing
1124
+ // hook (and tests) can run a scoped-incremental pass over an explicit
1125
+ // opts.paths allowlist against a caller-owned db handle. Tier-2 (quick-task
1126
+ // 260714-hzx) adds an optional opts.classifyImpl injection seam (same additive-
1127
+ // opts idiom): when present it IS the model surrogate and bypasses the key gate,
1128
+ // so integration tests exercise the WHY reroute / degrade paths fully offline.
1129
+ // main stays the dispatcher seam.
1130
+ // collectArtifacts is exported ADDITIVELY (quick-task 260714-k44) so a read-only
1131
+ // measurement harness can count tier-1 candidates and run tier-2a over a real room
1132
+ // WITHOUT calling runExtraction or opening a write transaction (the K44-REQ-5
1133
+ // key-less call-volume measurement). It takes a caller-owned db handle and never
1134
+ // writes.
1135
+ module.exports = { main: main, runExtraction: runExtraction, collectArtifacts: collectArtifacts };