@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,533 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* MindrianOS Quick-View Server
|
|
6
|
+
* Lightweight Node.js http server that serves an interactive project dashboard
|
|
7
|
+
* on localhost. Designed to make the filesystem INVISIBLE to users.
|
|
8
|
+
*
|
|
9
|
+
* Users see: "Blueprint Phase: 7 entries, biggest gap is Business Model"
|
|
10
|
+
* Users never see: room/business-model/ -- 0 entries
|
|
11
|
+
*
|
|
12
|
+
* Usage: node lib/quickview/server.cjs [ROOM_DIR] [PORT]
|
|
13
|
+
* Or: require('./server.cjs').start(roomDir, port)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const path = require('path');
|
|
18
|
+
const { execSync } = require('child_process');
|
|
19
|
+
const http = require('http');
|
|
20
|
+
|
|
21
|
+
// ── Config ──
|
|
22
|
+
|
|
23
|
+
const SECTION_META = {
|
|
24
|
+
'problem-definition': { label: 'Problem', color: '#A63D2F', icon: '?' },
|
|
25
|
+
'market-analysis': { label: 'Market', color: '#C8A43C', icon: '~' },
|
|
26
|
+
'solution-design': { label: 'Solution', color: '#5C5A56', icon: '*' },
|
|
27
|
+
'business-model': { label: 'Business Model', color: '#2D6B4A', icon: '#' },
|
|
28
|
+
'competitive-analysis': { label: 'Competition', color: '#B5602A', icon: '!' },
|
|
29
|
+
'team-execution': { label: 'Team', color: '#1E3A6E', icon: '+' },
|
|
30
|
+
'legal-ip': { label: 'Legal & IP', color: '#6B4E8B', icon: '&' },
|
|
31
|
+
'financial-model': { label: 'Financials', color: '#2A6B5E', icon: '$' },
|
|
32
|
+
'opportunity-bank': { label: 'Opportunities', color: '#C87137', icon: '@' },
|
|
33
|
+
'funding': { label: 'Funding', color: '#3A7B5E', icon: '%' },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const SKIP_DIRS = new Set(['.mindrian', 'meetings', 'team', 'exports', '.context', '.planning', 'personas']);
|
|
37
|
+
const SKIP_FILES = new Set(['ROOM.md', 'STATE.md', 'MINTO.md', 'USER.md', 'ROOM-INTELLIGENCE.md', 'MEETINGS-INTELLIGENCE.md']);
|
|
38
|
+
|
|
39
|
+
// ── Room Data Collection ──
|
|
40
|
+
|
|
41
|
+
function collectRoomData(roomDir) {
|
|
42
|
+
const data = {
|
|
43
|
+
name: 'Untitled Project',
|
|
44
|
+
stage: 'Pre-opportunity',
|
|
45
|
+
sections: [],
|
|
46
|
+
totalEntries: 0,
|
|
47
|
+
meetings: 0,
|
|
48
|
+
intelligence: { gaps: [], convergence: [], contradictions: [] },
|
|
49
|
+
recentArtifacts: [],
|
|
50
|
+
generatedAt: new Date().toISOString(),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Read STATE.md for venture name and stage
|
|
54
|
+
const statePath = path.join(roomDir, 'STATE.md');
|
|
55
|
+
if (fs.existsSync(statePath)) {
|
|
56
|
+
const stateContent = fs.readFileSync(statePath, 'utf-8');
|
|
57
|
+
const nameMatch = stateContent.match(/venture_name:\s*["']?(.+?)["']?\s*$/m);
|
|
58
|
+
const stageMatch = stateContent.match(/venture_stage:\s*["']?(.+?)["']?\s*$/m);
|
|
59
|
+
if (nameMatch) data.name = nameMatch[1].trim();
|
|
60
|
+
if (stageMatch) data.stage = stageMatch[1].trim();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Scan sections
|
|
64
|
+
const entries = fs.readdirSync(roomDir, { withFileTypes: true });
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (!entry.isDirectory() || SKIP_DIRS.has(entry.name)) continue;
|
|
67
|
+
const sectionDir = path.join(roomDir, entry.name);
|
|
68
|
+
const meta = SECTION_META[entry.name] || { label: entry.name, color: '#5C5A56', icon: '-' };
|
|
69
|
+
|
|
70
|
+
const artifacts = [];
|
|
71
|
+
try {
|
|
72
|
+
const files = fs.readdirSync(sectionDir).filter(f => f.endsWith('.md') && !SKIP_FILES.has(f));
|
|
73
|
+
for (const file of files) {
|
|
74
|
+
const filePath = path.join(sectionDir, file);
|
|
75
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
76
|
+
const titleMatch = content.match(/^# (.+)$/m);
|
|
77
|
+
const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
78
|
+
artifacts.push({
|
|
79
|
+
title: titleMatch ? titleMatch[1].trim() : file.replace('.md', ''),
|
|
80
|
+
date: dateMatch ? dateMatch[1] : null,
|
|
81
|
+
file: file,
|
|
82
|
+
size: content.length,
|
|
83
|
+
});
|
|
84
|
+
data.recentArtifacts.push({
|
|
85
|
+
title: titleMatch ? titleMatch[1].trim() : file.replace('.md', ''),
|
|
86
|
+
section: meta.label,
|
|
87
|
+
sectionColor: meta.color,
|
|
88
|
+
date: dateMatch ? dateMatch[1] : null,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
} catch (e) { /* empty section */ }
|
|
92
|
+
|
|
93
|
+
data.sections.push({
|
|
94
|
+
id: entry.name,
|
|
95
|
+
label: meta.label,
|
|
96
|
+
color: meta.color,
|
|
97
|
+
icon: meta.icon,
|
|
98
|
+
entryCount: artifacts.length,
|
|
99
|
+
artifacts: artifacts,
|
|
100
|
+
});
|
|
101
|
+
data.totalEntries += artifacts.length;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Sort recent artifacts by date (newest first)
|
|
105
|
+
data.recentArtifacts.sort((a, b) => (b.date || '').localeCompare(a.date || ''));
|
|
106
|
+
data.recentArtifacts = data.recentArtifacts.slice(0, 8);
|
|
107
|
+
|
|
108
|
+
// Count meetings
|
|
109
|
+
const meetingsDir = path.join(roomDir, 'meetings');
|
|
110
|
+
if (fs.existsSync(meetingsDir)) {
|
|
111
|
+
data.meetings = fs.readdirSync(meetingsDir, { withFileTypes: true })
|
|
112
|
+
.filter(d => d.isDirectory()).length;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Simple intelligence
|
|
116
|
+
const activeSections = data.sections.filter(s => s.entryCount > 0).length;
|
|
117
|
+
const emptySections = data.sections.filter(s => s.entryCount === 0);
|
|
118
|
+
const singleEntrySections = data.sections.filter(s => s.entryCount === 1);
|
|
119
|
+
|
|
120
|
+
for (const s of emptySections) {
|
|
121
|
+
data.intelligence.gaps.push({ section: s.label, color: s.color, type: 'empty', message: `${s.label} has no entries` });
|
|
122
|
+
}
|
|
123
|
+
for (const s of singleEntrySections) {
|
|
124
|
+
data.intelligence.gaps.push({ section: s.label, color: s.color, type: 'thin', message: `${s.label} has only 1 entry -- single lens` });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return data;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ── HTML Template ──
|
|
131
|
+
|
|
132
|
+
function buildDashboardHTML(data) {
|
|
133
|
+
const sectionsHTML = data.sections.map(s => {
|
|
134
|
+
const pct = data.totalEntries > 0 ? Math.round((s.entryCount / Math.max(...data.sections.map(x => x.entryCount), 1)) * 100) : 0;
|
|
135
|
+
const artifactListHTML = s.artifacts.map(a =>
|
|
136
|
+
`<div class="artifact-item"><span class="artifact-dot" style="background:${s.color}"></span><span class="artifact-title">${a.title}</span>${a.date ? `<span class="artifact-date">${a.date}</span>` : ''}</div>`
|
|
137
|
+
).join('');
|
|
138
|
+
|
|
139
|
+
return `
|
|
140
|
+
<div class="section-card" style="border-left: 4px solid ${s.color}">
|
|
141
|
+
<div class="section-header">
|
|
142
|
+
<div class="section-name">${s.label}</div>
|
|
143
|
+
<div class="section-count" style="color:${s.color}">${s.entryCount}</div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="section-bar-track">
|
|
146
|
+
<div class="section-bar-fill" style="width:${pct}%;background:${s.color}"></div>
|
|
147
|
+
</div>
|
|
148
|
+
${s.entryCount > 0 ? `<div class="artifact-list">${artifactListHTML}</div>` : '<div class="empty-label">No entries yet</div>'}
|
|
149
|
+
</div>`;
|
|
150
|
+
}).join('');
|
|
151
|
+
|
|
152
|
+
const gapsHTML = data.intelligence.gaps.map(g =>
|
|
153
|
+
`<div class="signal-item signal-gap"><span class="signal-dot" style="background:${g.color}"></span>${g.message}</div>`
|
|
154
|
+
).join('');
|
|
155
|
+
|
|
156
|
+
const recentHTML = data.recentArtifacts.map(a =>
|
|
157
|
+
`<div class="recent-item"><span class="recent-dot" style="background:${a.sectionColor}"></span><span class="recent-title">${a.title}</span><span class="recent-section">${a.section}</span></div>`
|
|
158
|
+
).join('');
|
|
159
|
+
|
|
160
|
+
const activeSections = data.sections.filter(s => s.entryCount > 0).length;
|
|
161
|
+
const totalSections = data.sections.length;
|
|
162
|
+
|
|
163
|
+
return `<!DOCTYPE html>
|
|
164
|
+
<html lang="en">
|
|
165
|
+
<head>
|
|
166
|
+
<meta charset="UTF-8">
|
|
167
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
168
|
+
<title>${data.name} -- MindrianOS Quick View</title>
|
|
169
|
+
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
|
|
170
|
+
<style>
|
|
171
|
+
:root {
|
|
172
|
+
--ds-bg: #0D0D0D;
|
|
173
|
+
--ds-surface: #1A1A1A;
|
|
174
|
+
--ds-elevated: #242424;
|
|
175
|
+
--ds-cream: #F5F1E8;
|
|
176
|
+
--ds-muted: #A8A39F;
|
|
177
|
+
--ds-text: #D4CFC7;
|
|
178
|
+
--ds-border: #2A2A2A;
|
|
179
|
+
--ds-red: #A63D2F;
|
|
180
|
+
--ds-blue: #1E3A6E;
|
|
181
|
+
--ds-yellow: #C8A43C;
|
|
182
|
+
--ds-green: #2D6B4A;
|
|
183
|
+
}
|
|
184
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
185
|
+
* { border-radius: 0 !important; }
|
|
186
|
+
body {
|
|
187
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
188
|
+
background: var(--ds-bg);
|
|
189
|
+
color: var(--ds-cream);
|
|
190
|
+
line-height: 1.6;
|
|
191
|
+
-webkit-font-smoothing: antialiased;
|
|
192
|
+
min-height: 100vh;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* ── Header ── */
|
|
196
|
+
.header {
|
|
197
|
+
background: var(--ds-surface);
|
|
198
|
+
border-bottom: 3px solid var(--ds-yellow);
|
|
199
|
+
padding: 24px 32px;
|
|
200
|
+
display: flex;
|
|
201
|
+
align-items: center;
|
|
202
|
+
justify-content: space-between;
|
|
203
|
+
flex-wrap: wrap;
|
|
204
|
+
gap: 16px;
|
|
205
|
+
}
|
|
206
|
+
.header-left { display: flex; align-items: baseline; gap: 16px; }
|
|
207
|
+
.project-name {
|
|
208
|
+
font-family: 'Bebas Neue', sans-serif;
|
|
209
|
+
font-size: 2rem;
|
|
210
|
+
letter-spacing: 0.04em;
|
|
211
|
+
color: var(--ds-cream);
|
|
212
|
+
}
|
|
213
|
+
.stage-badge {
|
|
214
|
+
font-family: 'JetBrains Mono', monospace;
|
|
215
|
+
font-size: 0.75rem;
|
|
216
|
+
text-transform: uppercase;
|
|
217
|
+
letter-spacing: 0.1em;
|
|
218
|
+
color: var(--ds-yellow);
|
|
219
|
+
border: 1px solid var(--ds-yellow);
|
|
220
|
+
padding: 4px 12px;
|
|
221
|
+
}
|
|
222
|
+
.header-stats {
|
|
223
|
+
display: flex;
|
|
224
|
+
gap: 24px;
|
|
225
|
+
font-family: 'JetBrains Mono', monospace;
|
|
226
|
+
font-size: 0.8rem;
|
|
227
|
+
color: var(--ds-muted);
|
|
228
|
+
}
|
|
229
|
+
.stat-value { color: var(--ds-cream); font-weight: 600; }
|
|
230
|
+
.brand-mark {
|
|
231
|
+
font-family: 'Bebas Neue', sans-serif;
|
|
232
|
+
font-size: 0.7rem;
|
|
233
|
+
letter-spacing: 0.15em;
|
|
234
|
+
color: var(--ds-muted);
|
|
235
|
+
opacity: 0.5;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* ── Layout ── */
|
|
239
|
+
.main { display: grid; grid-template-columns: 1fr 340px; gap: 0; min-height: calc(100vh - 80px); }
|
|
240
|
+
@media (max-width: 900px) { .main { grid-template-columns: 1fr; } }
|
|
241
|
+
|
|
242
|
+
/* ── Sections Grid ── */
|
|
243
|
+
.sections-panel { padding: 24px; }
|
|
244
|
+
.panel-title {
|
|
245
|
+
font-family: 'Bebas Neue', sans-serif;
|
|
246
|
+
font-size: 1.1rem;
|
|
247
|
+
letter-spacing: 0.1em;
|
|
248
|
+
color: var(--ds-muted);
|
|
249
|
+
margin-bottom: 16px;
|
|
250
|
+
text-transform: uppercase;
|
|
251
|
+
}
|
|
252
|
+
.sections-grid {
|
|
253
|
+
display: grid;
|
|
254
|
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
255
|
+
gap: 12px;
|
|
256
|
+
}
|
|
257
|
+
.section-card {
|
|
258
|
+
background: var(--ds-surface);
|
|
259
|
+
padding: 16px;
|
|
260
|
+
transition: background 150ms ease;
|
|
261
|
+
cursor: default;
|
|
262
|
+
}
|
|
263
|
+
.section-card:hover { background: var(--ds-elevated); }
|
|
264
|
+
.section-header {
|
|
265
|
+
display: flex;
|
|
266
|
+
justify-content: space-between;
|
|
267
|
+
align-items: center;
|
|
268
|
+
margin-bottom: 8px;
|
|
269
|
+
}
|
|
270
|
+
.section-name {
|
|
271
|
+
font-weight: 600;
|
|
272
|
+
font-size: 0.9rem;
|
|
273
|
+
}
|
|
274
|
+
.section-count {
|
|
275
|
+
font-family: 'Bebas Neue', sans-serif;
|
|
276
|
+
font-size: 1.5rem;
|
|
277
|
+
}
|
|
278
|
+
.section-bar-track {
|
|
279
|
+
height: 3px;
|
|
280
|
+
background: var(--ds-border);
|
|
281
|
+
margin-bottom: 10px;
|
|
282
|
+
}
|
|
283
|
+
.section-bar-fill {
|
|
284
|
+
height: 100%;
|
|
285
|
+
transition: width 600ms ease;
|
|
286
|
+
}
|
|
287
|
+
.artifact-list { margin-top: 6px; }
|
|
288
|
+
.artifact-item {
|
|
289
|
+
display: flex;
|
|
290
|
+
align-items: center;
|
|
291
|
+
gap: 8px;
|
|
292
|
+
padding: 4px 0;
|
|
293
|
+
font-size: 0.8rem;
|
|
294
|
+
color: var(--ds-text);
|
|
295
|
+
}
|
|
296
|
+
.artifact-dot {
|
|
297
|
+
width: 6px;
|
|
298
|
+
height: 6px;
|
|
299
|
+
flex-shrink: 0;
|
|
300
|
+
}
|
|
301
|
+
.artifact-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
302
|
+
.artifact-date {
|
|
303
|
+
font-family: 'JetBrains Mono', monospace;
|
|
304
|
+
font-size: 0.7rem;
|
|
305
|
+
color: var(--ds-muted);
|
|
306
|
+
}
|
|
307
|
+
.empty-label {
|
|
308
|
+
font-size: 0.8rem;
|
|
309
|
+
color: var(--ds-muted);
|
|
310
|
+
font-style: normal;
|
|
311
|
+
opacity: 0.6;
|
|
312
|
+
margin-top: 4px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* ── Sidebar ── */
|
|
316
|
+
.sidebar {
|
|
317
|
+
background: var(--ds-surface);
|
|
318
|
+
border-left: 3px solid var(--ds-border);
|
|
319
|
+
padding: 24px;
|
|
320
|
+
display: flex;
|
|
321
|
+
flex-direction: column;
|
|
322
|
+
gap: 24px;
|
|
323
|
+
}
|
|
324
|
+
.signal-section { }
|
|
325
|
+
.signal-item {
|
|
326
|
+
display: flex;
|
|
327
|
+
align-items: flex-start;
|
|
328
|
+
gap: 8px;
|
|
329
|
+
padding: 8px 0;
|
|
330
|
+
font-size: 0.8rem;
|
|
331
|
+
color: var(--ds-text);
|
|
332
|
+
border-bottom: 1px solid var(--ds-border);
|
|
333
|
+
}
|
|
334
|
+
.signal-item:last-child { border-bottom: none; }
|
|
335
|
+
.signal-dot {
|
|
336
|
+
width: 8px;
|
|
337
|
+
height: 8px;
|
|
338
|
+
margin-top: 5px;
|
|
339
|
+
flex-shrink: 0;
|
|
340
|
+
}
|
|
341
|
+
.signal-gap .signal-dot { opacity: 0.4; }
|
|
342
|
+
|
|
343
|
+
.recent-item {
|
|
344
|
+
display: flex;
|
|
345
|
+
align-items: center;
|
|
346
|
+
gap: 8px;
|
|
347
|
+
padding: 6px 0;
|
|
348
|
+
font-size: 0.8rem;
|
|
349
|
+
border-bottom: 1px solid var(--ds-border);
|
|
350
|
+
}
|
|
351
|
+
.recent-item:last-child { border-bottom: none; }
|
|
352
|
+
.recent-dot { width: 6px; height: 6px; flex-shrink: 0; }
|
|
353
|
+
.recent-title { flex: 1; color: var(--ds-cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
354
|
+
.recent-section {
|
|
355
|
+
font-family: 'JetBrains Mono', monospace;
|
|
356
|
+
font-size: 0.65rem;
|
|
357
|
+
color: var(--ds-muted);
|
|
358
|
+
text-transform: uppercase;
|
|
359
|
+
letter-spacing: 0.05em;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* ── Suggestions ── */
|
|
363
|
+
.suggestions { margin-top: auto; }
|
|
364
|
+
.suggest-item {
|
|
365
|
+
display: block;
|
|
366
|
+
background: var(--ds-elevated);
|
|
367
|
+
border-left: 3px solid var(--ds-yellow);
|
|
368
|
+
padding: 12px;
|
|
369
|
+
margin-bottom: 8px;
|
|
370
|
+
text-decoration: none;
|
|
371
|
+
color: var(--ds-cream);
|
|
372
|
+
font-size: 0.8rem;
|
|
373
|
+
transition: background 150ms ease;
|
|
374
|
+
cursor: pointer;
|
|
375
|
+
}
|
|
376
|
+
.suggest-item:hover { background: #2D2D2D; }
|
|
377
|
+
.suggest-label {
|
|
378
|
+
font-size: 0.65rem;
|
|
379
|
+
font-family: 'JetBrains Mono', monospace;
|
|
380
|
+
color: var(--ds-yellow);
|
|
381
|
+
text-transform: uppercase;
|
|
382
|
+
letter-spacing: 0.08em;
|
|
383
|
+
margin-bottom: 4px;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/* ── Footer ── */
|
|
387
|
+
.footer {
|
|
388
|
+
grid-column: 1 / -1;
|
|
389
|
+
text-align: center;
|
|
390
|
+
padding: 12px;
|
|
391
|
+
font-size: 0.65rem;
|
|
392
|
+
font-family: 'JetBrains Mono', monospace;
|
|
393
|
+
color: var(--ds-muted);
|
|
394
|
+
opacity: 0.4;
|
|
395
|
+
border-top: 1px solid var(--ds-border);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/* ── Auto-refresh pulse ── */
|
|
399
|
+
@keyframes pulse { 0%,100% { opacity: 0.4; } 50% { opacity: 1; } }
|
|
400
|
+
.live-dot {
|
|
401
|
+
display: inline-block;
|
|
402
|
+
width: 6px;
|
|
403
|
+
height: 6px;
|
|
404
|
+
background: var(--ds-green);
|
|
405
|
+
margin-right: 6px;
|
|
406
|
+
animation: pulse 2s ease infinite;
|
|
407
|
+
}
|
|
408
|
+
</style>
|
|
409
|
+
</head>
|
|
410
|
+
<body>
|
|
411
|
+
|
|
412
|
+
<div class="header">
|
|
413
|
+
<div class="header-left">
|
|
414
|
+
<div class="project-name">${data.name}</div>
|
|
415
|
+
<div class="stage-badge">${data.stage}</div>
|
|
416
|
+
</div>
|
|
417
|
+
<div class="header-stats">
|
|
418
|
+
<div><span class="stat-value">${data.totalEntries}</span> entries</div>
|
|
419
|
+
<div><span class="stat-value">${activeSections}/${totalSections}</span> sections</div>
|
|
420
|
+
<div><span class="stat-value">${data.meetings}</span> meetings</div>
|
|
421
|
+
</div>
|
|
422
|
+
<div class="brand-mark">MINDRANOS</div>
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
<div class="main">
|
|
426
|
+
<div class="sections-panel">
|
|
427
|
+
<div class="panel-title">Your Project</div>
|
|
428
|
+
<div class="sections-grid">
|
|
429
|
+
${sectionsHTML}
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
|
|
433
|
+
<div class="sidebar">
|
|
434
|
+
${data.intelligence.gaps.length > 0 ? `
|
|
435
|
+
<div class="signal-section">
|
|
436
|
+
<div class="panel-title">Gaps to Fill</div>
|
|
437
|
+
${gapsHTML}
|
|
438
|
+
</div>` : ''}
|
|
439
|
+
|
|
440
|
+
${data.recentArtifacts.length > 0 ? `
|
|
441
|
+
<div class="signal-section">
|
|
442
|
+
<div class="panel-title"><span class="live-dot"></span>Recent Work</div>
|
|
443
|
+
${recentHTML}
|
|
444
|
+
</div>` : ''}
|
|
445
|
+
|
|
446
|
+
<div class="suggestions">
|
|
447
|
+
<div class="panel-title">Suggested Next</div>
|
|
448
|
+
${data.intelligence.gaps.length > 0 ? `
|
|
449
|
+
<div class="suggest-item">
|
|
450
|
+
<div class="suggest-label">Biggest Gap</div>
|
|
451
|
+
Fill ${data.intelligence.gaps[0].section} -- ${data.intelligence.gaps[0].message}
|
|
452
|
+
</div>` : ''}
|
|
453
|
+
<div class="suggest-item">
|
|
454
|
+
<div class="suggest-label">Quick Win</div>
|
|
455
|
+
Grade your ${data.totalEntries} entries to see where you stand
|
|
456
|
+
</div>
|
|
457
|
+
${data.meetings === 0 ? `
|
|
458
|
+
<div class="suggest-item">
|
|
459
|
+
<div class="suggest-label">Missing</div>
|
|
460
|
+
No meetings filed yet -- file a transcript to unlock team intelligence
|
|
461
|
+
</div>` : ''}
|
|
462
|
+
</div>
|
|
463
|
+
</div>
|
|
464
|
+
|
|
465
|
+
<div class="footer">
|
|
466
|
+
MindrianOS Quick View -- generated ${data.generatedAt.slice(0, 16).replace('T', ' ')} -- <span class="live-dot"></span>Auto-refreshes every 10s
|
|
467
|
+
</div>
|
|
468
|
+
</div>
|
|
469
|
+
|
|
470
|
+
<script>
|
|
471
|
+
// Auto-refresh: full page reload when room data changes
|
|
472
|
+
(function() {
|
|
473
|
+
var lastJson = '';
|
|
474
|
+
setInterval(async function() {
|
|
475
|
+
try {
|
|
476
|
+
var res = await fetch('/api/state');
|
|
477
|
+
if (res.ok) {
|
|
478
|
+
var text = await res.text();
|
|
479
|
+
if (lastJson && text !== lastJson) {
|
|
480
|
+
window.location.reload();
|
|
481
|
+
}
|
|
482
|
+
lastJson = text;
|
|
483
|
+
}
|
|
484
|
+
} catch (e) { /* server may have stopped */ }
|
|
485
|
+
}, 10000);
|
|
486
|
+
})();
|
|
487
|
+
</script>
|
|
488
|
+
|
|
489
|
+
</body>
|
|
490
|
+
</html>`;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// ── HTTP Server (zero dependencies) ──
|
|
494
|
+
|
|
495
|
+
function startServer(roomDir, port) {
|
|
496
|
+
const server = http.createServer((req, res) => {
|
|
497
|
+
if (req.url === '/api/state') {
|
|
498
|
+
res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
|
|
499
|
+
res.end(JSON.stringify(collectRoomData(roomDir)));
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// Serve dashboard HTML for everything else
|
|
504
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
505
|
+
res.end(buildDashboardHTML(collectRoomData(roomDir)));
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
server.listen(port, () => {
|
|
509
|
+
const url = `http://localhost:${port}`;
|
|
510
|
+
process.stderr.write(`MindrianOS Quick View: ${url}\n`);
|
|
511
|
+
|
|
512
|
+
// Auto-open browser
|
|
513
|
+
const { platform } = process;
|
|
514
|
+
const cmd = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
|
|
515
|
+
try { execSync(`${cmd} ${url}`, { stdio: 'ignore' }); } catch (e) { /* no browser */ }
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
return server;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// ── CLI Entry ──
|
|
522
|
+
|
|
523
|
+
if (require.main === module) {
|
|
524
|
+
const roomDir = process.argv[2] || path.join(process.cwd(), 'room');
|
|
525
|
+
const port = parseInt(process.argv[3] || '8450', 10);
|
|
526
|
+
if (!fs.existsSync(roomDir)) {
|
|
527
|
+
process.stderr.write(`Room not found: ${roomDir}\n`);
|
|
528
|
+
process.exit(1);
|
|
529
|
+
}
|
|
530
|
+
startServer(roomDir, port);
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
module.exports = { startServer, collectRoomData, buildDashboardHTML };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# JTBD-PALETTES.md -- JTBD-aware Renderer Palette Documentation
|
|
2
|
+
|
|
3
|
+
> Phase 102 -- Context-aware rendering. The canonical source for JTBD -> palette mappings consumed by lib/render/render-v2.cjs (CLI surface) and downstream HTML-emitting phases (Phase 19 wiki-dashboard, Phase 25 export, Phase 30 presentation-generator).
|
|
4
|
+
>
|
|
5
|
+
> Owned by lib/render/render-v2.cjs (Phase 102-05 implementation). Read at module load by tests and downstream consumers, never mutated by user-data-bearing payloads. LOCAL-only per Canon Part 8.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Purpose
|
|
10
|
+
|
|
11
|
+
Phase 102 ships TWO palettes for the same set of JTBDs because the CLI surface and the HTML/dashboard surface have different semantic contracts. The CLI uses the 5-color contract from skills/ui-system/SKILL.md §4 (Green / Cyan / Yellow / Red / Gray) where color carries semantic meaning at the terminal (red = error, etc.). HTML / wiki / presentation / Cytoscape surfaces use Mondrian primaries (red / yellow / blue / black / white) for visual identity discipline -- rectilinear grids, primary blocks, large white space.
|
|
12
|
+
|
|
13
|
+
The dual-palette rule (Phase 102 D-06b) is: pick the palette by SURFACE, not by JTBD. The same JTBD renders red on CLI and could render blue on HTML -- and that is correct.
|
|
14
|
+
|
|
15
|
+
This file is canonical for both palettes. Phase 102-05 ships the CLI mapping wired into render-v2.cjs; the Mondrian mapping is documented for downstream HTML-emitting phases to honor.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. CLI Semantic Palette (5-color contract)
|
|
20
|
+
|
|
21
|
+
Implementation: \`lib/render/render-v2.cjs\` -- \`JTBD_CLI_COLOR\` map. Applied as a single colored ■ glyph at the start of Zone 1 header (D-07). TTY-gated via \`process.stdout.isTTY\` so non-TTY captures (CI logs, JSON-mode emission) stay byte-clean and equal the strip-ANSI of the colored render (RENDER-102-05 invariant).
|
|
22
|
+
|
|
23
|
+
| JTBD handle | CLI color | Meaning anchor |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| \`decide-pursue\` | red | high-stakes commit decision |
|
|
26
|
+
| \`find-problem\` | yellow | questioning / ambiguity |
|
|
27
|
+
| \`understand-market\` | cyan | informational |
|
|
28
|
+
| \`find-bottleneck\` | red | blocker / urgent |
|
|
29
|
+
| \`prepare-pitch\` | green | forward action / success-flavored |
|
|
30
|
+
| \`validate-idea\` | yellow | challenge / scrutiny |
|
|
31
|
+
| \`compare-options\` | cyan | informational table |
|
|
32
|
+
| \`connect-domains\` | cyan | cross-reference |
|
|
33
|
+
| \`surface-contradiction\` | red | conflict |
|
|
34
|
+
| \`plan-execution\` | green | commitment |
|
|
35
|
+
| \`file-meeting\` | cyan | capture |
|
|
36
|
+
| \`audit-room\` | yellow | warning-flavored |
|
|
37
|
+
| \`explore\` | gray | no specific action |
|
|
38
|
+
|
|
39
|
+
Color -> ANSI SGR mapping (\`lib/render/render-v2.cjs\` \`ANSI\` constant):
|
|
40
|
+
|
|
41
|
+
| Token | ANSI sequence | Semantic role (SKILL.md §4) |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| red | \\x1b[31m | Errors only |
|
|
44
|
+
| yellow | \\x1b[33m | Warnings, caution |
|
|
45
|
+
| cyan | \\x1b[36m | Commands, paths, links |
|
|
46
|
+
| green | \\x1b[32m | Success, active, complete |
|
|
47
|
+
| gray | \\x1b[90m | Meta info, timestamps, hints |
|
|
48
|
+
| reset | \\x1b[0m | Reset to default |
|
|
49
|
+
|
|
50
|
+
Compact mode (D-08) drops the overlay entirely -- Zone 1 left-rail accent is omitted when the token budget exceeds 80%. The accent is a "luxury" feature; semantic body colors stay.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 3. Mondrian Dual Palette (HTML / dashboard / presentation)
|
|
55
|
+
|
|
56
|
+
Used by HTML-emitting downstream phases ONLY (Phase 19 wiki-dashboard, Phase 25 data-room-export-v2, Phase 30 presentation-generator). Phase 102 renderer does NOT emit HTML -- this section is documentation, not active code.
|
|
57
|
+
|
|
58
|
+
Per Phase 102 D-06b, Mondrian primaries (red, yellow, blue, black, white) map by JTBD as follows:
|
|
59
|
+
|
|
60
|
+
| JTBD handle | Mondrian color |
|
|
61
|
+
|---|---|
|
|
62
|
+
| \`decide-pursue\` | red |
|
|
63
|
+
| \`find-problem\` | yellow |
|
|
64
|
+
| \`understand-market\` | blue |
|
|
65
|
+
| \`find-bottleneck\` | red |
|
|
66
|
+
| \`prepare-pitch\` | black (commitment / structural) |
|
|
67
|
+
| \`validate-idea\` | yellow |
|
|
68
|
+
| \`compare-options\` | blue |
|
|
69
|
+
| \`connect-domains\` | blue |
|
|
70
|
+
| \`surface-contradiction\` | red |
|
|
71
|
+
| \`plan-execution\` | black |
|
|
72
|
+
| \`file-meeting\` | blue |
|
|
73
|
+
| \`audit-room\` | yellow |
|
|
74
|
+
| \`explore\` | white (no specific action; the canvas) |
|
|
75
|
+
|
|
76
|
+
Mondrian shapes vocabulary (HTML surfaces only): square (■), circle (●), triangle (▲ ▼ ▶ ◀). The 12-glyph CLI vocabulary stays unchanged -- circle (●) is NOT in the CLI allowlist; HTML surfaces gain it.
|
|
77
|
+
|
|
78
|
+
The dual-palette rule prevents palette drift across surfaces and protects the De Stijl visual identity discipline downstream.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 4. Surface Routing Rule
|
|
83
|
+
|
|
84
|
+
| Surface | Palette | Why |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| CLI / TUI (every /mos:* output) | 5-color semantic (red / yellow / cyan / green / gray) | Color carries semantic meaning at the terminal; user reads "red = error" muscle-memory (SKILL.md §4) |
|
|
87
|
+
| HTML dashboard / wiki / presentation / Cytoscape graph | Mondrian primaries (red / yellow / blue / black / white) | Visual identity discipline; rectilinear grid; primary blocks; large white space |
|
|
88
|
+
|
|
89
|
+
Renderers MUST pick by SURFACE. A CLI /mos:audit-room output uses yellow. The HTML wiki page for the same room uses yellow as well -- coincidentally the same here, but the mapping rules are independent. compare-options is cyan on CLI but blue on HTML; this is intentional.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 5. Forward References (downstream consumers)
|
|
94
|
+
|
|
95
|
+
| Phase | Status | Consumes |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| Phase 19 wiki-dashboard | planned | Mondrian palette for JTBD-tagged page headers + sidebar accents |
|
|
98
|
+
| Phase 25 data-room-export-v2 | planned | Mondrian palette for HTML / PDF export theming |
|
|
99
|
+
| Phase 30 presentation-generator | planned | Mondrian palette for slide chrome + JTBD-anchored section colors |
|
|
100
|
+
| Phase 91 navigation-engine | planned | CLI palette via render-v2 (read-through; no direct dependency on this file) |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 6. Pending SKILL.md Amendment (Phase 106 follow-on)
|
|
105
|
+
|
|
106
|
+
Phase 102 ships the CLI palette wired (D-06) and the Mondrian palette documented (D-06b). The formal skills/ui-system/SKILL.md amendment that encodes the dual-palette rule into the rendering style spec is queued as a Phase 106 follow-on. Phase 106 is a small subsequent phase, NOT in v1.12.3 scope.
|
|
107
|
+
|
|
108
|
+
When Phase 106 lands, skills/ui-system/SKILL.md §4 will gain a sub-section titled "Cross-surface palette rule" referencing this file as the canonical source.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 7. Resolution Algorithm (parser contract)
|
|
113
|
+
|
|
114
|
+
render-v2.cjs reads JTBD_CLI_COLOR directly as a frozen object literal -- no Markdown parsing required. The mapping is duplicated here for human-readable documentation and downstream consumer reference.
|
|
115
|
+
|
|
116
|
+
If the JTBD argument is null OR not in the map OR compact mode is active OR process.stdout.isTTY is false, the renderer applies NO accent. The header zone passes through unchanged.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 8. Invariants (regression fences for Plan 102-05)
|
|
121
|
+
|
|
122
|
+
1. **13 entries.** Both CLI and Mondrian tables MUST have exactly 13 rows (the canonical Phase 100 JTBD set). Adding a 14th JTBD requires Phase 100 vocabulary expansion + this file update + a HMI-102-XX requirement amendment.
|
|
123
|
+
2. **Closed CLI palette.** CLI palette tokens MUST be from {red, yellow, cyan, green, gray}. No auxiliary colors.
|
|
124
|
+
3. **Closed Mondrian palette.** Mondrian palette tokens MUST be from {red, yellow, blue, black, white}. No auxiliary colors.
|
|
125
|
+
4. **TTY gate.** The renderer MUST gate ANSI emission on process.stdout.isTTY. Non-TTY captures MUST be byte-identical to the strip-ANSI of TTY captures.
|
|
126
|
+
5. **Compact override.** Compact mode (token budget > 80%) MUST drop the Zone 1 color accent. Body semantic colors stay.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Canon Refs
|
|
131
|
+
|
|
132
|
+
- **Part 3 (Tri-Context Decision Gate)** -- color overlay is part of the cognitive surface the navigator reads at every Decision Gate.
|
|
133
|
+
- **Part 7 (Reuse Before Build)** -- this file ships data-as-asset; no new module surface added.
|
|
134
|
+
- **Part 8 (The Graph Boundary)** -- the renderer reads this file LOCAL-only at module load; no Brain queries derive palette. JTBD handle at render time is a generic enum scalar (Canon-allowed framework handle), never a user-data string.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## See Also
|
|
139
|
+
|
|
140
|
+
- lib/render/render-v2.cjs -- consumer; Plan 102-05 implementation.
|
|
141
|
+
- tests/test-render-v2-color-overlay.cjs -- RENDER-102-05 regression fence.
|
|
142
|
+
- skills/ui-system/SKILL.md §4 -- the 5-color CLI contract (red / yellow / cyan / green / gray).
|
|
143
|
+
- docs/MINDRIAN-CANON.md Part 3 -- closed verb vocabulary (10 verbs); sets context for why JTBD-aware rendering matters.
|
|
144
|
+
- .planning/phases/102-context-aware-rendering/102-CONTEXT.md -- D-06 (CLI palette) + D-06b (Mondrian dual palette) decision records.
|
|
145
|
+
- .planning/phases/100-jtbd-inference-engine/ -- upstream JTBD handle producer.
|