@mindrian_os/cli 2.0.0-beta.29 → 2.0.0-beta.31
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 +14 -0
- package/CHANGELOG.md +41 -0
- package/agents/analogy-query-fetcher.md +119 -0
- package/agents/brain-query.md +91 -0
- package/agents/competitor-watch-fetcher.md +94 -0
- package/agents/framework-runner.md +258 -0
- package/agents/grading.md +216 -0
- package/agents/grant-reviewer.md +191 -0
- package/agents/investor.md +141 -0
- package/agents/larry-extended.md +215 -0
- package/agents/meeting-perspective-extractor.md +94 -0
- package/agents/opportunity-scanner.md +105 -0
- package/agents/persona-analyst.md +201 -0
- package/agents/research.md +103 -0
- package/agents/reverse-salient-agent.md +42 -0
- package/agents/vault-section-reviewer.md +107 -0
- package/assets/banner-showcase.html +537 -0
- package/assets/fonts/BebasNeue-Regular.ttf +0 -0
- package/assets/fonts/Inter-Bold.ttf +0 -0
- package/assets/fonts/Inter-Regular.ttf +0 -0
- package/assets/logo.svg +10 -0
- package/bin/local-chain-recommender.cjs +256 -0
- package/bin/mindrian-brain-mcp-client.cjs +319 -0
- package/bin/mindrian-mcp-server.cjs +445 -0
- package/bin/mindrian-mcp-shim.cjs +100 -0
- package/bin/mindrian-tools.cjs +784 -0
- package/commands/act.md +529 -0
- package/commands/admin.md +439 -0
- package/commands/agentshield.md +49 -0
- package/commands/analyze-needs.md +78 -0
- package/commands/analyze-systems.md +73 -0
- package/commands/analyze-timing.md +98 -0
- package/commands/auto-explore.md +85 -0
- package/commands/beautiful-question.md +76 -0
- package/commands/bono.md +152 -0
- package/commands/brain-derive.md +137 -0
- package/commands/build-knowledge.md +121 -0
- package/commands/build-thesis.md +94 -0
- package/commands/causal.md +269 -0
- package/commands/challenge-assumptions.md +78 -0
- package/commands/compare-ventures.md +117 -0
- package/commands/correct-reference-now.md +88 -0
- package/commands/dashboard.md +144 -0
- package/commands/deck.md +117 -0
- package/commands/deep-grade.md +214 -0
- package/commands/diagnose.md +131 -0
- package/commands/diagnostics.md +195 -0
- package/commands/dial-memory-refresh.md +113 -0
- package/commands/diffusion.md +129 -0
- package/commands/discover.md +221 -0
- package/commands/doctor.md +271 -0
- package/commands/dogfood-flush.md +130 -0
- package/commands/dominant-designs.md +76 -0
- package/commands/eureka.md +315 -0
- package/commands/explain-decision.md +135 -0
- package/commands/explore-domains.md +78 -0
- package/commands/explore-futures.md +67 -0
- package/commands/explore-opportunity.md +172 -0
- package/commands/explore-trends.md +78 -0
- package/commands/export.md +128 -0
- package/commands/feynman-timeline-refresh.md +102 -0
- package/commands/file-meeting.md +1195 -0
- package/commands/find-analogies.md +369 -0
- package/commands/find-bottlenecks.md +108 -0
- package/commands/find-connections.md +111 -0
- package/commands/funding.md +114 -0
- package/commands/futures.md +128 -0
- package/commands/grade-grant.md +297 -0
- package/commands/grade.md +257 -0
- package/commands/graph.md +218 -0
- package/commands/hat-briefing.md +163 -0
- package/commands/heal.md +72 -0
- package/commands/help.md +176 -0
- package/commands/hmi-status.md +75 -0
- package/commands/ignite.md +229 -0
- package/commands/ingest-methodology.md +128 -0
- package/commands/intel-pipeline.md +133 -0
- package/commands/jtbd.md +262 -0
- package/commands/leadership.md +113 -0
- package/commands/lean-canvas.md +74 -0
- package/commands/macro-trends.md +88 -0
- package/commands/map-unknowns.md +76 -0
- package/commands/memory-cortex-reach.md +79 -0
- package/commands/memory.md +213 -0
- package/commands/models.md +200 -0
- package/commands/mos-reason.md +489 -0
- package/commands/mos.md +162 -0
- package/commands/mullins.md +155 -0
- package/commands/mva-brief.md +86 -0
- package/commands/mva-option.md +119 -0
- package/commands/mva-report.md +76 -0
- package/commands/new-project.md +633 -0
- package/commands/new-surface.md +116 -0
- package/commands/onboard.md +489 -0
- package/commands/operator.md +168 -0
- package/commands/opportunities.md +177 -0
- package/commands/organize.md +74 -0
- package/commands/persona.md +276 -0
- package/commands/pipeline.md +167 -0
- package/commands/present.md +125 -0
- package/commands/publish.md +227 -0
- package/commands/pws-brain.md +154 -0
- package/commands/qualify-opportunity.md +113 -0
- package/commands/query.md +70 -0
- package/commands/radar.md +110 -0
- package/commands/reanalyze.md +124 -0
- package/commands/research.md +467 -0
- package/commands/room.md +385 -0
- package/commands/rooms.md +682 -0
- package/commands/root-cause.md +77 -0
- package/commands/rs-experts.md +153 -0
- package/commands/rs-explain.md +134 -0
- package/commands/rs-fetch.md +119 -0
- package/commands/rs-thesis.md +131 -0
- package/commands/scenario-plan.md +80 -0
- package/commands/scheduled-tasks.md +308 -0
- package/commands/score-innovation.md +78 -0
- package/commands/scout.md +379 -0
- package/commands/setup.md +658 -0
- package/commands/show.md +71 -0
- package/commands/skill.md +108 -0
- package/commands/snapshot.md +179 -0
- package/commands/speakers.md +118 -0
- package/commands/splash.md +55 -0
- package/commands/stance.md +91 -0
- package/commands/status.md +109 -0
- package/commands/structure-argument.md +82 -0
- package/commands/suggest-next.md +141 -0
- package/commands/systems-thinking.md +224 -0
- package/commands/think-hats.md +86 -0
- package/commands/trending-to-absurd.md +151 -0
- package/commands/update.md +256 -0
- package/commands/user-needs.md +77 -0
- package/commands/validate.md +77 -0
- package/commands/value-proposition.md +116 -0
- package/commands/vault.md +330 -0
- package/commands/visualize.md +71 -0
- package/commands/whitespace.md +541 -0
- package/commands/wiki.md +96 -0
- package/data/ROOM.md +47 -0
- package/data/brain-census.generated.json +2617 -0
- package/data/brain-orchestration-projection.json +4973 -0
- package/data/brain-packet-schema.json +545 -0
- package/data/brain-surface-contract.json +32 -0
- package/data/capability-ledger.json +391 -0
- package/data/capability-map-registry.json +23 -0
- package/data/command-registry.json +2433 -0
- package/data/connector-coverage-ledger.json +1618 -0
- package/data/connector-out-of-spine-allowlist.json +71 -0
- package/data/connector-registry.json +3637 -0
- package/data/corpus-stats-source.json +11 -0
- package/data/corpus-stats.generated.json +10 -0
- package/data/cross-domain-analogues.json +15 -0
- package/data/deck-aliases.json +6 -0
- package/data/deck-styles.json +85 -0
- package/data/deployment-surfaces.json +69 -0
- package/data/dispatch-framework-map.json +18 -0
- package/data/doctor-modules.json +206 -0
- package/data/dual-graph-health-baseline.json +12 -0
- package/data/eureka-critic-tags.json +32 -0
- package/data/first-reward-surfaces.json +66 -0
- package/data/first-touch-surfaces.json +60 -0
- package/data/flagship-floor-set.json +37 -0
- package/data/framework-names.json +121 -0
- package/data/grant-rubric-fixtures/early-stage-pre-seed.json +18 -0
- package/data/grant-rubric-fixtures/early-stage-round-a.json +18 -0
- package/data/grant-rubric-fixtures/early-stage-seed.json +18 -0
- package/data/grant-rubric-fixtures/hybrid-seed-incentive.json +18 -0
- package/data/grant-rubric-fixtures/rd-fund.json +18 -0
- package/data/grant-rubric-fixtures/regional-innovation-incubators.json +18 -0
- package/data/grant-rubric-fixtures/technology-incubators.json +18 -0
- package/data/grant-rubric-fixtures/tnufa.json +167 -0
- package/data/grant-rubric-schema.json +33 -0
- package/data/harness-fixtures/converged-room/.context/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/.intelligence/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/.snapshots/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/MINTO.md +19 -0
- package/data/harness-fixtures/converged-room/STATE.md +73 -0
- package/data/harness-fixtures/converged-room/USER.md +23 -0
- package/data/harness-fixtures/converged-room/assets/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/business-model/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/business-model/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/competitive-analysis/CONTEXT.md +33 -0
- package/data/harness-fixtures/converged-room/competitive-analysis/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/financial-model/CONTEXT.md +30 -0
- package/data/harness-fixtures/converged-room/financial-model/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/funding/CONTEXT.md +41 -0
- package/data/harness-fixtures/converged-room/funding/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/legal-ip/CONTEXT.md +30 -0
- package/data/harness-fixtures/converged-room/legal-ip/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/market-analysis/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/market-analysis/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/opportunity-bank/CONTEXT.md +39 -0
- package/data/harness-fixtures/converged-room/opportunity-bank/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/problem-definition/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/problem-definition/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/references/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/references/SECTION-SCHEMA.md +213 -0
- package/data/harness-fixtures/converged-room/references/SUB-SCHEMAS.md +91 -0
- package/data/harness-fixtures/converged-room/solution-design/CONTEXT.md +36 -0
- package/data/harness-fixtures/converged-room/solution-design/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/strategy/CONTEXT.md +35 -0
- package/data/harness-fixtures/converged-room/strategy/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/team/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/team-execution/CONTEXT.md +36 -0
- package/data/harness-fixtures/converged-room/team-execution/ROOM.md +35 -0
- package/data/harness-manifest.json +74 -0
- package/data/harness-policies/CONTEXT.md +55 -0
- package/data/harness-policies/_schema.json +42 -0
- package/data/harness-policies/contract-parity-larry.json +63 -0
- package/data/harness-policies/gate-card-fire.json +13 -0
- package/data/harness-policies/gate-graph-derive-health.json +13 -0
- package/data/harness-policies/gate-shape-declaration.json +13 -0
- package/data/harness-policies/gate-tool-honesty.json +13 -0
- package/data/harness-policies/gate-worktree-hygiene.json +13 -0
- package/data/harness-policies/memory-write-policy.json +28 -0
- package/data/harness-policies/registry-drift.json +13 -0
- package/data/harness-policies/release-payload-ceiling.json +13 -0
- package/data/harness-policies/voice-backend-noun-free.json +13 -0
- package/data/harness-policies/voice-fork-as-card.json +13 -0
- package/data/harness-policies/voice-glyph-present.json +13 -0
- package/data/harness-policies/voice-hyphens-only.json +13 -0
- package/data/help-groups.json +236 -0
- package/data/hitl-shape-backfill.json +777 -0
- package/data/hitl-shape-declaration-fixtures/invalid-bad-shape.json +5 -0
- package/data/hitl-shape-declaration-fixtures/invalid-missing-why.json +4 -0
- package/data/hitl-shape-declaration-fixtures/invalid-ranker-contradiction.json +6 -0
- package/data/hitl-shape-declaration-fixtures/invalid-skill-gap.json +3 -0
- package/data/hitl-shape-declaration-fixtures/valid-multi-stage.json +7 -0
- package/data/hitl-shape-declaration-fixtures/valid-single-shape.json +5 -0
- package/data/hitl-shape-declaration-fixtures/valid-skill-exempt.json +5 -0
- package/data/hitl-shape-declaration-schema.json +34 -0
- package/data/hitl-stages-fixtures/bono.json +10 -0
- package/data/hitl-stages-fixtures/pipeline-1.json +9 -0
- package/data/hitl-stages-fixtures/pipeline-2.json +9 -0
- package/data/hitl-stages-fixtures/pipeline-3.json +10 -0
- package/data/hitl-stages-fixtures/research.json +10 -0
- package/data/hitl-stages-fixtures/rs-convergence.json +10 -0
- package/data/hitl-stages-fixtures/rs-family.json +11 -0
- package/data/hitl-stages-fixtures/rs-reverse-salient.json +10 -0
- package/data/hitl-stages-fixtures/trending-to-absurd.json +11 -0
- package/data/hitl-stages-schema.json +26 -0
- package/data/mcp-tool-connectors.json +464 -0
- package/data/mva-agent-prompts.json +31 -0
- package/data/mva-deck-template.html +15 -0
- package/data/mva-heuristic-keywords.json +35 -0
- package/data/orchestration-command-ledger.json +576 -0
- package/data/orchestration-unwired-allowlist.json +6 -0
- package/data/portfolio-ahp-matrix.json +16 -0
- package/data/publish-needs.json +76 -0
- package/data/render-coverage-registry.json +1152 -0
- package/data/research-sources.json +58 -0
- package/data/roadmap-type-chains.json +28 -0
- package/data/room-blueprints.json +156 -0
- package/data/subagent-dispatch-grants.json +150 -0
- package/hooks/hooks.json +493 -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 +1163 -0
- package/lib/agents/mva/brain-classic-traps.cjs +55 -0
- package/lib/agents/mva/brain-cross-domain.cjs +79 -0
- package/lib/agents/mva/brain-similar-ventures.cjs +93 -0
- package/lib/agents/mva/dashboard-graph-neighborhood.cjs +72 -0
- package/lib/agents/mva/index.cjs +42 -0
- package/lib/agents/mva/six-hats-red-black.cjs +137 -0
- package/lib/agents/mva/tavily-funding-scan.cjs +147 -0
- package/lib/agents/mva/test-all-six-agents.cjs +467 -0
- package/lib/agents/reverse-salient-agent.cjs +757 -0
- package/lib/agents/tension-hook-agent.cjs +586 -0
- package/lib/brain/ROOM.md +44 -0
- package/lib/brain/chain-recommender.cjs +784 -0
- package/lib/brain/curation-batch.cjs +519 -0
- package/lib/brain/framework-chain-slice.cjs +252 -0
- package/lib/brain/hypergraph-event-schema.cjs +184 -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-epistemic-cap.test.cjs +156 -0
- package/lib/conversation/operator.cjs +492 -0
- package/lib/conversation/operator.test.cjs +160 -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_corpus_exclude.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/abstraction-gate.cjs +133 -0
- package/lib/core/act-jtbd-blurb.cjs +231 -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/behavioral/observation-schema.cjs +86 -0
- package/lib/core/bono/cell-fanout.cjs +305 -0
- package/lib/core/bono/debate-composition.cjs +495 -0
- package/lib/core/bono/hat-governance.cjs +367 -0
- package/lib/core/bono/persona-research.cjs +288 -0
- package/lib/core/bono/reviewer-governance.cjs +331 -0
- package/lib/core/brain-client.cjs +2365 -0
- package/lib/core/brain-derivation-prompts.cjs +331 -0
- package/lib/core/brain-derivation-queue.cjs +535 -0
- package/lib/core/brain-derivation.cjs +740 -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 +396 -0
- package/lib/core/breakthrough/canary.cjs +134 -0
- package/lib/core/breakthrough/canary.test.cjs +136 -0
- package/lib/core/breakthrough/detectors.cjs +359 -0
- package/lib/core/breakthrough/detectors.test.cjs +333 -0
- package/lib/core/breakthrough/ethics-fence.cjs +129 -0
- package/lib/core/breakthrough/ethics-fence.test.cjs +178 -0
- package/lib/core/breakthrough/resurfacing.cjs +150 -0
- package/lib/core/breakthrough/resurfacing.test.cjs +233 -0
- package/lib/core/breakthrough/review-queue.cjs +168 -0
- package/lib/core/breakthrough/review-queue.test.cjs +160 -0
- package/lib/core/breakthrough/scanner-d17-d18.test.cjs +229 -0
- package/lib/core/breakthrough/scanner.cjs +435 -0
- package/lib/core/breakthrough/scanner.test.cjs +267 -0
- package/lib/core/breakthrough/schema.cjs +180 -0
- package/lib/core/breakthrough/schema.test.cjs +256 -0
- package/lib/core/breakthrough/scoring.cjs +293 -0
- package/lib/core/breakthrough/scoring.test.cjs +423 -0
- package/lib/core/breakthrough/verb-dispatch.cjs +230 -0
- package/lib/core/breakthrough/verb-dispatch.test.cjs +185 -0
- package/lib/core/breakthrough/voice-scaffold.cjs +249 -0
- package/lib/core/breakthrough/voice-scaffold.test.cjs +251 -0
- package/lib/core/bridge-writer.cjs +477 -0
- package/lib/core/cache-prune.cjs +314 -0
- package/lib/core/card-fire-gate.cjs +107 -0
- package/lib/core/card-fire-sidechannel.cjs +518 -0
- package/lib/core/chain-executor.cjs +939 -0
- package/lib/core/chain-retry.cjs +214 -0
- package/lib/core/chain-step-dispatcher.cjs +397 -0
- package/lib/core/chat-context-builder.cjs +253 -0
- package/lib/core/check-plugin-enabled.cjs +145 -0
- package/lib/core/close-loop-writer.cjs +492 -0
- package/lib/core/command-registration-check.cjs +246 -0
- package/lib/core/correlation-label-index.cjs +230 -0
- package/lib/core/correlation.cjs +112 -0
- package/lib/core/coverage-monitor.cjs +183 -0
- package/lib/core/coverage-rollup.cjs +232 -0
- package/lib/core/cross-room-aggregator.cjs +1127 -0
- package/lib/core/cross-room-store.cjs +292 -0
- package/lib/core/cross-room-triggers.cjs +222 -0
- package/lib/core/daily-briefing.cjs +438 -0
- package/lib/core/decision-axes.cjs +178 -0
- package/lib/core/decision-capture.cjs +618 -0
- package/lib/core/deck-design-rules.cjs +211 -0
- package/lib/core/deep-links.cjs +82 -0
- package/lib/core/directive-envelope.cjs +217 -0
- package/lib/core/directive-envelope.test.cjs +225 -0
- package/lib/core/dispatch-optimizer.cjs +354 -0
- package/lib/core/doc-text-extractor.cjs +133 -0
- package/lib/core/doctor/capability-ledger-module.cjs +170 -0
- package/lib/core/doctor/card-fire-health-module.cjs +159 -0
- package/lib/core/doctor/cascade-rooms-active-module.cjs +127 -0
- package/lib/core/doctor/cascade-rooms-module.cjs +184 -0
- package/lib/core/doctor/class-m-brain-smoke.cjs +479 -0
- package/lib/core/doctor/class-m-brain-smoke.test.cjs +448 -0
- package/lib/core/doctor/class-s-eureka-smoke.cjs +380 -0
- package/lib/core/doctor/deployment-surfaces-module.cjs +408 -0
- package/lib/core/doctor/deprecated-usage-module.cjs +155 -0
- package/lib/core/doctor/eureka-fts-health-module.cjs +236 -0
- package/lib/core/doctor/graph-derive-heal-retrofit-module.cjs +148 -0
- package/lib/core/doctor/graph-derive-health-module.cjs +486 -0
- package/lib/core/doctor/install-incomplete-module.cjs +320 -0
- package/lib/core/doctor/install-state-module.cjs +503 -0
- package/lib/core/doctor/mcp-surface-module.cjs +369 -0
- package/lib/core/doctor/mode-select-checkpoint-module.cjs +113 -0
- package/lib/core/doctor/plugin-enabled-state-module.cjs +86 -0
- package/lib/core/doctor/room-graph-density-module.cjs +181 -0
- package/lib/core/doctor/room-md-module.cjs +198 -0
- package/lib/core/doctor/shared.cjs +555 -0
- package/lib/core/doctor/stale-first-touch-copy-module.cjs +83 -0
- package/lib/core/doctor/statusline-visibility-module.cjs +295 -0
- package/lib/core/doctor/ui-compliance-module.cjs +223 -0
- package/lib/core/doctor/umbilical-module.cjs +486 -0
- package/lib/core/doctor/verify-surface-module.cjs +82 -0
- package/lib/core/doctor/voice-style-log-module.cjs +146 -0
- package/lib/core/domain-insight-sweep.cjs +224 -0
- package/lib/core/drift-baseline.cjs +362 -0
- package/lib/core/drift-runtime-reachability.cjs +283 -0
- package/lib/core/dual-path-detector.cjs +84 -0
- package/lib/core/dual-path-detector.test.cjs +334 -0
- package/lib/core/enrichment-queue.cjs +636 -0
- package/lib/core/eureka/ahp-weights.cjs +232 -0
- package/lib/core/eureka/analogy-fitness.cjs +326 -0
- package/lib/core/eureka/compression-meter.cjs +165 -0
- package/lib/core/eureka/embedding-classifier.cjs +226 -0
- package/lib/core/eureka/embedding-spine.cjs +563 -0
- package/lib/core/eureka/entity-classifier.cjs +232 -0
- package/lib/core/eureka/entity-extractor.cjs +356 -0
- package/lib/core/eureka/eureka-enable.cjs +228 -0
- package/lib/core/eureka/eureka-offer.cjs +225 -0
- package/lib/core/eureka/eureka-reach-runner.cjs +430 -0
- package/lib/core/eureka/explore-chain.cjs +834 -0
- package/lib/core/eureka/explored-artifact.cjs +456 -0
- package/lib/core/eureka/fts-index-lifecycle.cjs +265 -0
- package/lib/core/eureka/grade-grant-examine.cjs +544 -0
- package/lib/core/eureka/grade-grant.cjs +596 -0
- package/lib/core/eureka/hybrid-retrieve.cjs +256 -0
- package/lib/core/eureka/lateral-engine-adapter.cjs +118 -0
- package/lib/core/eureka/lexical-overlap.cjs +98 -0
- package/lib/core/eureka/online-pattern-query.cjs +142 -0
- package/lib/core/eureka/opportunity-harvest.cjs +752 -0
- package/lib/core/eureka/opportunity-statement.cjs +519 -0
- package/lib/core/eureka/portfolio-dimensions.cjs +255 -0
- package/lib/core/eureka/qualify-opportunity.cjs +607 -0
- package/lib/core/eureka/reasoning-mode.cjs +481 -0
- package/lib/core/eureka/report-html.cjs +368 -0
- package/lib/core/eureka/research-filing.cjs +547 -0
- package/lib/core/eureka/room-native-substrate.cjs +343 -0
- package/lib/core/eureka/tail-quadrant.cjs +177 -0
- package/lib/core/eureka/tri-modal-index.cjs +564 -0
- package/lib/core/eureka/vector-store.cjs +414 -0
- package/lib/core/eureka-critic.cjs +733 -0
- package/lib/core/eureka-deps-resolver.cjs +179 -0
- package/lib/core/expert-genesis.cjs +437 -0
- package/lib/core/expert-library.cjs +303 -0
- package/lib/core/exports-log.cjs +79 -0
- package/lib/core/feynman/ROOM.md +25 -0
- package/lib/core/feynman/dial-memory-renderer.cjs +279 -0
- package/lib/core/feynman/dial-memory-runner.cjs +173 -0
- package/lib/core/feynman/feynman-seed-writer.cjs +187 -0
- package/lib/core/feynman/timeline-renderer.cjs +197 -0
- package/lib/core/feynman/timeline-runner.cjs +281 -0
- package/lib/core/feynman-minto-invariants.cjs +609 -0
- package/lib/core/findings-wirer.cjs +360 -0
- package/lib/core/first-touch-version-stamper.cjs +113 -0
- package/lib/core/folder-memory-async.cjs +424 -0
- package/lib/core/folder-memory-shared.cjs +890 -0
- package/lib/core/folder-memory.cjs +546 -0
- package/lib/core/framework-chain-composer.cjs +583 -0
- package/lib/core/frontmatter-schemas.cjs +468 -0
- package/lib/core/fusion-router.cjs +540 -0
- package/lib/core/futures/causal-cue.cjs +91 -0
- package/lib/core/futures/orchestrator.cjs +1391 -0
- package/lib/core/futures/subsystem-render.cjs +164 -0
- package/lib/core/gate-relevance.cjs +278 -0
- package/lib/core/git-ops.cjs +141 -0
- package/lib/core/graph-backfill.cjs +562 -0
- package/lib/core/graph-candidate-producer.cjs +235 -0
- package/lib/core/graph-derivation.cjs +546 -0
- package/lib/core/graph-derive-classifier.cjs +352 -0
- package/lib/core/graph-ops.cjs +274 -0
- package/lib/core/graph-refine-loop.cjs +194 -0
- package/lib/core/graph-self-heal.cjs +289 -0
- package/lib/core/greeting-intent-detector.cjs +201 -0
- package/lib/core/grill-engine.cjs +459 -0
- package/lib/core/hat-persistence.cjs +274 -0
- package/lib/core/hsi-engine.cjs +439 -0
- package/lib/core/hsi-lsa.cjs +246 -0
- package/lib/core/hsi-spectral.cjs +554 -0
- package/lib/core/hsi-to-graph.test.cjs +168 -0
- package/lib/core/icm-forest.cjs +703 -0
- package/lib/core/ignite-branch-gate.cjs +66 -0
- package/lib/core/index.cjs +60 -0
- package/lib/core/insight-sensors.cjs +1000 -0
- package/lib/core/install-state.cjs +242 -0
- package/lib/core/integration-registry.cjs +232 -0
- package/lib/core/intel-pipeline.cjs +545 -0
- package/lib/core/intelligence-cascade.cjs +852 -0
- package/lib/core/issue-tree.cjs +269 -0
- package/lib/core/larry-thinness-acknowledgment.cjs +64 -0
- package/lib/core/larry-thinness-acknowledgment.test.cjs +97 -0
- package/lib/core/lazygraph-ops.cjs +1453 -0
- package/lib/core/lens-engine.cjs +434 -0
- package/lib/core/leverage-scan.cjs +218 -0
- package/lib/core/llm-name-suggester.cjs +194 -0
- package/lib/core/llm-name-suggester.test.cjs +132 -0
- package/lib/core/lru-cache.cjs +139 -0
- package/lib/core/mcp-dep-heal.cjs +475 -0
- package/lib/core/mcp-dep-heal.test.cjs +253 -0
- package/lib/core/mcp-profiles.cjs +185 -0
- package/lib/core/meeting-ops.cjs +54 -0
- package/lib/core/memory/governance-candidate-raiser.cjs +205 -0
- package/lib/core/memory/governance-candidate.cjs +95 -0
- package/lib/core/memory/reconcile-memory-runner.cjs +653 -0
- package/lib/core/memory-ops.cjs +641 -0
- package/lib/core/meter/gate-density-reader.cjs +112 -0
- package/lib/core/meter/transfer-reader.cjs +276 -0
- package/lib/core/meter/two-gauge.cjs +245 -0
- package/lib/core/methodology-ingest.cjs +346 -0
- package/lib/core/metrics/larryreach-loop-health.cjs +142 -0
- package/lib/core/migration-snapshot.cjs +287 -0
- package/lib/core/migration-snapshot.test.cjs +174 -0
- package/lib/core/migrations/ROOM.md +33 -0
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +400 -0
- package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
- package/lib/core/migrations/phase-160-nodes-bitemporal.cjs +168 -0
- package/lib/core/migrations/phase-160-nodes-bitemporal.test.cjs +140 -0
- package/lib/core/migrations/phase-162-section-nodes.cjs +156 -0
- package/lib/core/migrations/phase-222-ranker-weights.cjs +62 -0
- package/lib/core/migrations/phase-224-edge-review-status.cjs +87 -0
- package/lib/core/mindrian-brain-shim.test.cjs +221 -0
- package/lib/core/mode-select-sidechannel.cjs +259 -0
- package/lib/core/model-profiles.cjs +246 -0
- package/lib/core/mullins-scaffold.cjs +258 -0
- package/lib/core/mullins-scaffold.test.cjs +128 -0
- package/lib/core/mva-agent-contract.cjs +170 -0
- package/lib/core/mva-agent-contract.test.cjs +169 -0
- package/lib/core/mva-budget.cjs +75 -0
- package/lib/core/mva-budget.test.cjs +68 -0
- package/lib/core/mva-classifier.cjs +392 -0
- package/lib/core/mva-classifier.test.cjs +248 -0
- package/lib/core/mva-deck-builder.cjs +452 -0
- package/lib/core/mva-deck-builder.test.cjs +287 -0
- package/lib/core/mva-detect.smoke.test.cjs +209 -0
- package/lib/core/mva-dispatcher.cjs +110 -0
- package/lib/core/mva-dispatcher.test.cjs +216 -0
- package/lib/core/mva-option-router.cjs +414 -0
- package/lib/core/mva-option-router.test.cjs +483 -0
- package/lib/core/mva-orchestrator.cjs +365 -0
- package/lib/core/mva-orchestrator.test.cjs +916 -0
- package/lib/core/mva-progressive-renderer.cjs +194 -0
- package/lib/core/mva-progressive-renderer.test.cjs +157 -0
- package/lib/core/mva-rule-linter.cjs +458 -0
- package/lib/core/mva-rule-linter.test.cjs +484 -0
- package/lib/core/mva-state.cjs +159 -0
- package/lib/core/mva-telemetry.cjs +58 -0
- package/lib/core/mva-telemetry.test.cjs +196 -0
- package/lib/core/mva-vercel-deploy.cjs +168 -0
- package/lib/core/mva-vercel-deploy.test.cjs +239 -0
- package/lib/core/nav-dial.cjs +440 -0
- package/lib/core/navigation/ROOM.md +15 -0
- package/lib/core/navigation/abstraction-claim.cjs +185 -0
- package/lib/core/navigation/calibration-gate.cjs +284 -0
- package/lib/core/navigation/calibration-log.cjs +141 -0
- package/lib/core/navigation/confirm-node.cjs +73 -0
- package/lib/core/navigation/dashboard-helpers.cjs +145 -0
- package/lib/core/navigation/edges.cjs +1150 -0
- package/lib/core/navigation/evidence-claim.cjs +186 -0
- package/lib/core/navigation/explanation.cjs +48 -0
- package/lib/core/navigation/file-evidence-readback.cjs +242 -0
- package/lib/core/navigation/focus.cjs +155 -0
- package/lib/core/navigation/get-domains-for-trends.cjs +277 -0
- package/lib/core/navigation/governance.cjs +101 -0
- package/lib/core/navigation/grant-rubric.cjs +218 -0
- package/lib/core/navigation/graph-export.cjs +325 -0
- package/lib/core/navigation/ingestion.cjs +109 -0
- package/lib/core/navigation/insights-stale.test.cjs +127 -0
- package/lib/core/navigation/insights.cjs +574 -0
- package/lib/core/navigation/lens-nodes.cjs +315 -0
- package/lib/core/navigation/memory-artifacts.cjs +437 -0
- package/lib/core/navigation/memory-cortex-packet.cjs +274 -0
- package/lib/core/navigation/memory-events.cjs +811 -0
- package/lib/core/navigation/neighborhood.cjs +79 -0
- package/lib/core/navigation/packet.cjs +420 -0
- package/lib/core/navigation/planning-artifacts.cjs +219 -0
- package/lib/core/navigation/projections.cjs +295 -0
- package/lib/core/navigation/ranker-weights.cjs +133 -0
- package/lib/core/navigation/reasoning-write.cjs +211 -0
- package/lib/core/navigation/reconcile-guard.cjs +98 -0
- package/lib/core/navigation/reified-claim.cjs +287 -0
- package/lib/core/navigation/research-preflight.cjs +156 -0
- package/lib/core/navigation/room-birth.cjs +1213 -0
- package/lib/core/navigation/room-context.cjs +380 -0
- package/lib/core/navigation/room-home.cjs +142 -0
- package/lib/core/navigation/spine-events.cjs +548 -0
- package/lib/core/navigation/synthetic-expert.cjs +177 -0
- package/lib/core/navigation/transitions.cjs +253 -0
- package/lib/core/navigation/typed-claim.cjs +208 -0
- package/lib/core/navigation/typed-domain.cjs +249 -0
- package/lib/core/navigation/typed-entity.cjs +236 -0
- package/lib/core/navigation/typed-frame.cjs +257 -0
- package/lib/core/navigation/typed-open-question.cjs +130 -0
- package/lib/core/navigation/typed-opportunity.cjs +418 -0
- package/lib/core/navigation-engine-offer.cjs +776 -0
- package/lib/core/navigation-engine-shared.cjs +256 -0
- package/lib/core/navigation-engine.cjs +1696 -0
- package/lib/core/navigation.cjs +686 -0
- package/lib/core/nl-graph-queries.cjs +164 -0
- package/lib/core/node-insert-epistemic.test.cjs +212 -0
- package/lib/core/node-insert-overrides.test.cjs +273 -0
- package/lib/core/node-insert.cjs +274 -0
- package/lib/core/npm-cli-resolve.cjs +151 -0
- package/lib/core/npm-cli-resolve.test.cjs +153 -0
- package/lib/core/npm-install-lock.cjs +326 -0
- package/lib/core/npm-install-lock.test.cjs +379 -0
- package/lib/core/numeric/sklearn-stopwords-v1.json +325 -0
- package/lib/core/numeric/svd.cjs +377 -0
- package/lib/core/numeric/tfidf.cjs +241 -0
- package/lib/core/offer-presenter.cjs +406 -0
- package/lib/core/opportunity-extractor.cjs +183 -0
- package/lib/core/opportunity-ops.cjs +1423 -0
- package/lib/core/orchestration-candidate-lift.cjs +284 -0
- package/lib/core/part8-egress-guard.cjs +536 -0
- package/lib/core/part8-egress-guard.test.cjs +194 -0
- package/lib/core/part8-egress-ontology.cjs +174 -0
- package/lib/core/part8-egress-ontology.test.cjs +133 -0
- package/lib/core/persona-ops.cjs +692 -0
- package/lib/core/persona-override.cjs +327 -0
- package/lib/core/persona-taxonomy.cjs +328 -0
- package/lib/core/pinecone-inference.cjs +176 -0
- package/lib/core/pitch-feedback-schemas.cjs +303 -0
- package/lib/core/planning/artifact-brain-packet.cjs +212 -0
- package/lib/core/planning/reconcile-runner.cjs +347 -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/publish-needs-default-lane.cjs +110 -0
- package/lib/core/ralph-loop-gate.cjs +48 -0
- package/lib/core/reader/ab-harness.cjs +177 -0
- package/lib/core/reader/decide-projection-reader.cjs +358 -0
- package/lib/core/reasoning-ops.cjs +639 -0
- package/lib/core/recipe-maps.cjs +442 -0
- package/lib/core/recovery/case-file.cjs +358 -0
- package/lib/core/recovery/controller.cjs +1008 -0
- package/lib/core/recovery/dispatcher.cjs +533 -0
- package/lib/core/recovery/result-semantics.cjs +488 -0
- package/lib/core/recovery/stage-envelope.cjs +338 -0
- package/lib/core/refusal-messaging.cjs +569 -0
- package/lib/core/refusal-messaging.test.cjs +220 -0
- package/lib/core/repo-version.cjs +134 -0
- package/lib/core/research-cache.cjs +165 -0
- package/lib/core/research-cache.test.cjs +137 -0
- package/lib/core/research-context-extractor.cjs +283 -0
- package/lib/core/research-corpus.cjs +814 -0
- package/lib/core/research-corpus.test.cjs +280 -0
- package/lib/core/research-filing-selector.cjs +189 -0
- package/lib/core/resolve-active-room.cjs +602 -0
- package/lib/core/resolve-brain-key.cjs +273 -0
- package/lib/core/resolve-umbilical-target.cjs +288 -0
- package/lib/core/resolve-vercel-key.cjs +107 -0
- package/lib/core/resolve-vercel-key.test.cjs +137 -0
- package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
- package/lib/core/room-auto-create.cjs +318 -0
- package/lib/core/room-auto-create.test.cjs +198 -0
- package/lib/core/room-chooser.cjs +244 -0
- package/lib/core/room-classifier-strict-mode.cjs +235 -0
- package/lib/core/room-db.cjs +348 -0
- package/lib/core/room-discard-cascade.cjs +238 -0
- package/lib/core/room-discard-cascade.test.cjs +135 -0
- package/lib/core/room-name-validator.cjs +132 -0
- package/lib/core/room-name-validator.test.cjs +156 -0
- package/lib/core/room-naming-selector.cjs +357 -0
- package/lib/core/room-naming-selector.test.cjs +277 -0
- package/lib/core/room-open.cjs +259 -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-receipt-emit.cjs +63 -0
- package/lib/core/room-root.cjs +93 -0
- package/lib/core/room-skeleton-scaffold.cjs +669 -0
- package/lib/core/room-skeleton-scaffold.test.cjs +296 -0
- package/lib/core/room-type-detector.cjs +386 -0
- package/lib/core/rs-backend-dispatch.cjs +64 -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 +381 -0
- package/lib/core/rs-commercial-assessor.cjs +280 -0
- package/lib/core/rs-corpus-quality-gate.cjs +62 -0
- package/lib/core/rs-differential-scorer.cjs +629 -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-engine.cjs +597 -0
- package/lib/core/rs-expert-brain-projection.cjs +280 -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-math.cjs +458 -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 +435 -0
- package/lib/core/rs-pinecone-bridge.cjs +344 -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 +495 -0
- package/lib/core/rs-thesis-generator.cjs +188 -0
- package/lib/core/rs_cache.py +635 -0
- package/lib/core/rs_corpus.py +562 -0
- package/lib/core/rs_corpus_exclude.py +62 -0
- package/lib/core/rs_hybrid.py +589 -0
- package/lib/core/rs_math.py +287 -0
- package/lib/core/rs_rooms.py +196 -0
- package/lib/core/salient-governance.cjs +315 -0
- package/lib/core/scheduled-scanner.cjs +658 -0
- package/lib/core/scratchpad-ops.cjs +316 -0
- package/lib/core/seam-liveness.cjs +191 -0
- package/lib/core/seam-liveness.test.cjs +177 -0
- package/lib/core/section-8-trace-schema.cjs +138 -0
- package/lib/core/section-registry.cjs +167 -0
- package/lib/core/security/agentshield-adapters.test.cjs +104 -0
- package/lib/core/security/agentshield-run.cjs +343 -0
- package/lib/core/security/agentshield-scanner.cjs +314 -0
- package/lib/core/security/agentshield-scanner.test.cjs +259 -0
- package/lib/core/sensors/hat-scoping-table.cjs +103 -0
- package/lib/core/sensors/sensor-circularity.cjs +278 -0
- package/lib/core/sensors/sensor-content-relevance.cjs +407 -0
- package/lib/core/sensors/sensor-diffusion-adoption.cjs +230 -0
- package/lib/core/sensors/sensor-eureka.cjs +208 -0
- package/lib/core/sensors/sensor-expert-skill.cjs +293 -0
- package/lib/core/sensors/sensor-external-fact.cjs +184 -0
- package/lib/core/sensors/sensor-gate-approach.cjs +104 -0
- package/lib/core/sensors/sensor-jtbd-reweight.cjs +141 -0
- package/lib/core/sensors/sensor-lagging-component.cjs +115 -0
- package/lib/core/sensors/sensor-memory-cortex.cjs +111 -0
- package/lib/core/sensors/sensor-methodology-decision.cjs +131 -0
- package/lib/core/sensors/sensor-opportunity-harvest.cjs +195 -0
- package/lib/core/sensors/sensor-perspective-lock.cjs +174 -0
- package/lib/core/sensors/sensor-priority.cjs +183 -0
- package/lib/core/sensors/sensor-recency.cjs +151 -0
- package/lib/core/sensors/sensor-roadmap-type.cjs +421 -0
- package/lib/core/sensors/sensor-room-pick.cjs +238 -0
- package/lib/core/sensors/sensor-show-share.cjs +215 -0
- package/lib/core/sensors/sensor-temporal-blindness.cjs +123 -0
- package/lib/core/sensors/sensor-types.cjs +294 -0
- package/lib/core/sensors/sensor-url-ingest.cjs +234 -0
- package/lib/core/session-binding.cjs +208 -0
- package/lib/core/session-presence.cjs +404 -0
- package/lib/core/session-register.cjs +138 -0
- package/lib/core/session-state.cjs +144 -0
- package/lib/core/shallow-doc-parser.cjs +353 -0
- package/lib/core/shallow-doc-parser.test.cjs +226 -0
- package/lib/core/skill-activation-router.cjs +284 -0
- package/lib/core/skillopt-schemas.cjs +509 -0
- package/lib/core/stale-copy-scanner.cjs +190 -0
- package/lib/core/stance-state.cjs +153 -0
- package/lib/core/state-aware-router.cjs +78 -0
- package/lib/core/state-ops.cjs +80 -0
- package/lib/core/state-version.cjs +350 -0
- package/lib/core/statusline-cache.cjs +266 -0
- package/lib/core/statusline-liveness-gate.cjs +105 -0
- package/lib/core/surface-fence.cjs +127 -0
- package/lib/core/synthesizers/comparison-matrix.cjs +82 -0
- package/lib/core/synthesizers/convergence-map.cjs +107 -0
- package/lib/core/synthesizers/domain-hierarchy.cjs +138 -0
- package/lib/core/synthesizers/source-comparison.cjs +56 -0
- package/lib/core/synthesizers/tension-map.cjs +119 -0
- package/lib/core/synthetic-expert-behavior-gate.cjs +99 -0
- package/lib/core/synthetic-expert-construction-gate.cjs +170 -0
- package/lib/core/telemetry/schema.cjs +168 -0
- package/lib/core/telemetry/schema.test.cjs +124 -0
- package/lib/core/telemetry/validator.cjs +200 -0
- package/lib/core/telemetry/validator.test.cjs +188 -0
- package/lib/core/telemetry/writer.cjs +141 -0
- package/lib/core/telemetry/writer.test.cjs +331 -0
- package/lib/core/temporal/date-sync-gate.cjs +256 -0
- package/lib/core/temporal/date-sync-gate.test.cjs +191 -0
- package/lib/core/temporal/dual-stamp.cjs +172 -0
- package/lib/core/temporal/dual-stamp.test.cjs +172 -0
- package/lib/core/temporal/point-in-time.cjs +76 -0
- package/lib/core/temporal/point-in-time.test.cjs +169 -0
- package/lib/core/temporal/recency-decay.cjs +119 -0
- package/lib/core/temporal/recency-decay.test.cjs +140 -0
- package/lib/core/temporal/reference-now.cjs +281 -0
- package/lib/core/temporal/reference-now.test.cjs +225 -0
- package/lib/core/temporal/resolve-relative-time.cjs +116 -0
- package/lib/core/temporal/resolve-relative-time.test.cjs +138 -0
- package/lib/core/temporal/supersession.cjs +250 -0
- package/lib/core/temporal/supersession.test.cjs +103 -0
- package/lib/core/terminal-capability.cjs +88 -0
- package/lib/core/token-estimator.cjs +348 -0
- package/lib/core/tone-filter.cjs +147 -0
- package/lib/core/trending-to-absurd/orchestrator.cjs +341 -0
- package/lib/core/trending-to-absurd/stage7-roadmap.cjs +317 -0
- package/lib/core/trending-to-absurd/variance.cjs +169 -0
- package/lib/core/unknowns/bandit.cjs +332 -0
- package/lib/core/unknowns/corpus-adapter.cjs +327 -0
- package/lib/core/unknowns/dsp.cjs +356 -0
- package/lib/core/unknowns/edge-writer.cjs +211 -0
- package/lib/core/unknowns/iface.cjs +212 -0
- package/lib/core/unknowns/orchestrator.cjs +375 -0
- package/lib/core/unknowns/pattern-miner.cjs +214 -0
- package/lib/core/unknowns/rumsfeld-matrix.cjs +155 -0
- package/lib/core/unknowns/verdict.cjs +254 -0
- package/lib/core/update-path.cjs +57 -0
- package/lib/core/url-ingest.cjs +568 -0
- package/lib/core/user-archetype.cjs +284 -0
- package/lib/core/user-md-ops.cjs +578 -0
- package/lib/core/venture-shape-nudge.cjs +178 -0
- package/lib/core/venture-shape-nudge.test.cjs +266 -0
- package/lib/core/verb-reach-affinity.cjs +299 -0
- package/lib/core/visual-ops.cjs +692 -0
- package/lib/core/voice-transition-detector.cjs +125 -0
- package/lib/core/watched-sources.cjs +237 -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 +669 -0
- package/lib/hmi/agentshield-drift-gate.cjs +142 -0
- package/lib/hmi/brain-review-packet.cjs +221 -0
- package/lib/hmi/cortex-reach-adapter.cjs +271 -0
- package/lib/hmi/cross-room-memory.cjs +618 -0
- package/lib/hmi/decoy-tier.cjs +395 -0
- package/lib/hmi/depth-state.cjs +164 -0
- package/lib/hmi/dial-label-composer.cjs +410 -0
- package/lib/hmi/dial-presenter.cjs +508 -0
- package/lib/hmi/dial-reach-orchestrator.cjs +377 -0
- package/lib/hmi/dial-selector.cjs +239 -0
- package/lib/hmi/f1-pick-capture-cli.cjs +131 -0
- package/lib/hmi/f3-depth-capture-cli.cjs +77 -0
- package/lib/hmi/f4-scope-capture-cli.cjs +86 -0
- package/lib/hmi/f8-action-capture-cli.cjs +145 -0
- package/lib/hmi/f8-capture.test.cjs +77 -0
- package/lib/hmi/f9-ordered-capture-cli.cjs +138 -0
- package/lib/hmi/harvest-scope-state.cjs +202 -0
- package/lib/hmi/hats-persona-cache.cjs +142 -0
- package/lib/hmi/jtbd-classifier.cjs +219 -0
- package/lib/hmi/jtbd-state.cjs +263 -0
- package/lib/hmi/jtbd-taxonomy.json +402 -0
- package/lib/hmi/mindrian-ascii-logo.cjs +96 -0
- package/lib/hmi/part8-egress-gate.cjs +149 -0
- package/lib/hmi/reach-component-map.json +47 -0
- package/lib/hmi/reach-relevance-gate.cjs +147 -0
- package/lib/hmi/selector-dispatcher.cjs +1201 -0
- package/lib/hmi/selector-dispatcher.test.cjs +141 -0
- package/lib/hmi/selector-telemetry.cjs +269 -0
- package/lib/hmi/shape-f0-renderer.cjs +145 -0
- package/lib/hmi/shape-f1-fallback.cjs +80 -0
- package/lib/hmi/shape-f1-renderer.cjs +219 -0
- package/lib/hmi/shape-f2-renderer.cjs +132 -0
- package/lib/hmi/shape-f3-parity.test.cjs +64 -0
- package/lib/hmi/shape-f3-renderer.cjs +66 -0
- package/lib/hmi/shape-f4-parity.test.cjs +72 -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 +324 -0
- package/lib/hmi/shape-f6-renderer.cjs +144 -0
- package/lib/hmi/shape-f7-breakthrough-renderer.cjs +234 -0
- package/lib/hmi/shape-f7-breakthrough-renderer.test.cjs +233 -0
- package/lib/hmi/shape-f8-renderer.cjs +150 -0
- package/lib/hmi/shape-f8-renderer.test.cjs +70 -0
- package/lib/hmi/shape-f9-renderer.cjs +187 -0
- package/lib/hmi/shape-f9-renderer.test.cjs +80 -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/hmi/turn-text.cjs +268 -0
- package/lib/hmi/voice-color-mark.cjs +318 -0
- package/lib/hmi/voice-style-log.cjs +276 -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/undo.test.cjs +199 -0
- package/lib/import/vault-scanner.cjs +105 -0
- package/lib/import/vault-scanner.test.cjs +67 -0
- package/lib/lens-engine/correlation-resolver.cjs +174 -0
- package/lib/lens-engine/source-lens-driver.cjs +736 -0
- package/lib/mcp/adapter-client.cjs +103 -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-composition-census.cjs +184 -0
- package/lib/mcp/brain-router.cjs +530 -0
- package/lib/mcp/capability-registry.cjs +62 -0
- package/lib/mcp/contract-version.cjs +59 -0
- package/lib/mcp/daemon-lifecycle.cjs +324 -0
- package/lib/mcp/gate-dedup.cjs +120 -0
- package/lib/mcp/gate-ledger.cjs +145 -0
- package/lib/mcp/gate-render.cjs +483 -0
- package/lib/mcp/hook-adapter-audit.cjs +199 -0
- package/lib/mcp/larry-context.cjs +42 -0
- package/lib/mcp/mcp-first-flag.cjs +147 -0
- package/lib/mcp/no-instructions.test.cjs +270 -0
- package/lib/mcp/pipeline-state.cjs +424 -0
- package/lib/mcp/prompts.cjs +421 -0
- package/lib/mcp/register-core-tools.cjs +78 -0
- package/lib/mcp/resources.cjs +359 -0
- package/lib/mcp/runtime-instructions.cjs +38 -0
- package/lib/mcp/session-catchup.cjs +349 -0
- package/lib/mcp/session-registry.cjs +113 -0
- package/lib/mcp/session-room.cjs +124 -0
- package/lib/mcp/sse-event-bus.cjs +98 -0
- package/lib/mcp/stop-gate-handler.cjs +589 -0
- package/lib/mcp/surface-detect.cjs +186 -0
- package/lib/mcp/tool-router.cjs +2113 -0
- package/lib/mcp/tools/chain.cjs +674 -0
- package/lib/mcp/tools/claim.cjs +180 -0
- package/lib/mcp/tools/context.cjs +92 -0
- package/lib/mcp/tools/dual-path.cjs +79 -0
- package/lib/mcp/tools/gate.cjs +392 -0
- package/lib/mcp/tools/graph-reason.cjs +130 -0
- package/lib/mcp/tools/graph.cjs +321 -0
- package/lib/mcp/tools/identity.cjs +174 -0
- package/lib/mcp/tools/room.cjs +449 -0
- package/lib/mcp/tools/sensors.cjs +450 -0
- package/lib/mcp/tools/status.cjs +183 -0
- package/lib/mcp/tools/stop-gate.cjs +103 -0
- package/lib/mcp/tools/views.cjs +382 -0
- package/lib/mcp/tree-watcher.cjs +199 -0
- package/lib/memory/.mindrian/auto-explore-mat-test-001.json +11 -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/body-shape-coverage.test.cjs +268 -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-cypher-chain-slice.test.cjs +368 -0
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
- package/lib/memory/brain-derivation-queue.test.cjs +553 -0
- package/lib/memory/brain-derivation.test.cjs +639 -0
- package/lib/memory/brain-derive-command.test.cjs +534 -0
- package/lib/memory/brain-derive-curation.test.cjs +243 -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/brain-suggestion-template.test.cjs +200 -0
- package/lib/memory/chain-recommender-canonical.test.cjs +208 -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/connector-registry.test.cjs +94 -0
- package/lib/memory/correlation-label-index.test.cjs +119 -0
- package/lib/memory/correlation.test.cjs +253 -0
- package/lib/memory/cross-room-aggregator.test.cjs +909 -0
- package/lib/memory/curation-132-03-dedup-held-rename.test.cjs +251 -0
- package/lib/memory/curation-132-05-pseudonymize.test.cjs +205 -0
- package/lib/memory/curation-batch.test.cjs +213 -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/doctor-deprecation-surface.test.cjs +188 -0
- package/lib/memory/dual-graph-health.test.cjs +485 -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/f-selector-ranker.test.cjs +593 -0
- package/lib/memory/feynman-minto-guardian.test.cjs +863 -0
- package/lib/memory/feynman-minto-invariants.test.cjs +554 -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/first-touch-version.test.cjs +198 -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 +549 -0
- package/lib/memory/frontmatter-schema-validator.test.cjs +344 -0
- package/lib/memory/guardian-onstop-reaches-user.test.cjs +396 -0
- package/lib/memory/heal-command.test.cjs +604 -0
- package/lib/memory/help-coverage.test.cjs +108 -0
- package/lib/memory/help-renderer.test.cjs +145 -0
- package/lib/memory/huji-run-one-async-parity.test.cjs +242 -0
- package/lib/memory/hypergraph-event-schema.test.cjs +116 -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/local-chain-recommender.test.cjs +172 -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-debounce-consumer-census.test.cjs +567 -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 +712 -0
- package/lib/memory/navigation-engine-offer.test.cjs +404 -0
- package/lib/memory/navigation-hook-resolver.test.cjs +177 -0
- package/lib/memory/navigation-invariants.test.cjs +483 -0
- package/lib/memory/navigation-projections.test.cjs +241 -0
- package/lib/memory/navigation-write-edge.test.cjs +206 -0
- package/lib/memory/offer-closer.test.cjs +258 -0
- package/lib/memory/offer-presenter.test.cjs +554 -0
- package/lib/memory/on-stop-snapshot.test.cjs +404 -0
- package/lib/memory/orchestration-projection.test.cjs +706 -0
- package/lib/memory/packet-chain-hint.test.cjs +407 -0
- package/lib/memory/packet-schema-validation.test.cjs +317 -0
- package/lib/memory/palette-consistency.test.cjs +127 -0
- package/lib/memory/pending-tension-store.cjs +453 -0
- package/lib/memory/per-command-jtbd-derivation.test.cjs +130 -0
- package/lib/memory/per-command-teaching.test.cjs +110 -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/precommit-real-commit.test.cjs +301 -0
- package/lib/memory/problem-type-router.test.cjs +656 -0
- package/lib/memory/query-efficiency-telemetry.test.cjs +612 -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/render-v2-disposition.test.cjs +199 -0
- package/lib/memory/room-classifier-strict-mode.test.cjs +430 -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 +2101 -0
- package/lib/memory/security-trifecta.test.cjs +329 -0
- package/lib/memory/selector-alias-map.test.cjs +172 -0
- package/lib/memory/selector-decisions.test.cjs +417 -0
- package/lib/memory/selector-miss.test.cjs +290 -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-coordinator.test.cjs +446 -0
- package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
- package/lib/memory/skill-activation-router.test.cjs +465 -0
- package/lib/memory/skill-vs-code-drift.test.cjs +257 -0
- package/lib/memory/soft-alias.test.cjs +144 -0
- package/lib/memory/spine-events-correlation.test.cjs +198 -0
- package/lib/memory/stale-copy-scanner.test.cjs +294 -0
- package/lib/memory/stamp-artifact-write.test.cjs +304 -0
- package/lib/memory/state-aware-router.test.cjs +90 -0
- package/lib/memory/statusline-active-room-write.test.cjs +245 -0
- package/lib/memory/statusline-active-room.test.cjs +315 -0
- package/lib/memory/statusline-minto-segment.test.cjs +292 -0
- package/lib/memory/statusline-two-row.test.cjs +338 -0
- package/lib/memory/suggest-next-workflow.test.cjs +176 -0
- package/lib/memory/sync-async-entry-points.test.cjs +204 -0
- package/lib/memory/terminal-capability.test.cjs +155 -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 +648 -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 +282 -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 +787 -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/workflow-layer-e2e.test.cjs +262 -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 +111 -0
- package/lib/render/render-v2.cjs +532 -0
- package/lib/render/render-v2.test.cjs +267 -0
- package/lib/render/render.cjs +65 -0
- package/lib/sessionstart/budget-compressor.cjs +130 -0
- package/lib/sessionstart/contributor-interface.cjs +134 -0
- package/lib/sessionstart/contributor-isolator.cjs +128 -0
- package/lib/sessionstart/precedence-ladder.cjs +47 -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/cockpit-renderer.cjs +443 -0
- package/lib/statusline/cockpit-signals.cjs +312 -0
- package/lib/statusline/cockpit-telemetry.cjs +152 -0
- package/lib/statusline/ctx-window.cjs +135 -0
- package/lib/statusline/governing-thought-truncator.cjs +45 -0
- package/lib/statusline/next-move-cache.cjs +235 -0
- package/lib/statusline/ratification-next.cjs +164 -0
- package/lib/statusline/room-health-cache.cjs +200 -0
- package/lib/statusline/surface-detect.cjs +85 -0
- package/lib/statusline/two-row-renderer.cjs +207 -0
- package/lib/statusline/version-resolver.cjs +81 -0
- package/lib/ui/design-system.cjs +19 -0
- package/lib/update-bootstrap.sh.template +145 -0
- package/lib/vault/frontmatter-schema.cjs +297 -0
- package/lib/vault/room-scanner.cjs +365 -0
- package/lib/vault/wikilink-builder.cjs +231 -0
- package/lib/vault/wikilink-builder.test.cjs +182 -0
- package/lib/wiki/briefing.cjs +193 -0
- package/lib/wiki/editor-dist/wiki-editor.css +1 -0
- package/lib/wiki/editor-dist/wiki-editor.js +1327 -0
- package/lib/wiki/graph-links.cjs +281 -0
- package/lib/wiki/page-renderer.cjs +229 -0
- package/lib/wiki/room-home.cjs +353 -0
- package/lib/wiki/wiki-chat.cjs +81 -0
- package/lib/wiki/wiki-export.cjs +364 -0
- package/lib/wiki/wiki-layout.cjs +1143 -0
- package/lib/wiki/wiki-search.cjs +142 -0
- package/lib/wiki/wiki-server.cjs +748 -0
- package/lib/wiki/wiki-watcher.cjs +105 -0
- package/lib/workflow/ROOM.md +47 -0
- package/lib/workflow/chain-source.cjs +179 -0
- package/lib/workflow/command-resolver.cjs +155 -0
- package/lib/workflow/command-resolver.test.cjs +235 -0
- package/lib/workflow/cross-room-umbilical-closer.cjs +364 -0
- package/lib/workflow/dial-close-reach.cjs +405 -0
- package/lib/workflow/f-selector-ranker.cjs +1148 -0
- package/lib/workflow/f1-pick-consumer.cjs +232 -0
- package/lib/workflow/f3-depth-consumer.cjs +98 -0
- package/lib/workflow/f4-scope-consumer.cjs +112 -0
- package/lib/workflow/f8-consumer.test.cjs +82 -0
- package/lib/workflow/f8-fanout-consumer.cjs +208 -0
- package/lib/workflow/f9-consumer.test.cjs +71 -0
- package/lib/workflow/f9-ordered-consumer.cjs +199 -0
- package/lib/workflow/local-chain-recommender.cjs +330 -0
- package/lib/workflow/memory-cascade-f9-adapter.cjs +273 -0
- package/lib/workflow/memory-governance-closer.cjs +384 -0
- package/lib/workflow/offer-closer.cjs +407 -0
- package/lib/workflow/reach-hedge-ranker.cjs +809 -0
- package/lib/workflow/reach-reject-reader.cjs +372 -0
- package/lib/workflow/reconcile-f9-adapter.cjs +299 -0
- package/lib/workflow/selector-decisions.cjs +478 -0
- package/lib/workflow/session-binding-consumer.cjs +249 -0
- package/npm-shrinkwrap.json +1544 -0
- package/output-styles/destijl.md +67 -0
- package/package.json +22 -4
- package/pipelines/PWS_grading/01-deep-grade.md +48 -0
- package/pipelines/PWS_grading/02-mullins.md +50 -0
- package/pipelines/PWS_grading/03-build-thesis.md +60 -0
- package/pipelines/PWS_grading/04-structure-argument.md +77 -0
- package/pipelines/PWS_grading/CHAIN.md +79 -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 +73 -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 +48 -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 +48 -0
- package/references/brain/causal-directives.md +91 -0
- package/references/brain/causal-enrichment.cypher +165 -0
- package/references/brain/command-triggers-schema.md +15 -0
- package/references/brain/graph-architecture.md +317 -0
- package/references/brain/query-patterns.md +504 -0
- package/references/brain/room-hierarchy-schema.md +218 -0
- package/references/brain/schema.md +86 -0
- package/references/capability-radar/capabilities-index.md +269 -0
- package/references/capability-radar/changelog-cache.md +95 -0
- package/references/causal/causal-schema.md +103 -0
- package/references/design/email-template-standard.md +169 -0
- package/references/design/graph-visualization-standard.md +178 -0
- package/references/design/newsletter-email-template.html +307 -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/extraction-perspectives.md +225 -0
- package/references/meeting/filing-protocol.md +222 -0
- package/references/meeting/knowledge-typing.md +242 -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-scored.md +60 -0
- package/references/methodology/build-thesis.md +237 -0
- package/references/methodology/causal-loop-diagrams.md +65 -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/huji-stage-a-intake.md +246 -0
- package/references/methodology/index.md +34 -0
- package/references/methodology/leadership.md +200 -0
- package/references/methodology/lean-canvas.md +116 -0
- package/references/methodology/leverage-scan-signatures.md +83 -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/rubric-huji.md +160 -0
- package/references/methodology/sapphire-encoding.md +355 -0
- package/references/methodology/scenario-plan.md +190 -0
- package/references/methodology/score-innovation.md +154 -0
- package/references/methodology/skillopt-judge-rubric.md +48 -0
- package/references/methodology/skillopt-queries-rubric.md +60 -0
- package/references/methodology/skillopt-refute-rubric.md +59 -0
- package/references/methodology/skillopt-review-rubric.md +72 -0
- package/references/methodology/skillopt-revise-rubric.md +48 -0
- package/references/methodology/structure-argument.md +158 -0
- package/references/methodology/systems-thinking.md +231 -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/opportunities/tnufa-rubric.md +81 -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/security/agentshield-baseline.json +8 -0
- package/references/security/cve-db.json +220 -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/ROOM.md +55 -0
- package/references/visual/palette.json +54 -0
- package/references/visual/symbol-system.md +151 -0
- package/scripts/189-plurai-gate-check.cjs +88 -0
- package/scripts/198-plurai-gate-check.cjs +118 -0
- package/scripts/198-rollback-rehearsal.cjs +233 -0
- package/scripts/83-scope-injection.test.cjs +648 -0
- package/scripts/PYTHON_GATES.md +78 -0
- package/scripts/__pycache__/compute-hsi.cpython-312.pyc +0 -0
- package/scripts/__pycache__/detect-reverse-salients.cpython-312.pyc +0 -0
- package/scripts/__pycache__/rs-engine.cpython-312.pyc +0 -0
- package/scripts/act-command.cjs +518 -0
- package/scripts/admin-brain-write.cjs +442 -0
- package/scripts/admin-command-gate.cjs +178 -0
- package/scripts/agentshield-scan-cli.cjs +226 -0
- package/scripts/agentshield-sessionstart-scan.cjs +282 -0
- package/scripts/analogy-fitness-report.cjs +266 -0
- package/scripts/analyze-room +1079 -0
- package/scripts/apply-teaching-content.cjs +298 -0
- package/scripts/async-artifact-auto-commit.cjs +485 -0
- package/scripts/audit-active-phase-resolver.cjs +160 -0
- package/scripts/audit-body-shape-coverage.cjs +213 -0
- package/scripts/auto-explore-drain.cjs +274 -0
- package/scripts/auto-explore-fingerprint.cjs +354 -0
- package/scripts/auto-explore-fire.cjs +359 -0
- package/scripts/backfill-correlation-id.cjs +425 -0
- package/scripts/backfill-hitl-shape.cjs +276 -0
- package/scripts/backfill-hitl-shape.test.cjs +307 -0
- package/scripts/backup-modifications +68 -0
- package/scripts/banner +182 -0
- package/scripts/brain-derivation-drain.cjs +291 -0
- package/scripts/brain-derive-command.cjs +846 -0
- package/scripts/brain-normalize-books.cypher +505 -0
- package/scripts/brain-normalize-final.cypher +1355 -0
- package/scripts/brain-normalize-problemtype.cypher +475 -0
- package/scripts/brain-normalize-supplement.cypher +449 -0
- package/scripts/brain-normalize-targeted.cypher +344 -0
- package/scripts/brain-normalize-v194.cypher +61 -0
- package/scripts/brain-normalize.cypher +530 -0
- package/scripts/brain-response-sanitize-hook.cjs +165 -0
- package/scripts/build-brain-census.cjs +957 -0
- package/scripts/build-brain-packet-schema.cjs +225 -0
- package/scripts/build-command-registry.cjs +587 -0
- package/scripts/build-connector-registry.cjs +1331 -0
- package/scripts/build-corpus-stats.cjs +408 -0
- package/scripts/build-dist-bundles.cjs +495 -0
- package/scripts/build-ecosystem-graph.cjs +490 -0
- package/scripts/build-graph +1462 -0
- package/scripts/build-graph-from-sqlite.cjs +97 -0
- package/scripts/build-harness-manifest.cjs +1090 -0
- package/scripts/build-jtbd-nudges +205 -0
- package/scripts/build-new-surface.cjs +805 -0
- package/scripts/build-orchestration-projection.cjs +1221 -0
- package/scripts/build-render-coverage.cjs +637 -0
- package/scripts/build-skill-mirrors.cjs +681 -0
- package/scripts/cache-hitrate-report.cjs +216 -0
- package/scripts/causal-to-graph.cjs +163 -0
- package/scripts/check-abstraction-fixture-neutral.cjs +160 -0
- package/scripts/check-admin-identity.cjs +212 -0
- package/scripts/check-brain-tool-liveness.cjs +502 -0
- package/scripts/check-card-fire.cjs +1809 -0
- package/scripts/check-cirs-declaration.cjs +279 -0
- package/scripts/check-deck-design.cjs +104 -0
- package/scripts/check-dual-graph-health.cjs +645 -0
- package/scripts/check-first-touch-drift.cjs +220 -0
- package/scripts/check-flagship-floor.cjs +391 -0
- package/scripts/check-framework-vocabulary-drift.cjs +563 -0
- package/scripts/check-gate-seam.cjs +178 -0
- package/scripts/check-graph-derive-health.cjs +208 -0
- package/scripts/check-graph-export-typemap.cjs +118 -0
- package/scripts/check-help-coverage.cjs +290 -0
- package/scripts/check-hitl-stages.cjs +219 -0
- package/scripts/check-hook-schema-compatibility.cjs +231 -0
- package/scripts/check-hsi-deps +42 -0
- package/scripts/check-kuzu-reintroduction.cjs +251 -0
- package/scripts/check-onboard +43 -0
- package/scripts/check-onboard-statusline.cjs +363 -0
- package/scripts/check-palette-consistency.cjs +106 -0
- package/scripts/check-pending-ambiguous.cjs +244 -0
- package/scripts/check-pending-breakthrough.cjs +189 -0
- package/scripts/check-pending-breakthrough.test.cjs +166 -0
- package/scripts/check-pending-naming-decision.cjs +97 -0
- package/scripts/check-plugin-path-anchoring.cjs +830 -0
- package/scripts/check-publish-needs.cjs +126 -0
- package/scripts/check-registry-drift.cjs +206 -0
- package/scripts/check-release-payload-ceiling.cjs +269 -0
- package/scripts/check-render-coverage.cjs +558 -0
- package/scripts/check-research-isomorphism.cjs +446 -0
- package/scripts/check-reward-before-investment.cjs +261 -0
- package/scripts/check-room-blueprints.cjs +213 -0
- package/scripts/check-schema-aliases.cjs +532 -0
- package/scripts/check-shape-declaration.cjs +958 -0
- package/scripts/check-shape-declaration.test.cjs +185 -0
- package/scripts/check-skill-spec.cjs +312 -0
- package/scripts/check-skill-vs-code-drift.cjs +178 -0
- package/scripts/check-substrate.cjs +513 -0
- package/scripts/check-tool-honesty.cjs +1601 -0
- package/scripts/check-update +60 -0
- package/scripts/check-version-and-sha.cjs +366 -0
- package/scripts/check-voice-style.cjs +184 -0
- package/scripts/check-worktree-hygiene.cjs +530 -0
- package/scripts/classify-insight +59 -0
- package/scripts/coherence-smoke-test.cjs +489 -0
- package/scripts/compute-bayesian-surprise.py +175 -0
- package/scripts/compute-blindspot-mass.py +209 -0
- package/scripts/compute-disruption-index.py +211 -0
- package/scripts/compute-element-novelty.py +254 -0
- package/scripts/compute-external-whitespace.py +563 -0
- package/scripts/compute-hsi.py +947 -0
- package/scripts/compute-meetings-intelligence +716 -0
- package/scripts/compute-opportunity-state +17 -0
- package/scripts/compute-state +393 -0
- package/scripts/compute-team +1112 -0
- package/scripts/compute-whitespace-embeddings.py +464 -0
- package/scripts/compute-whitespace-gaps.py +562 -0
- package/scripts/compute_topic_forest.py +684 -0
- package/scripts/consolidate-pinecone.py +265 -0
- package/scripts/context-monitor +943 -0
- package/scripts/create-speaker-profile +311 -0
- package/scripts/cross-room-detect.cjs +195 -0
- package/scripts/csv-to-idea-graph.cjs +755 -0
- package/scripts/ctxl-eval.cjs +846 -0
- package/scripts/curation-132-03-dedup-held-rename.cjs +395 -0
- package/scripts/curation-132-05-pseudonymize.cjs +189 -0
- package/scripts/derive-verb-reach-affinity.cjs +507 -0
- package/scripts/detect-reverse-salients.py +242 -0
- package/scripts/diagnostics-command.cjs +345 -0
- package/scripts/dial-memory-refresh-command.cjs +147 -0
- package/scripts/discover-analogy-whitespace.py +433 -0
- package/scripts/discover-hsi-whitespace.py +352 -0
- package/scripts/discover-rs-whitespace.py +327 -0
- package/scripts/discovery-cycle.cjs +625 -0
- package/scripts/disposition-render-v2.cjs +229 -0
- package/scripts/doctor-preflight-format.cjs +101 -0
- package/scripts/doctor.cjs +4327 -0
- package/scripts/dogfood-bridge/append-to-queue.sh +59 -0
- package/scripts/dogfood-bridge/path-filter.cjs +86 -0
- package/scripts/dogfood-derive.cjs +158 -0
- package/scripts/dogfood-emit.cjs +126 -0
- package/scripts/empathy-observation-emit.cjs +108 -0
- package/scripts/enrichment-queue-append.cjs +157 -0
- package/scripts/ensure-brain-baseline.cjs +117 -0
- package/scripts/entity-extract.cjs +1135 -0
- package/scripts/eureka-command.cjs +687 -0
- package/scripts/eureka-critic-run.cjs +662 -0
- package/scripts/eureka-portfolio-report.cjs +2038 -0
- package/scripts/eureka-room-report.cjs +419 -0
- package/scripts/explain-decision-command.cjs +499 -0
- package/scripts/export-pinecone-embeddings.cjs +516 -0
- package/scripts/extract-room-intelligence.cjs +714 -0
- package/scripts/fetch-brain-baseline.cjs +190 -0
- package/scripts/fetch-brain-baseline.py +360 -0
- package/scripts/feynman-minto-guardian.cjs +672 -0
- package/scripts/feynman-timeline-refresh-command.cjs +270 -0
- package/scripts/file-asset +253 -0
- package/scripts/fire-sensor-event.cjs +83 -0
- package/scripts/first-install-router.cjs +968 -0
- package/scripts/frontmatter-schema-validator.cjs +339 -0
- package/scripts/fts-index-drain.cjs +221 -0
- package/scripts/generate-chat-embed.cjs +179 -0
- package/scripts/generate-deck.cjs +322 -0
- package/scripts/generate-export.cjs +474 -0
- package/scripts/generate-hub.cjs +2553 -0
- package/scripts/generate-lobby.cjs +718 -0
- package/scripts/generate-presentation.cjs +988 -0
- package/scripts/generate-presentation.test.cjs +405 -0
- package/scripts/generate-section-intelligence.cjs +330 -0
- package/scripts/generate-snapshot.cjs +1410 -0
- package/scripts/generate-standalone +159 -0
- package/scripts/git-ops +211 -0
- package/scripts/graph-heal-pipeline.cjs +321 -0
- package/scripts/gsd-artifact-graph-hook.cjs +219 -0
- package/scripts/gsd-graph-derive-drain.cjs +571 -0
- package/scripts/gsd-graph-derive-sweep.cjs +195 -0
- package/scripts/heal-command.cjs +1365 -0
- package/scripts/hedge-refit-pipeline.cjs +207 -0
- package/scripts/help-renderer.cjs +303 -0
- package/scripts/hmi-compliance-poll.cjs +451 -0
- package/scripts/hmi-status-command.cjs +510 -0
- package/scripts/hooked-rescore-117.cjs +224 -0
- package/scripts/hooks/pre-commit +533 -0
- package/scripts/hooks/pre-commit-room-minto-guard.cmd +43 -0
- package/scripts/hooks/pre-commit-room-minto-guard.sh +533 -0
- package/scripts/hsi-to-graph.cjs +194 -0
- package/scripts/huji-batch.cjs +821 -0
- package/scripts/huji-eval.cjs +1158 -0
- package/scripts/huji-intake.cjs +563 -0
- package/scripts/huji-pin-smoketest.cjs +454 -0
- package/scripts/huji-run-one-async.cjs +305 -0
- package/scripts/huji-run-one.cjs +671 -0
- package/scripts/install-pre-commit.sh +113 -0
- package/scripts/intent-classifier +106 -0
- package/scripts/intent-classifier.cjs +3620 -0
- package/scripts/interpret-whitespace.cjs +691 -0
- package/scripts/jtbd-command.cjs +810 -0
- package/scripts/jtbd-update.cjs +299 -0
- package/scripts/label-topic-forest.cjs +667 -0
- package/scripts/learn-from-usage +168 -0
- package/scripts/lib/__pycache__/ensure_ml_deps.cpython-312.pyc +0 -0
- package/scripts/lib/ensure_ml_deps.py +97 -0
- package/scripts/load-embeddings-into-neo4j.cjs +569 -0
- package/scripts/memory-artifact-graph-hook.cjs +191 -0
- package/scripts/memory-command.cjs +687 -0
- package/scripts/memory-completion-detector.cjs +217 -0
- package/scripts/memory-lifecycle.cjs +620 -0
- package/scripts/memory-resume-nudge.cjs +233 -0
- package/scripts/methodology-ingest-local.sh +36 -0
- package/scripts/migrate-brain-mcp-from-http-to-stdio.cjs +190 -0
- package/scripts/migrate-brain-mcp-from-http-to-stdio.test.cjs +242 -0
- package/scripts/migrate-hats-to-roomdb.cjs +217 -0
- package/scripts/migrate-lazygraph.cjs +250 -0
- package/scripts/migrate-minto-schema-v88.cjs +296 -0
- package/scripts/migrate-plugin-root-refs.cjs +168 -0
- package/scripts/migrate-room-sections-v275.cjs +556 -0
- package/scripts/migrate-rooms +417 -0
- package/scripts/migrate-skill-frontmatter.cjs +472 -0
- package/scripts/migrate-stale-user-settings.cjs +296 -0
- package/scripts/migrate-telemetry-v1.cjs +384 -0
- package/scripts/migrate-telemetry-v1.test.cjs +356 -0
- package/scripts/minto-debouncer.cjs +428 -0
- package/scripts/mos-status.cjs +622 -0
- package/scripts/mva-detect.cjs +229 -0
- package/scripts/mva-run.cjs +36 -0
- package/scripts/on-agent-complete +163 -0
- package/scripts/on-cwd-changed +149 -0
- package/scripts/on-file-changed +68 -0
- package/scripts/on-stop +617 -0
- package/scripts/on-task-complete +194 -0
- package/scripts/operator-command.cjs +858 -0
- package/scripts/operator-update.cjs +308 -0
- package/scripts/part8-egress-guard-hook.cjs +229 -0
- package/scripts/pipeline-command.cjs +271 -0
- package/scripts/post-compact +383 -0
- package/scripts/post-update-activation.cjs +339 -0
- package/scripts/post-write +283 -0
- package/scripts/power-demo-prompt.md +621 -0
- package/scripts/pre-compact +273 -0
- package/scripts/preflight-auto-explore.cjs +314 -0
- package/scripts/preflight-doctor.cjs +225 -0
- package/scripts/preflight-release-drift.cjs +168 -0
- package/scripts/preflight-tension-surface.cjs +414 -0
- package/scripts/probe-brain-contract.cjs +502 -0
- package/scripts/publish-ops +346 -0
- package/scripts/query-efficiency-telemetry.cjs +364 -0
- package/scripts/query-semantic-scholar.cjs +545 -0
- package/scripts/reapply-modifications +49 -0
- package/scripts/reassign-primary.cjs +125 -0
- package/scripts/recompile-room-references.cjs +601 -0
- package/scripts/release-beta-preflight.sh +69 -0
- package/scripts/render-pdf +588 -0
- package/scripts/render-viz +190 -0
- package/scripts/research-speaker +239 -0
- package/scripts/resolve-room +204 -0
- package/scripts/restore-post-compact-context.cjs +320 -0
- package/scripts/room-auto-create-nudge.cjs +136 -0
- package/scripts/room-naming-selector.cjs +201 -0
- package/scripts/room-registry +767 -0
- package/scripts/rs-discovery-engine.cjs +725 -0
- package/scripts/rs-engine.py +2073 -0
- package/scripts/rs-experts-command.cjs +300 -0
- package/scripts/rs-explain-command.cjs +323 -0
- package/scripts/rs-fetch-command.cjs +170 -0
- package/scripts/rs-thesis-command.cjs +203 -0
- package/scripts/rs-vector-bridge.cjs +410 -0
- package/scripts/run-harness.cjs +890 -0
- package/scripts/scout-cadence-guard.cjs +323 -0
- package/scripts/scout-cadence-runner.cjs +509 -0
- package/scripts/scout-telemetry-aggregator.cjs +268 -0
- package/scripts/sealed-walker.py +96 -0
- package/scripts/seed-brain-commands.cjs +324 -0
- package/scripts/self-update +105 -0
- package/scripts/sentinel-deadline-monitor +241 -0
- package/scripts/sentinel-health-check +198 -0
- package/scripts/sentinel-snapshot +42 -0
- package/scripts/serve-dashboard +103 -0
- package/scripts/serve-dashboard-live +932 -0
- package/scripts/serve-presentation +97 -0
- package/scripts/serve-wiki +90 -0
- package/scripts/session-end-presence.cjs +79 -0
- package/scripts/session-start +1942 -0
- package/scripts/sessionstart-coordinator.cjs +249 -0
- package/scripts/sessionstart-npm-reconcile.cjs +111 -0
- package/scripts/sessionstart-post-update-preflight.cjs +303 -0
- package/scripts/sessionstart-reference-now-seed.cjs +137 -0
- package/scripts/setup-hooks.sh +112 -0
- package/scripts/skillopt-codereview.cjs +830 -0
- package/scripts/skillopt-eval.cjs +519 -0
- package/scripts/skillopt-funnel.cjs +1076 -0
- package/scripts/skillopt-genqueries.cjs +571 -0
- package/scripts/skillopt-inventory.cjs +319 -0
- package/scripts/skillopt-merge.cjs +656 -0
- package/scripts/skillopt-triggerloop.cjs +1126 -0
- package/scripts/soft-alias-runner.cjs +116 -0
- package/scripts/stamp-artifact-write.cjs +276 -0
- package/scripts/stamp-firing-block.cjs +325 -0
- package/scripts/state-write.cjs +97 -0
- package/scripts/statusline-fallback-echo.cjs +297 -0
- package/scripts/statusline-mos +116 -0
- package/scripts/statusline-mos-dispatch +127 -0
- package/scripts/suggest-next-command.cjs +416 -0
- package/scripts/sweep-skill-descriptions.cjs +263 -0
- package/scripts/sync-rooms-brain +438 -0
- package/scripts/sync-rooms-graph +264 -0
- package/scripts/telemetry-command-invocation.cjs +120 -0
- package/scripts/test-doctor-recovery.cjs +242 -0
- package/scripts/test-fresh-install.md +140 -0
- package/scripts/track-analytics +156 -0
- package/scripts/transcribe-audio +148 -0
- package/scripts/transcript-ingest.cjs +225 -0
- package/scripts/update-icm-index +153 -0
- package/scripts/v182-brain-optimize.cypher +1191 -0
- package/scripts/validate-model-profiles +93 -0
- package/scripts/vault-content-reformatter.cjs +581 -0
- package/scripts/vault-export-orchestrator.cjs +400 -0
- package/scripts/vault-footer-injector.cjs +315 -0
- package/scripts/vault-import.cjs +839 -0
- package/scripts/vault-integration-test.cjs +318 -0
- package/scripts/vault-regenerate-all.cjs +216 -0
- package/scripts/vault-regenerate-all.test.cjs +138 -0
- package/scripts/vault-rules-generator.cjs +220 -0
- package/scripts/vault-section-minto-generator.cjs +1642 -0
- package/scripts/vault-section-minto-generator.integration.test.cjs +576 -0
- package/scripts/vault-section-minto-generator.test.cjs +291 -0
- package/scripts/vault-section-state-generator.cjs +385 -0
- package/scripts/vault-welcome-generator.cjs +403 -0
- package/scripts/vault-wikilink-injector.cjs +449 -0
- package/scripts/verify-phase-132.cjs +338 -0
- package/scripts/verify-release +744 -0
- package/scripts/whitespace-command.cjs +831 -0
- package/scripts/whitespace-to-brain.cjs +383 -0
- package/scripts/whitespace-to-graph.cjs +220 -0
- package/scripts/wikilink-batch.cjs +102 -0
- package/scripts/wikilink-file.cjs +139 -0
- package/scripts/write-bridge-artifacts.cjs +140 -0
- package/scripts/write-scope-check +12 -0
- package/scripts/write-scope-check.cjs +461 -0
- package/scripts/write-whitespace-sections.cjs +483 -0
- package/settings.json +7 -0
- package/skills/act/SKILL.md +523 -0
- package/skills/admin/SKILL.md +437 -0
- package/skills/agentshield/SKILL.md +50 -0
- package/skills/analyze-needs/SKILL.md +74 -0
- package/skills/analyze-systems/SKILL.md +69 -0
- package/skills/analyze-timing/SKILL.md +94 -0
- package/skills/auto-explore/SKILL.md +84 -0
- package/skills/beautiful-question/SKILL.md +72 -0
- package/skills/bono/SKILL.md +146 -0
- package/skills/brain-connector/SKILL.md +206 -0
- package/skills/brain-derive/SKILL.md +140 -0
- package/skills/build-knowledge/SKILL.md +118 -0
- package/skills/build-thesis/SKILL.md +90 -0
- package/skills/causal/SKILL.md +265 -0
- package/skills/challenge-assumptions/SKILL.md +74 -0
- package/skills/client-discovery-interview/SKILL.md +94 -0
- package/skills/client-discovery-interview/discovery-scaffold.json +41 -0
- package/skills/client-discovery-interview/question-bank.md +149 -0
- package/skills/compare-ventures/SKILL.md +113 -0
- package/skills/context-engine/SKILL.md +169 -0
- package/skills/conversation-mode/SKILL.md +189 -0
- package/skills/correct-reference-now/SKILL.md +86 -0
- package/skills/dashboard/SKILL.md +142 -0
- package/skills/deck/SKILL.md +113 -0
- package/skills/deep-grade/SKILL.md +210 -0
- package/skills/diagnose/SKILL.md +128 -0
- package/skills/diagnostics/SKILL.md +193 -0
- package/skills/dial-memory-refresh/SKILL.md +116 -0
- package/skills/diffusion/SKILL.md +125 -0
- package/skills/discover/SKILL.md +216 -0
- package/skills/doctor/SKILL.md +269 -0
- package/skills/dogfood-flush/SKILL.md +133 -0
- package/skills/dominant-designs/SKILL.md +72 -0
- package/skills/eureka/SKILL.md +313 -0
- package/skills/explain-decision/SKILL.md +138 -0
- package/skills/explore-domains/SKILL.md +74 -0
- package/skills/explore-futures/SKILL.md +64 -0
- package/skills/explore-opportunity/SKILL.md +168 -0
- package/skills/explore-trends/SKILL.md +74 -0
- package/skills/export/SKILL.md +126 -0
- package/skills/feynman-timeline-refresh/SKILL.md +105 -0
- package/skills/file-meeting/SKILL.md +1190 -0
- package/skills/find-analogies/SKILL.md +360 -0
- package/skills/find-bottlenecks/SKILL.md +104 -0
- package/skills/find-connections/SKILL.md +108 -0
- package/skills/funding/SKILL.md +110 -0
- package/skills/futures/SKILL.md +124 -0
- package/skills/grade/SKILL.md +252 -0
- package/skills/grade-grant/SKILL.md +293 -0
- package/skills/graph/SKILL.md +216 -0
- package/skills/hat-briefing/SKILL.md +160 -0
- package/skills/heal/SKILL.md +69 -0
- package/skills/help/SKILL.md +172 -0
- package/skills/hmi-status/SKILL.md +73 -0
- package/skills/ignite/SKILL.md +225 -0
- package/skills/ingest-methodology/SKILL.md +125 -0
- package/skills/intel-pipeline/SKILL.md +128 -0
- package/skills/intelligence-orchestrator/SKILL.md +262 -0
- package/skills/jtbd/SKILL.md +261 -0
- package/skills/larry-personality/SKILL.md +570 -0
- package/skills/larry-personality/framework-chains.md +92 -0
- package/skills/larry-personality/mode-engine.md +185 -0
- package/skills/leadership/SKILL.md +109 -0
- package/skills/lean-canvas/SKILL.md +70 -0
- package/skills/macro-trends/SKILL.md +84 -0
- package/skills/map-unknowns/SKILL.md +72 -0
- package/skills/memory/SKILL.md +212 -0
- package/skills/memory-cortex-reach/SKILL.md +80 -0
- package/skills/models/SKILL.md +197 -0
- package/skills/mos/SKILL.md +160 -0
- package/skills/mos-deck-engine/SKILL.md +329 -0
- package/skills/mos-reason/SKILL.md +484 -0
- package/skills/mullins/SKILL.md +151 -0
- package/skills/mullins-scaffold/SKILL.md +132 -0
- package/skills/mullins-scaffold/scaffold.json +223 -0
- package/skills/mva-brief/SKILL.md +87 -0
- package/skills/mva-option/SKILL.md +120 -0
- package/skills/mva-pipeline/SKILL.md +158 -0
- package/skills/mva-report/SKILL.md +79 -0
- package/skills/new-project/SKILL.md +629 -0
- package/skills/new-surface/SKILL.md +112 -0
- package/skills/onboard/SKILL.md +485 -0
- package/skills/operator/SKILL.md +167 -0
- package/skills/opportunities/SKILL.md +171 -0
- package/skills/organize/SKILL.md +69 -0
- package/skills/persona/SKILL.md +272 -0
- package/skills/pipeline/SKILL.md +164 -0
- package/skills/present/SKILL.md +123 -0
- package/skills/publish/SKILL.md +224 -0
- package/skills/pws-brain/SKILL.md +152 -0
- package/skills/pws-methodology/SKILL.md +92 -0
- package/skills/qualify-opportunity/SKILL.md +111 -0
- package/skills/query/SKILL.md +68 -0
- package/skills/radar/SKILL.md +106 -0
- package/skills/reanalyze/SKILL.md +122 -0
- package/skills/research/SKILL.md +462 -0
- package/skills/room/SKILL.md +381 -0
- package/skills/room-passive/SKILL.md +174 -0
- package/skills/room-proactive/SKILL.md +344 -0
- package/skills/rooms/SKILL.md +678 -0
- package/skills/root-cause/SKILL.md +73 -0
- package/skills/rs-experts/SKILL.md +151 -0
- package/skills/rs-explain/SKILL.md +130 -0
- package/skills/rs-fetch/SKILL.md +115 -0
- package/skills/rs-thesis/SKILL.md +129 -0
- package/skills/scenario-plan/SKILL.md +76 -0
- package/skills/scheduled-tasks/SKILL.md +301 -0
- package/skills/score-innovation/SKILL.md +74 -0
- package/skills/scout/SKILL.md +370 -0
- package/skills/setup/SKILL.md +654 -0
- package/skills/show/SKILL.md +68 -0
- package/skills/skill/SKILL.md +104 -0
- package/skills/snapshot/SKILL.md +178 -0
- package/skills/speakers/SKILL.md +116 -0
- package/skills/splash/SKILL.md +54 -0
- package/skills/stance/SKILL.md +89 -0
- package/skills/status/SKILL.md +107 -0
- package/skills/structure-argument/SKILL.md +78 -0
- package/skills/suggest-next/SKILL.md +137 -0
- package/skills/systems-thinking/SKILL.md +220 -0
- package/skills/think-hats/SKILL.md +82 -0
- package/skills/trending-to-absurd/SKILL.md +100 -0
- package/skills/ui-system/SKILL.md +474 -0
- package/skills/ui-system/design-system/M-OS-DESIGN-SYSTEM.md +273 -0
- package/skills/ui-system/design-system/SPEC.md +72 -0
- package/skills/ui-system/design-system/image-prompt-style.md +29 -0
- package/skills/ui-system/design-system/mos-design-system.css +240 -0
- package/skills/ui-system/rules/design-system.md +60 -0
- package/skills/ui-system/rules/dual-palette.md +156 -0
- package/skills/ui-system/rules/glyph-disambiguation.md +171 -0
- package/skills/ui-system/rules/shape-f-zero-and-six.md +169 -0
- package/skills/update/SKILL.md +254 -0
- package/skills/user-needs/SKILL.md +73 -0
- package/skills/validate/SKILL.md +73 -0
- package/skills/value-proposition/SKILL.md +141 -0
- package/skills/vault/SKILL.md +326 -0
- package/skills/visualize/SKILL.md +69 -0
- package/skills/whitespace/SKILL.md +539 -0
- package/skills/wiki/SKILL.md +94 -0
- package/templates/_base.html +20 -0
- package/templates/chat-panel.html +205 -0
- package/templates/constellation-chat-hooks.js +89 -0
- package/templates/constellation.html +1272 -0
- package/templates/destijl-base.css +268 -0
- package/templates/discovery/discovery-brief-template.md +97 -0
- package/templates/due-diligence.html +49 -0
- package/templates/executive-summary.html +40 -0
- package/templates/icm/CLAUDE.md +31 -0
- package/templates/icm/GROUP-CLAUDE.md +33 -0
- package/templates/icm/INDEX.md +26 -0
- package/templates/import/stage-contracts/01-ingest.md +34 -0
- package/templates/import/stage-contracts/02-classify.md +48 -0
- package/templates/import/stage-contracts/03-route.md +42 -0
- package/templates/import/stage-contracts/04-enrich.md +40 -0
- package/templates/investment-thesis.html +25 -0
- package/templates/meeting-report.html +361 -0
- package/templates/presentation/dashboard.html +1150 -0
- package/templates/presentation/deck.html +540 -0
- package/templates/presentation/diagrams.html +437 -0
- package/templates/presentation/graph.html +391 -0
- package/templates/presentation/insights.html +548 -0
- package/templates/presentation/wiki.html +533 -0
- package/templates/profile.html +136 -0
- package/templates/room-context/last-session.md +56 -0
- package/templates/room-context/methodology-history.md +28 -0
- package/templates/room-context/rejection-log.md +25 -0
- package/templates/room-context/weekly-digest.md +54 -0
- package/templates/room-skeleton/MINTO.md.tmpl +19 -0
- package/templates/room-skeleton/ROOM.md.identity.tmpl +13 -0
- package/templates/room-skeleton/ROOM.md.section.tmpl +33 -0
- package/templates/room-skeleton/STATE.md.tmpl +33 -0
- package/templates/room-skeleton/USER.md.tmpl +23 -0
- package/templates/room-skeleton/references/.gitkeep +0 -0
- package/templates/room-skeleton/references/SECTION-SCHEMA.md +213 -0
- package/templates/room-skeleton/references/SUB-SCHEMAS.md +91 -0
- package/templates/room-skeleton/section-contracts/.gitkeep +0 -0
- package/templates/room-skeleton/section-contracts/business-model.md +32 -0
- package/templates/room-skeleton/section-contracts/competitive-analysis.md +33 -0
- package/templates/room-skeleton/section-contracts/financial-model.md +30 -0
- package/templates/room-skeleton/section-contracts/funding.md +41 -0
- package/templates/room-skeleton/section-contracts/legal-ip.md +30 -0
- package/templates/room-skeleton/section-contracts/market-analysis.md +32 -0
- package/templates/room-skeleton/section-contracts/opportunity-bank.md +39 -0
- package/templates/room-skeleton/section-contracts/problem-definition.md +32 -0
- package/templates/room-skeleton/section-contracts/solution-design.md +36 -0
- package/templates/room-skeleton/section-contracts/strategy.md +35 -0
- package/templates/room-skeleton/section-contracts/team-execution.md +36 -0
- package/templates/shared.css +427 -0
- package/templates/showcase/blueprint.html +432 -0
- package/templates/showcase/library.html +571 -0
- package/templates/showcase/narrative.html +361 -0
- package/templates/showcase/overview.html +468 -0
- package/templates/showcase/synthesis.html +473 -0
- package/templates/signature-footer.html +34 -0
|
@@ -0,0 +1,1642 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MindrianOS Plugin -- Vault Section MINTO Generator
|
|
4
|
+
*
|
|
5
|
+
* Writes a MINTO.md (Minto Pyramid + MECE issue tree) into every section
|
|
6
|
+
* folder that contains at least one artifact. Empty sections are skipped per
|
|
7
|
+
* SECTION-07. Recursive through sub-rooms per SECTION-05.
|
|
8
|
+
*
|
|
9
|
+
* Trifecta contract (ARCH-02): this is the reasoning half of the tier-1 MOC
|
|
10
|
+
* hub. Paired with ROOM.md (identity, Decision 15) and STATE.md (status,
|
|
11
|
+
* companion script), every section becomes a fully-formed Obsidian MOC.
|
|
12
|
+
*
|
|
13
|
+
* Pure CJS, zero npm dependencies. Reuses lib/vault/room-scanner.cjs and
|
|
14
|
+
* scripts/vault-section-state-generator.cjs walk helper.
|
|
15
|
+
*
|
|
16
|
+
* node scripts/vault-section-minto-generator.cjs <roomDir> [--dry-run] [--section <name>]
|
|
17
|
+
*
|
|
18
|
+
* Idempotent (WIKI-07): stable sort orders, atomic .tmp + rename write,
|
|
19
|
+
* byte-identical skip on re-run.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
const fs = require('fs');
|
|
25
|
+
const path = require('path');
|
|
26
|
+
const {
|
|
27
|
+
scanRoom,
|
|
28
|
+
parseFrontmatter,
|
|
29
|
+
slugToTitle,
|
|
30
|
+
} = require('../lib/vault/room-scanner.cjs');
|
|
31
|
+
const {
|
|
32
|
+
walkAllSections,
|
|
33
|
+
} = require('./vault-section-state-generator.cjs');
|
|
34
|
+
|
|
35
|
+
// ---------- CLI ----------
|
|
36
|
+
|
|
37
|
+
const argv = process.argv.slice(2);
|
|
38
|
+
const DRY_RUN = argv.includes('--dry-run');
|
|
39
|
+
const sectionFlagIdx = argv.indexOf('--section');
|
|
40
|
+
const SECTION_FILTER =
|
|
41
|
+
sectionFlagIdx !== -1 && argv[sectionFlagIdx + 1]
|
|
42
|
+
? argv[sectionFlagIdx + 1]
|
|
43
|
+
: null;
|
|
44
|
+
|
|
45
|
+
// Phase 81-01: --plan and --write subcommand flags.
|
|
46
|
+
const PLAN_FLAG = argv.includes('--plan');
|
|
47
|
+
const WRITE_FLAG = argv.includes('--write');
|
|
48
|
+
const narrativeFlagIdx = argv.indexOf('--narrative');
|
|
49
|
+
const NARRATIVE_PATH =
|
|
50
|
+
narrativeFlagIdx !== -1 && argv[narrativeFlagIdx + 1]
|
|
51
|
+
? argv[narrativeFlagIdx + 1]
|
|
52
|
+
: null;
|
|
53
|
+
|
|
54
|
+
// Phase 88-04-B: test-only invariant-rejection mock flag. Behind MOS_TEST=1
|
|
55
|
+
// so production cannot accidentally inject synthetic violations. Accepted
|
|
56
|
+
// values: "error" | "warning" | "critical" (null = real validator).
|
|
57
|
+
let MOCK_INVARIANTS_FAIL_CLI = null;
|
|
58
|
+
for (const a of argv) {
|
|
59
|
+
const m = a.match(/^--mock-invariants-fail=(.+)$/);
|
|
60
|
+
if (m) {
|
|
61
|
+
MOCK_INVARIANTS_FAIL_CLI = m[1];
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// roomArg: first positional that is not a flag value.
|
|
67
|
+
// Values of --section and --narrative are consumed by their flags.
|
|
68
|
+
const FLAG_VALUE_INDICES = new Set();
|
|
69
|
+
if (sectionFlagIdx !== -1) FLAG_VALUE_INDICES.add(sectionFlagIdx + 1);
|
|
70
|
+
if (narrativeFlagIdx !== -1) FLAG_VALUE_INDICES.add(narrativeFlagIdx + 1);
|
|
71
|
+
const roomArg = argv.find(function (a, i) {
|
|
72
|
+
if (a.startsWith('--')) return false;
|
|
73
|
+
if (FLAG_VALUE_INDICES.has(i)) return false;
|
|
74
|
+
return true;
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
function usage() {
|
|
78
|
+
process.stderr.write(
|
|
79
|
+
'Usage: node scripts/vault-section-minto-generator.cjs <roomDir> [--dry-run] [--section <name>]\n' +
|
|
80
|
+
' node scripts/vault-section-minto-generator.cjs --plan <roomDir> --section <name>\n' +
|
|
81
|
+
' node scripts/vault-section-minto-generator.cjs --write <roomDir> --section <name> --narrative <jsonFile>\n'
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ---------- Heuristic gap lookup ----------
|
|
86
|
+
|
|
87
|
+
const GAP_HEURISTICS = {
|
|
88
|
+
'problem-definition': [
|
|
89
|
+
'root-cause analysis',
|
|
90
|
+
'stakeholder impact mapping',
|
|
91
|
+
'problem formulation history',
|
|
92
|
+
],
|
|
93
|
+
'market-analysis': ['TAM sizing', 'SAM sizing', 'SOM sizing', 'segment personas'],
|
|
94
|
+
'solution-design': ['architecture diagram', 'user journey map', 'technical feasibility'],
|
|
95
|
+
'business-model': ['revenue model', 'unit economics', 'pricing strategy'],
|
|
96
|
+
'competitive-analysis': ['direct competitors', 'indirect competitors', 'moat analysis'],
|
|
97
|
+
'financial-model': ['projections', 'burn rate', 'runway analysis', 'funding ask'],
|
|
98
|
+
'legal-ip': ['entity structure', 'IP ownership', 'regulatory review'],
|
|
99
|
+
'team-execution': ['hiring plan', 'org chart', 'milestones'],
|
|
100
|
+
team: ['founder bios', 'advisor roster', 'gaps in expertise'],
|
|
101
|
+
meetings: ['meeting cadence', 'decision log', 'action items'],
|
|
102
|
+
'opportunity-bank': ['grant pipeline', 'partnership pipeline', 'convergence signals'],
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// ---------- Helpers ----------
|
|
106
|
+
|
|
107
|
+
function today() {
|
|
108
|
+
// Phase 81-01: allow deterministic date injection for test fixtures.
|
|
109
|
+
// When unset (production), behavior is byte-equivalent to pre-81.
|
|
110
|
+
if (process.env.MINTO_FROZEN_DATE) return process.env.MINTO_FROZEN_DATE;
|
|
111
|
+
const d = new Date();
|
|
112
|
+
const y = d.getUTCFullYear();
|
|
113
|
+
const m = String(d.getUTCMonth() + 1).padStart(2, '0');
|
|
114
|
+
const day = String(d.getUTCDate()).padStart(2, '0');
|
|
115
|
+
return `${y}-${m}-${day}`;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Phase 88-00: ISO-8601 timestamp for last_generated_at. Honors
|
|
119
|
+
// MINTO_FROZEN_TIMESTAMP for deterministic test fixtures.
|
|
120
|
+
function nowIso() {
|
|
121
|
+
if (process.env.MINTO_FROZEN_TIMESTAMP) {
|
|
122
|
+
return process.env.MINTO_FROZEN_TIMESTAMP;
|
|
123
|
+
}
|
|
124
|
+
// Seconds precision: .000Z truncated so byte diffs between runs are
|
|
125
|
+
// clean (no sub-second jitter in human-read frontmatter).
|
|
126
|
+
return new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ---------- Phase 88-00: v88 frontmatter preservation ----------
|
|
130
|
+
//
|
|
131
|
+
// When regenerating MINTO.md, four v88 fields must be preserved from the
|
|
132
|
+
// previous file:
|
|
133
|
+
// - last_artifact_write_seen_at (set by 88-04 post-write hook)
|
|
134
|
+
// - reasoning_health_score (computed by 88-01 readTriple)
|
|
135
|
+
// - flagged_weaknesses (populated by 88-13 guardian)
|
|
136
|
+
// - decision_log (cross-session decision continuity)
|
|
137
|
+
//
|
|
138
|
+
// last_generated_at is NOT preserved -- it advances on every write.
|
|
139
|
+
//
|
|
140
|
+
// The parser below is a narrow-dialect frontmatter reader that extracts
|
|
141
|
+
// exactly these four fields. It mirrors the dialect supported by
|
|
142
|
+
// lib/core/feynman-minto-invariants.cjs so the two modules agree on what
|
|
143
|
+
// a Feynman-MINTO frontmatter looks like. Zero new dependencies.
|
|
144
|
+
|
|
145
|
+
function readPreservedV88Fields(targetPath) {
|
|
146
|
+
const defaults = {
|
|
147
|
+
last_artifact_write_seen_at: null,
|
|
148
|
+
reasoning_health_score: null,
|
|
149
|
+
flagged_weaknesses: [],
|
|
150
|
+
decision_log: [],
|
|
151
|
+
};
|
|
152
|
+
let raw;
|
|
153
|
+
try {
|
|
154
|
+
raw = fs.readFileSync(targetPath, 'utf8');
|
|
155
|
+
} catch (_) {
|
|
156
|
+
return defaults;
|
|
157
|
+
}
|
|
158
|
+
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
|
|
159
|
+
if (!fmMatch) return defaults;
|
|
160
|
+
const fmText = fmMatch[1];
|
|
161
|
+
const lines = fmText.split(/\r?\n/);
|
|
162
|
+
|
|
163
|
+
const out = Object.assign({}, defaults);
|
|
164
|
+
|
|
165
|
+
for (let i = 0; i < lines.length; i++) {
|
|
166
|
+
const line = lines[i];
|
|
167
|
+
|
|
168
|
+
// last_artifact_write_seen_at: "ISO" | null
|
|
169
|
+
let m = line.match(/^last_artifact_write_seen_at:\s*(.*)$/);
|
|
170
|
+
if (m) {
|
|
171
|
+
const v = m[1].trim();
|
|
172
|
+
if (v.length > 0 && v !== 'null') {
|
|
173
|
+
out.last_artifact_write_seen_at = stripQuotes(v);
|
|
174
|
+
}
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// reasoning_health_score: number | null
|
|
179
|
+
m = line.match(/^reasoning_health_score:\s*(.*)$/);
|
|
180
|
+
if (m) {
|
|
181
|
+
const v = m[1].trim();
|
|
182
|
+
if (v.length > 0 && v !== 'null') {
|
|
183
|
+
const num = Number(v);
|
|
184
|
+
if (Number.isFinite(num)) out.reasoning_health_score = num;
|
|
185
|
+
}
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// flagged_weaknesses: [a, b] or block list
|
|
190
|
+
m = line.match(/^flagged_weaknesses:\s*(.*)$/);
|
|
191
|
+
if (m) {
|
|
192
|
+
const v = m[1].trim();
|
|
193
|
+
if (v.startsWith('[') && v.endsWith(']')) {
|
|
194
|
+
// Flow-style array.
|
|
195
|
+
const inner = v.slice(1, -1).trim();
|
|
196
|
+
if (inner.length > 0) {
|
|
197
|
+
out.flagged_weaknesses = inner
|
|
198
|
+
.split(',')
|
|
199
|
+
.map(function (s) { return stripQuotes(s.trim()); })
|
|
200
|
+
.filter(function (s) { return s.length > 0; });
|
|
201
|
+
}
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
// Block list: read ` - item` continuation lines.
|
|
205
|
+
const items = [];
|
|
206
|
+
let j = i + 1;
|
|
207
|
+
while (j < lines.length) {
|
|
208
|
+
const nxt = lines[j];
|
|
209
|
+
const it = nxt.match(/^\s+-\s+(.*)$/);
|
|
210
|
+
if (!it) break;
|
|
211
|
+
items.push(stripQuotes(it[1].trim()));
|
|
212
|
+
j += 1;
|
|
213
|
+
}
|
|
214
|
+
out.flagged_weaknesses = items;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// decision_log: [] (empty) OR block list of objects
|
|
219
|
+
m = line.match(/^decision_log:\s*(.*)$/);
|
|
220
|
+
if (m) {
|
|
221
|
+
const rest = m[1].trim();
|
|
222
|
+
if (rest === '[]') continue; // empty
|
|
223
|
+
// Block list: walk continuation lines indented with at least 2 spaces.
|
|
224
|
+
const entries = [];
|
|
225
|
+
let j = i + 1;
|
|
226
|
+
let current = null;
|
|
227
|
+
while (j < lines.length) {
|
|
228
|
+
const nxt = lines[j];
|
|
229
|
+
if (/^[A-Za-z_]/.test(nxt)) break; // next top-level key
|
|
230
|
+
if (/^\s*$/.test(nxt)) {
|
|
231
|
+
j += 1;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const head = nxt.match(/^\s+-\s+([A-Za-z_][A-Za-z0-9_]*):\s*(.*)$/);
|
|
235
|
+
if (head) {
|
|
236
|
+
if (current) entries.push(current);
|
|
237
|
+
current = {};
|
|
238
|
+
current[head[1]] = stripQuotes(head[2]);
|
|
239
|
+
j += 1;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
const cont = nxt.match(
|
|
243
|
+
/^\s+([A-Za-z_][A-Za-z0-9_]*):\s*(.*)$/
|
|
244
|
+
);
|
|
245
|
+
if (cont && current) {
|
|
246
|
+
current[cont[1]] = stripQuotes(cont[2]);
|
|
247
|
+
j += 1;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
if (current) entries.push(current);
|
|
253
|
+
out.decision_log = entries;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function stripQuotes(s) {
|
|
262
|
+
if (typeof s !== 'string') return s;
|
|
263
|
+
const t = s.trim();
|
|
264
|
+
if (
|
|
265
|
+
(t.startsWith('"') && t.endsWith('"')) ||
|
|
266
|
+
(t.startsWith("'") && t.endsWith("'"))
|
|
267
|
+
) {
|
|
268
|
+
return t.slice(1, -1);
|
|
269
|
+
}
|
|
270
|
+
return t;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Render the five v88 fields as frontmatter lines (in canonical order).
|
|
274
|
+
// Returns an array of lines (no trailing newline). Caller splices into the
|
|
275
|
+
// frontmatter right before the closing `---` delimiter.
|
|
276
|
+
function renderV88FrontmatterLines(preserved) {
|
|
277
|
+
const lines = [];
|
|
278
|
+
lines.push('last_generated_at: "' + nowIso() + '"');
|
|
279
|
+
|
|
280
|
+
const laws = preserved.last_artifact_write_seen_at;
|
|
281
|
+
if (laws === null || laws === undefined) {
|
|
282
|
+
lines.push('last_artifact_write_seen_at: null');
|
|
283
|
+
} else {
|
|
284
|
+
lines.push('last_artifact_write_seen_at: "' + laws + '"');
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const rhs = preserved.reasoning_health_score;
|
|
288
|
+
if (rhs === null || rhs === undefined) {
|
|
289
|
+
lines.push('reasoning_health_score: null');
|
|
290
|
+
} else {
|
|
291
|
+
lines.push('reasoning_health_score: ' + String(rhs));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const fw = Array.isArray(preserved.flagged_weaknesses)
|
|
295
|
+
? preserved.flagged_weaknesses
|
|
296
|
+
: [];
|
|
297
|
+
if (fw.length === 0) {
|
|
298
|
+
lines.push('flagged_weaknesses: []');
|
|
299
|
+
} else {
|
|
300
|
+
lines.push(
|
|
301
|
+
'flagged_weaknesses: [' +
|
|
302
|
+
fw.map(function (s) { return '"' + String(s).replace(/"/g, '\\"') + '"'; }).join(', ') +
|
|
303
|
+
']'
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const dl = Array.isArray(preserved.decision_log) ? preserved.decision_log : [];
|
|
308
|
+
if (dl.length === 0) {
|
|
309
|
+
lines.push('decision_log: []');
|
|
310
|
+
} else {
|
|
311
|
+
lines.push('decision_log:');
|
|
312
|
+
dl.forEach(function (entry) {
|
|
313
|
+
const keys = Object.keys(entry);
|
|
314
|
+
if (keys.length === 0) return;
|
|
315
|
+
// session_id first (canonical), then remaining keys in insertion order.
|
|
316
|
+
const ordered = [];
|
|
317
|
+
if ('session_id' in entry) ordered.push('session_id');
|
|
318
|
+
for (const k of keys) {
|
|
319
|
+
if (k !== 'session_id') ordered.push(k);
|
|
320
|
+
}
|
|
321
|
+
ordered.forEach(function (k, i) {
|
|
322
|
+
const v = entry[k];
|
|
323
|
+
const quoted = typeof v === 'string'
|
|
324
|
+
? '"' + v.replace(/"/g, '\\"') + '"'
|
|
325
|
+
: String(v);
|
|
326
|
+
if (i === 0) {
|
|
327
|
+
lines.push(' - ' + k + ': ' + quoted);
|
|
328
|
+
} else {
|
|
329
|
+
lines.push(' ' + k + ': ' + quoted);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return lines;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function collectSectionArtifacts(sectionDir, contentFiles) {
|
|
339
|
+
return contentFiles
|
|
340
|
+
.filter((f) => f.path.startsWith(sectionDir + path.sep))
|
|
341
|
+
.filter((f) => !f.isFiledTo)
|
|
342
|
+
.sort((a, b) => a.relPath.localeCompare(b.relPath));
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function firstBodyLine(filePath) {
|
|
346
|
+
try {
|
|
347
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
348
|
+
let body = content;
|
|
349
|
+
if (content.startsWith('---')) {
|
|
350
|
+
const end = content.indexOf('\n---', 3);
|
|
351
|
+
if (end !== -1) body = content.slice(end + 4);
|
|
352
|
+
}
|
|
353
|
+
const lines = body.split(/\r?\n/);
|
|
354
|
+
for (const line of lines) {
|
|
355
|
+
const trimmed = line.trim();
|
|
356
|
+
if (!trimmed) continue;
|
|
357
|
+
if (trimmed.startsWith('#')) continue;
|
|
358
|
+
if (trimmed.startsWith('<!--')) continue;
|
|
359
|
+
if (trimmed.startsWith('>')) continue;
|
|
360
|
+
// Truncate for one-line summary
|
|
361
|
+
return trimmed.length > 180 ? trimmed.slice(0, 177) + '...' : trimmed;
|
|
362
|
+
}
|
|
363
|
+
} catch (_) {
|
|
364
|
+
/* ignore */
|
|
365
|
+
}
|
|
366
|
+
return 'Artifact contributes evidence to this section.';
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Quick task 260903-i2x (T2 read half) -- reads the highest-confidence,
|
|
370
|
+
// most-recent conclusion/decision node for this section, straight from
|
|
371
|
+
// room.db, so deriveGoverningThought below can render REAL reasoning-node
|
|
372
|
+
// text instead of the count-based template once such a node exists.
|
|
373
|
+
//
|
|
374
|
+
// Canon Part 9 / substrate mandate M2: navigation.cjs is the ONLY door to
|
|
375
|
+
// room.db. openRoomDbReadOnlyForCaller (navigation.cjs:450-467) is the right
|
|
376
|
+
// MODE of that door here because a doc generator must never migrate or
|
|
377
|
+
// mutate the room it is describing -- the plain openRoomDbForCaller mode
|
|
378
|
+
// runs 13 schema-creation clauses (each an "IF NOT EXISTS" table create) plus
|
|
379
|
+
// 5 migrations on every open, which is wrong for a read-only describer. This closes the handle
|
|
380
|
+
// via navigation.closeRoomDbForCaller because there is deliberately no
|
|
381
|
+
// read-only sibling close function (same re-export, tolerant of a bare
|
|
382
|
+
// DatabaseSync).
|
|
383
|
+
//
|
|
384
|
+
// Lazy-required INSIDE the function, inside try/catch, mirroring the
|
|
385
|
+
// existing tryEnqueueBrainDerivation lazy-require idiom at line ~598 -- this
|
|
386
|
+
// keeps the generator's cold path free of the navigation module and keeps a
|
|
387
|
+
// missing/incompatible module from ever breaking the render.
|
|
388
|
+
//
|
|
389
|
+
// The whole function body is one try/catch returning null on ANY failure. A
|
|
390
|
+
// legacy un-migrated 3-column room.db has no confidence / created_at
|
|
391
|
+
// columns (node-insert.cjs::isMigratedSchema's two-schema reality) and this
|
|
392
|
+
// query will throw against it -- that is EXPECTED and exactly why the whole
|
|
393
|
+
// body degrades to null rather than propagating.
|
|
394
|
+
function readGoverningThoughtFromGraph(roomDir, sectionSlug) {
|
|
395
|
+
let navigation;
|
|
396
|
+
try {
|
|
397
|
+
navigation = require('../lib/core/navigation.cjs');
|
|
398
|
+
} catch (_e) {
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
const db = navigation.openRoomDbReadOnlyForCaller(roomDir);
|
|
403
|
+
if (!db) return null;
|
|
404
|
+
try {
|
|
405
|
+
// The Artifact + properties.section join shape is the shipped one at
|
|
406
|
+
// lib/core/graph-ops.cjs:242 (json_extract(properties,'$.section') on
|
|
407
|
+
// an Artifact node) -- cited rather than inventing a second
|
|
408
|
+
// convention. DERIVED_FROM is included alongside SOURCED_FROM in the
|
|
409
|
+
// edge-type match so a node reachable only via the Phase 120-00
|
|
410
|
+
// structural edge is still found, not just T2's own new edge.
|
|
411
|
+
const row = db.prepare(
|
|
412
|
+
`SELECT json_extract(n.properties,'$.text') AS text
|
|
413
|
+
FROM nodes n
|
|
414
|
+
WHERE json_extract(n.properties,'$.epistemic_type') IN ('conclusion','decision')
|
|
415
|
+
AND json_extract(n.properties,'$.text') IS NOT NULL
|
|
416
|
+
AND json_extract(n.properties,'$.text') != ''
|
|
417
|
+
AND (
|
|
418
|
+
json_extract(n.properties,'$.section') = ?
|
|
419
|
+
OR n.id IN (
|
|
420
|
+
SELECT e.source FROM edges e
|
|
421
|
+
WHERE e.type IN ('SOURCED_FROM','DERIVED_FROM')
|
|
422
|
+
AND e.target IN (
|
|
423
|
+
SELECT a.id FROM nodes a
|
|
424
|
+
WHERE a.type = 'Artifact'
|
|
425
|
+
AND json_extract(a.properties,'$.section') = ?
|
|
426
|
+
)
|
|
427
|
+
)
|
|
428
|
+
)
|
|
429
|
+
ORDER BY COALESCE(n.confidence, 0) DESC, COALESCE(n.created_at, 0) DESC
|
|
430
|
+
LIMIT 1`
|
|
431
|
+
).get(sectionSlug, sectionSlug);
|
|
432
|
+
if (row && typeof row.text === 'string' && row.text.length > 0) {
|
|
433
|
+
return row.text;
|
|
434
|
+
}
|
|
435
|
+
return null;
|
|
436
|
+
} finally {
|
|
437
|
+
navigation.closeRoomDbForCaller(db);
|
|
438
|
+
}
|
|
439
|
+
} catch (_e) {
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
function deriveGoverningThought(section, artifacts) {
|
|
445
|
+
const title = slugToTitle(section.name);
|
|
446
|
+
const n = artifacts.length;
|
|
447
|
+
const fallback = `${title} synthesizes ${n} artifact${n === 1 ? '' : 's'} into a coherent argument for this section of the venture.`;
|
|
448
|
+
// Quick task 260903-i2x: try the graph first (section.parentRoomDir is
|
|
449
|
+
// already in scope at both call sites two lines above their own call, so
|
|
450
|
+
// no signature change is needed). On day one there are zero such nodes in
|
|
451
|
+
// any existing room, so the fallback IS the normal path until the Task 2
|
|
452
|
+
// write paths have run for a while; the fallback gets removed only once a
|
|
453
|
+
// room is observed producing real conclusion nodes through normal use,
|
|
454
|
+
// never on a fixed date.
|
|
455
|
+
//
|
|
456
|
+
// Idempotence consequence (WIKI-07): the byte-identical-on-re-run contract
|
|
457
|
+
// now holds PER GRAPH STATE rather than absolutely. Two runs with an
|
|
458
|
+
// unchanged graph are still byte-identical; a run after a new conclusion
|
|
459
|
+
// node lands legitimately produces new content, which is the entire point
|
|
460
|
+
// of this change.
|
|
461
|
+
const roomDir = section && section.parentRoomDir;
|
|
462
|
+
const sectionSlug = section && section.name;
|
|
463
|
+
if (typeof roomDir === 'string' && roomDir.length > 0 && typeof sectionSlug === 'string' && sectionSlug.length > 0) {
|
|
464
|
+
const graphThought = readGoverningThoughtFromGraph(roomDir, sectionSlug);
|
|
465
|
+
if (typeof graphThought === 'string' && graphThought.length > 0) {
|
|
466
|
+
return graphThought;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return fallback;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
function deriveClaims(artifacts, sectionDir, max = 5) {
|
|
473
|
+
const picks = artifacts.slice(0, max);
|
|
474
|
+
return picks.map((f) => {
|
|
475
|
+
const base = path.basename(f.path, '.md');
|
|
476
|
+
const title = slugToTitle(base);
|
|
477
|
+
const rel = path.relative(sectionDir, f.path).split(path.sep).join('/');
|
|
478
|
+
return {
|
|
479
|
+
title,
|
|
480
|
+
rel,
|
|
481
|
+
display: title,
|
|
482
|
+
summary: firstBodyLine(f.path),
|
|
483
|
+
};
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
function deriveMeceTree(section, artifacts, sectionDir) {
|
|
488
|
+
const lines = [`- **${section.name}**`];
|
|
489
|
+
if (artifacts.length === 0) {
|
|
490
|
+
lines.push(' - *(no artifacts filed yet -- tree empty)*');
|
|
491
|
+
return lines.join('\n');
|
|
492
|
+
}
|
|
493
|
+
// Bucket into thirds: primary / supporting / gaps
|
|
494
|
+
const third = Math.ceil(artifacts.length / 2);
|
|
495
|
+
const primary = artifacts.slice(0, third);
|
|
496
|
+
const supporting = artifacts.slice(third);
|
|
497
|
+
lines.push(' - Primary evidence');
|
|
498
|
+
for (const f of primary) {
|
|
499
|
+
const base = path.basename(f.path, '.md');
|
|
500
|
+
const rel = path.relative(sectionDir, f.path).split(path.sep).join('/');
|
|
501
|
+
lines.push(` - [[${rel}|${slugToTitle(base)}]]`);
|
|
502
|
+
}
|
|
503
|
+
if (supporting.length > 0) {
|
|
504
|
+
lines.push(' - Supporting evidence');
|
|
505
|
+
for (const f of supporting) {
|
|
506
|
+
const base = path.basename(f.path, '.md');
|
|
507
|
+
const rel = path.relative(sectionDir, f.path).split(path.sep).join('/');
|
|
508
|
+
lines.push(` - [[${rel}|${slugToTitle(base)}]]`);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
lines.push(' - Open dimension (gap)');
|
|
512
|
+
lines.push(' - *(no artifact yet)*');
|
|
513
|
+
return lines.join('\n');
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
function deriveGaps(section, artifacts) {
|
|
517
|
+
const heuristics = GAP_HEURISTICS[section.name] || [
|
|
518
|
+
'additional artifacts for MECE coverage',
|
|
519
|
+
];
|
|
520
|
+
const count = artifacts.length;
|
|
521
|
+
const gaps = [];
|
|
522
|
+
if (count < 3) {
|
|
523
|
+
gaps.push(
|
|
524
|
+
`Thin coverage: only ${count} artifact${count === 1 ? '' : 's'} filed (minimum 3 recommended)`
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
for (const h of heuristics.slice(0, 3)) {
|
|
528
|
+
gaps.push(`Missing: ${h}`);
|
|
529
|
+
}
|
|
530
|
+
return gaps;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
function findRelatedSections(currentSection, room) {
|
|
534
|
+
// Siblings are top-level sections (or sections inside the same sub-room)
|
|
535
|
+
const sameScope = currentSection.isSubRoom
|
|
536
|
+
? room.subRooms
|
|
537
|
+
.find((sr) => sr.name === currentSection.subRoomName)
|
|
538
|
+
?.sections || []
|
|
539
|
+
: room.sections;
|
|
540
|
+
return sameScope
|
|
541
|
+
.filter((s) => s.name !== currentSection.name)
|
|
542
|
+
.map((s) => s.name)
|
|
543
|
+
.sort();
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// ---------- Rendering ----------
|
|
547
|
+
|
|
548
|
+
function renderSectionMinto(section, artifacts, room, preserved) {
|
|
549
|
+
const title = slugToTitle(section.name);
|
|
550
|
+
const date = today();
|
|
551
|
+
const parentRel = path
|
|
552
|
+
.relative(section.dir, path.join(section.parentRoomDir, 'STATE.md'))
|
|
553
|
+
.split(path.sep)
|
|
554
|
+
.join('/');
|
|
555
|
+
const governingThought = deriveGoverningThought(section, artifacts);
|
|
556
|
+
const claims = deriveClaims(artifacts, section.dir);
|
|
557
|
+
const meceTree = deriveMeceTree(section, artifacts, section.dir);
|
|
558
|
+
const gaps = deriveGaps(section, artifacts);
|
|
559
|
+
const siblings = findRelatedSections(section, room);
|
|
560
|
+
|
|
561
|
+
const sourcesArr = artifacts.map((f) =>
|
|
562
|
+
path.relative(section.dir, f.path).split(path.sep).join('/')
|
|
563
|
+
);
|
|
564
|
+
const relatedArr = siblings.map((s) => `../${s}/MINTO.md`);
|
|
565
|
+
|
|
566
|
+
const claimSections = [];
|
|
567
|
+
claims.forEach((c, i) => {
|
|
568
|
+
claimSections.push(`### Claim ${i + 1}: ${c.title}`);
|
|
569
|
+
claimSections.push('');
|
|
570
|
+
claimSections.push('> [!example] Evidence');
|
|
571
|
+
claimSections.push(`> Source: [[${c.rel}|${c.display}]]`);
|
|
572
|
+
claimSections.push(`> -- ${c.summary}`);
|
|
573
|
+
claimSections.push('');
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
const gapLines = gaps.map((g) => `> - ${g}`);
|
|
577
|
+
const crossRefLines =
|
|
578
|
+
siblings.length === 0
|
|
579
|
+
? ['- *(no sibling sections to cross-reference)*']
|
|
580
|
+
: siblings.map((s) => `- [[../${s}/MINTO.md|${s} reasoning]]`);
|
|
581
|
+
|
|
582
|
+
const sourceArtifactLines = artifacts.map((f) => {
|
|
583
|
+
const base = path.basename(f.path, '.md');
|
|
584
|
+
const rel = path.relative(section.dir, f.path).split(path.sep).join('/');
|
|
585
|
+
return `- [[${rel}|${slugToTitle(base)}]]`;
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
// Phase 88-00: five v88 frontmatter fields appended after existing
|
|
589
|
+
// structural keys, before the closing `---`. Preserved values come from
|
|
590
|
+
// the previous file (if any); last_generated_at is always fresh.
|
|
591
|
+
const v88Lines = renderV88FrontmatterLines(
|
|
592
|
+
preserved || {
|
|
593
|
+
last_artifact_write_seen_at: null,
|
|
594
|
+
reasoning_health_score: null,
|
|
595
|
+
flagged_weaknesses: [],
|
|
596
|
+
decision_log: [],
|
|
597
|
+
}
|
|
598
|
+
);
|
|
599
|
+
|
|
600
|
+
// Phase 88-04-B: invariants validator (88-00-B) requires schema_version
|
|
601
|
+
// and governing_thought as top-level frontmatter keys. Tier-0 reuses the
|
|
602
|
+
// derived placeholder governingThought so the contract is satisfied even
|
|
603
|
+
// without an LLM-produced narrative.
|
|
604
|
+
const gtTier0Escaped = String(governingThought).replace(/"/g, '\\"');
|
|
605
|
+
return [
|
|
606
|
+
'---',
|
|
607
|
+
'schema_version: "' + FEYNMAN_MINTO_SCHEMA_VERSION + '"',
|
|
608
|
+
'type: section-minto',
|
|
609
|
+
`section: ${section.name}`,
|
|
610
|
+
`created: ${date}`,
|
|
611
|
+
`room: ${room.roomName}`,
|
|
612
|
+
'parent-moc: ROOM.md',
|
|
613
|
+
'methodology: minto-pyramid',
|
|
614
|
+
`sources: [${sourcesArr.join(', ')}]`,
|
|
615
|
+
`related: [${relatedArr.join(', ')}]`,
|
|
616
|
+
'status: active',
|
|
617
|
+
'governing_thought: "' + gtTier0Escaped + '"',
|
|
618
|
+
...v88Lines,
|
|
619
|
+
'---',
|
|
620
|
+
'',
|
|
621
|
+
`# ${title} -- Minto Reasoning`,
|
|
622
|
+
'',
|
|
623
|
+
'> [!abstract] Governing Thought',
|
|
624
|
+
`> ${governingThought}`,
|
|
625
|
+
'> *(Auto-generated placeholder -- refine after first read.)*',
|
|
626
|
+
'',
|
|
627
|
+
'## Argument Structure',
|
|
628
|
+
'',
|
|
629
|
+
'> [!info] Pyramid Logic',
|
|
630
|
+
`> This section's artifacts collectively argue: ${governingThought}`,
|
|
631
|
+
`> Supported by ${claims.length} key claim${claims.length === 1 ? '' : 's'} drawn from the artifacts below.`,
|
|
632
|
+
'',
|
|
633
|
+
'## Key Claims',
|
|
634
|
+
'',
|
|
635
|
+
...claimSections,
|
|
636
|
+
'## MECE Issue Tree',
|
|
637
|
+
'',
|
|
638
|
+
meceTree,
|
|
639
|
+
'',
|
|
640
|
+
'## Evidence Gaps',
|
|
641
|
+
'',
|
|
642
|
+
'> [!warning] Missing Evidence',
|
|
643
|
+
...gapLines,
|
|
644
|
+
'',
|
|
645
|
+
'## Cross-References',
|
|
646
|
+
'',
|
|
647
|
+
...crossRefLines,
|
|
648
|
+
'',
|
|
649
|
+
'## Source Artifacts',
|
|
650
|
+
'',
|
|
651
|
+
...sourceArtifactLines,
|
|
652
|
+
'',
|
|
653
|
+
'## Navigation',
|
|
654
|
+
'',
|
|
655
|
+
`- Section identity: [[ROOM.md|${section.name} ROOM]]`,
|
|
656
|
+
`- Section status: [[STATE.md|${section.name} STATE]]`,
|
|
657
|
+
`- Parent room: [[${parentRel}|${room.roomName}]]`,
|
|
658
|
+
'',
|
|
659
|
+
'---',
|
|
660
|
+
`*Filed by MindrianOS -- Section MINTO -- ${date} -- ${room.roomName}/${section.name}*`,
|
|
661
|
+
'',
|
|
662
|
+
].join('\n');
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// ---------- Phase 81-01: plan/write subcommand support ----------
|
|
666
|
+
|
|
667
|
+
const { validateNarrative } = require('../lib/memory/narrative-schema.cjs');
|
|
668
|
+
const {
|
|
669
|
+
compressToAaak,
|
|
670
|
+
attachAaakFooter,
|
|
671
|
+
} = require('../lib/memory/aaak-compress.cjs');
|
|
672
|
+
|
|
673
|
+
// Phase 88-04-B: atomic write contract -- invariants validator and write-lock.
|
|
674
|
+
// Required so broken narratives / torn reads cannot contaminate cross-session
|
|
675
|
+
// memory. The validator lives in lib/core/ and is the single source of truth
|
|
676
|
+
// for "properly managed" per 88-00-B. acquireLock / releaseLock reuse the
|
|
677
|
+
// Phase 87-02 openSync('wx') primitive so concurrent producers (post-write +
|
|
678
|
+
// debouncer + on-stop drain) cannot corrupt the rename race.
|
|
679
|
+
const feynmanMintoInvariants = require('../lib/core/feynman-minto-invariants.cjs');
|
|
680
|
+
const { acquireLock, releaseLock } = require('../lib/core/write-lock.cjs');
|
|
681
|
+
|
|
682
|
+
// Phase 90-02: post-regen hook for the brain-derivation queue. After a
|
|
683
|
+
// successful MINTO.md write, compare prior governing_thought sha256 against
|
|
684
|
+
// the new value's sha256. If they differ, enqueue brain-derivation so the
|
|
685
|
+
// next UserPromptSubmit drains and refreshes BRAIN.md asynchronously.
|
|
686
|
+
//
|
|
687
|
+
// Canon Part 8: the queue carries ONLY the section slug + sha256 hash pair
|
|
688
|
+
// + ISO timestamp + reason. The governing_thought TEXT never appears in
|
|
689
|
+
// the queue. Queue module is required lazily so the generator stays usable
|
|
690
|
+
// in test environments where the queue module may not be on the path.
|
|
691
|
+
const crypto = require('node:crypto');
|
|
692
|
+
|
|
693
|
+
function brainDerivationQueueModule() {
|
|
694
|
+
try {
|
|
695
|
+
return require('../lib/core/brain-derivation-queue.cjs');
|
|
696
|
+
} catch (_e) {
|
|
697
|
+
return null;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
// Extract governing_thought from a MINTO.md raw body. Mirrors the parser
|
|
702
|
+
// used by parseMintoMd (lib/core/folder-memory-shared.cjs). Frontmatter
|
|
703
|
+
// scalar OR first body line under "## Governing Thought" heading.
|
|
704
|
+
function extractGoverningThought(raw) {
|
|
705
|
+
if (typeof raw !== 'string' || raw.length === 0) return '';
|
|
706
|
+
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
707
|
+
if (fmMatch) {
|
|
708
|
+
const fm = fmMatch[1];
|
|
709
|
+
const m = fm.match(/^governing_thought:\s*(.+)$/m);
|
|
710
|
+
if (m) {
|
|
711
|
+
let v = m[1].trim();
|
|
712
|
+
if ((v.startsWith('"') && v.endsWith('"')) ||
|
|
713
|
+
(v.startsWith("'") && v.endsWith("'"))) {
|
|
714
|
+
v = v.slice(1, -1);
|
|
715
|
+
}
|
|
716
|
+
// Unescape standard YAML double-quote escapes.
|
|
717
|
+
v = v.replace(/\\"/g, '"');
|
|
718
|
+
return v;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
// Body fallback: first non-empty paragraph after the "## Governing Thought" heading.
|
|
722
|
+
const bodyIdx = raw.indexOf('## Governing Thought');
|
|
723
|
+
if (bodyIdx !== -1) {
|
|
724
|
+
const slice = raw.slice(bodyIdx).split(/\r?\n/);
|
|
725
|
+
for (let i = 1; i < slice.length; i++) {
|
|
726
|
+
const t = slice[i].trim();
|
|
727
|
+
if (!t) continue;
|
|
728
|
+
if (t.startsWith('#')) break;
|
|
729
|
+
if (t.startsWith('>')) {
|
|
730
|
+
return t.replace(/^>+\s*/, '').trim();
|
|
731
|
+
}
|
|
732
|
+
return t;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
return '';
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
function sha256GoverningThought(text) {
|
|
739
|
+
return 'sha256:' + crypto.createHash('sha256')
|
|
740
|
+
.update(String(text == null ? '' : text).normalize('NFC'))
|
|
741
|
+
.digest('hex');
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
// Read the prior MINTO.md (if present) and return its governing_thought
|
|
745
|
+
// sha256, or null when no prior file exists. Called BEFORE the new write
|
|
746
|
+
// lands so the post-write enqueue hook can detect a change.
|
|
747
|
+
function readPriorGoverningThoughtHash(targetPath) {
|
|
748
|
+
let raw;
|
|
749
|
+
try {
|
|
750
|
+
raw = fs.readFileSync(targetPath, 'utf-8');
|
|
751
|
+
} catch (_e) {
|
|
752
|
+
return null;
|
|
753
|
+
}
|
|
754
|
+
const gt = extractGoverningThought(raw);
|
|
755
|
+
if (!gt) return null;
|
|
756
|
+
return sha256GoverningThought(gt);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
// Post-regen hook: after MINTO.md is successfully written, compare hashes
|
|
760
|
+
// and enqueue brain-derivation when they differ. Soft-fail on any error
|
|
761
|
+
// so the generator's primary contract is never broken by a queue failure.
|
|
762
|
+
function tryEnqueueBrainDerivation(roomDir, mintoPath, newContent, priorHash) {
|
|
763
|
+
try {
|
|
764
|
+
const Q = brainDerivationQueueModule();
|
|
765
|
+
if (!Q) return;
|
|
766
|
+
const sectionDir = path.dirname(mintoPath);
|
|
767
|
+
const sectionSlug = path.basename(sectionDir);
|
|
768
|
+
// Sanity: only enqueue when section name is a valid slug (skips
|
|
769
|
+
// top-level room-root MINTO.md cases where the dirname is the room).
|
|
770
|
+
const slugSafe = /^[a-z0-9][a-z0-9_-]{0,63}$/.test(sectionSlug);
|
|
771
|
+
if (!slugSafe) return;
|
|
772
|
+
const newGt = extractGoverningThought(newContent);
|
|
773
|
+
const newHash = sha256GoverningThought(newGt);
|
|
774
|
+
if (priorHash !== null && priorHash === newHash) return; // no change
|
|
775
|
+
Q.enqueue(roomDir, sectionSlug, priorHash, newHash, 'governing_thought_changed');
|
|
776
|
+
} catch (_e) {
|
|
777
|
+
// Soft-fail: queue enqueue must never disrupt MINTO write.
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
// Phase 88-04-B: schema_version constant emitted into every MINTO.md
|
|
782
|
+
// frontmatter. Required by the invariants validator (88-00-B) so the
|
|
783
|
+
// atomic write gate accepts generator output.
|
|
784
|
+
const FEYNMAN_MINTO_SCHEMA_VERSION = '1.0';
|
|
785
|
+
|
|
786
|
+
// ---------- Phase 81-03: tier-0 single entry point ----------
|
|
787
|
+
|
|
788
|
+
/**
|
|
789
|
+
* Run the tier-0 deterministic path: pre-81 renderSectionMinto content
|
|
790
|
+
* plus an AAAK compressed footer. This is the single entry point for all
|
|
791
|
+
* three tier-0 branches:
|
|
792
|
+
*
|
|
793
|
+
* 1. --write without --narrative (intentional tier-0)
|
|
794
|
+
* 2. --write --narrative <path> where the file fails to parse
|
|
795
|
+
* 3. --write --narrative <path> where the schema is invalid
|
|
796
|
+
*
|
|
797
|
+
* @param {object} args
|
|
798
|
+
* @param {string} args.roomDir - absolute path to room directory
|
|
799
|
+
* @param {string} args.sectionName - section slug
|
|
800
|
+
* @param {boolean} [args.dryRun=false]
|
|
801
|
+
* @returns {{tier: string, path: string, size: number, warnings: string[]}}
|
|
802
|
+
*/
|
|
803
|
+
function runTier0(args) {
|
|
804
|
+
const roomDir = args.roomDir;
|
|
805
|
+
const sectionName = args.sectionName;
|
|
806
|
+
const dryRun = !!args.dryRun;
|
|
807
|
+
|
|
808
|
+
const resolved = resolveSection(roomDir, sectionName);
|
|
809
|
+
const target = path.join(resolved.section.dir, 'MINTO.md');
|
|
810
|
+
// Phase 88-00: read-before-write so v88 fields preserve across regen.
|
|
811
|
+
const preserved = readPreservedV88Fields(target);
|
|
812
|
+
// Pre-81 structural generation, preserved byte-equivalent.
|
|
813
|
+
const structuralBody = renderSectionMinto(
|
|
814
|
+
resolved.section,
|
|
815
|
+
resolved.artifacts,
|
|
816
|
+
resolved.room,
|
|
817
|
+
preserved
|
|
818
|
+
);
|
|
819
|
+
// Deterministic AAAK compression of the structural body.
|
|
820
|
+
const aaak = compressToAaak(structuralBody, {
|
|
821
|
+
section: resolved.section.name,
|
|
822
|
+
room: resolved.room.roomName,
|
|
823
|
+
});
|
|
824
|
+
const content = attachAaakFooter(structuralBody, aaak);
|
|
825
|
+
|
|
826
|
+
if (dryRun) {
|
|
827
|
+
process.stdout.write(
|
|
828
|
+
'would write tier-0 MINTO.md: ' + target + ' (' + content.length + ' bytes)\n'
|
|
829
|
+
);
|
|
830
|
+
return {
|
|
831
|
+
tier: 'tier-0',
|
|
832
|
+
path: target,
|
|
833
|
+
size: content.length,
|
|
834
|
+
warnings: [],
|
|
835
|
+
envelope: {
|
|
836
|
+
success: true,
|
|
837
|
+
violations: [],
|
|
838
|
+
bytes_written: content.length,
|
|
839
|
+
elapsed_ms: 0,
|
|
840
|
+
path: target,
|
|
841
|
+
},
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
// Phase 88-04-B: atomic write + invariants gate + write-lock rename race.
|
|
845
|
+
const env = atomicWriteMinto(target, content, roomDir);
|
|
846
|
+
if (env.success) {
|
|
847
|
+
process.stdout.write('wrote tier-0 MINTO.md: ' + target + '\n');
|
|
848
|
+
} else {
|
|
849
|
+
process.stderr.write(
|
|
850
|
+
'tier-0 write REJECTED by invariants gate for ' +
|
|
851
|
+
target +
|
|
852
|
+
': ' +
|
|
853
|
+
JSON.stringify(env.violations) +
|
|
854
|
+
'\n'
|
|
855
|
+
);
|
|
856
|
+
}
|
|
857
|
+
return {
|
|
858
|
+
tier: 'tier-0',
|
|
859
|
+
path: target,
|
|
860
|
+
size: env.success ? content.length : 0,
|
|
861
|
+
warnings: env.violations,
|
|
862
|
+
envelope: env,
|
|
863
|
+
};
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
function resolveSection(roomDir, sectionName) {
|
|
867
|
+
const room = scanRoom(roomDir);
|
|
868
|
+
const sections = walkAllSections(room);
|
|
869
|
+
const section = sections.find(function (s) {
|
|
870
|
+
return s.name === sectionName;
|
|
871
|
+
});
|
|
872
|
+
if (!section) {
|
|
873
|
+
throw new Error(
|
|
874
|
+
'section not found in room: ' +
|
|
875
|
+
sectionName +
|
|
876
|
+
' (available: ' +
|
|
877
|
+
sections.map(function (s) { return s.name; }).join(', ') +
|
|
878
|
+
')'
|
|
879
|
+
);
|
|
880
|
+
}
|
|
881
|
+
const artifacts = collectSectionArtifacts(section.dir, room.contentFiles);
|
|
882
|
+
return { room: room, section: section, artifacts: artifacts };
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
function buildStructuralPayload(room, section, artifacts) {
|
|
886
|
+
// Reuse the existing deterministic helpers so there is one source of
|
|
887
|
+
// truth for the structural content. Nothing here calls the LLM.
|
|
888
|
+
const governingPlaceholder = deriveGoverningThought(section, artifacts);
|
|
889
|
+
const meceTree = deriveMeceTree(section, artifacts, section.dir);
|
|
890
|
+
const gaps = deriveGaps(section, artifacts);
|
|
891
|
+
const siblings = findRelatedSections(section, room);
|
|
892
|
+
const sources = artifacts.map(function (f) {
|
|
893
|
+
return path.relative(section.dir, f.path).split(path.sep).join('/');
|
|
894
|
+
});
|
|
895
|
+
const parentRel = path
|
|
896
|
+
.relative(section.dir, path.join(section.parentRoomDir, 'STATE.md'))
|
|
897
|
+
.split(path.sep)
|
|
898
|
+
.join('/');
|
|
899
|
+
|
|
900
|
+
return {
|
|
901
|
+
frontmatter: {
|
|
902
|
+
type: 'section-minto',
|
|
903
|
+
section: section.name,
|
|
904
|
+
created: today(),
|
|
905
|
+
room: room.roomName,
|
|
906
|
+
'parent-moc': 'ROOM.md',
|
|
907
|
+
methodology: 'feynman-minto',
|
|
908
|
+
sources: sources,
|
|
909
|
+
related: siblings.map(function (s) { return '../' + s + '/MINTO.md'; }),
|
|
910
|
+
status: 'active',
|
|
911
|
+
},
|
|
912
|
+
mece_tree: meceTree,
|
|
913
|
+
cross_refs: siblings,
|
|
914
|
+
sources: sources,
|
|
915
|
+
navigation: {
|
|
916
|
+
parent_room: parentRel,
|
|
917
|
+
room_name: room.roomName,
|
|
918
|
+
section_name: section.name,
|
|
919
|
+
},
|
|
920
|
+
gaps: gaps,
|
|
921
|
+
governing_thought_placeholder: governingPlaceholder,
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
function buildArtifactPayload(section, artifacts) {
|
|
926
|
+
return artifacts.map(function (f) {
|
|
927
|
+
const base = path.basename(f.path, '.md');
|
|
928
|
+
const title = slugToTitle(base);
|
|
929
|
+
const rel = path.relative(section.dir, f.path).split(path.sep).join('/');
|
|
930
|
+
return {
|
|
931
|
+
path: rel,
|
|
932
|
+
title: title,
|
|
933
|
+
excerpt: firstBodyLine(f.path),
|
|
934
|
+
};
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
function emitSectionPlanPayload(roomDir, sectionName) {
|
|
939
|
+
const resolved = resolveSection(roomDir, sectionName);
|
|
940
|
+
const structural = buildStructuralPayload(
|
|
941
|
+
resolved.room,
|
|
942
|
+
resolved.section,
|
|
943
|
+
resolved.artifacts
|
|
944
|
+
);
|
|
945
|
+
const artifactList = buildArtifactPayload(
|
|
946
|
+
resolved.section,
|
|
947
|
+
resolved.artifacts
|
|
948
|
+
);
|
|
949
|
+
const targetMinto = path
|
|
950
|
+
.relative(
|
|
951
|
+
resolved.room.roomDir,
|
|
952
|
+
path.join(resolved.section.dir, 'MINTO.md')
|
|
953
|
+
)
|
|
954
|
+
.split(path.sep)
|
|
955
|
+
.join('/');
|
|
956
|
+
const payload = {
|
|
957
|
+
section_path: path
|
|
958
|
+
.relative(resolved.room.roomDir, resolved.section.dir)
|
|
959
|
+
.split(path.sep)
|
|
960
|
+
.join('/'),
|
|
961
|
+
section_name: resolved.section.name,
|
|
962
|
+
artifacts: artifactList,
|
|
963
|
+
target_minto_path: targetMinto,
|
|
964
|
+
structural: structural,
|
|
965
|
+
};
|
|
966
|
+
return payload;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
function renderFeynmanMinto(structural, narrative, room, section, artifacts, preserved) {
|
|
970
|
+
const title = slugToTitle(section.name);
|
|
971
|
+
const date = structural.frontmatter.created;
|
|
972
|
+
const mm = narrative.mental_model;
|
|
973
|
+
|
|
974
|
+
// Phase 88-00: five v88 frontmatter fields appended after existing
|
|
975
|
+
// structural keys, before the closing `---`. Preserved values come from
|
|
976
|
+
// the previous file (if any); last_generated_at is always fresh.
|
|
977
|
+
const v88Lines = renderV88FrontmatterLines(
|
|
978
|
+
preserved || {
|
|
979
|
+
last_artifact_write_seen_at: null,
|
|
980
|
+
reasoning_health_score: null,
|
|
981
|
+
flagged_weaknesses: [],
|
|
982
|
+
decision_log: [],
|
|
983
|
+
}
|
|
984
|
+
);
|
|
985
|
+
|
|
986
|
+
// Frontmatter (YAML-ish, consistent with pre-81 style). Phase 88-04-B
|
|
987
|
+
// adds schema_version and governing_thought as top-level keys so the
|
|
988
|
+
// invariants validator (88-00-B) accepts the tier-1 output. The
|
|
989
|
+
// governing_thought comes straight from the Feynman narrative JSON.
|
|
990
|
+
const fm = structural.frontmatter;
|
|
991
|
+
const gtTier1Escaped = String(narrative.governing_thought || '').replace(/"/g, '\\"');
|
|
992
|
+
const fmLines = [
|
|
993
|
+
'---',
|
|
994
|
+
'schema_version: "' + FEYNMAN_MINTO_SCHEMA_VERSION + '"',
|
|
995
|
+
'type: ' + fm.type,
|
|
996
|
+
'section: ' + fm.section,
|
|
997
|
+
'created: ' + fm.created,
|
|
998
|
+
'room: ' + fm.room,
|
|
999
|
+
'parent-moc: ' + fm['parent-moc'],
|
|
1000
|
+
'methodology: ' + fm.methodology,
|
|
1001
|
+
'sources: [' + fm.sources.join(', ') + ']',
|
|
1002
|
+
'related: [' + fm.related.join(', ') + ']',
|
|
1003
|
+
'status: ' + fm.status,
|
|
1004
|
+
'governing_thought: "' + gtTier1Escaped + '"',
|
|
1005
|
+
...v88Lines,
|
|
1006
|
+
'---',
|
|
1007
|
+
];
|
|
1008
|
+
|
|
1009
|
+
const keyClaimLines = [];
|
|
1010
|
+
narrative.key_claims.forEach(function (claim, i) {
|
|
1011
|
+
keyClaimLines.push('### Claim ' + (i + 1));
|
|
1012
|
+
keyClaimLines.push('');
|
|
1013
|
+
keyClaimLines.push('> [!example] Claim');
|
|
1014
|
+
keyClaimLines.push('> ' + claim);
|
|
1015
|
+
keyClaimLines.push('');
|
|
1016
|
+
});
|
|
1017
|
+
|
|
1018
|
+
const crossRefLines =
|
|
1019
|
+
structural.cross_refs.length === 0
|
|
1020
|
+
? ['- *(no sibling sections to cross-reference)*']
|
|
1021
|
+
: structural.cross_refs.map(function (s) {
|
|
1022
|
+
return '- [[../' + s + '/MINTO.md|' + s + ' reasoning]]';
|
|
1023
|
+
});
|
|
1024
|
+
|
|
1025
|
+
const sourceArtifactLines = artifacts.map(function (f) {
|
|
1026
|
+
const base = path.basename(f.path, '.md');
|
|
1027
|
+
const rel = path.relative(section.dir, f.path).split(path.sep).join('/');
|
|
1028
|
+
return '- [[' + rel + '|' + slugToTitle(base) + ']]';
|
|
1029
|
+
});
|
|
1030
|
+
|
|
1031
|
+
const gapLines = structural.gaps.map(function (g) { return '> - ' + g; });
|
|
1032
|
+
|
|
1033
|
+
return [].concat(
|
|
1034
|
+
fmLines,
|
|
1035
|
+
[
|
|
1036
|
+
'',
|
|
1037
|
+
'# ' + title + ' -- Feynman-MINTO Reasoning',
|
|
1038
|
+
'',
|
|
1039
|
+
'> [!abstract] Governing Thought',
|
|
1040
|
+
'> ' + narrative.governing_thought,
|
|
1041
|
+
'',
|
|
1042
|
+
'## Essence',
|
|
1043
|
+
'',
|
|
1044
|
+
'> [!quote] Irreducible Truth',
|
|
1045
|
+
'> ' + narrative.essence,
|
|
1046
|
+
'',
|
|
1047
|
+
'## Plain Language',
|
|
1048
|
+
'',
|
|
1049
|
+
narrative.plain_language,
|
|
1050
|
+
'',
|
|
1051
|
+
'## Mental Model',
|
|
1052
|
+
'',
|
|
1053
|
+
'> [!tip] Analogy',
|
|
1054
|
+
'> ' + mm.analogy,
|
|
1055
|
+
'',
|
|
1056
|
+
'**Mapping:** ' + mm.mapping,
|
|
1057
|
+
'',
|
|
1058
|
+
'**Where it breaks:** ' + mm.limits,
|
|
1059
|
+
'',
|
|
1060
|
+
'## Sweet Spot',
|
|
1061
|
+
'',
|
|
1062
|
+
narrative.sweet_spot,
|
|
1063
|
+
'',
|
|
1064
|
+
'## Key Claims',
|
|
1065
|
+
'',
|
|
1066
|
+
],
|
|
1067
|
+
keyClaimLines,
|
|
1068
|
+
[
|
|
1069
|
+
'## MECE Issue Tree',
|
|
1070
|
+
'',
|
|
1071
|
+
structural.mece_tree,
|
|
1072
|
+
'',
|
|
1073
|
+
'## Evidence Gaps',
|
|
1074
|
+
'',
|
|
1075
|
+
'> [!warning] Missing Evidence',
|
|
1076
|
+
],
|
|
1077
|
+
gapLines,
|
|
1078
|
+
[
|
|
1079
|
+
'',
|
|
1080
|
+
'## Cross-References',
|
|
1081
|
+
'',
|
|
1082
|
+
],
|
|
1083
|
+
crossRefLines,
|
|
1084
|
+
[
|
|
1085
|
+
'',
|
|
1086
|
+
'## Source Artifacts',
|
|
1087
|
+
'',
|
|
1088
|
+
],
|
|
1089
|
+
sourceArtifactLines,
|
|
1090
|
+
[
|
|
1091
|
+
'',
|
|
1092
|
+
'## Navigation',
|
|
1093
|
+
'',
|
|
1094
|
+
'- Section identity: [[ROOM.md|' + section.name + ' ROOM]]',
|
|
1095
|
+
'- Section status: [[STATE.md|' + section.name + ' STATE]]',
|
|
1096
|
+
'- Parent room: [[' +
|
|
1097
|
+
structural.navigation.parent_room +
|
|
1098
|
+
'|' +
|
|
1099
|
+
room.roomName +
|
|
1100
|
+
']]',
|
|
1101
|
+
'',
|
|
1102
|
+
'---',
|
|
1103
|
+
'*Filed by MindrianOS -- Feynman-MINTO -- ' +
|
|
1104
|
+
date +
|
|
1105
|
+
' -- ' +
|
|
1106
|
+
room.roomName +
|
|
1107
|
+
'/' +
|
|
1108
|
+
section.name +
|
|
1109
|
+
'*',
|
|
1110
|
+
'',
|
|
1111
|
+
]
|
|
1112
|
+
).join('\n');
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
// ---------- Phase 88-04-B: atomic write contract ----------
|
|
1116
|
+
//
|
|
1117
|
+
// Every MINTO.md publish goes through atomicWriteMinto(). Sequence:
|
|
1118
|
+
// 1. openSync(tmp, 'wx') -- exclusive create, EEXIST cleanup
|
|
1119
|
+
// 2. writeSync + fsyncSync -- crash-safe durability
|
|
1120
|
+
// 3. closeSync -- release fd
|
|
1121
|
+
// 4. invariants.validate(tmp) -- gate BEFORE rename so a broken
|
|
1122
|
+
// narrative cannot overwrite a valid
|
|
1123
|
+
// previous MINTO.md
|
|
1124
|
+
// 5. acquireLock(roomDir) -- Phase 87-02 primitive; serializes
|
|
1125
|
+
// concurrent renames across producers
|
|
1126
|
+
// 6. renameSync(tmp, target) -- atomic publish
|
|
1127
|
+
// 7. releaseLock(roomDir)
|
|
1128
|
+
//
|
|
1129
|
+
// Tmp naming convention: <target>.tmp.<pid>.minto
|
|
1130
|
+
// Phase 88-13 guardian sweeps stale orphans matching this pattern at
|
|
1131
|
+
// session-start (mid-write SIGKILL leaves orphans; guardian cleans them).
|
|
1132
|
+
//
|
|
1133
|
+
// Test hooks (all gated behind MOS_TEST=1 so production is unaffected):
|
|
1134
|
+
// MOS_TRACE_FS=1 -- stderr logs "TRACE_FS fsyncSync"
|
|
1135
|
+
// and "TRACE_FS renameSync" lines so
|
|
1136
|
+
// Test 7 can assert ordering.
|
|
1137
|
+
// MOS_TEST_ABORT_AFTER_FSYNC=1 -- exit(42) AFTER fsync but BEFORE
|
|
1138
|
+
// rename, leaving an orphan tmp and
|
|
1139
|
+
// preserving the previous MINTO.md.
|
|
1140
|
+
// Proves Test 3 crash-safety.
|
|
1141
|
+
|
|
1142
|
+
// Mock severity parsing is CLI-level (parsed from argv in the entry block).
|
|
1143
|
+
// Default is null meaning "use the real validator".
|
|
1144
|
+
let MOCK_INVARIANTS_FAIL = null;
|
|
1145
|
+
|
|
1146
|
+
function traceFs(name) {
|
|
1147
|
+
if (process.env.MOS_TRACE_FS === '1') {
|
|
1148
|
+
process.stderr.write('TRACE_FS ' + name + '\n');
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
// Synthetic violations injected when MOS_TEST=1 and --mock-invariants-fail is
|
|
1153
|
+
// set. Lets Test 4 (ERROR rejection) and Test 5 (WARNING passthrough) verify
|
|
1154
|
+
// the gate behavior without engineering a 1500-token narrative.
|
|
1155
|
+
function buildMockViolations(severityName) {
|
|
1156
|
+
const SEV = feynmanMintoInvariants.SEVERITY;
|
|
1157
|
+
const CAT = feynmanMintoInvariants.CATEGORIES;
|
|
1158
|
+
if (severityName === 'error') {
|
|
1159
|
+
return [
|
|
1160
|
+
{
|
|
1161
|
+
category: CAT.SCHEMA,
|
|
1162
|
+
severity: SEV.ERROR,
|
|
1163
|
+
message: 'mock-invariants-fail=error injected for test',
|
|
1164
|
+
},
|
|
1165
|
+
];
|
|
1166
|
+
}
|
|
1167
|
+
if (severityName === 'warning') {
|
|
1168
|
+
return [
|
|
1169
|
+
{
|
|
1170
|
+
category: CAT.COHERENCE,
|
|
1171
|
+
severity: SEV.WARNING,
|
|
1172
|
+
message: 'mock-invariants-fail=warning injected for test',
|
|
1173
|
+
},
|
|
1174
|
+
];
|
|
1175
|
+
}
|
|
1176
|
+
if (severityName === 'critical') {
|
|
1177
|
+
return [
|
|
1178
|
+
{
|
|
1179
|
+
category: CAT.ATOMICITY,
|
|
1180
|
+
severity: SEV.CRITICAL,
|
|
1181
|
+
message: 'mock-invariants-fail=critical injected for test',
|
|
1182
|
+
},
|
|
1183
|
+
];
|
|
1184
|
+
}
|
|
1185
|
+
return [];
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
function atomicWriteMinto(mintoPath, content, roomDir) {
|
|
1189
|
+
const start = Date.now();
|
|
1190
|
+
const tmpPath = mintoPath + '.tmp.' + process.pid + '.minto';
|
|
1191
|
+
const SEV = feynmanMintoInvariants.SEVERITY;
|
|
1192
|
+
|
|
1193
|
+
// Phase 90-02: capture prior governing_thought hash BEFORE the write so
|
|
1194
|
+
// the post-rename enqueue can detect a real change. Soft-fail on read
|
|
1195
|
+
// failure (no prior file -> priorHash stays null -> first regen always
|
|
1196
|
+
// enqueues, which is the correct cold-start behavior).
|
|
1197
|
+
const priorGoverningThoughtHash = readPriorGoverningThoughtHash(mintoPath);
|
|
1198
|
+
|
|
1199
|
+
let fd;
|
|
1200
|
+
try {
|
|
1201
|
+
fd = fs.openSync(tmpPath, 'wx');
|
|
1202
|
+
} catch (e) {
|
|
1203
|
+
if (e.code === 'EEXIST') {
|
|
1204
|
+
// Stale tmp from a prior crash with the same pid slot. Clear and
|
|
1205
|
+
// retry once; Phase 88-13 guardian is the long-term sweeper.
|
|
1206
|
+
try { fs.unlinkSync(tmpPath); } catch (_) {}
|
|
1207
|
+
fd = fs.openSync(tmpPath, 'wx');
|
|
1208
|
+
} else {
|
|
1209
|
+
throw e;
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
try {
|
|
1214
|
+
fs.writeSync(fd, content);
|
|
1215
|
+
traceFs('fsyncSync');
|
|
1216
|
+
fs.fsyncSync(fd);
|
|
1217
|
+
} finally {
|
|
1218
|
+
try { fs.closeSync(fd); } catch (_) {}
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// Test hook: simulate mid-write crash. Exit before rename so the previous
|
|
1222
|
+
// MINTO.md stays intact and an orphan tmp is left for guardian cleanup.
|
|
1223
|
+
if (
|
|
1224
|
+
process.env.MOS_TEST === '1' &&
|
|
1225
|
+
process.env.MOS_TEST_ABORT_AFTER_FSYNC === '1'
|
|
1226
|
+
) {
|
|
1227
|
+
process.stderr.write(
|
|
1228
|
+
'TEST_HOOK abort-after-fsync: exiting before rename (tmp=' + tmpPath + ')\n'
|
|
1229
|
+
);
|
|
1230
|
+
process.exit(42);
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
// --- Invariants gate ---
|
|
1234
|
+
let validation;
|
|
1235
|
+
if (
|
|
1236
|
+
process.env.MOS_TEST === '1' &&
|
|
1237
|
+
MOCK_INVARIANTS_FAIL !== null
|
|
1238
|
+
) {
|
|
1239
|
+
const mockViolations = buildMockViolations(MOCK_INVARIANTS_FAIL);
|
|
1240
|
+
// Derive severity from the highest-severity synthetic violation.
|
|
1241
|
+
const order = [SEV.INFO, SEV.WARNING, SEV.ERROR, SEV.CRITICAL];
|
|
1242
|
+
let maxIdx = -1;
|
|
1243
|
+
for (const v of mockViolations) {
|
|
1244
|
+
const idx = order.indexOf(v.severity);
|
|
1245
|
+
if (idx > maxIdx) maxIdx = idx;
|
|
1246
|
+
}
|
|
1247
|
+
validation = {
|
|
1248
|
+
valid: mockViolations.length === 0,
|
|
1249
|
+
violations: mockViolations,
|
|
1250
|
+
severity: maxIdx === -1 ? null : order[maxIdx],
|
|
1251
|
+
};
|
|
1252
|
+
} else {
|
|
1253
|
+
validation = feynmanMintoInvariants.validate(tmpPath);
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
const blocking = validation.violations.filter(function (v) {
|
|
1257
|
+
return v.severity === SEV.CRITICAL || v.severity === SEV.ERROR;
|
|
1258
|
+
});
|
|
1259
|
+
if (blocking.length > 0) {
|
|
1260
|
+
// Broken output -- do NOT overwrite the previous MINTO.md. Clean up.
|
|
1261
|
+
try { fs.unlinkSync(tmpPath); } catch (_) {}
|
|
1262
|
+
return {
|
|
1263
|
+
success: false,
|
|
1264
|
+
violations: validation.violations,
|
|
1265
|
+
bytes_written: 0,
|
|
1266
|
+
elapsed_ms: Date.now() - start,
|
|
1267
|
+
path: mintoPath,
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
// --- Atomic publish under lock ---
|
|
1272
|
+
// Concurrent producers race on the lock; the primitive throws when
|
|
1273
|
+
// another live PID owns it. Retry with backoff so bursty post-write +
|
|
1274
|
+
// debouncer + on-stop drains do not need coordination above this layer.
|
|
1275
|
+
// A final lock-failure still unlinks the tmp to avoid orphan leaks.
|
|
1276
|
+
let locked = false;
|
|
1277
|
+
let lockErr = null;
|
|
1278
|
+
const LOCK_RETRIES = 12;
|
|
1279
|
+
const LOCK_BASE_MS = 25;
|
|
1280
|
+
const LOCK_CAP_MS = 1600;
|
|
1281
|
+
for (let attempt = 0; attempt < LOCK_RETRIES; attempt++) {
|
|
1282
|
+
try {
|
|
1283
|
+
acquireLock(roomDir);
|
|
1284
|
+
locked = true;
|
|
1285
|
+
lockErr = null;
|
|
1286
|
+
break;
|
|
1287
|
+
} catch (e) {
|
|
1288
|
+
lockErr = e;
|
|
1289
|
+
// Exponential backoff with half-jitter; synchronous so we do not
|
|
1290
|
+
// need event-loop integration in hook scripts.
|
|
1291
|
+
const backoff = Math.min(LOCK_CAP_MS, LOCK_BASE_MS * Math.pow(2, attempt));
|
|
1292
|
+
const sleep = Math.floor(backoff / 2 + Math.random() * (backoff / 2));
|
|
1293
|
+
const end = Date.now() + sleep;
|
|
1294
|
+
while (Date.now() < end) { /* busy-wait per 88-02 sync primitive */ }
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
if (!locked) {
|
|
1298
|
+
// Lock acquisition exhausted retries. Unlink tmp so disk stays clean;
|
|
1299
|
+
// surface as blocking violation so the caller does not assume success.
|
|
1300
|
+
try { fs.unlinkSync(tmpPath); } catch (_) {}
|
|
1301
|
+
return {
|
|
1302
|
+
success: false,
|
|
1303
|
+
violations: validation.violations.concat([{
|
|
1304
|
+
category: feynmanMintoInvariants.CATEGORIES.ATOMICITY,
|
|
1305
|
+
severity: SEV.ERROR,
|
|
1306
|
+
message: 'write-lock acquire failed after ' + LOCK_RETRIES + ' retries: ' +
|
|
1307
|
+
(lockErr && lockErr.message || lockErr),
|
|
1308
|
+
}]),
|
|
1309
|
+
bytes_written: 0,
|
|
1310
|
+
elapsed_ms: Date.now() - start,
|
|
1311
|
+
path: mintoPath,
|
|
1312
|
+
};
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
try {
|
|
1316
|
+
traceFs('renameSync');
|
|
1317
|
+
fs.renameSync(tmpPath, mintoPath);
|
|
1318
|
+
} finally {
|
|
1319
|
+
if (locked) {
|
|
1320
|
+
try { releaseLock(roomDir); } catch (_) {}
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
// Phase 90-02: post-regen hook into the brain-derivation queue. Compares
|
|
1325
|
+
// governing_thought sha256 against the prior file's hash captured before
|
|
1326
|
+
// the write. Soft-fails internally so a queue error never breaks the
|
|
1327
|
+
// primary MINTO contract.
|
|
1328
|
+
tryEnqueueBrainDerivation(roomDir, mintoPath, content, priorGoverningThoughtHash);
|
|
1329
|
+
|
|
1330
|
+
return {
|
|
1331
|
+
success: true,
|
|
1332
|
+
violations: validation.violations,
|
|
1333
|
+
bytes_written: content.length,
|
|
1334
|
+
elapsed_ms: Date.now() - start,
|
|
1335
|
+
path: mintoPath,
|
|
1336
|
+
};
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
function writeSectionFromNarrative(roomDir, sectionName, narrativePath, opts) {
|
|
1340
|
+
const options = opts || {};
|
|
1341
|
+
|
|
1342
|
+
// Phase 81-03: soft validation with fallthrough to runTier0.
|
|
1343
|
+
// Malformed file, unparseable JSON, or invalid schema all route to
|
|
1344
|
+
// tier-0 with a warning printed to stderr.
|
|
1345
|
+
let raw;
|
|
1346
|
+
try {
|
|
1347
|
+
raw = fs.readFileSync(narrativePath, 'utf-8');
|
|
1348
|
+
} catch (e) {
|
|
1349
|
+
process.stderr.write(
|
|
1350
|
+
'WARN tier-0 path: narrative file read failed: ' +
|
|
1351
|
+
narrativePath +
|
|
1352
|
+
': ' +
|
|
1353
|
+
e.message +
|
|
1354
|
+
'\n'
|
|
1355
|
+
);
|
|
1356
|
+
return runTier0({
|
|
1357
|
+
roomDir: roomDir,
|
|
1358
|
+
sectionName: sectionName,
|
|
1359
|
+
dryRun: options.dryRun,
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
let narrative;
|
|
1364
|
+
try {
|
|
1365
|
+
narrative = JSON.parse(raw);
|
|
1366
|
+
} catch (e) {
|
|
1367
|
+
process.stderr.write(
|
|
1368
|
+
'WARN tier-0 path: narrative JSON parse failed: ' +
|
|
1369
|
+
narrativePath +
|
|
1370
|
+
': ' +
|
|
1371
|
+
e.message +
|
|
1372
|
+
', falling back to tier-0\n'
|
|
1373
|
+
);
|
|
1374
|
+
return runTier0({
|
|
1375
|
+
roomDir: roomDir,
|
|
1376
|
+
sectionName: sectionName,
|
|
1377
|
+
dryRun: options.dryRun,
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
const v = validateNarrative(narrative);
|
|
1382
|
+
if (!v.valid) {
|
|
1383
|
+
process.stderr.write(
|
|
1384
|
+
'WARN tier-0 path: narrative-json failed schema validation: ' +
|
|
1385
|
+
narrativePath +
|
|
1386
|
+
': ' +
|
|
1387
|
+
v.errors.join('; ') +
|
|
1388
|
+
', falling back to tier-0\n'
|
|
1389
|
+
);
|
|
1390
|
+
return runTier0({
|
|
1391
|
+
roomDir: roomDir,
|
|
1392
|
+
sectionName: sectionName,
|
|
1393
|
+
dryRun: options.dryRun,
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
const resolved = resolveSection(roomDir, sectionName);
|
|
1398
|
+
const target = path.join(resolved.section.dir, 'MINTO.md');
|
|
1399
|
+
// Phase 88-00: read-before-write so v88 fields preserve across regen.
|
|
1400
|
+
const preserved = readPreservedV88Fields(target);
|
|
1401
|
+
const structural = buildStructuralPayload(
|
|
1402
|
+
resolved.room,
|
|
1403
|
+
resolved.section,
|
|
1404
|
+
resolved.artifacts
|
|
1405
|
+
);
|
|
1406
|
+
const content = renderFeynmanMinto(
|
|
1407
|
+
structural,
|
|
1408
|
+
narrative,
|
|
1409
|
+
resolved.room,
|
|
1410
|
+
resolved.section,
|
|
1411
|
+
resolved.artifacts,
|
|
1412
|
+
preserved
|
|
1413
|
+
);
|
|
1414
|
+
|
|
1415
|
+
if (options.dryRun) {
|
|
1416
|
+
process.stdout.write(
|
|
1417
|
+
'would write MINTO.md: ' + target + ' (' + content.length + ' bytes)\n'
|
|
1418
|
+
);
|
|
1419
|
+
return {
|
|
1420
|
+
tier: 'tier-1',
|
|
1421
|
+
path: target,
|
|
1422
|
+
content: content,
|
|
1423
|
+
outcome: 'planned',
|
|
1424
|
+
envelope: {
|
|
1425
|
+
success: true,
|
|
1426
|
+
violations: [],
|
|
1427
|
+
bytes_written: content.length,
|
|
1428
|
+
elapsed_ms: 0,
|
|
1429
|
+
path: target,
|
|
1430
|
+
},
|
|
1431
|
+
};
|
|
1432
|
+
}
|
|
1433
|
+
// Phase 88-04-B: atomic write + invariants gate. A rejection keeps the
|
|
1434
|
+
// previous MINTO.md intact; caller inspects envelope.success.
|
|
1435
|
+
const env = atomicWriteMinto(target, content, roomDir);
|
|
1436
|
+
if (env.success) {
|
|
1437
|
+
process.stdout.write('wrote MINTO.md: ' + target + '\n');
|
|
1438
|
+
} else {
|
|
1439
|
+
process.stderr.write(
|
|
1440
|
+
'tier-1 write REJECTED by invariants gate for ' +
|
|
1441
|
+
target +
|
|
1442
|
+
': ' +
|
|
1443
|
+
JSON.stringify(env.violations) +
|
|
1444
|
+
'\n'
|
|
1445
|
+
);
|
|
1446
|
+
}
|
|
1447
|
+
return {
|
|
1448
|
+
tier: 'tier-1',
|
|
1449
|
+
path: target,
|
|
1450
|
+
content: content,
|
|
1451
|
+
outcome: env.success ? 'written' : 'rejected',
|
|
1452
|
+
envelope: env,
|
|
1453
|
+
};
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
// ---------- Idempotent write ----------
|
|
1457
|
+
|
|
1458
|
+
function writeOrPrint(targetPath, content, dryRun, roomDir) {
|
|
1459
|
+
let existing = null;
|
|
1460
|
+
try {
|
|
1461
|
+
existing = fs.readFileSync(targetPath, 'utf-8');
|
|
1462
|
+
} catch (_) {
|
|
1463
|
+
/* fresh */
|
|
1464
|
+
}
|
|
1465
|
+
if (existing === content) {
|
|
1466
|
+
if (dryRun) process.stdout.write(`skip (identical): ${targetPath}\n`);
|
|
1467
|
+
return 'skipped';
|
|
1468
|
+
}
|
|
1469
|
+
if (dryRun) {
|
|
1470
|
+
process.stdout.write(
|
|
1471
|
+
`would write MINTO.md: ${targetPath} (${content.length} bytes)\n`
|
|
1472
|
+
);
|
|
1473
|
+
return 'planned';
|
|
1474
|
+
}
|
|
1475
|
+
// Phase 88-04-B: route legacy bare-shell path through the same atomic
|
|
1476
|
+
// contract so batch regenerations cannot produce torn reads or let a
|
|
1477
|
+
// broken narrative overwrite a previous valid MINTO.md.
|
|
1478
|
+
if (roomDir) {
|
|
1479
|
+
const env = atomicWriteMinto(targetPath, content, roomDir);
|
|
1480
|
+
if (env.success) {
|
|
1481
|
+
process.stdout.write(`wrote MINTO.md: ${targetPath}\n`);
|
|
1482
|
+
return 'written';
|
|
1483
|
+
}
|
|
1484
|
+
process.stderr.write(
|
|
1485
|
+
'bare-shell write REJECTED for ' +
|
|
1486
|
+
targetPath +
|
|
1487
|
+
': ' +
|
|
1488
|
+
JSON.stringify(env.violations) +
|
|
1489
|
+
'\n'
|
|
1490
|
+
);
|
|
1491
|
+
return 'skipped';
|
|
1492
|
+
}
|
|
1493
|
+
// Legacy fallback (no roomDir known) -- preserve pre-88-04-B semantics.
|
|
1494
|
+
const tmp = targetPath + '.tmp';
|
|
1495
|
+
fs.writeFileSync(tmp, content);
|
|
1496
|
+
fs.renameSync(tmp, targetPath);
|
|
1497
|
+
process.stdout.write(`wrote MINTO.md: ${targetPath}\n`);
|
|
1498
|
+
return 'written';
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
// ---------- Main ----------
|
|
1502
|
+
|
|
1503
|
+
function generateAllSectionMintos(roomDir, opts = {}) {
|
|
1504
|
+
const dryRun = !!opts.dryRun;
|
|
1505
|
+
const sectionFilter = opts.sectionFilter || null;
|
|
1506
|
+
const room = scanRoom(roomDir);
|
|
1507
|
+
const sections = walkAllSections(room);
|
|
1508
|
+
const results = {
|
|
1509
|
+
planned: 0,
|
|
1510
|
+
written: 0,
|
|
1511
|
+
skipped: 0,
|
|
1512
|
+
empty_skipped: 0,
|
|
1513
|
+
total: 0,
|
|
1514
|
+
};
|
|
1515
|
+
|
|
1516
|
+
for (const section of sections) {
|
|
1517
|
+
if (sectionFilter && section.name !== sectionFilter) continue;
|
|
1518
|
+
if (!fs.existsSync(section.dir)) continue;
|
|
1519
|
+
results.total += 1;
|
|
1520
|
+
|
|
1521
|
+
const artifacts = collectSectionArtifacts(section.dir, room.contentFiles);
|
|
1522
|
+
|
|
1523
|
+
// SECTION-07: skip empty sections (do not write MINTO.md)
|
|
1524
|
+
if (artifacts.length === 0) {
|
|
1525
|
+
results.empty_skipped += 1;
|
|
1526
|
+
process.stdout.write(`skip ${section.name}: empty (no artifacts)\n`);
|
|
1527
|
+
continue;
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
const target = path.join(section.dir, 'MINTO.md');
|
|
1531
|
+
// Phase 88-00: read-before-write so v88 fields preserve across regen.
|
|
1532
|
+
const preserved = readPreservedV88Fields(target);
|
|
1533
|
+
const content = renderSectionMinto(section, artifacts, room, preserved);
|
|
1534
|
+
// Phase 88-04-B: pass the room directory so writeOrPrint can route
|
|
1535
|
+
// through the atomic write contract (openSync 'wx' + fsync +
|
|
1536
|
+
// invariants gate + acquireLock + rename).
|
|
1537
|
+
const outcome = writeOrPrint(target, content, dryRun, roomDir);
|
|
1538
|
+
results[outcome] = (results[outcome] || 0) + 1;
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
process.stdout.write(
|
|
1542
|
+
`\nSection MINTO generator summary for ${room.roomName}: ` +
|
|
1543
|
+
`${results.total} sections walked -- ` +
|
|
1544
|
+
`written=${results.written || 0} planned=${results.planned || 0} ` +
|
|
1545
|
+
`skipped=${results.skipped || 0} empty_skipped=${results.empty_skipped}\n`
|
|
1546
|
+
);
|
|
1547
|
+
|
|
1548
|
+
return results;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
if (require.main === module) {
|
|
1552
|
+
if (!roomArg) {
|
|
1553
|
+
usage();
|
|
1554
|
+
process.exit(1);
|
|
1555
|
+
}
|
|
1556
|
+
const ROOM_DIR = path.resolve(roomArg);
|
|
1557
|
+
if (!fs.existsSync(ROOM_DIR)) {
|
|
1558
|
+
process.stderr.write('ERROR: room dir does not exist: ' + ROOM_DIR + '\n');
|
|
1559
|
+
process.exit(1);
|
|
1560
|
+
}
|
|
1561
|
+
try {
|
|
1562
|
+
if (PLAN_FLAG) {
|
|
1563
|
+
if (!SECTION_FILTER) {
|
|
1564
|
+
process.stderr.write('ERROR: --plan requires --section <name>\n');
|
|
1565
|
+
process.exit(1);
|
|
1566
|
+
}
|
|
1567
|
+
const payload = emitSectionPlanPayload(ROOM_DIR, SECTION_FILTER);
|
|
1568
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
|
|
1569
|
+
} else if (WRITE_FLAG) {
|
|
1570
|
+
if (!SECTION_FILTER) {
|
|
1571
|
+
process.stderr.write('ERROR: --write requires --section <name>\n');
|
|
1572
|
+
process.exit(1);
|
|
1573
|
+
}
|
|
1574
|
+
// Phase 88-04-B: propagate CLI mock flag to the atomic-write gate.
|
|
1575
|
+
// Gated by MOS_TEST=1 inside atomicWriteMinto; belt-and-suspenders
|
|
1576
|
+
// check here keeps production config changes visibly rejected.
|
|
1577
|
+
if (MOCK_INVARIANTS_FAIL_CLI && process.env.MOS_TEST !== '1') {
|
|
1578
|
+
process.stderr.write(
|
|
1579
|
+
'ERROR: --mock-invariants-fail requires MOS_TEST=1 (test-only flag)\n'
|
|
1580
|
+
);
|
|
1581
|
+
process.exit(1);
|
|
1582
|
+
}
|
|
1583
|
+
MOCK_INVARIANTS_FAIL = MOCK_INVARIANTS_FAIL_CLI;
|
|
1584
|
+
let result;
|
|
1585
|
+
if (!NARRATIVE_PATH) {
|
|
1586
|
+
// Phase 81-03: no narrative means tier-0 path. Route through the
|
|
1587
|
+
// single runTier0 entry point which appends an AAAK footer.
|
|
1588
|
+
process.stderr.write(
|
|
1589
|
+
'WARN tier-0 path: no narrative provided, running tier-0 for section ' +
|
|
1590
|
+
SECTION_FILTER +
|
|
1591
|
+
'\n'
|
|
1592
|
+
);
|
|
1593
|
+
result = runTier0({
|
|
1594
|
+
roomDir: ROOM_DIR,
|
|
1595
|
+
sectionName: SECTION_FILTER,
|
|
1596
|
+
dryRun: DRY_RUN,
|
|
1597
|
+
});
|
|
1598
|
+
} else {
|
|
1599
|
+
result = writeSectionFromNarrative(ROOM_DIR, SECTION_FILTER, NARRATIVE_PATH, {
|
|
1600
|
+
dryRun: DRY_RUN,
|
|
1601
|
+
});
|
|
1602
|
+
}
|
|
1603
|
+
// Phase 88-04-B: machine-parsable envelope. Callers (88-04 post-write
|
|
1604
|
+
// hook, 88-06 on-stop drain, 88-13 guardian) read this to know
|
|
1605
|
+
// whether the write landed or the invariants gate rejected it.
|
|
1606
|
+
if (result && result.envelope) {
|
|
1607
|
+
process.stdout.write(JSON.stringify(result.envelope) + '\n');
|
|
1608
|
+
}
|
|
1609
|
+
} else {
|
|
1610
|
+
// Legacy / bare-shell path: preserved verbatim.
|
|
1611
|
+
generateAllSectionMintos(ROOM_DIR, {
|
|
1612
|
+
dryRun: DRY_RUN,
|
|
1613
|
+
sectionFilter: SECTION_FILTER,
|
|
1614
|
+
});
|
|
1615
|
+
}
|
|
1616
|
+
} catch (e) {
|
|
1617
|
+
process.stderr.write('ERROR: ' + e.message + '\n');
|
|
1618
|
+
process.exit(2);
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
module.exports = {
|
|
1623
|
+
generateAllSectionMintos,
|
|
1624
|
+
renderSectionMinto,
|
|
1625
|
+
collectSectionArtifacts,
|
|
1626
|
+
deriveGoverningThought,
|
|
1627
|
+
readGoverningThoughtFromGraph,
|
|
1628
|
+
deriveClaims,
|
|
1629
|
+
deriveMeceTree,
|
|
1630
|
+
deriveGaps,
|
|
1631
|
+
findRelatedSections,
|
|
1632
|
+
// Phase 81-01 additions
|
|
1633
|
+
emitSectionPlanPayload,
|
|
1634
|
+
writeSectionFromNarrative,
|
|
1635
|
+
renderFeynmanMinto,
|
|
1636
|
+
buildStructuralPayload,
|
|
1637
|
+
buildArtifactPayload,
|
|
1638
|
+
// Phase 81-03 additions
|
|
1639
|
+
runTier0,
|
|
1640
|
+
// Phase 88-04-B addition
|
|
1641
|
+
atomicWriteMinto,
|
|
1642
|
+
};
|