@mindrian_os/install 1.13.0-beta.11
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/.claude-plugin/plugin.json +21 -0
- package/.mcp.json +9 -0
- package/CHANGELOG.md +3333 -0
- package/LICENSE +123 -0
- package/README.md +673 -0
- package/agents/brain-query.md +80 -0
- package/agents/framework-runner.md +237 -0
- package/agents/grading.md +188 -0
- package/agents/investor.md +128 -0
- package/agents/larry-extended.md +135 -0
- package/agents/opportunity-scanner.md +91 -0
- package/agents/persona-analyst.md +132 -0
- package/agents/research.md +89 -0
- package/agents/reverse-salient-agent.md +27 -0
- package/bin/cli.js +142 -0
- package/bin/mindrian-mcp-server.cjs +182 -0
- package/bin/mindrian-tools.cjs +765 -0
- package/commands/act.md +439 -0
- package/commands/admin.md +404 -0
- package/commands/analyze-needs.md +42 -0
- package/commands/analyze-systems.md +39 -0
- package/commands/analyze-timing.md +42 -0
- package/commands/auto-explore.md +64 -0
- package/commands/beautiful-question.md +40 -0
- package/commands/brain-derive.md +78 -0
- package/commands/build-knowledge.md +42 -0
- package/commands/build-thesis.md +46 -0
- package/commands/causal.md +234 -0
- package/commands/challenge-assumptions.md +33 -0
- package/commands/compare-ventures.md +83 -0
- package/commands/dashboard.md +110 -0
- package/commands/deep-grade.md +82 -0
- package/commands/diagnose.md +58 -0
- package/commands/diagnostics.md +151 -0
- package/commands/doctor.md +151 -0
- package/commands/dominant-designs.md +40 -0
- package/commands/explain-decision.md +87 -0
- package/commands/explore-domains.md +42 -0
- package/commands/explore-futures.md +40 -0
- package/commands/explore-trends.md +42 -0
- package/commands/export.md +103 -0
- package/commands/file-meeting.md +724 -0
- package/commands/find-analogies.md +188 -0
- package/commands/find-bottlenecks.md +62 -0
- package/commands/find-connections.md +76 -0
- package/commands/funding.md +81 -0
- package/commands/grade.md +203 -0
- package/commands/graph.md +128 -0
- package/commands/hat-briefing.md +125 -0
- package/commands/heal.md +196 -0
- package/commands/help.md +399 -0
- package/commands/hmi-status.md +172 -0
- package/commands/jtbd.md +241 -0
- package/commands/leadership.md +73 -0
- package/commands/lean-canvas.md +40 -0
- package/commands/macro-trends.md +40 -0
- package/commands/map-unknowns.md +40 -0
- package/commands/memory.md +173 -0
- package/commands/models.md +175 -0
- package/commands/mos-reason.md +285 -0
- package/commands/mullins.md +120 -0
- package/commands/new-project.md +481 -0
- package/commands/onboard.md +434 -0
- package/commands/operator.md +149 -0
- package/commands/opportunities.md +144 -0
- package/commands/organize.md +497 -0
- package/commands/persona.md +198 -0
- package/commands/pipeline.md +112 -0
- package/commands/present.md +91 -0
- package/commands/publish.md +201 -0
- package/commands/query.md +124 -0
- package/commands/radar.md +72 -0
- package/commands/reanalyze.md +91 -0
- package/commands/research.md +196 -0
- package/commands/room.md +352 -0
- package/commands/rooms.md +598 -0
- package/commands/root-cause.md +40 -0
- package/commands/rs-experts.md +85 -0
- package/commands/rs-explain.md +100 -0
- package/commands/rs-fetch.md +94 -0
- package/commands/rs-thesis.md +85 -0
- package/commands/scenario-plan.md +40 -0
- package/commands/scheduled-tasks.md +285 -0
- package/commands/score-innovation.md +43 -0
- package/commands/scout.md +239 -0
- package/commands/setup.md +618 -0
- package/commands/snapshot.md +147 -0
- package/commands/speakers.md +84 -0
- package/commands/splash.md +28 -0
- package/commands/status.md +75 -0
- package/commands/structure-argument.md +42 -0
- package/commands/suggest-next.md +80 -0
- package/commands/systems-thinking.md +40 -0
- package/commands/think-hats.md +42 -0
- package/commands/update.md +181 -0
- package/commands/user-needs.md +40 -0
- package/commands/validate.md +40 -0
- package/commands/value-proposition.md +61 -0
- package/commands/vault.md +180 -0
- package/commands/visualize.md +52 -0
- package/commands/whitespace.md +507 -0
- package/commands/wiki.md +69 -0
- package/hooks/hooks.json +381 -0
- package/hooks/run-hook.cmd +64 -0
- package/lib/__init__.py +0 -0
- package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/agents/auto-explore-agent.cjs +1043 -0
- package/lib/agents/reverse-salient-agent.cjs +679 -0
- package/lib/agents/tension-hook-agent.cjs +544 -0
- package/lib/brain/ROOM.md +44 -0
- package/lib/brain/chain-recommender.cjs +301 -0
- package/lib/chat/chat-context.js +185 -0
- package/lib/chat/chat-panel.js +721 -0
- package/lib/chat/fabric-chat.cjs +288 -0
- package/lib/chat/generative-tools.js +219 -0
- package/lib/conversation/ROOM.md +39 -0
- package/lib/conversation/classifier-rules.json +38 -0
- package/lib/conversation/classifier.cjs +264 -0
- package/lib/conversation/operator.cjs +287 -0
- package/lib/copy/115-spec-strings.cjs +55 -0
- package/lib/core/__init__.py +0 -0
- package/lib/core/__nav-stub.cjs +14 -0
- 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 +148 -0
- package/lib/core/asset-ops.cjs +151 -0
- package/lib/core/auto-commit-throttle.cjs +129 -0
- package/lib/core/bearer-token.cjs +199 -0
- package/lib/core/brain-client.cjs +865 -0
- package/lib/core/brain-derivation-prompts.cjs +326 -0
- package/lib/core/brain-derivation-queue.cjs +431 -0
- package/lib/core/brain-derivation.cjs +580 -0
- package/lib/core/brain-md-schema.cjs +528 -0
- package/lib/core/brain-md-staleness.cjs +357 -0
- package/lib/core/brain-response-sanitize.cjs +188 -0
- package/lib/core/bridge-writer.cjs +477 -0
- package/lib/core/chat-context-builder.cjs +253 -0
- package/lib/core/cross-room-aggregator.cjs +762 -0
- package/lib/core/daily-briefing.cjs +438 -0
- package/lib/core/decision-capture.cjs +618 -0
- package/lib/core/deep-links.cjs +82 -0
- package/lib/core/dispatch-optimizer.cjs +354 -0
- package/lib/core/dual-path-detector.cjs +84 -0
- package/lib/core/dual-path-detector.test.cjs +334 -0
- package/lib/core/exports-log.cjs +79 -0
- package/lib/core/feynman-minto-invariants.cjs +605 -0
- package/lib/core/folder-memory-async.cjs +338 -0
- package/lib/core/folder-memory-shared.cjs +890 -0
- package/lib/core/folder-memory.cjs +416 -0
- package/lib/core/framework-chain-composer.cjs +411 -0
- package/lib/core/frontmatter-schemas.cjs +330 -0
- package/lib/core/git-ops.cjs +141 -0
- package/lib/core/graph-ops.cjs +258 -0
- package/lib/core/hat-persistence.cjs +362 -0
- package/lib/core/index.cjs +60 -0
- package/lib/core/integration-registry.cjs +232 -0
- package/lib/core/intelligence-cascade.cjs +661 -0
- package/lib/core/lazygraph-ops.cjs +1057 -0
- package/lib/core/lru-cache.cjs +139 -0
- package/lib/core/mcp-profiles.cjs +182 -0
- package/lib/core/meeting-ops.cjs +54 -0
- package/lib/core/memory-ops.cjs +600 -0
- package/lib/core/migrations/ROOM.md +33 -0
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +339 -0
- package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
- package/lib/core/model-profiles.cjs +246 -0
- package/lib/core/mullins-scaffold.cjs +160 -0
- package/lib/core/nav-dial.cjs +316 -0
- package/lib/core/navigation/ROOM.md +15 -0
- package/lib/core/navigation/explanation.cjs +43 -0
- package/lib/core/navigation/focus.cjs +135 -0
- package/lib/core/navigation/ingestion.cjs +82 -0
- package/lib/core/navigation/insights.cjs +350 -0
- package/lib/core/navigation/memory-events.cjs +118 -0
- package/lib/core/navigation/neighborhood.cjs +78 -0
- package/lib/core/navigation/packet.cjs +182 -0
- package/lib/core/navigation/room-home.cjs +127 -0
- package/lib/core/navigation/transitions.cjs +82 -0
- package/lib/core/navigation-engine-shared.cjs +242 -0
- package/lib/core/navigation-engine.cjs +664 -0
- package/lib/core/navigation.cjs +60 -0
- package/lib/core/nl-graph-queries.cjs +164 -0
- package/lib/core/offer-presenter.cjs +406 -0
- package/lib/core/opportunity-extractor.cjs +183 -0
- package/lib/core/opportunity-ops.cjs +1371 -0
- package/lib/core/persona-ops.cjs +537 -0
- package/lib/core/persona-taxonomy.cjs +190 -0
- package/lib/core/platform-gates.cjs +120 -0
- package/lib/core/platform.cjs +257 -0
- package/lib/core/proactive-intelligence.cjs +528 -0
- package/lib/core/problem-type-router.cjs +315 -0
- package/lib/core/reasoning-ops.cjs +639 -0
- package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
- package/lib/core/room-classifier-strict-mode.cjs +229 -0
- package/lib/core/room-db.cjs +127 -0
- package/lib/core/room-ops-async.cjs +92 -0
- package/lib/core/room-ops-shared.cjs +64 -0
- package/lib/core/room-ops-sync.cjs +70 -0
- package/lib/core/room-ops.cjs +32 -0
- package/lib/core/room-type-detector.cjs +386 -0
- package/lib/core/rs-brain-substrate-prompts.cjs +129 -0
- package/lib/core/rs-brain-substrate.cjs +570 -0
- package/lib/core/rs-breakthrough-scorer.cjs +255 -0
- package/lib/core/rs-canon-violations.cjs +82 -0
- package/lib/core/rs-chain-feeder.cjs +343 -0
- package/lib/core/rs-commercial-assessor.cjs +280 -0
- package/lib/core/rs-differential-scorer.cjs +376 -0
- package/lib/core/rs-domain-analyzer.cjs +385 -0
- package/lib/core/rs-egress-prompts.cjs +113 -0
- package/lib/core/rs-egress-telemetry.cjs +225 -0
- package/lib/core/rs-egress-violations.cjs +53 -0
- package/lib/core/rs-expert-mapper.cjs +467 -0
- package/lib/core/rs-fetcher-academic.cjs +697 -0
- package/lib/core/rs-fetcher-experts.cjs +314 -0
- package/lib/core/rs-fetcher-industry.cjs +731 -0
- package/lib/core/rs-fetcher-patents.cjs +564 -0
- package/lib/core/rs-innovation-classifier.cjs +194 -0
- package/lib/core/rs-mind-map.cjs +656 -0
- package/lib/core/rs-neo4j-writer.cjs +388 -0
- package/lib/core/rs-nl-to-query.cjs +425 -0
- package/lib/core/rs-pinecone-bridge.cjs +303 -0
- package/lib/core/rs-preprocessor.cjs +350 -0
- package/lib/core/rs-query-matrix.cjs +316 -0
- package/lib/core/rs-query-to-text.cjs +438 -0
- package/lib/core/rs-sqlite-mirror.cjs +443 -0
- package/lib/core/rs-thesis-generator.cjs +188 -0
- package/lib/core/rs_cache.py +479 -0
- package/lib/core/rs_corpus.py +468 -0
- package/lib/core/rs_hybrid.py +586 -0
- package/lib/core/rs_math.py +287 -0
- package/lib/core/rs_rooms.py +193 -0
- package/lib/core/scheduled-scanner.cjs +463 -0
- package/lib/core/scratchpad-ops.cjs +201 -0
- package/lib/core/section-8-trace-schema.cjs +138 -0
- package/lib/core/section-registry.cjs +111 -0
- package/lib/core/session-state.cjs +144 -0
- package/lib/core/shallow-doc-parser.cjs +174 -0
- package/lib/core/shallow-doc-parser.test.cjs +226 -0
- package/lib/core/skill-activation-router.cjs +284 -0
- package/lib/core/state-ops.cjs +46 -0
- package/lib/core/statusline-cache.cjs +266 -0
- package/lib/core/token-estimator.cjs +348 -0
- package/lib/core/user-archetype.cjs +239 -0
- package/lib/core/user-md-ops.cjs +524 -0
- package/lib/core/visual-ops.cjs +624 -0
- package/lib/core/write-lock.cjs +149 -0
- package/lib/graph/canvas-graph.js +467 -0
- package/lib/graph/constellation-config.cjs +299 -0
- package/lib/graph/graph-detail-panel.js +165 -0
- package/lib/hmi/ROOM.md +47 -0
- package/lib/hmi/across-session-memory.cjs +604 -0
- package/lib/hmi/cross-room-memory.cjs +575 -0
- package/lib/hmi/decoy-tier.cjs +395 -0
- package/lib/hmi/jtbd-classifier.cjs +219 -0
- package/lib/hmi/jtbd-state.cjs +199 -0
- package/lib/hmi/jtbd-taxonomy.json +392 -0
- package/lib/hmi/selector-dispatcher.cjs +546 -0
- package/lib/hmi/selector-telemetry.cjs +263 -0
- package/lib/hmi/shape-f0-renderer.cjs +139 -0
- package/lib/hmi/shape-f1-fallback.cjs +80 -0
- package/lib/hmi/shape-f1-renderer.cjs +138 -0
- package/lib/hmi/shape-f2-renderer.cjs +132 -0
- package/lib/hmi/shape-f3-renderer.cjs +66 -0
- package/lib/hmi/shape-f4-renderer.cjs +72 -0
- package/lib/hmi/shape-f5-renderer.cjs +155 -0
- package/lib/hmi/shape-f6-plan-review-renderer.cjs +312 -0
- package/lib/hmi/shape-f6-renderer.cjs +144 -0
- package/lib/hmi/shape-g-renderer.cjs +219 -0
- package/lib/hmi/shape-h-renderer.cjs +222 -0
- package/lib/hmi/tier-check.cjs +63 -0
- package/lib/import/PRECONDITIONS.md +41 -0
- package/lib/import/branding.cjs +210 -0
- package/lib/import/branding.test.cjs +235 -0
- package/lib/import/classifications-sync.cjs +104 -0
- package/lib/import/classifications-sync.test.cjs +129 -0
- package/lib/import/enricher.cjs +296 -0
- package/lib/import/enricher.test.cjs +273 -0
- package/lib/import/integration.test.cjs +376 -0
- package/lib/import/manifest.cjs +129 -0
- package/lib/import/manifest.schema.json +185 -0
- package/lib/import/manifest.test.cjs +123 -0
- package/lib/import/meeting-detector.cjs +92 -0
- package/lib/import/meeting-detector.test.cjs +100 -0
- package/lib/import/person-detector.cjs +229 -0
- package/lib/import/person-detector.test.cjs +149 -0
- package/lib/import/report.cjs +186 -0
- package/lib/import/report.test.cjs +186 -0
- package/lib/import/room-md-scaffolder.cjs +49 -0
- package/lib/import/router.cjs +224 -0
- package/lib/import/router.test.cjs +356 -0
- package/lib/import/run-all-tests.cjs +36 -0
- package/lib/import/smoke-test.cjs +213 -0
- package/lib/import/smoke-test.test.cjs +148 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/STATE.md +8 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/problem-definition/onboarding/onboarding.md +7 -0
- package/lib/import/test-fixtures/collision-vault/source/onboarding.md +5 -0
- package/lib/import/test-fixtures/obsidian-vault/.obsidian/workspace.json +1 -0
- package/lib/import/test-fixtures/obsidian-vault/notes/with-wikilinks.md +4 -0
- package/lib/import/test-fixtures/tiny-vault/notes/2026-01-15-team-sync.md +9 -0
- package/lib/import/test-fixtures/tiny-vault/notes/empty.md +3 -0
- package/lib/import/test-fixtures/tiny-vault/notes/onboarding.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/pricing.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/random.md +4 -0
- package/lib/import/undo.test.cjs +199 -0
- package/lib/import/vault-scanner.cjs +105 -0
- package/lib/import/vault-scanner.test.cjs +67 -0
- package/lib/mcp/app-html/dashboard.html +316 -0
- package/lib/mcp/app-html/graph.html +428 -0
- package/lib/mcp/app-html/mindrian-platform.html +1841 -0
- package/lib/mcp/app-html/wiki.html +383 -0
- package/lib/mcp/app-views.cjs +322 -0
- package/lib/mcp/brain-router.cjs +418 -0
- package/lib/mcp/capability-registry.cjs +62 -0
- package/lib/mcp/larry-context.cjs +46 -0
- package/lib/mcp/larry-server-instructions.md +114 -0
- package/lib/mcp/pipeline-state.cjs +275 -0
- package/lib/mcp/prompts.cjs +302 -0
- package/lib/mcp/resources.cjs +227 -0
- package/lib/mcp/session-catchup.cjs +327 -0
- package/lib/mcp/surface-detect.cjs +75 -0
- package/lib/mcp/tool-router.cjs +1034 -0
- package/lib/memory/aaak-compress.cjs +403 -0
- package/lib/memory/aaak-compress.test.cjs +288 -0
- package/lib/memory/async-artifact-auto-commit.test.cjs +223 -0
- package/lib/memory/bearer-token.test.cjs +315 -0
- package/lib/memory/brain-cache-lru.test.cjs +259 -0
- package/lib/memory/brain-client-query-shape.test.cjs +160 -0
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
- package/lib/memory/brain-derivation-queue.test.cjs +539 -0
- package/lib/memory/brain-derivation.test.cjs +634 -0
- package/lib/memory/brain-derive-command.test.cjs +534 -0
- package/lib/memory/brain-md-invariants-validator.test.cjs +704 -0
- package/lib/memory/brain-md-schema.test.cjs +467 -0
- package/lib/memory/brain-md-staleness.test.cjs +525 -0
- package/lib/memory/brain-server-resolution.test.cjs +314 -0
- package/lib/memory/chain-recommender.test.cjs +233 -0
- package/lib/memory/chat-context.test.cjs +128 -0
- package/lib/memory/command-registry.test.cjs +220 -0
- package/lib/memory/cross-room-aggregator.test.cjs +909 -0
- package/lib/memory/dashboard-server.test.cjs +256 -0
- package/lib/memory/debouncer-drain-at-prompt.test.cjs +389 -0
- package/lib/memory/decision-capture.test.cjs +632 -0
- package/lib/memory/decision-capture.worker.cjs +70 -0
- package/lib/memory/explain-decision-command.test.cjs +521 -0
- package/lib/memory/explain-decision-footer.test.cjs +316 -0
- package/lib/memory/explored-materials-store.cjs +392 -0
- package/lib/memory/feynman-minto-guardian.test.cjs +736 -0
- package/lib/memory/feynman-minto-invariants.test.cjs +511 -0
- package/lib/memory/feynman-prompts-drift.test.cjs +144 -0
- package/lib/memory/feynman-prompts.cjs +151 -0
- package/lib/memory/feynman-prompts.test.cjs +96 -0
- package/lib/memory/folder-memory-quadruple.test.cjs +548 -0
- package/lib/memory/folder-memory.test.cjs +503 -0
- package/lib/memory/framework-chain-composer.test.cjs +515 -0
- package/lib/memory/frontmatter-schema-validator.test.cjs +290 -0
- package/lib/memory/heal-command.test.cjs +604 -0
- package/lib/memory/index-artifact-transaction.test.cjs +333 -0
- package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +122 -0
- package/lib/memory/mcp-input-validation.test.cjs +240 -0
- package/lib/memory/mcp-server-brain-deps.test.cjs +270 -0
- package/lib/memory/mcp-stack-fallback.test.cjs +433 -0
- package/lib/memory/minto-debouncer.test.cjs +407 -0
- package/lib/memory/minto-debouncer.worker.cjs +46 -0
- package/lib/memory/minto-migration-v88.test.cjs +265 -0
- package/lib/memory/minto-schema-v88.test.cjs +390 -0
- package/lib/memory/mos-status-renderer.test.cjs +631 -0
- package/lib/memory/narrative-schema.cjs +376 -0
- package/lib/memory/narrative-schema.test.cjs +209 -0
- package/lib/memory/nav-dial.test.cjs +414 -0
- package/lib/memory/navigation-engine-core.test.cjs +722 -0
- package/lib/memory/navigation-invariants.test.cjs +483 -0
- package/lib/memory/offer-presenter.test.cjs +554 -0
- package/lib/memory/on-stop-snapshot.test.cjs +404 -0
- package/lib/memory/pending-tension-store.cjs +373 -0
- package/lib/memory/post-compact-reinjection.test.cjs +854 -0
- package/lib/memory/post-write-triple.test.cjs +317 -0
- package/lib/memory/pre-compact-snapshot.test.cjs +495 -0
- package/lib/memory/problem-type-router.test.cjs +656 -0
- package/lib/memory/query-efficiency-telemetry.test.cjs +370 -0
- package/lib/memory/recompile-room-references.test.cjs +392 -0
- package/lib/memory/recompile-room-references.worker.cjs +42 -0
- package/lib/memory/record-decision-dual-write.test.cjs +454 -0
- package/lib/memory/room-classifier-strict-mode.test.cjs +417 -0
- package/lib/memory/room-minto-hook.test.cjs +398 -0
- package/lib/memory/rs-discovery-engine.test.cjs +323 -0
- package/lib/memory/run-feynman-tests.cjs +1247 -0
- package/lib/memory/security-trifecta.test.cjs +312 -0
- package/lib/memory/session-start-brain-staleness.test.cjs +363 -0
- package/lib/memory/session-start-triple-injection.test.cjs +514 -0
- package/lib/memory/sessionstart-banner-formatter.cjs +318 -0
- package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
- package/lib/memory/skill-activation-router.test.cjs +419 -0
- package/lib/memory/stamp-artifact-write.test.cjs +304 -0
- package/lib/memory/statusline-active-room.test.cjs +315 -0
- package/lib/memory/statusline-minto-segment.test.cjs +292 -0
- package/lib/memory/sync-async-entry-points.test.cjs +204 -0
- package/lib/memory/test-bridge-writer-enhanced.cjs +452 -0
- package/lib/memory/test-rs-brain-substrate-shape.cjs +529 -0
- package/lib/memory/test-rs-brain-substrate.cjs +636 -0
- package/lib/memory/test-rs-breakthrough-scorer.cjs +375 -0
- package/lib/memory/test-rs-canon-violations.cjs +218 -0
- package/lib/memory/test-rs-chain-feeder-core.cjs +344 -0
- package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +297 -0
- package/lib/memory/test-rs-commercial-assessor.cjs +385 -0
- package/lib/memory/test-rs-differential-scorer.cjs +480 -0
- package/lib/memory/test-rs-discovery-engine.cjs +603 -0
- package/lib/memory/test-rs-domain-analyzer.cjs +492 -0
- package/lib/memory/test-rs-egress-primitives.cjs +420 -0
- package/lib/memory/test-rs-expert-mapper.cjs +547 -0
- package/lib/memory/test-rs-explain-command.cjs +443 -0
- package/lib/memory/test-rs-fetcher-academic.cjs +848 -0
- package/lib/memory/test-rs-fetcher-experts.cjs +496 -0
- package/lib/memory/test-rs-fetcher-industry.cjs +702 -0
- package/lib/memory/test-rs-fetcher-patents.cjs +674 -0
- package/lib/memory/test-rs-innovation-classifier.cjs +301 -0
- package/lib/memory/test-rs-mind-map.cjs +646 -0
- package/lib/memory/test-rs-neo4j-writer.cjs +518 -0
- package/lib/memory/test-rs-nl-to-query.cjs +449 -0
- package/lib/memory/test-rs-pinecone-bridge.cjs +277 -0
- package/lib/memory/test-rs-preprocessor.cjs +433 -0
- package/lib/memory/test-rs-query-matrix.cjs +391 -0
- package/lib/memory/test-rs-query-to-text.cjs +551 -0
- package/lib/memory/test-rs-sqlite-mirror.cjs +649 -0
- package/lib/memory/test-rs-thesis-generator.cjs +360 -0
- package/lib/memory/triple-context-formatter.cjs +473 -0
- package/lib/memory/triple-context-formatter.test.cjs +442 -0
- package/lib/memory/user-md-persona.test.cjs +565 -0
- package/lib/memory/userpromptsubmit-integration.test.cjs +690 -0
- package/lib/memory/validators/README.md +157 -0
- package/lib/memory/validators/brain-md-invariants.cjs +475 -0
- package/lib/memory/validators/brain-substrate-invariants.cjs +285 -0
- package/lib/memory/validators/external-academic-invariants.cjs +249 -0
- package/lib/memory/validators/external-industry-invariants.cjs +271 -0
- package/lib/memory/validators/external-patents-invariants.cjs +266 -0
- package/lib/memory/validators/minto-invariants.cjs +62 -0
- package/lib/memory/validators/navigation-invariants.cjs +340 -0
- package/lib/memory/validators/queue-health.cjs +95 -0
- package/lib/memory/validators/snapshot-integrity.cjs +129 -0
- package/lib/memory/validators/stale-lifecycle.cjs +116 -0
- package/lib/memory/vault-section-minto-generator-atomic.test.cjs +556 -0
- package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +73 -0
- package/lib/memory/write-lock-atomic.test.cjs +137 -0
- package/lib/memory/write-lock-atomic.worker.cjs +55 -0
- package/lib/parity/check-parity.cjs +83 -0
- package/lib/presentation/presentation-server.cjs +101 -0
- package/lib/presentation/presentation-watcher.cjs +123 -0
- package/lib/quickview/hub-server.cjs +719 -0
- package/lib/quickview/server.cjs +533 -0
- package/lib/render/JTBD-PALETTES.md +145 -0
- package/lib/render/ROOM.md +59 -0
- package/lib/render/render-v2.cjs +486 -0
- package/lib/render/render-v2.test.cjs +267 -0
- package/lib/render/render.cjs +65 -0
- package/lib/state/ROOM.md +46 -0
- package/lib/state/state-md-parser.cjs +215 -0
- package/lib/statusline/ROOM.md +38 -0
- package/lib/statusline/banner-suppression.cjs +50 -0
- package/lib/statusline/surface-detect.cjs +85 -0
- package/lib/update-bootstrap.sh.template +145 -0
- package/lib/vault/frontmatter-schema.cjs +297 -0
- package/lib/vault/room-scanner.cjs +352 -0
- package/lib/vault/wikilink-builder.cjs +231 -0
- package/lib/vault/wikilink-builder.test.cjs +182 -0
- package/lib/wiki/graph-links.cjs +281 -0
- package/lib/wiki/page-renderer.cjs +229 -0
- package/lib/wiki/wiki-chat.cjs +81 -0
- package/lib/wiki/wiki-layout.cjs +1459 -0
- package/lib/wiki/wiki-search.cjs +142 -0
- package/lib/wiki/wiki-server.cjs +678 -0
- package/lib/wiki/wiki-watcher.cjs +105 -0
- package/lib/workflow/ROOM.md +47 -0
- package/lib/workflow/command-resolver.cjs +155 -0
- package/lib/workflow/command-resolver.test.cjs +235 -0
- package/package.json +44 -0
- package/pipelines/analogy/01-decompose.md +80 -0
- package/pipelines/analogy/02-abstract.md +87 -0
- package/pipelines/analogy/03-search.md +135 -0
- package/pipelines/analogy/04-transfer.md +101 -0
- package/pipelines/analogy/05-validate.md +106 -0
- package/pipelines/analogy/CHAIN.md +56 -0
- package/pipelines/discovery/01-explore-domains.md +44 -0
- package/pipelines/discovery/02-think-hats.md +50 -0
- package/pipelines/discovery/03-analyze-needs.md +54 -0
- package/pipelines/discovery/CHAIN.md +37 -0
- package/pipelines/thesis/01-structure-argument.md +45 -0
- package/pipelines/thesis/02-challenge-assumptions.md +48 -0
- package/pipelines/thesis/03-build-thesis.md +54 -0
- package/pipelines/thesis/CHAIN.md +37 -0
- package/references/brain/causal-directives.md +91 -0
- package/references/brain/causal-enrichment.cypher +165 -0
- package/references/brain/command-triggers-schema.md +226 -0
- package/references/brain/graph-architecture.md +317 -0
- package/references/brain/query-patterns.md +460 -0
- package/references/brain/room-hierarchy-schema.md +218 -0
- package/references/brain/schema.md +76 -0
- package/references/capability-radar/capabilities-index.md +241 -0
- package/references/capability-radar/changelog-cache.md +81 -0
- package/references/causal/causal-schema.md +103 -0
- package/references/design/email-template-standard.md +155 -0
- package/references/design/graph-visualization-standard.md +178 -0
- package/references/document-generation.md +179 -0
- package/references/hsi/HSI-TOOLS-REFERENCE.md +222 -0
- package/references/import-config.md +141 -0
- package/references/integrations/detection-patterns.md +101 -0
- package/references/meeting/artifact-template.md +377 -0
- package/references/meeting/cross-meeting-intelligence.md +216 -0
- package/references/meeting/cross-relationship-patterns.md +202 -0
- package/references/meeting/live-join-interface.md +244 -0
- package/references/meeting/section-mapping.md +192 -0
- package/references/meeting/segment-classification.md +258 -0
- package/references/meeting/speaker-profile-template.md +219 -0
- package/references/meeting/summary-template.md +348 -0
- package/references/meeting/transcript-patterns.md +226 -0
- package/references/methodology/analyze-needs.md +135 -0
- package/references/methodology/analyze-systems.md +121 -0
- package/references/methodology/analyze-timing.md +149 -0
- package/references/methodology/beautiful-question.md +109 -0
- package/references/methodology/build-knowledge.md +161 -0
- package/references/methodology/build-thesis.md +237 -0
- package/references/methodology/challenge-assumptions.md +127 -0
- package/references/methodology/diagnose.md +169 -0
- package/references/methodology/dominant-designs.md +212 -0
- package/references/methodology/explore-domains.md +147 -0
- package/references/methodology/explore-futures.md +163 -0
- package/references/methodology/explore-trends.md +129 -0
- package/references/methodology/find-bottlenecks.md +131 -0
- package/references/methodology/grade.md +211 -0
- package/references/methodology/index.md +97 -0
- package/references/methodology/leadership.md +200 -0
- package/references/methodology/lean-canvas.md +116 -0
- package/references/methodology/macro-trends.md +192 -0
- package/references/methodology/map-unknowns.md +137 -0
- package/references/methodology/mullins-7-domains.md +104 -0
- package/references/methodology/problem-types.md +65 -0
- package/references/methodology/root-cause.md +178 -0
- package/references/methodology/sapphire-encoding.md +355 -0
- package/references/methodology/scenario-plan.md +178 -0
- package/references/methodology/score-innovation.md +154 -0
- package/references/methodology/structure-argument.md +158 -0
- package/references/methodology/systems-thinking.md +159 -0
- package/references/methodology/think-hats.md +147 -0
- package/references/methodology/triz-matrix.json +751 -0
- package/references/methodology/triz-principles.md +501 -0
- package/references/methodology/user-needs.md +199 -0
- package/references/methodology/validate.md +163 -0
- package/references/methodology/value-proposition.md +244 -0
- package/references/opportunities/funding-lifecycle.md +103 -0
- package/references/opportunities/grant-api-patterns.md +99 -0
- package/references/opportunities/opportunity-template.md +84 -0
- package/references/personality/assessment-philosophy.md +72 -0
- package/references/personality/lexicon.md +100 -0
- package/references/personality/persona-chains.md +56 -0
- package/references/personality/pws-lexicon-full.md +499 -0
- package/references/personality/voice-dna.md +156 -0
- package/references/personas/hat-perspectives.md +76 -0
- package/references/personas/persona-template.md +63 -0
- package/references/pipeline/act-output-contract.md +88 -0
- package/references/pipeline/chains-index.md +39 -0
- package/references/pws-profile-generation.md +79 -0
- package/references/reasoning/reasoning-schema.md +143 -0
- package/references/reasoning/reasoning-template.md +68 -0
- package/references/reasoning/run-template.md +38 -0
- package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +209 -0
- package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +375 -0
- package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +575 -0
- package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +272 -0
- package/references/taxonomy/TAXONOMY.md +192 -0
- package/references/templates/MINTO.md +36 -0
- package/references/user-research/2026-04-05-leah-lawrence-session.md +202 -0
- package/references/vault-kit/README.md +35 -0
- package/references/vault-kit/app.json +12 -0
- package/references/vault-kit/appearance.json +12 -0
- package/references/vault-kit/graph.json +35 -0
- package/references/vault-kit/snippets/mindrian-destijl.css +297 -0
- package/references/vault-kit/templates/new-artifact.md +37 -0
- package/references/vault-kit/templates/new-meeting-note.md +35 -0
- package/references/vault-kit/templates/new-team-profile.md +29 -0
- package/references/vault-kit/templates/new-xref.md +35 -0
- package/references/visual/symbol-system.md +151 -0
- package/skills/MOSDeckEngine/SKILL.md +325 -0
- package/skills/brain-connector/SKILL.md +114 -0
- package/skills/context-engine/SKILL.md +147 -0
- package/skills/conversation-mode/SKILL.md +102 -0
- package/skills/larry-personality/SKILL.md +219 -0
- package/skills/larry-personality/framework-chains.md +92 -0
- package/skills/larry-personality/mode-engine.md +185 -0
- package/skills/mullins-scaffold/SKILL.md +61 -0
- package/skills/mullins-scaffold/scaffold.json +146 -0
- package/skills/pws-methodology/SKILL.md +49 -0
- package/skills/room-passive/SKILL.md +165 -0
- package/skills/room-proactive/SKILL.md +250 -0
- package/skills/ui-system/SKILL.md +277 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
* Licensed Work: MindrianOS Plugin
|
|
5
|
+
* Licensor: Mindrian Inc.
|
|
6
|
+
*
|
|
7
|
+
* Business Source License 1.1
|
|
8
|
+
* Change Date: 2029-04-23
|
|
9
|
+
* Change License: Apache 2.0
|
|
10
|
+
*
|
|
11
|
+
* Use of this file is subject to the terms of the BUSL-1.1 at LICENSE.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
* Plan 89-06: Obsidian Bridge Artifact Writer
|
|
16
|
+
*
|
|
17
|
+
* Pure rendering helpers for the reverse-salient bridge artifact pipeline.
|
|
18
|
+
* Converts `.rs-engine-results.json` pair records into Obsidian-native
|
|
19
|
+
* nested folder artifacts: bridge markdown with wikilinks, ROOM.md identity
|
|
20
|
+
* files, a dataview _index.md, and a De Stijl Cytoscape.js mind map.
|
|
21
|
+
*
|
|
22
|
+
* Design rules (see .planning/phases/89-reverse-salient-engine/89-06-PLAN.md):
|
|
23
|
+
* - No I/O. All functions are pure string builders. The caller writes.
|
|
24
|
+
* - Every bridge frontmatter cites BOTH Brain framework nodes
|
|
25
|
+
* (classical Hughes 1983 + algorithmic Medici/Hofstadter).
|
|
26
|
+
* - Every bridge body uses Obsidian [[wikilinks]] to both source artifacts.
|
|
27
|
+
* - Folder-name and file-name match per v1.9.7 nested rule.
|
|
28
|
+
* - Every folder gets ROOM.md per ICM Layer 0 rule (decision 15).
|
|
29
|
+
*
|
|
30
|
+
* The function set supports three rs-engine modes:
|
|
31
|
+
* Mode A (internal) - pairs carry source_artifact_id + source_section.
|
|
32
|
+
* Mode B (cross-room) - pairs carry source_room + source_artifact.
|
|
33
|
+
* Mode C (hybrid) - pairs carry room_artifact + external_doc objects.
|
|
34
|
+
*
|
|
35
|
+
* Field detection is schema-tolerant so this module works against the
|
|
36
|
+
* Plan 89-01 results format today and the Plan 89-04 / 89-05 formats later
|
|
37
|
+
* without a second edit pass.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
const path = require('path');
|
|
41
|
+
|
|
42
|
+
// Phase 89.3 Plan 05 enhancement: Canon Part 8 defense-in-depth on
|
|
43
|
+
// the FINAL rendered bridge artifact string. The thesis + breakthrough
|
|
44
|
+
// frontmatter fields (when present) carry pair-derived strings that
|
|
45
|
+
// flow through to the rendered output. The audit catches any forbidden
|
|
46
|
+
// pattern that smuggles into the final bytes regardless of whether the
|
|
47
|
+
// caller scrubbed pair.thesis upstream. Defense-in-depth.
|
|
48
|
+
const { ExternalEgressViolation } = require('./rs-egress-violations.cjs');
|
|
49
|
+
const { auditQueryObject } = require('./rs-egress-prompts.cjs');
|
|
50
|
+
const SURFACE_BRIDGE = 'bridge-writer-enhanced';
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Escape a string for safe inclusion inside double-quoted YAML scalars.
|
|
54
|
+
* Replaces backslashes and double-quotes only; sufficient for the limited
|
|
55
|
+
* inputs (thesis strings) we emit. Newlines are stripped to keep the
|
|
56
|
+
* frontmatter single-line per YAML 1.2 plain double-quoted style.
|
|
57
|
+
*/
|
|
58
|
+
function escapeYaml(s) {
|
|
59
|
+
return String(s)
|
|
60
|
+
.replace(/\\/g, '\\\\')
|
|
61
|
+
.replace(/"/g, '\\"')
|
|
62
|
+
.replace(/\r?\n/g, ' ');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Slugify a pair of titles into a folder-safe identifier component.
|
|
67
|
+
* Lowercases, collapses non-alphanumeric to hyphens, trims, truncates each
|
|
68
|
+
* side to 30 chars so long artifact titles do not blow up filesystem limits.
|
|
69
|
+
*/
|
|
70
|
+
function slugifyPair(sourceTitle, targetTitle) {
|
|
71
|
+
const pick = (s) =>
|
|
72
|
+
String(s || '')
|
|
73
|
+
.toLowerCase()
|
|
74
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
75
|
+
.replace(/^-|-$/g, '')
|
|
76
|
+
.slice(0, 30) || 'artifact';
|
|
77
|
+
return `${pick(sourceTitle)}-${pick(targetTitle)}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Extract canonical source/target identifiers from a pair record,
|
|
82
|
+
* tolerating internal/cross-room/hybrid schemas. Returns the label
|
|
83
|
+
* used for humans and the wikilink target used for Obsidian.
|
|
84
|
+
*/
|
|
85
|
+
function resolvePairIdentity(pair) {
|
|
86
|
+
// Hybrid mode (Plan 89-05): room_artifact + external_doc
|
|
87
|
+
if (pair.room_artifact || pair.external_doc) {
|
|
88
|
+
const roomArtifact = pair.room_artifact || {};
|
|
89
|
+
const externalDoc = pair.external_doc || {};
|
|
90
|
+
const roomId = roomArtifact.room_id || roomArtifact.section || 'room';
|
|
91
|
+
const artifactId = roomArtifact.artifact_id || roomArtifact.id || 'artifact';
|
|
92
|
+
const externalId = externalDoc.external_id || externalDoc.id || 'external';
|
|
93
|
+
return {
|
|
94
|
+
isHybrid: true,
|
|
95
|
+
sourceLabel: roomArtifact.title || artifactId || 'Room Artifact',
|
|
96
|
+
targetLabel: externalDoc.title || externalId || 'External Doc',
|
|
97
|
+
sourceLink: `[[${roomId}/${artifactId}]]`,
|
|
98
|
+
targetLink: externalDoc.external_id
|
|
99
|
+
? `[${externalDoc.title || externalId}](${externalDoc.external_id})`
|
|
100
|
+
: `[${externalDoc.title || externalId}]`,
|
|
101
|
+
sourceId: `${roomId}/${artifactId}`,
|
|
102
|
+
targetId: externalDoc.external_id || externalId,
|
|
103
|
+
sourceRoom: roomId,
|
|
104
|
+
targetRoom: externalDoc.source || '',
|
|
105
|
+
externalSource: externalDoc.source || '',
|
|
106
|
+
externalId,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Cross-room mode (Plan 89-04): source_room + source_artifact
|
|
111
|
+
// Mode A internal (Plan 89-01): source_artifact_id (section/slug) + source_title
|
|
112
|
+
const sourceRoom =
|
|
113
|
+
pair.source_room ||
|
|
114
|
+
pair.source_section ||
|
|
115
|
+
(typeof pair.source_artifact_id === 'string' && pair.source_artifact_id.includes('/')
|
|
116
|
+
? pair.source_artifact_id.split('/')[0]
|
|
117
|
+
: '');
|
|
118
|
+
const targetRoom =
|
|
119
|
+
pair.target_room ||
|
|
120
|
+
pair.target_section ||
|
|
121
|
+
(typeof pair.target_artifact_id === 'string' && pair.target_artifact_id.includes('/')
|
|
122
|
+
? pair.target_artifact_id.split('/')[0]
|
|
123
|
+
: '');
|
|
124
|
+
|
|
125
|
+
const sourceArtifact =
|
|
126
|
+
pair.source_artifact ||
|
|
127
|
+
(typeof pair.source_artifact_id === 'string' && pair.source_artifact_id.includes('/')
|
|
128
|
+
? pair.source_artifact_id.split('/').slice(1).join('/')
|
|
129
|
+
: pair.source_artifact_id) ||
|
|
130
|
+
'artifact-a';
|
|
131
|
+
const targetArtifact =
|
|
132
|
+
pair.target_artifact ||
|
|
133
|
+
(typeof pair.target_artifact_id === 'string' && pair.target_artifact_id.includes('/')
|
|
134
|
+
? pair.target_artifact_id.split('/').slice(1).join('/')
|
|
135
|
+
: pair.target_artifact_id) ||
|
|
136
|
+
'artifact-b';
|
|
137
|
+
|
|
138
|
+
const sourceLabel = pair.source_title || sourceArtifact;
|
|
139
|
+
const targetLabel = pair.target_title || targetArtifact;
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
isHybrid: false,
|
|
143
|
+
sourceLabel,
|
|
144
|
+
targetLabel,
|
|
145
|
+
sourceLink: `[[${sourceRoom || 'room'}/${sourceArtifact}]]`,
|
|
146
|
+
targetLink: `[[${targetRoom || 'room'}/${targetArtifact}]]`,
|
|
147
|
+
sourceId: sourceRoom ? `${sourceRoom}/${sourceArtifact}` : sourceArtifact,
|
|
148
|
+
targetId: targetRoom ? `${targetRoom}/${targetArtifact}` : targetArtifact,
|
|
149
|
+
sourceRoom: sourceRoom || '',
|
|
150
|
+
targetRoom: targetRoom || '',
|
|
151
|
+
externalSource: '',
|
|
152
|
+
externalId: '',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Render a single bridge artifact markdown string with dual Brain
|
|
158
|
+
* framework citation and Obsidian wikilinks to both sources.
|
|
159
|
+
*/
|
|
160
|
+
function renderBridgeArtifact(pair, bridgeId, metadata) {
|
|
161
|
+
const identity = resolvePairIdentity(pair);
|
|
162
|
+
const lsa = typeof pair.lsa_score === 'number' ? pair.lsa_score : 0;
|
|
163
|
+
const sem = typeof pair.semantic_score === 'number' ? pair.semantic_score : 0;
|
|
164
|
+
const signedDiff =
|
|
165
|
+
typeof pair.signed_diff === 'number' ? pair.signed_diff : sem - lsa;
|
|
166
|
+
const absDiff =
|
|
167
|
+
typeof pair.abs_diff === 'number' ? pair.abs_diff : Math.abs(signedDiff);
|
|
168
|
+
const direction = pair.direction || 'structural_transfer';
|
|
169
|
+
|
|
170
|
+
const interpretation =
|
|
171
|
+
direction === 'structural_transfer'
|
|
172
|
+
? 'Means similar things, uses different topic vocabulary. Cross-domain analogy opportunity.'
|
|
173
|
+
: 'Uses same topic vocabulary, means different things. Method exists in one domain, applies to the other.';
|
|
174
|
+
|
|
175
|
+
const directionLabel =
|
|
176
|
+
direction === 'structural_transfer'
|
|
177
|
+
? 'Structural Transfer (A then B)'
|
|
178
|
+
: 'Semantic Implementation (B from A)';
|
|
179
|
+
|
|
180
|
+
const meta = metadata || {};
|
|
181
|
+
const mode = meta.mode || (meta.metadata && meta.metadata.mode) || 'internal';
|
|
182
|
+
const thesisEnabled = meta.thesis_enabled === true;
|
|
183
|
+
|
|
184
|
+
const thesisBody = thesisEnabled
|
|
185
|
+
? pair.innovation_thesis || '(Thesis generation pending)'
|
|
186
|
+
: '_Run without `--no-thesis` to generate innovation thesis._';
|
|
187
|
+
|
|
188
|
+
const generatedAt = new Date().toISOString();
|
|
189
|
+
|
|
190
|
+
// Phase 89.3 Plan 05 enhancement: 2 OPTIONAL frontmatter fields.
|
|
191
|
+
// BACKWARD-COMPAT: when pair.thesis OR pair.breakthrough is missing,
|
|
192
|
+
// omit the corresponding YAML key entirely so v1.10.16-vintage inputs
|
|
193
|
+
// render BYTE-IDENTICAL pre-89.3 frontmatter (regression-tested).
|
|
194
|
+
const hasThesis = typeof pair.thesis === 'string' && pair.thesis.length > 0;
|
|
195
|
+
const hasBreakthrough =
|
|
196
|
+
pair.breakthrough &&
|
|
197
|
+
typeof pair.breakthrough === 'object' &&
|
|
198
|
+
typeof pair.breakthrough.score === 'number';
|
|
199
|
+
let optionalFrontmatter = '';
|
|
200
|
+
if (hasThesis) {
|
|
201
|
+
optionalFrontmatter += `\nthesis: "${escapeYaml(pair.thesis)}"`;
|
|
202
|
+
}
|
|
203
|
+
if (hasBreakthrough) {
|
|
204
|
+
optionalFrontmatter += `\nbreakthrough_score: ${pair.breakthrough.score.toFixed(2)}`;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const out = `---
|
|
208
|
+
brain_framework_classical: "framework:reverse-salient-analysis"
|
|
209
|
+
brain_framework_algorithmic: "framework:algorithmic-generation-of-reverse-salient-solutions"
|
|
210
|
+
brain_chain_next: ["framework:cross-domain-innovation", "framework:medici-effect"]
|
|
211
|
+
brain_node_version: "2026-Q2"
|
|
212
|
+
bridge_id: "${bridgeId}"
|
|
213
|
+
mode: "${mode}"
|
|
214
|
+
lsa_score: ${lsa.toFixed(4)}
|
|
215
|
+
semantic_score: ${sem.toFixed(4)}
|
|
216
|
+
signed_diff: ${signedDiff.toFixed(4)}
|
|
217
|
+
abs_diff: ${absDiff.toFixed(4)}
|
|
218
|
+
direction: "${direction}"
|
|
219
|
+
source_room: "${identity.sourceRoom}"
|
|
220
|
+
target_room: "${identity.targetRoom}"
|
|
221
|
+
external_source: "${identity.externalSource}"
|
|
222
|
+
external_id: "${identity.externalId}"
|
|
223
|
+
generated_at: "${generatedAt}"${optionalFrontmatter}
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
# Bridge ${bridgeId}: ${identity.sourceLabel} x ${identity.targetLabel}
|
|
227
|
+
|
|
228
|
+
**Structural similarity (LSA):** ${lsa.toFixed(3)}
|
|
229
|
+
**Semantic similarity (BERT):** ${sem.toFixed(3)}
|
|
230
|
+
**Differential (|sem - lsa|):** ${absDiff.toFixed(3)}
|
|
231
|
+
**Direction:** ${directionLabel}
|
|
232
|
+
|
|
233
|
+
## Sources
|
|
234
|
+
|
|
235
|
+
- **Source A:** ${identity.sourceLink}
|
|
236
|
+
- **Source B:** ${identity.targetLink}
|
|
237
|
+
|
|
238
|
+
## Interpretation
|
|
239
|
+
|
|
240
|
+
${interpretation}
|
|
241
|
+
|
|
242
|
+
## Innovation Thesis
|
|
243
|
+
|
|
244
|
+
<!-- Generated when --no-thesis is OFF; stub when ON -->
|
|
245
|
+
${thesisBody}
|
|
246
|
+
|
|
247
|
+
## Brain Framework Citation
|
|
248
|
+
|
|
249
|
+
This bridge is classified under [[framework:reverse-salient-analysis]] (Hughes 1983, Networks of Power) with chain-forward to [[framework:cross-domain-innovation]] (Medici Effect / Hofstadter Surfaces and Essences).
|
|
250
|
+
|
|
251
|
+
The algorithmic generation is classified under [[framework:algorithmic-generation-of-reverse-salient-solutions]].
|
|
252
|
+
|
|
253
|
+
Case studies for context: Marconi, Naval Aviation (see Workshop 3 curriculum).
|
|
254
|
+
`;
|
|
255
|
+
|
|
256
|
+
// Canon Part 8 defense-in-depth: scan the FINAL rendered string for
|
|
257
|
+
// any FORBIDDEN_PATTERNS leak that smuggled through pair.thesis OR
|
|
258
|
+
// any other surface field. auditQueryObject walks JSON.stringify of
|
|
259
|
+
// the wrapper object; throws ExternalEgressViolation with
|
|
260
|
+
// meta.surface = 'bridge-writer-enhanced' on hit. The thrown error
|
|
261
|
+
// never leaves a partially-rendered artifact behind because we throw
|
|
262
|
+
// BEFORE returning.
|
|
263
|
+
auditQueryObject({ rendered: out }, SURFACE_BRIDGE);
|
|
264
|
+
return out;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Render ROOM.md identity file for a single bridge folder.
|
|
269
|
+
* Honors ICM Layer 0 rule (decision 15): every folder has ROOM.md.
|
|
270
|
+
*/
|
|
271
|
+
function renderRoomMd(bridgeId, sourceLabel, targetLabel) {
|
|
272
|
+
return `---
|
|
273
|
+
room_type: bridge-artifact
|
|
274
|
+
room_id: ${bridgeId}
|
|
275
|
+
icm_layer: 4
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
# ${bridgeId}
|
|
279
|
+
|
|
280
|
+
This folder contains a reverse-salient bridge artifact connecting ${sourceLabel} with ${targetLabel}.
|
|
281
|
+
|
|
282
|
+
## Contents
|
|
283
|
+
- \`${bridgeId}.md\` - main bridge artifact with wikilinks and thesis
|
|
284
|
+
- Attachments as needed (images, data extracts)
|
|
285
|
+
|
|
286
|
+
## Identity
|
|
287
|
+
Per ICM Layer 0 rule (decision 15): this directory is a bridge artifact subsystem with its own ROOM.md.
|
|
288
|
+
`;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Render the _index.md dataview query that renders a table of all bridges.
|
|
293
|
+
*/
|
|
294
|
+
function renderIndex(bridges) {
|
|
295
|
+
return `---
|
|
296
|
+
room_type: bridge-index
|
|
297
|
+
icm_layer: 4
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
# Cross-Room Bridges Index
|
|
301
|
+
|
|
302
|
+
\`\`\`dataview
|
|
303
|
+
TABLE direction, abs_diff AS "Differential", lsa_score AS "LSA", semantic_score AS "BERT", source_room, target_room
|
|
304
|
+
FROM "opportunity-bank/cross-room-bridges"
|
|
305
|
+
WHERE abs_diff > 0.3
|
|
306
|
+
SORT abs_diff DESC
|
|
307
|
+
\`\`\`
|
|
308
|
+
|
|
309
|
+
## Total bridges: ${bridges.length}
|
|
310
|
+
`;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Render the top-level ROOM.md for the cross-room-bridges section.
|
|
315
|
+
*/
|
|
316
|
+
function renderSectionRoomMd(metadata) {
|
|
317
|
+
const mode = (metadata && metadata.mode) || 'internal';
|
|
318
|
+
return `---
|
|
319
|
+
room_type: cross-room-bridges
|
|
320
|
+
icm_layer: 4
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
# Cross-Room Bridges
|
|
324
|
+
|
|
325
|
+
Generated by rs-engine.py (${mode} mode).
|
|
326
|
+
|
|
327
|
+
Every bridge in this section is a reverse-salient innovation pair. Structural
|
|
328
|
+
similarity (LSA) and semantic similarity (BERT) differ enough to suggest a
|
|
329
|
+
cross-domain transfer or a latent method-domain mismatch. See Hughes 1983
|
|
330
|
+
Networks of Power and the Medici Effect for theoretical grounding.
|
|
331
|
+
`;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Render the De Stijl Cytoscape.js mind map HTML for all bridge pairs.
|
|
336
|
+
* Standalone HTML (Cytoscape.js via CDN); no build step.
|
|
337
|
+
* Per-edge direction drives edge color (red structural, yellow semantic).
|
|
338
|
+
*/
|
|
339
|
+
function renderMindMap(pairs) {
|
|
340
|
+
const nodes = new Map();
|
|
341
|
+
const edges = [];
|
|
342
|
+
|
|
343
|
+
pairs.forEach((pair, idx) => {
|
|
344
|
+
const bridgeId = `bridge-${String(idx + 1).padStart(3, '0')}`;
|
|
345
|
+
const identity = resolvePairIdentity(pair);
|
|
346
|
+
const sourceId = identity.sourceId || `source-${idx}`;
|
|
347
|
+
const targetId = identity.targetId || `target-${idx}`;
|
|
348
|
+
|
|
349
|
+
if (!nodes.has(sourceId)) {
|
|
350
|
+
nodes.set(sourceId, {
|
|
351
|
+
data: { id: sourceId, label: identity.sourceLabel || sourceId, type: 'artifact' },
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
if (!nodes.has(targetId)) {
|
|
355
|
+
nodes.set(targetId, {
|
|
356
|
+
data: { id: targetId, label: identity.targetLabel || targetId, type: 'artifact' },
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
const absDiff = typeof pair.abs_diff === 'number' ? pair.abs_diff : 0;
|
|
360
|
+
edges.push({
|
|
361
|
+
data: {
|
|
362
|
+
id: bridgeId,
|
|
363
|
+
source: sourceId,
|
|
364
|
+
target: targetId,
|
|
365
|
+
label: `${pair.direction || 'bridge'} (D${absDiff.toFixed(2)})`,
|
|
366
|
+
abs_diff: absDiff,
|
|
367
|
+
direction: pair.direction || 'unknown',
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
const elements = JSON.stringify([...nodes.values(), ...edges]);
|
|
373
|
+
|
|
374
|
+
return `<!DOCTYPE html>
|
|
375
|
+
<html lang="en">
|
|
376
|
+
<head>
|
|
377
|
+
<meta charset="UTF-8">
|
|
378
|
+
<title>Reverse Salient Bridge Mind Map</title>
|
|
379
|
+
<script src="https://unpkg.com/cytoscape@3.28.1/dist/cytoscape.min.js"></script>
|
|
380
|
+
<style>
|
|
381
|
+
:root {
|
|
382
|
+
--red: #A63D2F;
|
|
383
|
+
--blue: #1E3A6E;
|
|
384
|
+
--yellow: #C8A43C;
|
|
385
|
+
--teal: #2A6B5E;
|
|
386
|
+
--cream: #F5F0E8;
|
|
387
|
+
--dark: #1a1a1a;
|
|
388
|
+
}
|
|
389
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
390
|
+
body { background: var(--dark); font-family: 'Courier New', monospace; color: var(--cream); }
|
|
391
|
+
header {
|
|
392
|
+
padding: 16px 24px;
|
|
393
|
+
border-bottom: 3px solid var(--red);
|
|
394
|
+
display: flex; align-items: center; gap: 16px;
|
|
395
|
+
}
|
|
396
|
+
header h1 { font-size: 1.1rem; letter-spacing: 0.12em; color: var(--yellow); }
|
|
397
|
+
header span { font-size: 0.75rem; color: var(--teal); }
|
|
398
|
+
#cy { width: 100vw; height: calc(100vh - 56px); }
|
|
399
|
+
</style>
|
|
400
|
+
</head>
|
|
401
|
+
<body>
|
|
402
|
+
<header>
|
|
403
|
+
<h1>REVERSE SALIENT BRIDGE MAP</h1>
|
|
404
|
+
<span>Brain: framework:reverse-salient-analysis + framework:algorithmic-generation-of-reverse-salient-solutions</span>
|
|
405
|
+
</header>
|
|
406
|
+
<div id="cy"></div>
|
|
407
|
+
<script>
|
|
408
|
+
const elements = ${elements};
|
|
409
|
+
const cy = cytoscape({
|
|
410
|
+
container: document.getElementById('cy'),
|
|
411
|
+
elements: elements,
|
|
412
|
+
style: [
|
|
413
|
+
{
|
|
414
|
+
selector: 'node[type="artifact"]',
|
|
415
|
+
style: {
|
|
416
|
+
'background-color': '#1E3A6E',
|
|
417
|
+
'label': 'data(label)',
|
|
418
|
+
'color': '#F5F0E8',
|
|
419
|
+
'font-size': '10px',
|
|
420
|
+
'text-wrap': 'wrap',
|
|
421
|
+
'text-max-width': '100px',
|
|
422
|
+
'border-width': 2,
|
|
423
|
+
'border-color': '#2A6B5E',
|
|
424
|
+
'width': 40,
|
|
425
|
+
'height': 40
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
selector: 'edge[direction="structural_transfer"]',
|
|
430
|
+
style: {
|
|
431
|
+
'line-color': '#A63D2F',
|
|
432
|
+
'target-arrow-color': '#A63D2F',
|
|
433
|
+
'target-arrow-shape': 'triangle',
|
|
434
|
+
'label': 'data(label)',
|
|
435
|
+
'font-size': '8px',
|
|
436
|
+
'color': '#C8A43C',
|
|
437
|
+
'curve-style': 'bezier'
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
selector: 'edge[direction="semantic_implementation"]',
|
|
442
|
+
style: {
|
|
443
|
+
'line-color': '#C8A43C',
|
|
444
|
+
'target-arrow-color': '#C8A43C',
|
|
445
|
+
'target-arrow-shape': 'triangle',
|
|
446
|
+
'label': 'data(label)',
|
|
447
|
+
'font-size': '8px',
|
|
448
|
+
'color': '#F5F0E8',
|
|
449
|
+
'curve-style': 'bezier'
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
selector: 'edge',
|
|
454
|
+
style: {
|
|
455
|
+
'line-color': '#2A6B5E',
|
|
456
|
+
'target-arrow-color': '#2A6B5E',
|
|
457
|
+
'target-arrow-shape': 'triangle',
|
|
458
|
+
'curve-style': 'bezier'
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
],
|
|
462
|
+
layout: { name: 'cose', padding: 40, animate: false }
|
|
463
|
+
});
|
|
464
|
+
</script>
|
|
465
|
+
</body>
|
|
466
|
+
</html>`;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
module.exports = {
|
|
470
|
+
slugifyPair,
|
|
471
|
+
resolvePairIdentity,
|
|
472
|
+
renderBridgeArtifact,
|
|
473
|
+
renderRoomMd,
|
|
474
|
+
renderIndex,
|
|
475
|
+
renderSectionRoomMd,
|
|
476
|
+
renderMindMap,
|
|
477
|
+
};
|