@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,290 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
6
|
+
*
|
|
7
|
+
* Phase 88.1-07 -- frontmatter schema validator acceptance tests.
|
|
8
|
+
*
|
|
9
|
+
* Verifies the pure validate(filePath, frontmatter) contract for the
|
|
10
|
+
* per-section frontmatter schema module at lib/core/frontmatter-schemas.cjs.
|
|
11
|
+
* The validator is consumed by the PostToolUse hook at
|
|
12
|
+
* scripts/frontmatter-schema-validator.cjs, which handles fs I/O, stdin
|
|
13
|
+
* envelope parsing, and the .room-root scope walk.
|
|
14
|
+
*
|
|
15
|
+
* Canon references:
|
|
16
|
+
* Part 5 Evidence Graded By Context -- schemas formalize the claim-level
|
|
17
|
+
* evidence tier properties so Part 5 enforcement has something to
|
|
18
|
+
* measure against.
|
|
19
|
+
* Part 6 Product-as-Venture -- dog-fooding: the plugin validates its own
|
|
20
|
+
* artifact frontmatter through its own mechanism.
|
|
21
|
+
* Part 8 Graph Boundary -- validator runs LOCAL only; pure function has
|
|
22
|
+
* zero network and zero fs, so no schema-violation payload can leave
|
|
23
|
+
* the workspace from this module.
|
|
24
|
+
*
|
|
25
|
+
* Test map (10 cases, one-to-one with the PLAN <behavior> block):
|
|
26
|
+
* 1. Valid artifact (artifact-default) with all required fields
|
|
27
|
+
* -> valid:true, violations:[], severity 'info' or null
|
|
28
|
+
* 2. Artifact missing `title`
|
|
29
|
+
* -> valid:false, violations contains {field:'title', type:'missing'}
|
|
30
|
+
* 3. Artifact missing ALL required fields
|
|
31
|
+
* -> severity 'critical'
|
|
32
|
+
* 4. Malformed YAML (frontmatter === null)
|
|
33
|
+
* -> valid:false, severity 'critical'
|
|
34
|
+
* 5. ROOM.md without `name`
|
|
35
|
+
* -> violation present
|
|
36
|
+
* 6. STATE.md without `artifact_count`
|
|
37
|
+
* -> violation present
|
|
38
|
+
* 7. MINTO.md delegation: validate() detects MINTO.md and delegates to
|
|
39
|
+
* feynman-minto-invariants.cjs; returns proxy result shape
|
|
40
|
+
* 8. Unknown/custom frontmatter field
|
|
41
|
+
* -> warning (not error) in violations
|
|
42
|
+
* 9. Pure function: zero fs imports in the validator (grep assertion
|
|
43
|
+
* + no fs usage during validate())
|
|
44
|
+
* 10. Empty frontmatter block (parsed to {}) -> critical (required
|
|
45
|
+
* fields missing)
|
|
46
|
+
*
|
|
47
|
+
* Registered in lib/memory/run-feynman-tests.cjs.
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
const assert = require('node:assert/strict');
|
|
51
|
+
const fs = require('node:fs');
|
|
52
|
+
const os = require('node:os');
|
|
53
|
+
const path = require('node:path');
|
|
54
|
+
|
|
55
|
+
const REPO = path.resolve(__dirname, '..', '..');
|
|
56
|
+
const SCHEMAS_PATH = path.join(REPO, 'lib/core/frontmatter-schemas.cjs');
|
|
57
|
+
const INVARIANTS_PATH = path.join(REPO, 'lib/core/feynman-minto-invariants.cjs');
|
|
58
|
+
|
|
59
|
+
// ---------- Tmp root cleanup ----------
|
|
60
|
+
|
|
61
|
+
const TMP_ROOTS = [];
|
|
62
|
+
function mkTmp(prefix) {
|
|
63
|
+
const d = fs.mkdtempSync(path.join(os.tmpdir(), prefix));
|
|
64
|
+
TMP_ROOTS.push(d);
|
|
65
|
+
return d;
|
|
66
|
+
}
|
|
67
|
+
process.on('exit', function () {
|
|
68
|
+
for (const d of TMP_ROOTS) {
|
|
69
|
+
try { fs.rmSync(d, { recursive: true, force: true }); } catch (_e) { /* ok */ }
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// ---------- Module under test ----------
|
|
74
|
+
|
|
75
|
+
// Defensive clear so repeated invocations in test harnesses reload fresh.
|
|
76
|
+
try { delete require.cache[require.resolve(SCHEMAS_PATH)]; } catch (_) {}
|
|
77
|
+
const schemas = require(SCHEMAS_PATH);
|
|
78
|
+
|
|
79
|
+
assert.equal(typeof schemas.validate, 'function',
|
|
80
|
+
'module must export validate()');
|
|
81
|
+
assert.ok(schemas.SCHEMAS && typeof schemas.SCHEMAS === 'object',
|
|
82
|
+
'module must export SCHEMAS object');
|
|
83
|
+
|
|
84
|
+
// ---------- Test 1: valid artifact with all required fields ----------
|
|
85
|
+
|
|
86
|
+
(function test1_valid_artifact() {
|
|
87
|
+
const fm = {
|
|
88
|
+
title: 'Whitespace in CAR-T trial design',
|
|
89
|
+
source: 'meeting/2026-04-12-clinical-team',
|
|
90
|
+
status: 'active',
|
|
91
|
+
};
|
|
92
|
+
const result = schemas.validate('room/problem-definition/artifact-01.md', fm);
|
|
93
|
+
assert.equal(result.valid, true, 'Test 1: valid artifact should be valid');
|
|
94
|
+
assert.deepEqual(result.violations, [], 'Test 1: no violations expected');
|
|
95
|
+
// Severity is 'info' or null for a clean pass; either is acceptable.
|
|
96
|
+
assert.ok(result.severity === 'info' || result.severity === null,
|
|
97
|
+
'Test 1: severity should be info or null, got ' + String(result.severity));
|
|
98
|
+
process.stdout.write('PASS Test 1: valid artifact with required fields\n');
|
|
99
|
+
})();
|
|
100
|
+
|
|
101
|
+
// ---------- Test 2: artifact missing title ----------
|
|
102
|
+
|
|
103
|
+
(function test2_missing_title() {
|
|
104
|
+
const fm = {
|
|
105
|
+
source: 'meeting/2026-04-12-clinical-team',
|
|
106
|
+
status: 'active',
|
|
107
|
+
};
|
|
108
|
+
const result = schemas.validate('room/problem-definition/artifact-02.md', fm);
|
|
109
|
+
assert.equal(result.valid, false, 'Test 2: missing title should be invalid');
|
|
110
|
+
const titleViol = result.violations.find(function (v) {
|
|
111
|
+
return v.field === 'title' && v.type === 'missing';
|
|
112
|
+
});
|
|
113
|
+
assert.ok(titleViol, 'Test 2: violation for missing title must exist');
|
|
114
|
+
assert.equal(titleViol.severity, 'error',
|
|
115
|
+
'Test 2: missing required field is error severity');
|
|
116
|
+
process.stdout.write('PASS Test 2: artifact missing title\n');
|
|
117
|
+
})();
|
|
118
|
+
|
|
119
|
+
// ---------- Test 3: artifact missing ALL required fields -> critical ----------
|
|
120
|
+
|
|
121
|
+
(function test3_missing_all_required() {
|
|
122
|
+
const fm = {}; // no title, no source, no status
|
|
123
|
+
const result = schemas.validate('room/market/artifact.md', fm);
|
|
124
|
+
assert.equal(result.valid, false, 'Test 3: empty fm is invalid');
|
|
125
|
+
assert.equal(result.severity, 'critical',
|
|
126
|
+
'Test 3: all required missing -> critical aggregate severity, got ' +
|
|
127
|
+
String(result.severity));
|
|
128
|
+
// All three required fields should appear as missing violations.
|
|
129
|
+
const missingFields = result.violations
|
|
130
|
+
.filter(function (v) { return v.type === 'missing'; })
|
|
131
|
+
.map(function (v) { return v.field; });
|
|
132
|
+
for (const req of ['title', 'source', 'status']) {
|
|
133
|
+
assert.ok(missingFields.indexOf(req) !== -1,
|
|
134
|
+
'Test 3: missing ' + req + ' must be reported');
|
|
135
|
+
}
|
|
136
|
+
process.stdout.write('PASS Test 3: all required missing -> critical\n');
|
|
137
|
+
})();
|
|
138
|
+
|
|
139
|
+
// ---------- Test 4: malformed YAML (fm === null) ----------
|
|
140
|
+
|
|
141
|
+
(function test4_malformed_yaml() {
|
|
142
|
+
// Convention: the hook signals a YAML parse failure by passing fm === null
|
|
143
|
+
// (gray-matter yields {} on empty / null on throw, but schema-wise we
|
|
144
|
+
// treat null as the parser-failure signal to avoid ambiguity with test 10).
|
|
145
|
+
const result = schemas.validate('room/anywhere/artifact.md', null);
|
|
146
|
+
assert.equal(result.valid, false, 'Test 4: malformed YAML is invalid');
|
|
147
|
+
assert.equal(result.severity, 'critical',
|
|
148
|
+
'Test 4: parse failure -> critical severity');
|
|
149
|
+
const parseViol = result.violations.find(function (v) {
|
|
150
|
+
return v.type === 'malformed';
|
|
151
|
+
});
|
|
152
|
+
assert.ok(parseViol, 'Test 4: a malformed-type violation must be recorded');
|
|
153
|
+
process.stdout.write('PASS Test 4: malformed YAML (null fm) -> critical\n');
|
|
154
|
+
})();
|
|
155
|
+
|
|
156
|
+
// ---------- Test 5: ROOM.md without name -> violation ----------
|
|
157
|
+
|
|
158
|
+
(function test5_room_md_missing_name() {
|
|
159
|
+
const fm = { type: 'section' }; // no name
|
|
160
|
+
const result = schemas.validate('room/problem-definition/ROOM.md', fm);
|
|
161
|
+
assert.equal(result.valid, false, 'Test 5: ROOM.md missing name is invalid');
|
|
162
|
+
const nameViol = result.violations.find(function (v) {
|
|
163
|
+
return v.field === 'name' && v.type === 'missing';
|
|
164
|
+
});
|
|
165
|
+
assert.ok(nameViol, 'Test 5: missing name violation must exist for ROOM.md');
|
|
166
|
+
process.stdout.write('PASS Test 5: ROOM.md missing name\n');
|
|
167
|
+
})();
|
|
168
|
+
|
|
169
|
+
// ---------- Test 6: STATE.md without artifact_count -> violation ----------
|
|
170
|
+
|
|
171
|
+
(function test6_state_md_missing_artifact_count() {
|
|
172
|
+
const fm = { completeness_score: 0.5 }; // no artifact_count
|
|
173
|
+
const result = schemas.validate('room/problem-definition/STATE.md', fm);
|
|
174
|
+
assert.equal(result.valid, false, 'Test 6: STATE.md missing artifact_count is invalid');
|
|
175
|
+
const countViol = result.violations.find(function (v) {
|
|
176
|
+
return v.field === 'artifact_count' && v.type === 'missing';
|
|
177
|
+
});
|
|
178
|
+
assert.ok(countViol, 'Test 6: missing artifact_count violation must exist');
|
|
179
|
+
process.stdout.write('PASS Test 6: STATE.md missing artifact_count\n');
|
|
180
|
+
})();
|
|
181
|
+
|
|
182
|
+
// ---------- Test 7: MINTO.md delegates to feynman-minto-invariants.cjs ----------
|
|
183
|
+
|
|
184
|
+
(function test7_minto_delegation() {
|
|
185
|
+
// Prove the validator detects MINTO.md and proxies. We confirm two things:
|
|
186
|
+
// (a) the schemas module source references feynman-minto-invariants
|
|
187
|
+
// (static wiring proof)
|
|
188
|
+
// (b) calling validate() with a MINTO.md filename on a real fixture
|
|
189
|
+
// produces an invariants-shaped result.
|
|
190
|
+
const src = fs.readFileSync(SCHEMAS_PATH, 'utf8');
|
|
191
|
+
assert.ok(/require\([^\)]*feynman-minto-invariants/.test(src),
|
|
192
|
+
'Test 7a: schemas module must require feynman-minto-invariants');
|
|
193
|
+
|
|
194
|
+
// Build a fixture MINTO.md on disk so the delegated invariants validator
|
|
195
|
+
// has something to read. It performs fs I/O by design (Phase 88-00-B
|
|
196
|
+
// contract); the pure schema validate() delegates to it for MINTO paths.
|
|
197
|
+
const tmp = mkTmp('fm-schema-minto-');
|
|
198
|
+
const mintoPath = path.join(tmp, 'MINTO.md');
|
|
199
|
+
const contents =
|
|
200
|
+
'---\n' +
|
|
201
|
+
'schema_version: "88-00"\n' +
|
|
202
|
+
'governing_thought: "CAR-T manufacturing cost is the reverse salient"\n' +
|
|
203
|
+
'last_generated_at: "2026-04-23T00:00:00Z"\n' +
|
|
204
|
+
'---\n' +
|
|
205
|
+
'narrative body within budget.\n';
|
|
206
|
+
fs.writeFileSync(mintoPath, contents, 'utf8');
|
|
207
|
+
|
|
208
|
+
const fm = {
|
|
209
|
+
schema_version: '88-00',
|
|
210
|
+
governing_thought: 'CAR-T manufacturing cost is the reverse salient',
|
|
211
|
+
};
|
|
212
|
+
const result = schemas.validate(mintoPath, fm);
|
|
213
|
+
|
|
214
|
+
// The delegation result must expose the invariants validator shape:
|
|
215
|
+
// { valid, violations, severity }. We do not assert severity value --
|
|
216
|
+
// invariants validator may return info/warning depending on timestamps.
|
|
217
|
+
assert.ok('valid' in result, 'Test 7b: delegated result has valid');
|
|
218
|
+
assert.ok(Array.isArray(result.violations),
|
|
219
|
+
'Test 7b: delegated result has violations array');
|
|
220
|
+
assert.ok('severity' in result,
|
|
221
|
+
'Test 7b: delegated result has severity key');
|
|
222
|
+
process.stdout.write('PASS Test 7: MINTO.md delegation to invariants\n');
|
|
223
|
+
})();
|
|
224
|
+
|
|
225
|
+
// ---------- Test 8: unknown frontmatter field -> warning (not error) ----------
|
|
226
|
+
|
|
227
|
+
(function test8_unknown_field_warning() {
|
|
228
|
+
const fm = {
|
|
229
|
+
title: 'Whitespace entry',
|
|
230
|
+
source: 'manual',
|
|
231
|
+
status: 'active',
|
|
232
|
+
made_up_field: 'garbage',
|
|
233
|
+
another_unknown: 42,
|
|
234
|
+
};
|
|
235
|
+
const result = schemas.validate('room/problem-definition/artifact-08.md', fm);
|
|
236
|
+
// Unknown fields alone should not make the artifact "invalid" (required
|
|
237
|
+
// fields present), but they should surface as WARNING severity.
|
|
238
|
+
const unknownViols = result.violations.filter(function (v) {
|
|
239
|
+
return v.type === 'unknown';
|
|
240
|
+
});
|
|
241
|
+
assert.ok(unknownViols.length >= 2,
|
|
242
|
+
'Test 8: at least 2 unknown violations expected, got ' + unknownViols.length);
|
|
243
|
+
for (const v of unknownViols) {
|
|
244
|
+
assert.equal(v.severity, 'warning',
|
|
245
|
+
'Test 8: unknown fields carry warning severity, got ' + v.severity);
|
|
246
|
+
}
|
|
247
|
+
// Aggregate severity should not be higher than warning (no errors).
|
|
248
|
+
assert.ok(result.severity === 'warning' || result.severity === 'info',
|
|
249
|
+
'Test 8: aggregate severity must be warning or info, got ' + String(result.severity));
|
|
250
|
+
process.stdout.write('PASS Test 8: unknown fields -> warning\n');
|
|
251
|
+
})();
|
|
252
|
+
|
|
253
|
+
// ---------- Test 9: pure function -- zero fs imports ----------
|
|
254
|
+
|
|
255
|
+
(function test9_pure_function() {
|
|
256
|
+
const src = fs.readFileSync(SCHEMAS_PATH, 'utf8');
|
|
257
|
+
// The schemas module itself MUST NOT require fs directly. It may
|
|
258
|
+
// re-export an fs-using invariants module for MINTO delegation, but
|
|
259
|
+
// the schema core is pure. Grep the top-level require statements.
|
|
260
|
+
//
|
|
261
|
+
// We look for `require('fs')` or `require('node:fs')` at import position.
|
|
262
|
+
const fsRequireRe = /require\(\s*['"](?:node:)?fs['"]\s*\)/;
|
|
263
|
+
assert.ok(!fsRequireRe.test(src),
|
|
264
|
+
'Test 9: lib/core/frontmatter-schemas.cjs must not require fs');
|
|
265
|
+
|
|
266
|
+
// BSL 1.1 header required within first 20 lines (Part 6 dog-food).
|
|
267
|
+
const firstLines = src.split(/\r?\n/).slice(0, 20).join('\n');
|
|
268
|
+
assert.ok(/BSL\s*1\.1/.test(firstLines),
|
|
269
|
+
'Test 9: BSL 1.1 header required in first 20 lines');
|
|
270
|
+
|
|
271
|
+
// No em-dashes or en-dashes anywhere (hard project rule).
|
|
272
|
+
const DASH_RE = /[\u2013\u2014]/;
|
|
273
|
+
assert.ok(!DASH_RE.test(src),
|
|
274
|
+
'Test 9: schemas module must not contain em-dashes or en-dashes');
|
|
275
|
+
process.stdout.write('PASS Test 9: pure function, no fs, BSL header, no dashes\n');
|
|
276
|
+
})();
|
|
277
|
+
|
|
278
|
+
// ---------- Test 10: empty frontmatter block {} -> critical ----------
|
|
279
|
+
|
|
280
|
+
(function test10_empty_frontmatter() {
|
|
281
|
+
// An empty parsed frontmatter block (e.g. `---\n\n---`) yields {}.
|
|
282
|
+
// All required fields are missing, so aggregate severity is critical.
|
|
283
|
+
const result = schemas.validate('room/problem-definition/empty.md', {});
|
|
284
|
+
assert.equal(result.valid, false, 'Test 10: empty {} frontmatter is invalid');
|
|
285
|
+
assert.equal(result.severity, 'critical',
|
|
286
|
+
'Test 10: empty {} -> critical severity, got ' + String(result.severity));
|
|
287
|
+
process.stdout.write('PASS Test 10: empty {} -> critical\n');
|
|
288
|
+
})();
|
|
289
|
+
|
|
290
|
+
process.stdout.write('\nfrontmatter-schema-validator tests: 10/10 passed\n');
|