@mindrian_os/cli 1.13.0-beta.10 → 1.13.0-beta.43
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 +340 -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,316 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
3
|
-
* Phase 89.1 Plan 03 -- canonical 60-query matrix generator.
|
|
4
|
-
*
|
|
5
|
-
* 15 templates x 4 categories. Fixed-order iteration so the same input
|
|
6
|
-
* deterministically produces the same output. Each template is a function
|
|
7
|
-
* (a, b, concepts, terminology, methods, breakthroughs) -> string. The
|
|
8
|
-
* generator runs every template, scans the output against
|
|
9
|
-
* FORBIDDEN_PATTERNS, and either includes the query or short-circuits
|
|
10
|
-
* with ExternalEgressViolation if a forbidden hit is found.
|
|
11
|
-
*
|
|
12
|
-
* Input shape (consumed from rs-domain-analyzer.cjs::analyzeDomain):
|
|
13
|
-
* {
|
|
14
|
-
* primary_domain: string,
|
|
15
|
-
* concepts: string[],
|
|
16
|
-
* terminology: string[],
|
|
17
|
-
* methods: string[],
|
|
18
|
-
* breakthroughs: string[],
|
|
19
|
-
* boundary_flag: boolean,
|
|
20
|
-
* adjacent_domains: string[],
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* Output shape (consumed by 89.2 external fetchers):
|
|
24
|
-
* {
|
|
25
|
-
* categories: {
|
|
26
|
-
* a_intersect_b: string[15],
|
|
27
|
-
* a_leads_to_b: string[15],
|
|
28
|
-
* b_leads_to_a: string[15],
|
|
29
|
-
* adjacent: string[15],
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
*
|
|
33
|
-
* Canon Part 8 enforcement:
|
|
34
|
-
* 1. validateAnalysis pre-input scan -- every user-controlled scalar in
|
|
35
|
-
* the analysis input is scanned against FORBIDDEN_PATTERNS before
|
|
36
|
-
* any template runs. Forbidden hit returns invalid_analysis envelope
|
|
37
|
-
* with reason 'forbidden_input'. NO bytes ever reach the template
|
|
38
|
-
* layer.
|
|
39
|
-
* 2. auditQuery per-template scan -- each template's output is scanned
|
|
40
|
-
* before insertion into the categories array. Forbidden hit throws
|
|
41
|
-
* ExternalEgressViolation. Defense-in-depth in case a template
|
|
42
|
-
* somehow produces a forbidden string from sanitized inputs (e.g.
|
|
43
|
-
* future template that joins strings in unexpected ways).
|
|
44
|
-
*
|
|
45
|
-
* ExternalEgressViolation is defined locally as a SIBLING class to the
|
|
46
|
-
* one in rs-domain-analyzer.cjs (per CONTEXT.md "Claude's Discretion:
|
|
47
|
-
* sibling vs reuse -- lean toward sibling"). Brain-inbound and external-
|
|
48
|
-
* outbound surfaces are semantically distinct; sharing the class would
|
|
49
|
-
* conflate two bottlenecks and complicate stack traces.
|
|
50
|
-
*
|
|
51
|
-
* Pure CJS, zero npm deps, node built-ins only.
|
|
52
|
-
*/
|
|
53
|
-
'use strict';
|
|
54
|
-
|
|
55
|
-
const prompts = require('./rs-brain-substrate-prompts.cjs');
|
|
56
|
-
const { FORBIDDEN_PATTERNS } = prompts;
|
|
57
|
-
|
|
58
|
-
// ---------- ExternalEgressViolation (sibling class) ----------
|
|
59
|
-
|
|
60
|
-
class ExternalEgressViolation extends Error {
|
|
61
|
-
constructor(message, meta) {
|
|
62
|
-
super(message);
|
|
63
|
-
this.name = 'ExternalEgressViolation';
|
|
64
|
-
this.meta = meta || {};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// ---------- Frozen invariants ----------
|
|
69
|
-
|
|
70
|
-
const QUERIES_PER_CATEGORY = 15;
|
|
71
|
-
|
|
72
|
-
// ---------- Helper: pick first available element from array, fallback to A or B ----------
|
|
73
|
-
|
|
74
|
-
function pick(arr, idx, fallback) {
|
|
75
|
-
if (Array.isArray(arr) && arr.length > 0) {
|
|
76
|
-
return arr[idx % arr.length];
|
|
77
|
-
}
|
|
78
|
-
return fallback;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// ---------- 15 templates: A INTERSECT B (queries finding shared ground) ----------
|
|
82
|
-
|
|
83
|
-
const TEMPLATES_A_INTERSECT_B = [
|
|
84
|
-
function (a, b) { return a + ' AND ' + b; },
|
|
85
|
-
function (a, b) { return 'intersection of ' + a + ' and ' + b; },
|
|
86
|
-
function (a, b, c) { return pick(c, 0, a) + ' shared with ' + b; },
|
|
87
|
-
function (a, b) { return 'common methods between ' + a + ' and ' + b; },
|
|
88
|
-
function (a, b, c, t) { return pick(t, 0, a) + ' across ' + b; },
|
|
89
|
-
function (a, b) { return 'overlap of ' + a + ' research and ' + b + ' research'; },
|
|
90
|
-
function (a, b) { return 'where ' + a + ' meets ' + b; },
|
|
91
|
-
function (a, b, c, t, m) { return pick(m, 0, a) + ' applied in both ' + a + ' and ' + b; },
|
|
92
|
-
function (a, b) { return 'joint ' + a + '-' + b + ' approaches'; },
|
|
93
|
-
function (a, b, c) { return pick(c, 1, a) + ' and ' + b + ' shared frameworks'; },
|
|
94
|
-
function (a, b) { return 'concepts present in ' + a + ' AND ' + b; },
|
|
95
|
-
function (a, b, c, t) { return pick(t, 1, a) + ' in ' + b + ' applications'; },
|
|
96
|
-
function (a, b) { return a + ' techniques used in ' + b + ' problems'; },
|
|
97
|
-
function (a, b, c, t, m, br) { return pick(br, 0, a) + ' transferred between ' + a + ' and ' + b; },
|
|
98
|
-
function (a, b) { return 'cross-domain literature ' + a + ' ' + b; },
|
|
99
|
-
];
|
|
100
|
-
|
|
101
|
-
// ---------- 15 templates: A LEADS TO B (causal A -> B) ----------
|
|
102
|
-
|
|
103
|
-
const TEMPLATES_A_LEADS_TO_B = [
|
|
104
|
-
function (a, b) { return a + ' enables ' + b; },
|
|
105
|
-
function (a, b) { return 'how ' + a + ' produces ' + b; },
|
|
106
|
-
function (a, b, c) { return pick(c, 0, a) + ' causing ' + b; },
|
|
107
|
-
function (a, b, c, t) { return pick(t, 0, a) + ' as precursor to ' + b; },
|
|
108
|
-
function (a, b, c, t, m) { return pick(m, 0, a) + ' driving ' + b; },
|
|
109
|
-
function (a, b) { return a + ' upstream of ' + b; },
|
|
110
|
-
function (a, b, c, t, m, br) { return pick(br, 0, a) + ' leading to ' + b; },
|
|
111
|
-
function (a, b) { return a + ' input to ' + b; },
|
|
112
|
-
function (a, b, c) { return pick(c, 1, a) + ' triggers ' + b; },
|
|
113
|
-
function (a, b) { return 'consequence of ' + a + ' on ' + b; },
|
|
114
|
-
function (a, b, c, t) { return pick(t, 1, a) + ' feeding into ' + b; },
|
|
115
|
-
function (a, b) { return a + ' as foundation for ' + b; },
|
|
116
|
-
function (a, b) { return 'pipeline from ' + a + ' to ' + b; },
|
|
117
|
-
function (a, b, c, t, m) { return pick(m, 1, a) + ' enabling ' + b + ' breakthroughs'; },
|
|
118
|
-
function (a, b) { return a + ' causally precedes ' + b; },
|
|
119
|
-
];
|
|
120
|
-
|
|
121
|
-
// ---------- 15 templates: B LEADS TO A (causal B -> A) ----------
|
|
122
|
-
|
|
123
|
-
const TEMPLATES_B_LEADS_TO_A = [
|
|
124
|
-
function (a, b) { return b + ' enables ' + a; },
|
|
125
|
-
function (a, b) { return 'how ' + b + ' informs ' + a; },
|
|
126
|
-
function (a, b, c) { return pick(c, 0, a) + ' caused by ' + b; },
|
|
127
|
-
function (a, b, c, t) { return pick(t, 0, a) + ' downstream of ' + b; },
|
|
128
|
-
function (a, b, c, t, m) { return pick(m, 0, a) + ' driven by ' + b; },
|
|
129
|
-
function (a, b) { return b + ' upstream of ' + a; },
|
|
130
|
-
function (a, b, c, t, m, br) { return pick(br, 0, a) + ' triggered by ' + b; },
|
|
131
|
-
function (a, b) { return b + ' input to ' + a; },
|
|
132
|
-
function (a, b, c) { return pick(c, 1, a) + ' result of ' + b; },
|
|
133
|
-
function (a, b) { return 'consequence of ' + b + ' on ' + a; },
|
|
134
|
-
function (a, b, c, t) { return pick(t, 1, a) + ' produced by ' + b; },
|
|
135
|
-
function (a, b) { return b + ' as foundation for ' + a; },
|
|
136
|
-
function (a, b) { return 'pipeline from ' + b + ' to ' + a; },
|
|
137
|
-
function (a, b, c, t, m) { return pick(m, 1, a) + ' arising from ' + b; },
|
|
138
|
-
function (a, b) { return b + ' causally precedes ' + a; },
|
|
139
|
-
];
|
|
140
|
-
|
|
141
|
-
// ---------- 15 templates: ADJACENT (boundary-spanning bridges) ----------
|
|
142
|
-
|
|
143
|
-
const TEMPLATES_ADJACENT = [
|
|
144
|
-
function (a, b) { return 'frameworks adjacent to ' + a + ' related to ' + b; },
|
|
145
|
-
function (a, b) { return a + ' near-domain methods'; },
|
|
146
|
-
function (a, b, c) { return pick(c, 0, a) + ' bridging to ' + b; },
|
|
147
|
-
function (a, b) { return 'analogies from ' + b + ' applicable to ' + a; },
|
|
148
|
-
function (a, b, c, t) { return pick(t, 0, a) + ' analog in ' + b; },
|
|
149
|
-
function (a, b) { return a + ' edge cases informed by ' + b; },
|
|
150
|
-
function (a, b, c, t, m) { return pick(m, 0, a) + ' adapted from ' + b; },
|
|
151
|
-
function (a, b) { return b + ' patterns at boundary of ' + a; },
|
|
152
|
-
function (a, b, c) { return pick(c, 1, a) + ' cross-pollinated from ' + b; },
|
|
153
|
-
function (a, b) { return a + ' related fields including ' + b; },
|
|
154
|
-
function (a, b, c, t) { return pick(t, 1, a) + ' analogue across ' + b; },
|
|
155
|
-
function (a, b) { return 'sister disciplines of ' + a + ' such as ' + b; },
|
|
156
|
-
function (a, b, c, t, m, br) { return pick(br, 0, a) + ' near ' + b + ' frontier'; },
|
|
157
|
-
function (a, b) { return 'methodological neighbors of ' + a + ' including ' + b; },
|
|
158
|
-
function (a, b) { return a + ' adjacent literature touching ' + b; },
|
|
159
|
-
];
|
|
160
|
-
|
|
161
|
-
// ---------- validateAnalysis: input gate ----------
|
|
162
|
-
//
|
|
163
|
-
// Returns {ok:true} on valid input. Returns {ok:false, error,
|
|
164
|
-
// reason} on any failure. The reason field is the single discriminator
|
|
165
|
-
// the caller uses to surface the right message; ordering matters and is
|
|
166
|
-
// frozen by the test contract:
|
|
167
|
-
// 1. malformed_input (not an object / array / null)
|
|
168
|
-
// 2. no_primary_domain (primary_domain not a non-empty string)
|
|
169
|
-
// 3. no_adjacent_domain (adjacent_domains not a non-empty array)
|
|
170
|
-
// 4. no_concepts (concepts not a non-empty array)
|
|
171
|
-
// 5. forbidden_input (any user-controlled scalar matched FORBIDDEN_PATTERNS)
|
|
172
|
-
//
|
|
173
|
-
// The forbidden_input check runs LAST so structural validation is
|
|
174
|
-
// reported first; the Canon Part 8 layer is the deepest defense.
|
|
175
|
-
|
|
176
|
-
function validateAnalysis(da) {
|
|
177
|
-
if (!da || typeof da !== 'object' || Array.isArray(da)) {
|
|
178
|
-
return { ok: false, error: 'invalid_analysis', reason: 'malformed_input' };
|
|
179
|
-
}
|
|
180
|
-
if (typeof da.primary_domain !== 'string' || da.primary_domain.length === 0) {
|
|
181
|
-
return { ok: false, error: 'invalid_analysis', reason: 'no_primary_domain' };
|
|
182
|
-
}
|
|
183
|
-
if (!Array.isArray(da.adjacent_domains) || da.adjacent_domains.length === 0) {
|
|
184
|
-
return { ok: false, error: 'invalid_analysis', reason: 'no_adjacent_domain' };
|
|
185
|
-
}
|
|
186
|
-
if (!Array.isArray(da.concepts) || da.concepts.length === 0) {
|
|
187
|
-
return { ok: false, error: 'invalid_analysis', reason: 'no_concepts' };
|
|
188
|
-
}
|
|
189
|
-
// Pre-input scan: every user-controlled string in the analysis input
|
|
190
|
-
// must be free of forbidden patterns. Defense-in-depth: 89.1-02 already
|
|
191
|
-
// scrubs at output time, but the matrix gate scans again.
|
|
192
|
-
const scalars = []
|
|
193
|
-
.concat([da.primary_domain])
|
|
194
|
-
.concat(da.concepts || [])
|
|
195
|
-
.concat(da.terminology || [])
|
|
196
|
-
.concat(da.methods || [])
|
|
197
|
-
.concat(da.breakthroughs || [])
|
|
198
|
-
.concat(da.adjacent_domains || []);
|
|
199
|
-
for (const s of scalars) {
|
|
200
|
-
if (typeof s !== 'string') continue;
|
|
201
|
-
for (const re of FORBIDDEN_PATTERNS) {
|
|
202
|
-
if (re.test(s)) {
|
|
203
|
-
return { ok: false, error: 'invalid_analysis', reason: 'forbidden_input' };
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return { ok: true };
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// ---------- auditQuery: per-query Canon Part 8 audit ----------
|
|
211
|
-
//
|
|
212
|
-
// Returns true if the query string is clean, false on any forbidden
|
|
213
|
-
// regex hit. Callers that get a false return MUST throw
|
|
214
|
-
// ExternalEgressViolation before pushing the query into the output array.
|
|
215
|
-
|
|
216
|
-
function auditQuery(q) {
|
|
217
|
-
if (typeof q !== 'string' || q.length === 0) return false;
|
|
218
|
-
for (const re of FORBIDDEN_PATTERNS) {
|
|
219
|
-
if (re.test(q)) return false;
|
|
220
|
-
}
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// ---------- generateCategory: runs 15 templates in fixed order ----------
|
|
225
|
-
//
|
|
226
|
-
// Throws ExternalEgressViolation on the first auditQuery failure. The
|
|
227
|
-
// throw is intentional: a forbidden template output indicates a Canon
|
|
228
|
-
// Part 8 breach and the caller must NEVER receive a partial category.
|
|
229
|
-
|
|
230
|
-
function generateCategory(templates, a, b, concepts, terminology, methods, breakthroughs) {
|
|
231
|
-
const out = [];
|
|
232
|
-
for (let i = 0; i < templates.length; i += 1) {
|
|
233
|
-
const q = templates[i](a, b, concepts, terminology, methods, breakthroughs);
|
|
234
|
-
if (!auditQuery(q)) {
|
|
235
|
-
throw new ExternalEgressViolation(
|
|
236
|
-
'query template ' + i + ' produced forbidden output',
|
|
237
|
-
{ template_index: i }
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
out.push(q);
|
|
241
|
-
}
|
|
242
|
-
return out;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// ---------- generateQueryMatrix (public; deterministic) ----------
|
|
246
|
-
//
|
|
247
|
-
// On valid input: returns {categories: {a_intersect_b[15], a_leads_to_b[15],
|
|
248
|
-
// b_leads_to_a[15], adjacent[15]}}.
|
|
249
|
-
// On invalid input: returns {error, reason} envelope.
|
|
250
|
-
// On forbidden post-template hit (defense-in-depth): throws
|
|
251
|
-
// ExternalEgressViolation. The validateAnalysis pre-input scan should
|
|
252
|
-
// catch every realistic forbidden payload before this throw can fire,
|
|
253
|
-
// but the throw remains the last line of defense.
|
|
254
|
-
|
|
255
|
-
function generateQueryMatrix(da, opts) {
|
|
256
|
-
opts = opts || {};
|
|
257
|
-
const check = validateAnalysis(da);
|
|
258
|
-
if (!check.ok) {
|
|
259
|
-
return { error: check.error, reason: check.reason };
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
const a = da.primary_domain;
|
|
263
|
-
const b = da.adjacent_domains[0];
|
|
264
|
-
|
|
265
|
-
const a_intersect_b = generateCategory(
|
|
266
|
-
TEMPLATES_A_INTERSECT_B, a, b,
|
|
267
|
-
da.concepts, da.terminology, da.methods, da.breakthroughs
|
|
268
|
-
);
|
|
269
|
-
const a_leads_to_b = generateCategory(
|
|
270
|
-
TEMPLATES_A_LEADS_TO_B, a, b,
|
|
271
|
-
da.concepts, da.terminology, da.methods, da.breakthroughs
|
|
272
|
-
);
|
|
273
|
-
const b_leads_to_a = generateCategory(
|
|
274
|
-
TEMPLATES_B_LEADS_TO_A, a, b,
|
|
275
|
-
da.concepts, da.terminology, da.methods, da.breakthroughs
|
|
276
|
-
);
|
|
277
|
-
const adjacent = generateCategory(
|
|
278
|
-
TEMPLATES_ADJACENT, a, b,
|
|
279
|
-
da.concepts, da.terminology, da.methods, da.breakthroughs
|
|
280
|
-
);
|
|
281
|
-
|
|
282
|
-
// Sanity guard: each category MUST have exactly 15 entries (per kickoff §5).
|
|
283
|
-
if (a_intersect_b.length !== QUERIES_PER_CATEGORY ||
|
|
284
|
-
a_leads_to_b.length !== QUERIES_PER_CATEGORY ||
|
|
285
|
-
b_leads_to_a.length !== QUERIES_PER_CATEGORY ||
|
|
286
|
-
adjacent.length !== QUERIES_PER_CATEGORY) {
|
|
287
|
-
return { error: 'matrix_shape_invariant_failed', reason: 'category_count_mismatch' };
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
return {
|
|
291
|
-
categories: {
|
|
292
|
-
a_intersect_b: a_intersect_b,
|
|
293
|
-
a_leads_to_b: a_leads_to_b,
|
|
294
|
-
b_leads_to_a: b_leads_to_a,
|
|
295
|
-
adjacent: adjacent,
|
|
296
|
-
},
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// ---------- Exports ----------
|
|
301
|
-
|
|
302
|
-
module.exports = {
|
|
303
|
-
generateQueryMatrix: generateQueryMatrix,
|
|
304
|
-
ExternalEgressViolation: ExternalEgressViolation,
|
|
305
|
-
QUERIES_PER_CATEGORY: QUERIES_PER_CATEGORY,
|
|
306
|
-
_test: {
|
|
307
|
-
TEMPLATES_A_INTERSECT_B: TEMPLATES_A_INTERSECT_B,
|
|
308
|
-
TEMPLATES_A_LEADS_TO_B: TEMPLATES_A_LEADS_TO_B,
|
|
309
|
-
TEMPLATES_B_LEADS_TO_A: TEMPLATES_B_LEADS_TO_A,
|
|
310
|
-
TEMPLATES_ADJACENT: TEMPLATES_ADJACENT,
|
|
311
|
-
validateAnalysis: validateAnalysis,
|
|
312
|
-
auditQuery: auditQuery,
|
|
313
|
-
generateCategory: generateCategory,
|
|
314
|
-
pick: pick,
|
|
315
|
-
},
|
|
316
|
-
};
|