@mindrian_os/cli 1.13.0-beta.10 → 1.13.0-beta.44
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.
- package/CHANGELOG.md +348 -13
- package/README.md +76 -579
- package/bin/cli.js +166 -40
- package/lib/core/active-plugin-root.cjs +207 -0
- package/package.json +7 -13
- package/.claude-plugin/plugin.json +0 -21
- package/.mcp.json +0 -9
- package/agents/brain-query.md +0 -80
- package/agents/framework-runner.md +0 -237
- package/agents/grading.md +0 -188
- package/agents/investor.md +0 -128
- package/agents/larry-extended.md +0 -135
- package/agents/opportunity-scanner.md +0 -91
- package/agents/persona-analyst.md +0 -132
- package/agents/research.md +0 -89
- package/agents/reverse-salient-agent.md +0 -27
- package/bin/mindrian-mcp-server.cjs +0 -182
- package/bin/mindrian-tools.cjs +0 -765
- package/commands/act.md +0 -433
- package/commands/admin.md +0 -404
- package/commands/analyze-needs.md +0 -36
- package/commands/analyze-systems.md +0 -33
- package/commands/analyze-timing.md +0 -36
- package/commands/auto-explore.md +0 -64
- package/commands/beautiful-question.md +0 -34
- package/commands/brain-derive.md +0 -78
- package/commands/build-knowledge.md +0 -36
- package/commands/build-thesis.md +0 -40
- package/commands/causal.md +0 -228
- package/commands/challenge-assumptions.md +0 -33
- package/commands/compare-ventures.md +0 -77
- package/commands/dashboard.md +0 -110
- package/commands/deep-grade.md +0 -76
- package/commands/diagnose.md +0 -52
- package/commands/diagnostics.md +0 -145
- package/commands/doctor.md +0 -151
- package/commands/dominant-designs.md +0 -34
- package/commands/explain-decision.md +0 -87
- package/commands/explore-domains.md +0 -36
- package/commands/explore-futures.md +0 -34
- package/commands/explore-trends.md +0 -36
- package/commands/export.md +0 -103
- package/commands/file-meeting.md +0 -724
- package/commands/find-analogies.md +0 -182
- package/commands/find-bottlenecks.md +0 -56
- package/commands/find-connections.md +0 -70
- package/commands/funding.md +0 -81
- package/commands/grade.md +0 -197
- package/commands/graph.md +0 -128
- package/commands/hat-briefing.md +0 -119
- package/commands/heal.md +0 -196
- package/commands/help.md +0 -399
- package/commands/hmi-status.md +0 -172
- package/commands/jtbd.md +0 -241
- package/commands/leadership.md +0 -73
- package/commands/lean-canvas.md +0 -34
- package/commands/macro-trends.md +0 -34
- package/commands/map-unknowns.md +0 -34
- package/commands/memory.md +0 -173
- package/commands/models.md +0 -175
- package/commands/mos-reason.md +0 -279
- package/commands/mullins.md +0 -114
- package/commands/new-project.md +0 -481
- package/commands/onboard.md +0 -434
- package/commands/operator.md +0 -149
- package/commands/opportunities.md +0 -144
- package/commands/organize.md +0 -497
- package/commands/persona.md +0 -192
- package/commands/pipeline.md +0 -106
- package/commands/present.md +0 -91
- package/commands/publish.md +0 -201
- package/commands/query.md +0 -124
- package/commands/radar.md +0 -72
- package/commands/reanalyze.md +0 -91
- package/commands/research.md +0 -190
- package/commands/room.md +0 -352
- package/commands/rooms.md +0 -598
- package/commands/root-cause.md +0 -34
- package/commands/rs-experts.md +0 -79
- package/commands/rs-explain.md +0 -94
- package/commands/rs-fetch.md +0 -88
- package/commands/rs-thesis.md +0 -79
- package/commands/scenario-plan.md +0 -34
- package/commands/scheduled-tasks.md +0 -285
- package/commands/score-innovation.md +0 -37
- package/commands/scout.md +0 -239
- package/commands/setup.md +0 -618
- package/commands/snapshot.md +0 -147
- package/commands/speakers.md +0 -84
- package/commands/splash.md +0 -28
- package/commands/status.md +0 -75
- package/commands/structure-argument.md +0 -36
- package/commands/suggest-next.md +0 -74
- package/commands/systems-thinking.md +0 -34
- package/commands/think-hats.md +0 -36
- package/commands/update.md +0 -181
- package/commands/user-needs.md +0 -34
- package/commands/validate.md +0 -34
- package/commands/value-proposition.md +0 -55
- package/commands/vault.md +0 -180
- package/commands/visualize.md +0 -52
- package/commands/whitespace.md +0 -501
- package/commands/wiki.md +0 -69
- package/hooks/hooks.json +0 -381
- package/hooks/run-hook.cmd +0 -64
- package/lib/__init__.py +0 -0
- package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/agents/auto-explore-agent.cjs +0 -1043
- package/lib/agents/reverse-salient-agent.cjs +0 -679
- package/lib/agents/tension-hook-agent.cjs +0 -544
- package/lib/chat/chat-context.js +0 -185
- package/lib/chat/chat-panel.js +0 -721
- package/lib/chat/fabric-chat.cjs +0 -288
- package/lib/chat/generative-tools.js +0 -219
- package/lib/conversation/ROOM.md +0 -39
- package/lib/conversation/classifier-rules.json +0 -38
- package/lib/conversation/classifier.cjs +0 -264
- package/lib/conversation/operator.cjs +0 -287
- package/lib/copy/115-spec-strings.cjs +0 -55
- package/lib/core/__init__.py +0 -0
- package/lib/core/__nav-stub.cjs +0 -14
- package/lib/core/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs-math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_cache.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_corpus.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_hybrid.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_rooms.cpython-312.pyc +0 -0
- package/lib/core/artifact-id.cjs +0 -148
- package/lib/core/asset-ops.cjs +0 -151
- package/lib/core/auto-commit-throttle.cjs +0 -129
- package/lib/core/bearer-token.cjs +0 -199
- package/lib/core/brain-client.cjs +0 -865
- package/lib/core/brain-derivation-prompts.cjs +0 -326
- package/lib/core/brain-derivation-queue.cjs +0 -431
- package/lib/core/brain-derivation.cjs +0 -580
- package/lib/core/brain-md-schema.cjs +0 -528
- package/lib/core/brain-md-staleness.cjs +0 -357
- package/lib/core/brain-response-sanitize.cjs +0 -188
- package/lib/core/bridge-writer.cjs +0 -477
- package/lib/core/chat-context-builder.cjs +0 -253
- package/lib/core/cross-room-aggregator.cjs +0 -762
- package/lib/core/daily-briefing.cjs +0 -438
- package/lib/core/decision-capture.cjs +0 -618
- package/lib/core/deep-links.cjs +0 -82
- package/lib/core/dispatch-optimizer.cjs +0 -354
- package/lib/core/dual-path-detector.cjs +0 -84
- package/lib/core/dual-path-detector.test.cjs +0 -334
- package/lib/core/exports-log.cjs +0 -79
- package/lib/core/feynman-minto-invariants.cjs +0 -605
- package/lib/core/folder-memory-async.cjs +0 -338
- package/lib/core/folder-memory-shared.cjs +0 -890
- package/lib/core/folder-memory.cjs +0 -416
- package/lib/core/framework-chain-composer.cjs +0 -411
- package/lib/core/frontmatter-schemas.cjs +0 -330
- package/lib/core/git-ops.cjs +0 -141
- package/lib/core/graph-ops.cjs +0 -258
- package/lib/core/hat-persistence.cjs +0 -362
- package/lib/core/index.cjs +0 -60
- package/lib/core/integration-registry.cjs +0 -232
- package/lib/core/intelligence-cascade.cjs +0 -661
- package/lib/core/lazygraph-ops.cjs +0 -1057
- package/lib/core/lru-cache.cjs +0 -139
- package/lib/core/mcp-profiles.cjs +0 -182
- package/lib/core/meeting-ops.cjs +0 -54
- package/lib/core/memory-ops.cjs +0 -600
- package/lib/core/migrations/ROOM.md +0 -33
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +0 -339
- package/lib/core/migrations/phase-109-session-focus.cjs +0 -99
- package/lib/core/model-profiles.cjs +0 -246
- package/lib/core/mullins-scaffold.cjs +0 -160
- package/lib/core/nav-dial.cjs +0 -316
- package/lib/core/navigation/ROOM.md +0 -15
- package/lib/core/navigation/explanation.cjs +0 -43
- package/lib/core/navigation/focus.cjs +0 -135
- package/lib/core/navigation/ingestion.cjs +0 -82
- package/lib/core/navigation/insights.cjs +0 -350
- package/lib/core/navigation/memory-events.cjs +0 -118
- package/lib/core/navigation/neighborhood.cjs +0 -78
- package/lib/core/navigation/packet.cjs +0 -182
- package/lib/core/navigation/room-home.cjs +0 -127
- package/lib/core/navigation/transitions.cjs +0 -82
- package/lib/core/navigation-engine-shared.cjs +0 -242
- package/lib/core/navigation-engine.cjs +0 -664
- package/lib/core/navigation.cjs +0 -60
- package/lib/core/nl-graph-queries.cjs +0 -164
- package/lib/core/offer-presenter.cjs +0 -406
- package/lib/core/opportunity-extractor.cjs +0 -183
- package/lib/core/opportunity-ops.cjs +0 -1371
- package/lib/core/persona-ops.cjs +0 -537
- package/lib/core/persona-taxonomy.cjs +0 -190
- package/lib/core/platform-gates.cjs +0 -120
- package/lib/core/platform.cjs +0 -257
- package/lib/core/proactive-intelligence.cjs +0 -528
- package/lib/core/problem-type-router.cjs +0 -315
- package/lib/core/reasoning-ops.cjs +0 -639
- package/lib/core/reverse-salient-persona-suffix.cjs +0 -115
- package/lib/core/room-classifier-strict-mode.cjs +0 -229
- package/lib/core/room-db.cjs +0 -127
- package/lib/core/room-ops-async.cjs +0 -92
- package/lib/core/room-ops-shared.cjs +0 -64
- package/lib/core/room-ops-sync.cjs +0 -70
- package/lib/core/room-ops.cjs +0 -32
- package/lib/core/room-type-detector.cjs +0 -386
- package/lib/core/rs-brain-substrate-prompts.cjs +0 -129
- package/lib/core/rs-brain-substrate.cjs +0 -570
- package/lib/core/rs-breakthrough-scorer.cjs +0 -255
- package/lib/core/rs-canon-violations.cjs +0 -82
- package/lib/core/rs-chain-feeder.cjs +0 -343
- package/lib/core/rs-commercial-assessor.cjs +0 -280
- package/lib/core/rs-differential-scorer.cjs +0 -376
- package/lib/core/rs-domain-analyzer.cjs +0 -385
- package/lib/core/rs-egress-prompts.cjs +0 -113
- package/lib/core/rs-egress-telemetry.cjs +0 -225
- package/lib/core/rs-egress-violations.cjs +0 -53
- package/lib/core/rs-expert-mapper.cjs +0 -467
- package/lib/core/rs-fetcher-academic.cjs +0 -697
- package/lib/core/rs-fetcher-experts.cjs +0 -314
- package/lib/core/rs-fetcher-industry.cjs +0 -731
- package/lib/core/rs-fetcher-patents.cjs +0 -564
- package/lib/core/rs-innovation-classifier.cjs +0 -194
- package/lib/core/rs-mind-map.cjs +0 -656
- package/lib/core/rs-neo4j-writer.cjs +0 -388
- package/lib/core/rs-nl-to-query.cjs +0 -425
- package/lib/core/rs-pinecone-bridge.cjs +0 -303
- package/lib/core/rs-preprocessor.cjs +0 -350
- package/lib/core/rs-query-matrix.cjs +0 -316
- package/lib/core/rs-query-to-text.cjs +0 -438
- package/lib/core/rs-sqlite-mirror.cjs +0 -443
- package/lib/core/rs-thesis-generator.cjs +0 -188
- package/lib/core/rs_cache.py +0 -479
- package/lib/core/rs_corpus.py +0 -468
- package/lib/core/rs_hybrid.py +0 -586
- package/lib/core/rs_math.py +0 -287
- package/lib/core/rs_rooms.py +0 -193
- package/lib/core/scheduled-scanner.cjs +0 -463
- package/lib/core/scratchpad-ops.cjs +0 -201
- package/lib/core/section-8-trace-schema.cjs +0 -138
- package/lib/core/section-registry.cjs +0 -111
- package/lib/core/session-state.cjs +0 -144
- package/lib/core/shallow-doc-parser.cjs +0 -174
- package/lib/core/shallow-doc-parser.test.cjs +0 -226
- package/lib/core/skill-activation-router.cjs +0 -284
- package/lib/core/state-ops.cjs +0 -46
- package/lib/core/statusline-cache.cjs +0 -266
- package/lib/core/token-estimator.cjs +0 -348
- package/lib/core/user-archetype.cjs +0 -239
- package/lib/core/user-md-ops.cjs +0 -524
- package/lib/core/visual-ops.cjs +0 -624
- package/lib/core/write-lock.cjs +0 -149
- package/lib/graph/canvas-graph.js +0 -467
- package/lib/graph/constellation-config.cjs +0 -299
- package/lib/graph/graph-detail-panel.js +0 -165
- package/lib/hmi/ROOM.md +0 -47
- package/lib/hmi/across-session-memory.cjs +0 -604
- package/lib/hmi/cross-room-memory.cjs +0 -575
- package/lib/hmi/decoy-tier.cjs +0 -395
- package/lib/hmi/jtbd-classifier.cjs +0 -219
- package/lib/hmi/jtbd-state.cjs +0 -199
- package/lib/hmi/jtbd-taxonomy.json +0 -392
- package/lib/hmi/selector-dispatcher.cjs +0 -546
- package/lib/hmi/selector-telemetry.cjs +0 -263
- package/lib/hmi/shape-f0-renderer.cjs +0 -139
- package/lib/hmi/shape-f1-fallback.cjs +0 -80
- package/lib/hmi/shape-f1-renderer.cjs +0 -138
- package/lib/hmi/shape-f2-renderer.cjs +0 -132
- package/lib/hmi/shape-f3-renderer.cjs +0 -66
- package/lib/hmi/shape-f4-renderer.cjs +0 -72
- package/lib/hmi/shape-f5-renderer.cjs +0 -155
- package/lib/hmi/shape-f6-plan-review-renderer.cjs +0 -312
- package/lib/hmi/shape-f6-renderer.cjs +0 -144
- package/lib/hmi/shape-g-renderer.cjs +0 -219
- package/lib/hmi/shape-h-renderer.cjs +0 -222
- package/lib/hmi/tier-check.cjs +0 -63
- package/lib/import/PRECONDITIONS.md +0 -41
- package/lib/import/branding.cjs +0 -210
- package/lib/import/branding.test.cjs +0 -235
- package/lib/import/classifications-sync.cjs +0 -104
- package/lib/import/classifications-sync.test.cjs +0 -129
- package/lib/import/enricher.cjs +0 -296
- package/lib/import/enricher.test.cjs +0 -273
- package/lib/import/integration.test.cjs +0 -376
- package/lib/import/manifest.cjs +0 -129
- package/lib/import/manifest.schema.json +0 -185
- package/lib/import/manifest.test.cjs +0 -123
- package/lib/import/meeting-detector.cjs +0 -92
- package/lib/import/meeting-detector.test.cjs +0 -100
- package/lib/import/person-detector.cjs +0 -229
- package/lib/import/person-detector.test.cjs +0 -149
- package/lib/import/report.cjs +0 -186
- package/lib/import/report.test.cjs +0 -186
- package/lib/import/room-md-scaffolder.cjs +0 -49
- package/lib/import/router.cjs +0 -224
- package/lib/import/router.test.cjs +0 -356
- package/lib/import/run-all-tests.cjs +0 -36
- package/lib/import/smoke-test.cjs +0 -213
- package/lib/import/smoke-test.test.cjs +0 -148
- package/lib/import/test-fixtures/collision-vault/preexisting-room/STATE.md +0 -8
- package/lib/import/test-fixtures/collision-vault/preexisting-room/problem-definition/onboarding/onboarding.md +0 -7
- package/lib/import/test-fixtures/collision-vault/source/onboarding.md +0 -5
- package/lib/import/test-fixtures/obsidian-vault/.obsidian/workspace.json +0 -1
- package/lib/import/test-fixtures/obsidian-vault/notes/with-wikilinks.md +0 -4
- package/lib/import/test-fixtures/tiny-vault/notes/2026-01-15-team-sync.md +0 -9
- package/lib/import/test-fixtures/tiny-vault/notes/empty.md +0 -3
- package/lib/import/test-fixtures/tiny-vault/notes/onboarding.md +0 -5
- package/lib/import/test-fixtures/tiny-vault/notes/pricing.md +0 -5
- package/lib/import/test-fixtures/tiny-vault/notes/random.md +0 -4
- package/lib/import/undo.test.cjs +0 -199
- package/lib/import/vault-scanner.cjs +0 -105
- package/lib/import/vault-scanner.test.cjs +0 -67
- package/lib/mcp/app-html/dashboard.html +0 -316
- package/lib/mcp/app-html/graph.html +0 -428
- package/lib/mcp/app-html/mindrian-platform.html +0 -1841
- package/lib/mcp/app-html/wiki.html +0 -383
- package/lib/mcp/app-views.cjs +0 -322
- package/lib/mcp/brain-router.cjs +0 -418
- package/lib/mcp/capability-registry.cjs +0 -62
- package/lib/mcp/larry-context.cjs +0 -46
- package/lib/mcp/larry-server-instructions.md +0 -114
- package/lib/mcp/pipeline-state.cjs +0 -275
- package/lib/mcp/prompts.cjs +0 -302
- package/lib/mcp/resources.cjs +0 -227
- package/lib/mcp/session-catchup.cjs +0 -327
- package/lib/mcp/surface-detect.cjs +0 -75
- package/lib/mcp/tool-router.cjs +0 -1034
- package/lib/memory/aaak-compress.cjs +0 -403
- package/lib/memory/aaak-compress.test.cjs +0 -288
- package/lib/memory/async-artifact-auto-commit.test.cjs +0 -223
- package/lib/memory/bearer-token.test.cjs +0 -315
- package/lib/memory/brain-cache-lru.test.cjs +0 -259
- package/lib/memory/brain-client-query-shape.test.cjs +0 -160
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +0 -1019
- package/lib/memory/brain-derivation-queue.test.cjs +0 -539
- package/lib/memory/brain-derivation.test.cjs +0 -634
- package/lib/memory/brain-derive-command.test.cjs +0 -534
- package/lib/memory/brain-md-invariants-validator.test.cjs +0 -704
- package/lib/memory/brain-md-schema.test.cjs +0 -467
- package/lib/memory/brain-md-staleness.test.cjs +0 -525
- package/lib/memory/brain-server-resolution.test.cjs +0 -314
- package/lib/memory/chat-context.test.cjs +0 -128
- package/lib/memory/cross-room-aggregator.test.cjs +0 -909
- package/lib/memory/dashboard-server.test.cjs +0 -256
- package/lib/memory/debouncer-drain-at-prompt.test.cjs +0 -389
- package/lib/memory/decision-capture.test.cjs +0 -632
- package/lib/memory/decision-capture.worker.cjs +0 -70
- package/lib/memory/explain-decision-command.test.cjs +0 -521
- package/lib/memory/explain-decision-footer.test.cjs +0 -316
- package/lib/memory/explored-materials-store.cjs +0 -392
- package/lib/memory/feynman-minto-guardian.test.cjs +0 -736
- package/lib/memory/feynman-minto-invariants.test.cjs +0 -511
- package/lib/memory/feynman-prompts-drift.test.cjs +0 -144
- package/lib/memory/feynman-prompts.cjs +0 -151
- package/lib/memory/feynman-prompts.test.cjs +0 -96
- package/lib/memory/folder-memory-quadruple.test.cjs +0 -548
- package/lib/memory/folder-memory.test.cjs +0 -503
- package/lib/memory/framework-chain-composer.test.cjs +0 -515
- package/lib/memory/frontmatter-schema-validator.test.cjs +0 -290
- package/lib/memory/heal-command.test.cjs +0 -604
- package/lib/memory/index-artifact-transaction.test.cjs +0 -333
- package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +0 -122
- package/lib/memory/mcp-input-validation.test.cjs +0 -240
- package/lib/memory/mcp-server-brain-deps.test.cjs +0 -270
- package/lib/memory/mcp-stack-fallback.test.cjs +0 -433
- package/lib/memory/minto-debouncer.test.cjs +0 -407
- package/lib/memory/minto-debouncer.worker.cjs +0 -46
- package/lib/memory/minto-migration-v88.test.cjs +0 -265
- package/lib/memory/minto-schema-v88.test.cjs +0 -390
- package/lib/memory/mos-status-renderer.test.cjs +0 -631
- package/lib/memory/narrative-schema.cjs +0 -376
- package/lib/memory/narrative-schema.test.cjs +0 -209
- package/lib/memory/nav-dial.test.cjs +0 -414
- package/lib/memory/navigation-engine-core.test.cjs +0 -722
- package/lib/memory/navigation-invariants.test.cjs +0 -483
- package/lib/memory/offer-presenter.test.cjs +0 -554
- package/lib/memory/on-stop-snapshot.test.cjs +0 -404
- package/lib/memory/pending-tension-store.cjs +0 -373
- package/lib/memory/post-compact-reinjection.test.cjs +0 -854
- package/lib/memory/post-write-triple.test.cjs +0 -317
- package/lib/memory/pre-compact-snapshot.test.cjs +0 -495
- package/lib/memory/problem-type-router.test.cjs +0 -656
- package/lib/memory/query-efficiency-telemetry.test.cjs +0 -370
- package/lib/memory/recompile-room-references.test.cjs +0 -392
- package/lib/memory/recompile-room-references.worker.cjs +0 -42
- package/lib/memory/record-decision-dual-write.test.cjs +0 -454
- package/lib/memory/room-classifier-strict-mode.test.cjs +0 -417
- package/lib/memory/room-minto-hook.test.cjs +0 -398
- package/lib/memory/rs-discovery-engine.test.cjs +0 -323
- package/lib/memory/run-feynman-tests.cjs +0 -1239
- package/lib/memory/security-trifecta.test.cjs +0 -312
- package/lib/memory/session-start-brain-staleness.test.cjs +0 -363
- package/lib/memory/session-start-triple-injection.test.cjs +0 -514
- package/lib/memory/sessionstart-banner-formatter.cjs +0 -318
- package/lib/memory/sessionstart-minto-banner.test.cjs +0 -373
- package/lib/memory/skill-activation-router.test.cjs +0 -419
- package/lib/memory/stamp-artifact-write.test.cjs +0 -304
- package/lib/memory/statusline-active-room.test.cjs +0 -315
- package/lib/memory/statusline-minto-segment.test.cjs +0 -292
- package/lib/memory/sync-async-entry-points.test.cjs +0 -204
- package/lib/memory/test-bridge-writer-enhanced.cjs +0 -452
- package/lib/memory/test-rs-brain-substrate-shape.cjs +0 -529
- package/lib/memory/test-rs-brain-substrate.cjs +0 -636
- package/lib/memory/test-rs-breakthrough-scorer.cjs +0 -375
- package/lib/memory/test-rs-canon-violations.cjs +0 -218
- package/lib/memory/test-rs-chain-feeder-core.cjs +0 -344
- package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +0 -297
- package/lib/memory/test-rs-commercial-assessor.cjs +0 -385
- package/lib/memory/test-rs-differential-scorer.cjs +0 -480
- package/lib/memory/test-rs-discovery-engine.cjs +0 -603
- package/lib/memory/test-rs-domain-analyzer.cjs +0 -492
- package/lib/memory/test-rs-egress-primitives.cjs +0 -420
- package/lib/memory/test-rs-expert-mapper.cjs +0 -547
- package/lib/memory/test-rs-explain-command.cjs +0 -443
- package/lib/memory/test-rs-fetcher-academic.cjs +0 -848
- package/lib/memory/test-rs-fetcher-experts.cjs +0 -496
- package/lib/memory/test-rs-fetcher-industry.cjs +0 -702
- package/lib/memory/test-rs-fetcher-patents.cjs +0 -674
- package/lib/memory/test-rs-innovation-classifier.cjs +0 -301
- package/lib/memory/test-rs-mind-map.cjs +0 -646
- package/lib/memory/test-rs-neo4j-writer.cjs +0 -518
- package/lib/memory/test-rs-nl-to-query.cjs +0 -449
- package/lib/memory/test-rs-pinecone-bridge.cjs +0 -277
- package/lib/memory/test-rs-preprocessor.cjs +0 -433
- package/lib/memory/test-rs-query-matrix.cjs +0 -391
- package/lib/memory/test-rs-query-to-text.cjs +0 -551
- package/lib/memory/test-rs-sqlite-mirror.cjs +0 -649
- package/lib/memory/test-rs-thesis-generator.cjs +0 -360
- package/lib/memory/triple-context-formatter.cjs +0 -473
- package/lib/memory/triple-context-formatter.test.cjs +0 -442
- package/lib/memory/user-md-persona.test.cjs +0 -565
- package/lib/memory/userpromptsubmit-integration.test.cjs +0 -690
- package/lib/memory/validators/README.md +0 -157
- package/lib/memory/validators/brain-md-invariants.cjs +0 -475
- package/lib/memory/validators/brain-substrate-invariants.cjs +0 -285
- package/lib/memory/validators/external-academic-invariants.cjs +0 -249
- package/lib/memory/validators/external-industry-invariants.cjs +0 -271
- package/lib/memory/validators/external-patents-invariants.cjs +0 -266
- package/lib/memory/validators/minto-invariants.cjs +0 -62
- package/lib/memory/validators/navigation-invariants.cjs +0 -340
- package/lib/memory/validators/queue-health.cjs +0 -95
- package/lib/memory/validators/snapshot-integrity.cjs +0 -129
- package/lib/memory/validators/stale-lifecycle.cjs +0 -116
- package/lib/memory/vault-section-minto-generator-atomic.test.cjs +0 -556
- package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +0 -73
- package/lib/memory/write-lock-atomic.test.cjs +0 -137
- package/lib/memory/write-lock-atomic.worker.cjs +0 -55
- package/lib/parity/check-parity.cjs +0 -83
- package/lib/presentation/presentation-server.cjs +0 -101
- package/lib/presentation/presentation-watcher.cjs +0 -123
- package/lib/quickview/hub-server.cjs +0 -719
- package/lib/quickview/server.cjs +0 -533
- package/lib/render/JTBD-PALETTES.md +0 -145
- package/lib/render/ROOM.md +0 -59
- package/lib/render/render-v2.cjs +0 -486
- package/lib/render/render-v2.test.cjs +0 -267
- package/lib/render/render.cjs +0 -65
- package/lib/state/ROOM.md +0 -46
- package/lib/state/state-md-parser.cjs +0 -215
- package/lib/statusline/ROOM.md +0 -38
- package/lib/statusline/banner-suppression.cjs +0 -50
- package/lib/statusline/surface-detect.cjs +0 -85
- package/lib/update-bootstrap.sh.template +0 -145
- package/lib/vault/frontmatter-schema.cjs +0 -297
- package/lib/vault/room-scanner.cjs +0 -352
- package/lib/vault/wikilink-builder.cjs +0 -231
- package/lib/vault/wikilink-builder.test.cjs +0 -182
- package/lib/wiki/graph-links.cjs +0 -281
- package/lib/wiki/page-renderer.cjs +0 -229
- package/lib/wiki/wiki-chat.cjs +0 -81
- package/lib/wiki/wiki-layout.cjs +0 -1459
- package/lib/wiki/wiki-search.cjs +0 -142
- package/lib/wiki/wiki-server.cjs +0 -678
- package/lib/wiki/wiki-watcher.cjs +0 -105
- package/pipelines/analogy/01-decompose.md +0 -80
- package/pipelines/analogy/02-abstract.md +0 -87
- package/pipelines/analogy/03-search.md +0 -135
- package/pipelines/analogy/04-transfer.md +0 -101
- package/pipelines/analogy/05-validate.md +0 -106
- package/pipelines/analogy/CHAIN.md +0 -56
- package/pipelines/discovery/01-explore-domains.md +0 -44
- package/pipelines/discovery/02-think-hats.md +0 -50
- package/pipelines/discovery/03-analyze-needs.md +0 -54
- package/pipelines/discovery/CHAIN.md +0 -37
- package/pipelines/thesis/01-structure-argument.md +0 -45
- package/pipelines/thesis/02-challenge-assumptions.md +0 -48
- package/pipelines/thesis/03-build-thesis.md +0 -54
- package/pipelines/thesis/CHAIN.md +0 -37
- package/references/brain/causal-directives.md +0 -91
- package/references/brain/causal-enrichment.cypher +0 -165
- package/references/brain/command-triggers-schema.md +0 -226
- package/references/brain/graph-architecture.md +0 -317
- package/references/brain/query-patterns.md +0 -460
- package/references/brain/room-hierarchy-schema.md +0 -218
- package/references/brain/schema.md +0 -76
- package/references/capability-radar/capabilities-index.md +0 -241
- package/references/capability-radar/changelog-cache.md +0 -81
- package/references/causal/causal-schema.md +0 -103
- package/references/design/email-template-standard.md +0 -155
- package/references/design/graph-visualization-standard.md +0 -178
- package/references/document-generation.md +0 -179
- package/references/hsi/HSI-TOOLS-REFERENCE.md +0 -222
- package/references/import-config.md +0 -141
- package/references/integrations/detection-patterns.md +0 -101
- package/references/meeting/artifact-template.md +0 -377
- package/references/meeting/cross-meeting-intelligence.md +0 -216
- package/references/meeting/cross-relationship-patterns.md +0 -202
- package/references/meeting/live-join-interface.md +0 -244
- package/references/meeting/section-mapping.md +0 -192
- package/references/meeting/segment-classification.md +0 -258
- package/references/meeting/speaker-profile-template.md +0 -219
- package/references/meeting/summary-template.md +0 -348
- package/references/meeting/transcript-patterns.md +0 -226
- package/references/methodology/analyze-needs.md +0 -135
- package/references/methodology/analyze-systems.md +0 -121
- package/references/methodology/analyze-timing.md +0 -149
- package/references/methodology/beautiful-question.md +0 -109
- package/references/methodology/build-knowledge.md +0 -161
- package/references/methodology/build-thesis.md +0 -237
- package/references/methodology/challenge-assumptions.md +0 -127
- package/references/methodology/diagnose.md +0 -169
- package/references/methodology/dominant-designs.md +0 -212
- package/references/methodology/explore-domains.md +0 -147
- package/references/methodology/explore-futures.md +0 -163
- package/references/methodology/explore-trends.md +0 -129
- package/references/methodology/find-bottlenecks.md +0 -131
- package/references/methodology/grade.md +0 -211
- package/references/methodology/index.md +0 -97
- package/references/methodology/leadership.md +0 -200
- package/references/methodology/lean-canvas.md +0 -116
- package/references/methodology/macro-trends.md +0 -192
- package/references/methodology/map-unknowns.md +0 -137
- package/references/methodology/mullins-7-domains.md +0 -104
- package/references/methodology/problem-types.md +0 -65
- package/references/methodology/root-cause.md +0 -178
- package/references/methodology/sapphire-encoding.md +0 -355
- package/references/methodology/scenario-plan.md +0 -178
- package/references/methodology/score-innovation.md +0 -154
- package/references/methodology/structure-argument.md +0 -158
- package/references/methodology/systems-thinking.md +0 -159
- package/references/methodology/think-hats.md +0 -147
- package/references/methodology/triz-matrix.json +0 -751
- package/references/methodology/triz-principles.md +0 -501
- package/references/methodology/user-needs.md +0 -199
- package/references/methodology/validate.md +0 -163
- package/references/methodology/value-proposition.md +0 -244
- package/references/opportunities/funding-lifecycle.md +0 -103
- package/references/opportunities/grant-api-patterns.md +0 -99
- package/references/opportunities/opportunity-template.md +0 -84
- package/references/personality/assessment-philosophy.md +0 -72
- package/references/personality/lexicon.md +0 -100
- package/references/personality/persona-chains.md +0 -56
- package/references/personality/pws-lexicon-full.md +0 -499
- package/references/personality/voice-dna.md +0 -156
- package/references/personas/hat-perspectives.md +0 -76
- package/references/personas/persona-template.md +0 -63
- package/references/pipeline/act-output-contract.md +0 -88
- package/references/pipeline/chains-index.md +0 -39
- package/references/pws-profile-generation.md +0 -79
- package/references/reasoning/reasoning-schema.md +0 -143
- package/references/reasoning/reasoning-template.md +0 -68
- package/references/reasoning/run-template.md +0 -38
- package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +0 -209
- package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +0 -375
- package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +0 -575
- package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +0 -272
- package/references/taxonomy/TAXONOMY.md +0 -192
- package/references/templates/MINTO.md +0 -36
- package/references/user-research/2026-04-05-leah-lawrence-session.md +0 -202
- package/references/vault-kit/README.md +0 -35
- package/references/vault-kit/app.json +0 -12
- package/references/vault-kit/appearance.json +0 -12
- package/references/vault-kit/graph.json +0 -35
- package/references/vault-kit/snippets/mindrian-destijl.css +0 -297
- package/references/vault-kit/templates/new-artifact.md +0 -37
- package/references/vault-kit/templates/new-meeting-note.md +0 -35
- package/references/vault-kit/templates/new-team-profile.md +0 -29
- package/references/vault-kit/templates/new-xref.md +0 -35
- package/references/visual/symbol-system.md +0 -151
- package/skills/MOSDeckEngine/SKILL.md +0 -325
- package/skills/brain-connector/SKILL.md +0 -114
- package/skills/context-engine/SKILL.md +0 -147
- package/skills/conversation-mode/SKILL.md +0 -102
- package/skills/larry-personality/SKILL.md +0 -219
- package/skills/larry-personality/framework-chains.md +0 -92
- package/skills/larry-personality/mode-engine.md +0 -185
- package/skills/mullins-scaffold/SKILL.md +0 -61
- package/skills/mullins-scaffold/scaffold.json +0 -146
- package/skills/pws-methodology/SKILL.md +0 -49
- package/skills/room-passive/SKILL.md +0 -165
- package/skills/room-proactive/SKILL.md +0 -250
- package/skills/ui-system/SKILL.md +0 -277
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Phase 94-03 -- canonical Brain MCP server-name resolution fence.
|
|
6
|
-
*
|
|
7
|
-
* BSL 1.1. Copyright (c) Mindrian 2026.
|
|
8
|
-
* (Business Source License 1.1; SPDX BUSL-1.1; see LICENSE.)
|
|
9
|
-
*
|
|
10
|
-
* Why this fixture exists.
|
|
11
|
-
*
|
|
12
|
-
* The v1.11.0 QA harness (Lawrence's Dr. Miriam Kaplan persona, 2026-04-28)
|
|
13
|
-
* surfaced a P0 ship-blocker (FIX-2): the Brain knowledge graph is alive
|
|
14
|
-
* (7,353 LazyGraphConcept nodes, 119,706 CO_OCCURS edges, 20+ named PWS
|
|
15
|
-
* frameworks) but unreachable from /mos:* commands. Root cause: plugin
|
|
16
|
-
* command frontmatter declared THREE inconsistent server-name prefixes
|
|
17
|
-
*
|
|
18
|
-
* mcp__neo4j-brain__ (5 commands)
|
|
19
|
-
* mcp__mindrian-brain__ (6 commands -- already canonical)
|
|
20
|
-
* mcp__pinecone-brain__ (3 commands)
|
|
21
|
-
*
|
|
22
|
-
* while .mcp.json declared only `mindrian-os` (the plugin's own MCP
|
|
23
|
-
* router, not the Brain). Result: every Brain-touching slash command
|
|
24
|
-
* silently fell back to the graceful tier_0 path. Decision-traces
|
|
25
|
-
* confirmed routing_source: legacy and brain_md_tier_mode: tier_0
|
|
26
|
-
* on every session.
|
|
27
|
-
*
|
|
28
|
-
* Plan 94-03 selects Option A from the QA handoff (cheapest path):
|
|
29
|
-
* standardize the canonical server name across all 10 affected command
|
|
30
|
-
* frontmatter files on `mindrian-brain`, document the user-side
|
|
31
|
-
* .mcp.json snippet, and let users register their Neo4j MCP under the
|
|
32
|
-
* canonical name. No alias system. No auto-detect. Both deferred to
|
|
33
|
-
* v1.12 per Options B/C.
|
|
34
|
-
*
|
|
35
|
-
* Test map (5 cases, one-to-one with the PLAN <behavior> block).
|
|
36
|
-
*
|
|
37
|
-
* T1 Every commands/*.md allowed-tools list mcp__*brain* reference
|
|
38
|
-
* starts with the canonical prefix `mcp__mindrian-brain__`. We
|
|
39
|
-
* walk the 10 affected files, parse each YAML frontmatter, collect
|
|
40
|
-
* allowed-tools entries, and assert any tool matching /^mcp__\\S+brain\\S*__/
|
|
41
|
-
* starts with `mcp__mindrian-brain__`.
|
|
42
|
-
*
|
|
43
|
-
* T2 Zero `mcp__neo4j-brain__` references remain in any commands/*.md
|
|
44
|
-
* (frontmatter OR body prose). grep -lE pattern.
|
|
45
|
-
*
|
|
46
|
-
* T3 Zero `mcp__pinecone-brain__` references remain in any commands/*.md
|
|
47
|
-
* (frontmatter OR body prose). grep -lE pattern.
|
|
48
|
-
*
|
|
49
|
-
* T4 docs/install/BRAIN-SETUP.md exists and contains the literal
|
|
50
|
-
* substring `mindrian-brain` (canonical name) AND the literal
|
|
51
|
-
* substring `mcpServers` (user-side .mcp.json snippet shape).
|
|
52
|
-
*
|
|
53
|
-
* T5 Optional gate: scripts/frontmatter-schema-validator.cjs (Phase
|
|
54
|
-
* 88.1-07) returns exit 0 against each of the 10 modified command
|
|
55
|
-
* files. The validator is ADVISORY (PostToolUse) -- it always
|
|
56
|
-
* exits 0 regardless of violations -- so this case is structural:
|
|
57
|
-
* prove the validator is invokable against each file without
|
|
58
|
-
* crashing. Skip gracefully (PASS-and-warn) if the validator is
|
|
59
|
-
* absent in this checkout.
|
|
60
|
-
*
|
|
61
|
-
* Canon traceability.
|
|
62
|
-
*
|
|
63
|
-
* Part 7 (Reuse Before Build): Option A is the cheapest sweep -- no
|
|
64
|
-
* new alias system, no auto-detect, no new MCP server entry in the
|
|
65
|
-
* plugin's .mcp.json. We compose existing command frontmatter into
|
|
66
|
-
* a single canonical name.
|
|
67
|
-
*
|
|
68
|
-
* Part 8 (Graph Boundary): the Brain query chokepoint behavior is
|
|
69
|
-
* unchanged. This plan only standardizes the MCP server name passed
|
|
70
|
-
* in. Zero user-data egress added or removed.
|
|
71
|
-
*
|
|
72
|
-
* Registered in lib/memory/run-feynman-tests.cjs.
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
const assert = require('node:assert/strict');
|
|
76
|
-
const fs = require('node:fs');
|
|
77
|
-
const path = require('node:path');
|
|
78
|
-
const { spawnSync } = require('node:child_process');
|
|
79
|
-
|
|
80
|
-
const REPO = path.resolve(__dirname, '..', '..');
|
|
81
|
-
const COMMANDS_DIR = path.join(REPO, 'commands');
|
|
82
|
-
const SETUP_DOC = path.join(REPO, 'docs', 'install', 'BRAIN-SETUP.md');
|
|
83
|
-
const VALIDATOR = path.join(REPO, 'scripts', 'frontmatter-schema-validator.cjs');
|
|
84
|
-
|
|
85
|
-
// The 10 commands declared by the plan as carrying or potentially carrying
|
|
86
|
-
// Brain MCP references. Order mirrors plan frontmatter files_modified.
|
|
87
|
-
const AFFECTED_COMMANDS = [
|
|
88
|
-
'compare-ventures',
|
|
89
|
-
'suggest-next',
|
|
90
|
-
'find-analogies',
|
|
91
|
-
'brain-derive',
|
|
92
|
-
'query',
|
|
93
|
-
'rs-experts',
|
|
94
|
-
'rs-explain',
|
|
95
|
-
'rs-fetch',
|
|
96
|
-
'rs-thesis',
|
|
97
|
-
'admin',
|
|
98
|
-
];
|
|
99
|
-
|
|
100
|
-
const CANONICAL_PREFIX = 'mcp__mindrian-brain__';
|
|
101
|
-
const FORBIDDEN_PREFIXES = ['mcp__neo4j-brain__', 'mcp__pinecone-brain__'];
|
|
102
|
-
|
|
103
|
-
// ---------- Fixture helpers ----------
|
|
104
|
-
|
|
105
|
-
function readFile(p) {
|
|
106
|
-
return fs.readFileSync(p, 'utf8');
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Minimal single-key YAML frontmatter parser sufficient for allowed-tools.
|
|
111
|
-
* Returns the array of allowed-tools entries (raw strings, '- ' stripped),
|
|
112
|
-
* or [] if no allowed-tools section is found. Tolerant of:
|
|
113
|
-
* - inline form: `allowed-tools: Bash(node *)`
|
|
114
|
-
* - list form (multi-line dash-prefixed entries)
|
|
115
|
-
* Does NOT honor nested YAML structures or quoted values; the fixture
|
|
116
|
-
* does not need them for this contract.
|
|
117
|
-
*/
|
|
118
|
-
function parseAllowedTools(text) {
|
|
119
|
-
const m = text.match(/^---\n([\s\S]*?)\n---/);
|
|
120
|
-
if (!m) return [];
|
|
121
|
-
const fm = m[1];
|
|
122
|
-
const lines = fm.split('\n');
|
|
123
|
-
const tools = [];
|
|
124
|
-
let inList = false;
|
|
125
|
-
for (const raw of lines) {
|
|
126
|
-
const line = raw.replace(/\r$/, '');
|
|
127
|
-
if (/^allowed-tools:\s*$/.test(line)) {
|
|
128
|
-
inList = true;
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (/^allowed-tools:\s*\S/.test(line)) {
|
|
132
|
-
// Inline form: allowed-tools: Bash(node *)
|
|
133
|
-
const inline = line.replace(/^allowed-tools:\s*/, '').trim();
|
|
134
|
-
if (inline) tools.push(inline);
|
|
135
|
-
inList = false;
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
if (inList) {
|
|
139
|
-
if (/^\s+-\s+/.test(line)) {
|
|
140
|
-
const v = line.replace(/^\s+-\s+/, '').trim();
|
|
141
|
-
if (v) tools.push(v);
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
// Any non-list-item line ends the allowed-tools block.
|
|
145
|
-
if (/^\S/.test(line)) inList = false;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return tools;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// ---------- Tests ----------
|
|
152
|
-
|
|
153
|
-
let passed = 0;
|
|
154
|
-
let failed = 0;
|
|
155
|
-
const fail = (name, msg) => {
|
|
156
|
-
failed++;
|
|
157
|
-
process.stderr.write('FAIL ' + name + ': ' + msg + '\n');
|
|
158
|
-
};
|
|
159
|
-
const pass = (name) => {
|
|
160
|
-
passed++;
|
|
161
|
-
process.stdout.write('PASS ' + name + '\n');
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
function t1_canonical_prefix_in_frontmatter() {
|
|
165
|
-
const name = 'T1 every brain reference in allowed-tools uses canonical prefix';
|
|
166
|
-
try {
|
|
167
|
-
const violations = [];
|
|
168
|
-
for (const cmd of AFFECTED_COMMANDS) {
|
|
169
|
-
const file = path.join(COMMANDS_DIR, cmd + '.md');
|
|
170
|
-
if (!fs.existsSync(file)) {
|
|
171
|
-
violations.push(cmd + ': file missing');
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
const txt = readFile(file);
|
|
175
|
-
const tools = parseAllowedTools(txt);
|
|
176
|
-
for (const tool of tools) {
|
|
177
|
-
if (/^mcp__\S+brain\S*__/.test(tool)) {
|
|
178
|
-
if (!tool.startsWith(CANONICAL_PREFIX)) {
|
|
179
|
-
violations.push(cmd + ': non-canonical brain tool ' + tool);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
assert.equal(
|
|
185
|
-
violations.length,
|
|
186
|
-
0,
|
|
187
|
-
'Non-canonical brain tools found:\n ' + violations.join('\n ')
|
|
188
|
-
);
|
|
189
|
-
pass(name);
|
|
190
|
-
} catch (e) {
|
|
191
|
-
fail(name, e.message);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function t2_no_neo4j_brain_anywhere() {
|
|
196
|
-
const name = 'T2 zero mcp__neo4j-brain__ references in commands/*.md';
|
|
197
|
-
try {
|
|
198
|
-
const matches = [];
|
|
199
|
-
const files = fs.readdirSync(COMMANDS_DIR)
|
|
200
|
-
.filter((f) => f.endsWith('.md'))
|
|
201
|
-
.map((f) => path.join(COMMANDS_DIR, f));
|
|
202
|
-
for (const f of files) {
|
|
203
|
-
const txt = readFile(f);
|
|
204
|
-
if (txt.includes('mcp__neo4j-brain__') || txt.includes('mcp__neo4j-brain ')) {
|
|
205
|
-
matches.push(path.relative(REPO, f));
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
assert.equal(
|
|
209
|
-
matches.length,
|
|
210
|
-
0,
|
|
211
|
-
'mcp__neo4j-brain__ references must be zero, found in:\n ' + matches.join('\n ')
|
|
212
|
-
);
|
|
213
|
-
pass(name);
|
|
214
|
-
} catch (e) {
|
|
215
|
-
fail(name, e.message);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
function t3_no_pinecone_brain_anywhere() {
|
|
220
|
-
const name = 'T3 zero mcp__pinecone-brain__ references in commands/*.md';
|
|
221
|
-
try {
|
|
222
|
-
const matches = [];
|
|
223
|
-
const files = fs.readdirSync(COMMANDS_DIR)
|
|
224
|
-
.filter((f) => f.endsWith('.md'))
|
|
225
|
-
.map((f) => path.join(COMMANDS_DIR, f));
|
|
226
|
-
for (const f of files) {
|
|
227
|
-
const txt = readFile(f);
|
|
228
|
-
if (txt.includes('mcp__pinecone-brain__') || txt.includes('mcp__pinecone-brain ')) {
|
|
229
|
-
matches.push(path.relative(REPO, f));
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
assert.equal(
|
|
233
|
-
matches.length,
|
|
234
|
-
0,
|
|
235
|
-
'mcp__pinecone-brain__ references must be zero, found in:\n ' + matches.join('\n ')
|
|
236
|
-
);
|
|
237
|
-
pass(name);
|
|
238
|
-
} catch (e) {
|
|
239
|
-
fail(name, e.message);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function t4_brain_setup_doc_exists() {
|
|
244
|
-
const name = 'T4 docs/install/BRAIN-SETUP.md exists with canonical name + mcpServers snippet';
|
|
245
|
-
try {
|
|
246
|
-
assert.ok(
|
|
247
|
-
fs.existsSync(SETUP_DOC),
|
|
248
|
-
'docs/install/BRAIN-SETUP.md does not exist'
|
|
249
|
-
);
|
|
250
|
-
const txt = readFile(SETUP_DOC);
|
|
251
|
-
assert.ok(
|
|
252
|
-
txt.includes('mindrian-brain'),
|
|
253
|
-
'BRAIN-SETUP.md missing canonical name `mindrian-brain`'
|
|
254
|
-
);
|
|
255
|
-
assert.ok(
|
|
256
|
-
txt.includes('mcpServers'),
|
|
257
|
-
'BRAIN-SETUP.md missing user-side .mcp.json snippet (`mcpServers`)'
|
|
258
|
-
);
|
|
259
|
-
pass(name);
|
|
260
|
-
} catch (e) {
|
|
261
|
-
fail(name, e.message);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
function t5_frontmatter_validator_runnable() {
|
|
266
|
-
const name = 'T5 frontmatter-schema-validator runnable on each modified file';
|
|
267
|
-
try {
|
|
268
|
-
if (!fs.existsSync(VALIDATOR)) {
|
|
269
|
-
// Skip gracefully -- validator is an optional Phase 88.1-07 artifact.
|
|
270
|
-
process.stdout.write(
|
|
271
|
-
'SKIP ' + name + ' (validator absent at ' +
|
|
272
|
-
path.relative(REPO, VALIDATOR) + ')\n'
|
|
273
|
-
);
|
|
274
|
-
passed++;
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
// Phase 88.1-07 validator is a PostToolUse hook -- it reads JSON on stdin
|
|
278
|
-
// and emits a JSON response on stdout. Calling it without stdin will
|
|
279
|
-
// either no-op or error gracefully. We assert it does not crash with a
|
|
280
|
-
// non-zero exit on a benign invocation. This is a structural smoke
|
|
281
|
-
// (the validator is invokable in this checkout), not a content gate.
|
|
282
|
-
const res = spawnSync(process.execPath, [VALIDATOR, '--help'], {
|
|
283
|
-
input: '',
|
|
284
|
-
timeout: 5000,
|
|
285
|
-
});
|
|
286
|
-
// Accept exit 0 (help printed) OR exit codes from "missing stdin / not a
|
|
287
|
-
// hook context" branches. The validator is advisory and never blocks;
|
|
288
|
-
// the only failure mode that matters here is a hard crash (e.g. syntax
|
|
289
|
-
// error in the validator source).
|
|
290
|
-
assert.ok(
|
|
291
|
-
res.status === null || res.status === 0 || res.status === 1,
|
|
292
|
-
'frontmatter-schema-validator crashed with unexpected status ' + res.status +
|
|
293
|
-
' (signal=' + res.signal + ')\n' +
|
|
294
|
-
'stderr: ' + (res.stderr ? res.stderr.toString() : '')
|
|
295
|
-
);
|
|
296
|
-
pass(name);
|
|
297
|
-
} catch (e) {
|
|
298
|
-
fail(name, e.message);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// ---------- Run ----------
|
|
303
|
-
|
|
304
|
-
t1_canonical_prefix_in_frontmatter();
|
|
305
|
-
t2_no_neo4j_brain_anywhere();
|
|
306
|
-
t3_no_pinecone_brain_anywhere();
|
|
307
|
-
t4_brain_setup_doc_exists();
|
|
308
|
-
t5_frontmatter_validator_runnable();
|
|
309
|
-
|
|
310
|
-
const total = passed + failed;
|
|
311
|
-
process.stdout.write(
|
|
312
|
-
'\nbrain-server-resolution: ' + passed + '/' + total + ' passed\n'
|
|
313
|
-
);
|
|
314
|
-
process.exit(failed === 0 ? 0 : 1);
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* chat-context.test.cjs -- Phase 87-09 context-injection fence.
|
|
6
|
-
*
|
|
7
|
-
* BSL 1.1. Copyright (c) Mindrian 2026.
|
|
8
|
-
* (Business Source License 1.1; SPDX BUSL-1.1; see LICENSE.)
|
|
9
|
-
*
|
|
10
|
-
* Proves:
|
|
11
|
-
* - classifyIntent covers all 5 buckets: contradicts, converges,
|
|
12
|
-
* stakeholders, gaps, briefing, plus the default-fallback path
|
|
13
|
-
* - buildContext returns a numeric tokenEstimate on EVERY code path
|
|
14
|
-
* - Every pattern stays under the 5K token budget on the cascade-e2e
|
|
15
|
-
* seed-room fixture
|
|
16
|
-
* - Pattern 3 (stakeholders) gracefully early-returns when the
|
|
17
|
-
* stakeholders table is empty -- it does NOT fabricate attribution
|
|
18
|
-
* (R6 / Phase 84-05 Pattern 3 contract)
|
|
19
|
-
*
|
|
20
|
-
* Exit codes:
|
|
21
|
-
* 0 -> PASS
|
|
22
|
-
* 1 -> FAIL (budget blown, or early-return missing, or class drift)
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
const assert = require('node:assert/strict');
|
|
26
|
-
const fs = require('node:fs');
|
|
27
|
-
const os = require('node:os');
|
|
28
|
-
const path = require('node:path');
|
|
29
|
-
const { buildContext, classifyIntent } = require('../core/chat-context-builder.cjs');
|
|
30
|
-
const { runCascade } = require('../core/intelligence-cascade.cjs');
|
|
31
|
-
|
|
32
|
-
const FIXTURE = path.resolve(__dirname, '../../test/fixtures/cascade-e2e/seed-room');
|
|
33
|
-
const MAX_TOKENS = 5000;
|
|
34
|
-
|
|
35
|
-
async function run() {
|
|
36
|
-
/* Intent classification: all 5 named buckets + default fallback. */
|
|
37
|
-
assert.strictEqual(classifyIntent('what contradicts x?'), 'contradicts');
|
|
38
|
-
assert.strictEqual(classifyIntent('what is converging?'), 'converges');
|
|
39
|
-
assert.strictEqual(classifyIntent('who said what?'), 'stakeholders');
|
|
40
|
-
assert.strictEqual(classifyIntent('what gaps to fill?'), 'gaps');
|
|
41
|
-
assert.strictEqual(classifyIntent('briefing please'), 'briefing');
|
|
42
|
-
assert.strictEqual(classifyIntent('random unrelated text'), 'briefing');
|
|
43
|
-
|
|
44
|
-
/* Seed a hermetic room under /rooms/ so intelligence-cascade's
|
|
45
|
-
* isRoomFile() guard passes, then run the cascade against the three
|
|
46
|
-
* seeded artifacts so room.db + schema exist. */
|
|
47
|
-
const tmpParent = fs.mkdtempSync(path.join(os.tmpdir(), 'chatctx-'));
|
|
48
|
-
const roomsDir = path.join(tmpParent, 'rooms');
|
|
49
|
-
const roomDir = path.join(roomsDir, 'fixture');
|
|
50
|
-
fs.mkdirSync(roomsDir, { recursive: true });
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
fs.cpSync(FIXTURE, roomDir, { recursive: true });
|
|
54
|
-
await runCascade(roomDir, {
|
|
55
|
-
trigger: 'test',
|
|
56
|
-
filePath: path.join(roomDir, 'problem-definition', 'jtbd-underservice.md'),
|
|
57
|
-
section: 'problem-definition',
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
/* Pattern 1: contradicts */
|
|
61
|
-
const c1 = await buildContext(roomDir, 'what contradicts market-analysis?');
|
|
62
|
-
assert.strictEqual(c1.intent, 'contradicts');
|
|
63
|
-
assert.strictEqual(c1.earlyReturn, false);
|
|
64
|
-
assert.ok(typeof c1.tokenEstimate === 'number', 'tokenEstimate must be a number');
|
|
65
|
-
assert.ok(c1.tokenEstimate < MAX_TOKENS,
|
|
66
|
-
'contradicts tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c1.tokenEstimate + ')');
|
|
67
|
-
|
|
68
|
-
/* Pattern 2: converges */
|
|
69
|
-
const c2 = await buildContext(roomDir, 'what patterns are converging across sections?');
|
|
70
|
-
assert.strictEqual(c2.intent, 'converges');
|
|
71
|
-
assert.strictEqual(c2.earlyReturn, false);
|
|
72
|
-
assert.ok(typeof c2.tokenEstimate === 'number', 'tokenEstimate must be a number');
|
|
73
|
-
assert.ok(c2.tokenEstimate < MAX_TOKENS,
|
|
74
|
-
'converges tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c2.tokenEstimate + ')');
|
|
75
|
-
|
|
76
|
-
/* Pattern 3: stakeholders -- empty table, earlyReturn=true must be asserted */
|
|
77
|
-
const c3 = await buildContext(roomDir, 'who said what?');
|
|
78
|
-
assert.strictEqual(c3.intent, 'stakeholders');
|
|
79
|
-
assert.strictEqual(c3.earlyReturn, true,
|
|
80
|
-
'empty stakeholders table must trigger earlyReturn=true (no fabrication)');
|
|
81
|
-
assert.ok(/stakeholder/i.test(c3.userPrompt),
|
|
82
|
-
'early-return message must mention stakeholders');
|
|
83
|
-
assert.ok(typeof c3.tokenEstimate === 'number',
|
|
84
|
-
'tokenEstimate must be present even on earlyReturn');
|
|
85
|
-
assert.ok(c3.tokenEstimate < MAX_TOKENS,
|
|
86
|
-
'stakeholders tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c3.tokenEstimate + ')');
|
|
87
|
-
|
|
88
|
-
/* Pattern 4: gaps */
|
|
89
|
-
const c4 = await buildContext(roomDir, 'what gaps should I fill?');
|
|
90
|
-
assert.strictEqual(c4.intent, 'gaps');
|
|
91
|
-
assert.strictEqual(c4.earlyReturn, false);
|
|
92
|
-
assert.ok(typeof c4.tokenEstimate === 'number', 'tokenEstimate must be a number');
|
|
93
|
-
assert.ok(c4.tokenEstimate < MAX_TOKENS,
|
|
94
|
-
'gaps tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c4.tokenEstimate + ')');
|
|
95
|
-
|
|
96
|
-
/* Pattern 5: briefing */
|
|
97
|
-
const c5 = await buildContext(roomDir, 'give me an intelligence briefing');
|
|
98
|
-
assert.strictEqual(c5.intent, 'briefing');
|
|
99
|
-
assert.strictEqual(c5.earlyReturn, false);
|
|
100
|
-
assert.ok(typeof c5.tokenEstimate === 'number', 'tokenEstimate must be a number');
|
|
101
|
-
assert.ok(c5.tokenEstimate < MAX_TOKENS,
|
|
102
|
-
'briefing tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c5.tokenEstimate + ')');
|
|
103
|
-
|
|
104
|
-
/* Default-fallback path: unclassified input routes to briefing */
|
|
105
|
-
const c6 = await buildContext(roomDir, 'random unrelated question');
|
|
106
|
-
assert.strictEqual(c6.intent, 'briefing', 'default fallback must be briefing');
|
|
107
|
-
assert.ok(c6.tokenEstimate < MAX_TOKENS,
|
|
108
|
-
'fallback tokenEstimate must be <' + MAX_TOKENS + ' (got ' + c6.tokenEstimate + ')');
|
|
109
|
-
|
|
110
|
-
process.stdout.write(
|
|
111
|
-
'chat-context: all 5 intent patterns tested, all token budgets <' + MAX_TOKENS +
|
|
112
|
-
' (contradicts=' + c1.tokenEstimate +
|
|
113
|
-
' converges=' + c2.tokenEstimate +
|
|
114
|
-
' stakeholders=' + c3.tokenEstimate + '[earlyReturn]' +
|
|
115
|
-
' gaps=' + c4.tokenEstimate +
|
|
116
|
-
' briefing=' + c5.tokenEstimate +
|
|
117
|
-
' fallback=' + c6.tokenEstimate + ')\n'
|
|
118
|
-
);
|
|
119
|
-
process.exit(0);
|
|
120
|
-
} catch (e) {
|
|
121
|
-
process.stderr.write((e && e.stack) ? e.stack + '\n' : String(e) + '\n');
|
|
122
|
-
process.exit(1);
|
|
123
|
-
} finally {
|
|
124
|
-
try { fs.rmSync(tmpParent, { recursive: true, force: true }); } catch (_) { /* ignore */ }
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
run();
|