@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,1213 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/*
|
|
3
|
+
* Phase 155-02 -- lib/core/navigation/room-birth.cjs
|
|
4
|
+
*
|
|
5
|
+
* The birth-transaction keystone: birthRoom(opts) orchestrates the Q1 7-step
|
|
6
|
+
* birth sequence as a single reliable operation with the SQLite transaction as
|
|
7
|
+
* the one genuinely ACID block.
|
|
8
|
+
*
|
|
9
|
+
* Doctrine: Canon Parts 8 + 9; SEED-022 (birth transaction keystone);
|
|
10
|
+
* SEED-001 partial (sub-room creation side-effects).
|
|
11
|
+
*
|
|
12
|
+
* Allow-list rationale:
|
|
13
|
+
* This module opens room.db via lib/core/room-db.cjs::openRoomDb (the lazy
|
|
14
|
+
* creator). openRoomDbForCaller is FORBIDDEN here (it refuses to create
|
|
15
|
+
* room.db). This module is in lib/core/navigation/ so
|
|
16
|
+
* scripts/check-substrate.cjs accepts it (regex /^lib\/core\/navigation\//).
|
|
17
|
+
*
|
|
18
|
+
* Q1 7-step birth sequence (from RESEARCH, the primary correction):
|
|
19
|
+
* STEP 1 -- scaffold (idempotent, unregistered)
|
|
20
|
+
* mkdir + .room-root sentinel + scaffoldRoomSkeleton + feynman-seed-writer
|
|
21
|
+
* per section + USER.md (MUST happen before confirmNode resolveByUser)
|
|
22
|
+
* STEP 2 -- SQLite transaction (the ACID block; mirrors writeBreakthrough D-20)
|
|
23
|
+
* openRoomDb -> BEGIN -> writeClaimNode (venture node) -> setFocus ->
|
|
24
|
+
* drainBirthGateAnswers -> confirmNode batch -> room_created memory_event ->
|
|
25
|
+
* COMMIT. ROLLBACK on any error. Post-commit: logOperatorTransition.
|
|
26
|
+
* STEP 3 -- compute-state (writes STATE.md; NEVER authored)
|
|
27
|
+
* STEP 4 (COMMIT POINT) -- room-registry create (atomic tmp+mv; flips active
|
|
28
|
+
* pointer; the last structural step -- registry-first dangles the active
|
|
29
|
+
* pointer during the structurally-incomplete window)
|
|
30
|
+
* STEP 5 -- reconcileMemoryArtifacts (cortex + SENS-08 scalars live)
|
|
31
|
+
* STEP 6 -- migrateToRoom (drains banked opportunities + highlights; gate
|
|
32
|
+
* answers consumed in STEP 2 via drainBirthGateAnswers are safe)
|
|
33
|
+
* STEP 7 -- BRAIN derivation enqueue (log line only; Phase 90 enqueue is
|
|
34
|
+
* optional here; the comment prevents a future plan from omitting it)
|
|
35
|
+
*
|
|
36
|
+
* The scaffold-before-registry order is the primary correction from RESEARCH Q1:
|
|
37
|
+
* registry-first would dangle the active pointer during the structurally-
|
|
38
|
+
* incomplete window when the room has no room.db and no memory files yet.
|
|
39
|
+
*
|
|
40
|
+
* Canon Part 8: zero Brain egress. All writes are LOCAL to the caller's room.db
|
|
41
|
+
* and the filesystem. gateAnswers.free_text rides REJECTED_BECAUSE edges only;
|
|
42
|
+
* the reason scalar is a short string, not raw prose egress.
|
|
43
|
+
* Canon Part 9: SQL is the local mind. room.db is created via openRoomDb (the
|
|
44
|
+
* lazy creator), never openRoomDbForCaller (which refuses creation).
|
|
45
|
+
* Canon Part 9 v1.5 audit-node carve-out: room_created + birth_gate_answered
|
|
46
|
+
* memory_events are SYSTEM-BOOKKEEPING nodes (created_by=system,
|
|
47
|
+
* review_status=confirmed); they record what the system DID, not a venture
|
|
48
|
+
* truth-claim. The venture claim (writeClaimNode) is a TRUTH-CLAIM node that
|
|
49
|
+
* lands review_status='proposed'; confirmNode promotes it via the human byUser
|
|
50
|
+
* path. No CHOSE edge is written anywhere (CHOSE is not in ALLOWED_EDGE_TYPES;
|
|
51
|
+
* RESEARCH Pitfall 7 verified).
|
|
52
|
+
*
|
|
53
|
+
* T-155-02-02 mitigation: roomDir path traversal in subprocess calls. Validate
|
|
54
|
+
* roomDir is absolute and reject paths containing '..' before execSync.
|
|
55
|
+
* Shell args are double-quoted in the execSync command.
|
|
56
|
+
*
|
|
57
|
+
* NO em-dashes anywhere in this file (CLAUDE.md HARD RULE).
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
const fs = require('node:fs');
|
|
61
|
+
const path = require('node:path');
|
|
62
|
+
const os = require('node:os');
|
|
63
|
+
const { execSync } = require('node:child_process');
|
|
64
|
+
|
|
65
|
+
const roomDbMod = require('../room-db.cjs');
|
|
66
|
+
const scaffold = require('../room-skeleton-scaffold.cjs');
|
|
67
|
+
// feynman-seed-writer is lazy-required inside birthRoom() below to avoid the
|
|
68
|
+
// circular dep: feynman-seed-writer -> navigation -> room-birth -> feynman-seed-writer.
|
|
69
|
+
// Navigation.cjs now requires room-birth.cjs (the re-export), so a top-level
|
|
70
|
+
// require of feynman-seed-writer here would close a require cycle that would
|
|
71
|
+
// leave feynman-seed-writer with an incomplete navigation export at load time.
|
|
72
|
+
// const feynmanSeedWriter = require('../feynman/feynman-seed-writer.cjs');
|
|
73
|
+
|
|
74
|
+
// Import navigation submodules DIRECTLY to avoid the circular dependency:
|
|
75
|
+
// navigation.cjs requires room-birth.cjs; room-birth.cjs requiring navigation.cjs
|
|
76
|
+
// back would create a circular dep where navigation exports are {} on first access.
|
|
77
|
+
// As an allow-listed navigation/ submodule, direct submodule imports are legal.
|
|
78
|
+
const memoryEvents = require('./memory-events.cjs');
|
|
79
|
+
const edges = require('./edges.cjs');
|
|
80
|
+
// Phase 162-02 (R11 / D-B): real Section nodes written into room.db at birth.
|
|
81
|
+
// node-insert is the NOT-NULL-safe shared upsert helper (HARD-02 chokepoint);
|
|
82
|
+
// it takes a caller-owned conn and never opens room.db itself, so it is legal to
|
|
83
|
+
// require from this allow-listed navigation/ submodule.
|
|
84
|
+
const { insertNode } = require('../node-insert.cjs');
|
|
85
|
+
const focusMod = require('./focus.cjs');
|
|
86
|
+
const typedClaim = require('./typed-claim.cjs');
|
|
87
|
+
const confirmNodeMod = require('./confirm-node.cjs');
|
|
88
|
+
const spineEvents = require('./spine-events.cjs');
|
|
89
|
+
const scratchpadOps = require('../scratchpad-ops.cjs');
|
|
90
|
+
// reconcile-memory-runner requires navigation.cjs; since navigation.cjs now requires
|
|
91
|
+
// room-birth.cjs (us), a top-level require would create a circular dep that leaves
|
|
92
|
+
// reconcileRunner.reconcileMemoryArtifacts undefined at load time. Lazy-require
|
|
93
|
+
// inside birthRoom() at the call site instead.
|
|
94
|
+
// const reconcileRunner = require('../memory/reconcile-memory-runner.cjs');
|
|
95
|
+
const userMdOps = require('../user-md-ops.cjs');
|
|
96
|
+
|
|
97
|
+
const REPO_ROOT = path.resolve(__dirname, '..', '..', '..');
|
|
98
|
+
|
|
99
|
+
// SECTION_NAMES is read live from lib/core/room-skeleton-scaffold.cjs (single
|
|
100
|
+
// source of truth there) as of Phase 275 (D-01). A re-copied literal here is
|
|
101
|
+
// the exact propagation-gap class Phase 273 and Phase 276 already named -- do
|
|
102
|
+
// not reintroduce a hand-typed mirror.
|
|
103
|
+
//
|
|
104
|
+
// Fail loud, never silent-fallback: if the scaffold's export is missing or
|
|
105
|
+
// empty, writeSectionNodes would become a silent no-op that leaves a room
|
|
106
|
+
// with zero structural anchors while birthRoom still reports success. That
|
|
107
|
+
// false-success shape is the exact disease Phase 276 exists to close, so this
|
|
108
|
+
// guard writes to stderr and still uses the scaffold's export as the sole
|
|
109
|
+
// source (never a re-typed literal, never an empty-array substitute).
|
|
110
|
+
if (!Array.isArray(scaffold.SECTION_NAMES) || scaffold.SECTION_NAMES.length === 0) {
|
|
111
|
+
process.stderr.write(
|
|
112
|
+
'[room-birth] FATAL: scaffold.SECTION_NAMES is missing or empty; ' +
|
|
113
|
+
'birthRoom would silently write zero Section nodes.\n'
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
const SECTION_NAMES = Object.freeze(scaffold.SECTION_NAMES.slice());
|
|
117
|
+
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// T-155-02-02: Path safety guard. Rejects paths containing '..' components so
|
|
120
|
+
// shell arg injection via a crafted roomDir cannot escape the ROOMS_HOME tree.
|
|
121
|
+
// Returns null if the path is safe, or a reason string if not.
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
function _pathSafetyReason(p) {
|
|
124
|
+
if (typeof p !== 'string' || p.length === 0) return 'empty_path';
|
|
125
|
+
if (!path.isAbsolute(p)) return 'relative_path';
|
|
126
|
+
const normalized = path.normalize(p);
|
|
127
|
+
// Reject any path that after normalization contains a '..' segment.
|
|
128
|
+
if (normalized.split(path.sep).includes('..')) return 'path_traversal';
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// drainBirthGateAnswers(db, roomDir, gateAnswers, ventureNodeId)
|
|
134
|
+
//
|
|
135
|
+
// Called from STEP 2 (inside the SQLite BEGIN...COMMIT block). Fills the
|
|
136
|
+
// Plan 01 stub in lib/core/scratchpad-ops.cjs by providing the real body here
|
|
137
|
+
// (the stub remains as the export; this internal helper IS the body). For
|
|
138
|
+
// each gateAnswers entry:
|
|
139
|
+
// 1. logMemoryEvent with event_type='birth_gate_answered'
|
|
140
|
+
// 2. writeEdge with the typed cascade edge:
|
|
141
|
+
// Approve / RunMethodology -> FILED_AS_DECISION
|
|
142
|
+
// Defer -> DEFERRED
|
|
143
|
+
// Reject -> REJECTED_BECAUSE (reason = entry.free_text)
|
|
144
|
+
// <anything else> -> FILED_AS_DECISION (safe default)
|
|
145
|
+
// NEVER write CHOSE (not in ALLOWED_EDGE_TYPES; RESEARCH Pitfall 7 verified).
|
|
146
|
+
//
|
|
147
|
+
// ventureNodeId is the claim node minted in STEP 2 (writeClaimNode result).
|
|
148
|
+
// Defensive: a writeEdge failure is tolerated; the logMemoryEvent result stands.
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
function drainBirthGateAnswers(db, roomDir, gateAnswers, ventureNodeId) {
|
|
151
|
+
const answers = Array.isArray(gateAnswers) ? gateAnswers : [];
|
|
152
|
+
let drained = 0;
|
|
153
|
+
|
|
154
|
+
for (const entry of answers) {
|
|
155
|
+
const gate_id = entry.gate_id || 'UNKNOWN';
|
|
156
|
+
const canonical_verb = typeof entry.canonical_verb === 'string' ? entry.canonical_verb : '';
|
|
157
|
+
const option_key = entry.option_key || '';
|
|
158
|
+
|
|
159
|
+
// Log the birth_gate_answered memory_event (system-bookkeeping; Part 9 v1.5
|
|
160
|
+
// audit-node carve-out: records WHAT the navigator decided at the gate;
|
|
161
|
+
// created_by=system review_status=confirmed is canon-legal).
|
|
162
|
+
try {
|
|
163
|
+
memoryEvents.logEvent(db, 'birth_gate_answered', {
|
|
164
|
+
gate_id: gate_id,
|
|
165
|
+
canonical_verb: canonical_verb,
|
|
166
|
+
option_key: option_key,
|
|
167
|
+
created_by: 'system',
|
|
168
|
+
source_path: 'birth:' + gate_id,
|
|
169
|
+
});
|
|
170
|
+
} catch (_e) {
|
|
171
|
+
// Tolerate: a log failure never blocks the edge write.
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Write the typed cascade edge from the venture node to a stable gate anchor.
|
|
175
|
+
// Target: a gate anchor node. The edges table enforces FK(source, target) ->
|
|
176
|
+
// nodes(id), so we must mint a gate anchor node before writing the edge.
|
|
177
|
+
// Gate anchor nodes are SYSTEM-BOOKKEEPING (Part 9 v1.5 audit-node carve-out:
|
|
178
|
+
// records the gate decision, not a venture truth-claim); created_by=system
|
|
179
|
+
// review_status=confirmed is canon-legal. OPEN-Q7: batch attribution of gate
|
|
180
|
+
// answers; revisit for per-answer if navigator decides.
|
|
181
|
+
let edgeType;
|
|
182
|
+
if (canonical_verb === 'Approve' || canonical_verb === 'RunMethodology') {
|
|
183
|
+
edgeType = 'FILED_AS_DECISION';
|
|
184
|
+
} else if (canonical_verb === 'Defer') {
|
|
185
|
+
edgeType = 'DEFERRED';
|
|
186
|
+
} else if (canonical_verb === 'Reject') {
|
|
187
|
+
edgeType = 'REJECTED_BECAUSE';
|
|
188
|
+
} else {
|
|
189
|
+
edgeType = 'FILED_AS_DECISION'; // safe default
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const sourceId = ventureNodeId || ('birth_claim:nosession');
|
|
193
|
+
const targetId = 'birth_gate:' + gate_id + ':' + option_key;
|
|
194
|
+
|
|
195
|
+
// Ensure the source stub exists when ventureNodeId was not provided (FK requirement).
|
|
196
|
+
// This path should not be reached in normal birthRoom execution (ventureNodeId is
|
|
197
|
+
// set from writeClaimNode), but guards the standalone-call case.
|
|
198
|
+
if (!ventureNodeId) {
|
|
199
|
+
try {
|
|
200
|
+
const nowMs2 = Date.now();
|
|
201
|
+
db.prepare(
|
|
202
|
+
'INSERT OR IGNORE INTO nodes (id, type, properties, source_path, created_by, ' +
|
|
203
|
+
'confidence, review_status, created_at, last_seen_at) ' +
|
|
204
|
+
"VALUES (?, 'birth_gate_anchor', '{}', 'birth:nosession', 'system', NULL, 'confirmed', ?, ?)"
|
|
205
|
+
).run(sourceId, nowMs2, nowMs2);
|
|
206
|
+
} catch (_e) {
|
|
207
|
+
// Tolerate.
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Ensure the gate anchor node exists in the nodes table (FK requirement).
|
|
212
|
+
// INSERT OR IGNORE so idempotent re-runs do not overwrite existing anchors.
|
|
213
|
+
try {
|
|
214
|
+
const nowMs = Date.now();
|
|
215
|
+
const gateAnchorProps = JSON.stringify({
|
|
216
|
+
gate_id: gate_id,
|
|
217
|
+
option_key: option_key,
|
|
218
|
+
canonical_verb: canonical_verb,
|
|
219
|
+
event_type: 'birth_gate_anchor',
|
|
220
|
+
});
|
|
221
|
+
db.prepare(
|
|
222
|
+
'INSERT OR IGNORE INTO nodes (id, type, properties, source_path, created_by, ' +
|
|
223
|
+
'confidence, review_status, created_at, last_seen_at) ' +
|
|
224
|
+
"VALUES (?, 'birth_gate_anchor', ?, ?, 'system', NULL, 'confirmed', ?, ?)"
|
|
225
|
+
).run(targetId, gateAnchorProps, 'birth:' + gate_id, nowMs, nowMs);
|
|
226
|
+
} catch (_e) {
|
|
227
|
+
// Tolerate: if the anchor insert fails, the edge write will also fail but
|
|
228
|
+
// drainBirthGateAnswers will increment drained and continue.
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const edgeProps = {};
|
|
232
|
+
if (edgeType === 'REJECTED_BECAUSE' && typeof entry.free_text === 'string' && entry.free_text.length > 0) {
|
|
233
|
+
// T-155-02-02 / Canon Part 8: only the reason scalar (short string) rides the edge.
|
|
234
|
+
// The free_text is truncated to 200 chars so no raw prose egress occurs.
|
|
235
|
+
edgeProps.reason = String(entry.free_text).slice(0, 200);
|
|
236
|
+
}
|
|
237
|
+
edgeProps.gate_id = gate_id;
|
|
238
|
+
|
|
239
|
+
try {
|
|
240
|
+
edges.writeEdge(db, {
|
|
241
|
+
source_id: sourceId,
|
|
242
|
+
target_id: targetId,
|
|
243
|
+
edge_type: edgeType,
|
|
244
|
+
properties: edgeProps,
|
|
245
|
+
});
|
|
246
|
+
} catch (_e) {
|
|
247
|
+
// Tolerate: writeEdge failure does not block the overall drain.
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
drained++;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return { ok: true, drained: drained };
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
// writeSectionNodes(db, sectionSlugs) -- Phase 162-02 (R11 / D-B).
|
|
258
|
+
//
|
|
259
|
+
// Upserts one real Section node per section slug into room.db using the shared
|
|
260
|
+
// NOT-NULL-safe insertNode helper, then promotes review_status to 'confirmed'
|
|
261
|
+
// (Part 9 v1.5 audit-node carve-out: Section nodes are system-bookkeeping
|
|
262
|
+
// structural anchors, not truth-claims, so created_by=system review_status=
|
|
263
|
+
// confirmed is canon-legal). Idempotent: insertNode ON CONFLICT(id) upserts, and
|
|
264
|
+
// the review_status UPDATE is a no-op on an already-confirmed row.
|
|
265
|
+
//
|
|
266
|
+
// The caller owns the transaction: birthRoom calls this inside its STEP 2
|
|
267
|
+
// BEGIN..COMMIT; the migration calls it inside its own BEGIN..COMMIT. This helper
|
|
268
|
+
// NEVER opens room.db itself (it receives the caller-owned db handle), so it adds
|
|
269
|
+
// zero direct-open surface (Canon Part 9 chokepoint discipline).
|
|
270
|
+
//
|
|
271
|
+
// Returns the count of Section slugs written.
|
|
272
|
+
// ---------------------------------------------------------------------------
|
|
273
|
+
function writeSectionNodes(db, sectionSlugs) {
|
|
274
|
+
const slugs = Array.isArray(sectionSlugs) ? sectionSlugs : [];
|
|
275
|
+
let written = 0;
|
|
276
|
+
for (const slug of slugs) {
|
|
277
|
+
const label = String(slug).replace(/-/g, ' ').toUpperCase();
|
|
278
|
+
const props = JSON.stringify({ section: slug, name: slug, label, created_by: 'system' });
|
|
279
|
+
try {
|
|
280
|
+
insertNode(db, slug, 'Section', props, {
|
|
281
|
+
source_path: 'system:section-anchor',
|
|
282
|
+
created_by: 'system',
|
|
283
|
+
// R17-02: 'observation' -- system-bookkeeping structural anchor.
|
|
284
|
+
epistemic_type: 'observation',
|
|
285
|
+
});
|
|
286
|
+
// Promote to confirmed (system-bookkeeping). On the un-migrated 3-column
|
|
287
|
+
// schema there is no review_status column, so this UPDATE is tolerated.
|
|
288
|
+
// Phase 194-06 Task 1: node-birth bookkeeping. A co-session cannot hold a
|
|
289
|
+
// readVersion of a Section node being born at room creation, so the
|
|
290
|
+
// reconcile-guard CAS token bump (last_modified_at) is intentionally OMITTED;
|
|
291
|
+
// allowlisted in tests/test-194-lastmod-discipline.test.cjs.
|
|
292
|
+
try {
|
|
293
|
+
db.prepare("UPDATE nodes SET review_status = 'confirmed' WHERE id = ? AND type = 'Section'").run(slug);
|
|
294
|
+
} catch (_e) {
|
|
295
|
+
// Un-migrated schema has no review_status column; tolerate.
|
|
296
|
+
}
|
|
297
|
+
written += 1;
|
|
298
|
+
} catch (_e) {
|
|
299
|
+
// Tolerate a single-node insert failure; the rest still write.
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return written;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// ===========================================================================
|
|
306
|
+
// Phase 195-03 (FCM-04/05/06): born-wired sub-room birth.
|
|
307
|
+
//
|
|
308
|
+
// A born-wired birth is a PARENT sub-room birth (opts.parent set) explicitly
|
|
309
|
+
// requested with opts.bornWired === true. It layers four guarantees on top of
|
|
310
|
+
// the shipped 7-step keystone:
|
|
311
|
+
// (1) a HUMAN-APPROVAL gate fires BEFORE mkdir (FCM-06); Reject -> no folder,
|
|
312
|
+
// and the rejection is recorded as graph data in the PARENT room.db.
|
|
313
|
+
// (2) the child->parent NESTED_WITHIN lineage edge is written INSIDE the
|
|
314
|
+
// STEP-2 ACID block, so lineage is atomic with birth (FCM-05 side-effect 3).
|
|
315
|
+
// (3) the full 6-file memory complement is seeded synchronously (BRAIN.md stub
|
|
316
|
+
// at birth) and, when the parent .umbilical marks USER/BRAIN `parent`, the
|
|
317
|
+
// child derives them from the parent (generic enums/handles only; Part 8).
|
|
318
|
+
// (4) SEED-001's FIVE side-effects wire atomically or the whole birth unwinds
|
|
319
|
+
// via a compensating reverse-order rollback (clone of room-discard-cascade)
|
|
320
|
+
// -- no half-born orphan (Part 11 R1/R2 fail-closed).
|
|
321
|
+
//
|
|
322
|
+
// The non-bornWired path (top-level rooms; the Phase 169 self-heal parent birth)
|
|
323
|
+
// is byte-unchanged: every born-wired branch is guarded by `bornWired`.
|
|
324
|
+
// ===========================================================================
|
|
325
|
+
|
|
326
|
+
// runBirthGate(options, ctx) -- resolve the pre-mkdir approval decision (FCM-06).
|
|
327
|
+
// options.birthGate may be a function (ctx)->decision (the AskUserQuestion / F.8
|
|
328
|
+
// answer supplied by the command layer) OR a decision object. Absent decision =
|
|
329
|
+
// Reject (fail-closed: no silent promotion of a section to a sub-room).
|
|
330
|
+
function runBirthGate(options, ctx) {
|
|
331
|
+
const g = options.birthGate;
|
|
332
|
+
let decision = null;
|
|
333
|
+
if (typeof g === 'function') {
|
|
334
|
+
try { decision = g(ctx); } catch (_e) { decision = null; }
|
|
335
|
+
} else if (g && typeof g === 'object') {
|
|
336
|
+
decision = g;
|
|
337
|
+
}
|
|
338
|
+
if (!decision || typeof decision !== 'object') {
|
|
339
|
+
return { approved: false, canonical_verb: 'Reject', free_text: 'no_gate_decision' };
|
|
340
|
+
}
|
|
341
|
+
const verb = typeof decision.canonical_verb === 'string' ? decision.canonical_verb : '';
|
|
342
|
+
const approved = decision.approved === true || verb === 'Approve' || verb === 'RunMethodology';
|
|
343
|
+
return {
|
|
344
|
+
approved: approved,
|
|
345
|
+
canonical_verb: approved ? (verb || 'Approve') : (verb || 'Reject'),
|
|
346
|
+
free_text: typeof decision.free_text === 'string' ? decision.free_text : '',
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function _roomsHome() {
|
|
351
|
+
return process.env.MINDRIAN_ROOMS_HOME || path.join(os.homedir(), 'MindrianRooms');
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function _readRegistry(roomsHome) {
|
|
355
|
+
try {
|
|
356
|
+
const regPath = path.join(roomsHome, '.rooms', 'registry.json');
|
|
357
|
+
if (!fs.existsSync(regPath)) return null;
|
|
358
|
+
return JSON.parse(fs.readFileSync(regPath, 'utf8'));
|
|
359
|
+
} catch (_e) { return null; }
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function _registryEntry(reg, slug) {
|
|
363
|
+
if (!reg) return null;
|
|
364
|
+
const rooms = reg.rooms;
|
|
365
|
+
if (Array.isArray(rooms)) return rooms.find((r) => r && (r.slug === slug || r.name === slug)) || null;
|
|
366
|
+
if (rooms && typeof rooms === 'object') return rooms[slug] || null;
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Resolve a registered room's absolute directory from the registry (parent dir
|
|
371
|
+
// resolution for the born-wired side-effects). Returns '' on miss.
|
|
372
|
+
function _resolveRoomDirFromRegistry(slug, roomsHome) {
|
|
373
|
+
const entry = _registryEntry(_readRegistry(roomsHome), slug);
|
|
374
|
+
if (!entry) return '';
|
|
375
|
+
if (typeof entry.abs_path === 'string' && entry.abs_path.length) return entry.abs_path;
|
|
376
|
+
if (typeof entry.path === 'string' && entry.path.length) {
|
|
377
|
+
return path.isAbsolute(entry.path) ? entry.path : path.join(roomsHome, entry.path);
|
|
378
|
+
}
|
|
379
|
+
return path.join(roomsHome, slug);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// depth = parent depth + 1 (root is depth 0). Best-effort; defaults to 1.
|
|
383
|
+
function _computeDepth(roomsHome, parentSlug) {
|
|
384
|
+
const entry = _registryEntry(_readRegistry(roomsHome), parentSlug);
|
|
385
|
+
const pd = entry && Number(entry.depth);
|
|
386
|
+
return (Number.isFinite(pd) && pd >= 0) ? pd + 1 : 1;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Reverse-order compensating teardown (clone of room-discard-cascade order:
|
|
390
|
+
// close db handle -> remove filesystem scaffold -> purge registry key). Leaves
|
|
391
|
+
// NO half-born orphan (Part 11 R1/R2 fail-closed).
|
|
392
|
+
function _bornWiredRollback(roomDir, slug, roomsHome, dbHandle, parentSlug) {
|
|
393
|
+
try { if (dbHandle) dbHandle.close(); } catch (_e) {}
|
|
394
|
+
try { fs.rmSync(roomDir, { recursive: true, force: true }); } catch (_e) {}
|
|
395
|
+
try { _removeRegistryKey(roomsHome, slug, parentSlug); } catch (_e) {}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// Remove the child registry key + revert the parent's children entry (rollback).
|
|
399
|
+
function _removeRegistryKey(roomsHome, slug, parentSlug) {
|
|
400
|
+
const regPath = path.join(roomsHome, '.rooms', 'registry.json');
|
|
401
|
+
if (!fs.existsSync(regPath)) return false;
|
|
402
|
+
const reg = JSON.parse(fs.readFileSync(regPath, 'utf8'));
|
|
403
|
+
if (!reg || typeof reg.rooms !== 'object' || Array.isArray(reg.rooms)) return false;
|
|
404
|
+
let changed = false;
|
|
405
|
+
if (reg.rooms[slug]) { delete reg.rooms[slug]; changed = true; }
|
|
406
|
+
if (reg.active === slug) { reg.active = ''; changed = true; }
|
|
407
|
+
const parentEntry = parentSlug ? reg.rooms[parentSlug] : null;
|
|
408
|
+
if (parentEntry && Array.isArray(parentEntry.children)) {
|
|
409
|
+
const before = parentEntry.children.length;
|
|
410
|
+
parentEntry.children = parentEntry.children.filter((c) => c !== slug);
|
|
411
|
+
if (parentEntry.children.length !== before) changed = true;
|
|
412
|
+
}
|
|
413
|
+
if (changed) {
|
|
414
|
+
const tmp = regPath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
415
|
+
fs.writeFileSync(tmp, JSON.stringify(reg, null, 2), 'utf8');
|
|
416
|
+
fs.renameSync(tmp, regPath);
|
|
417
|
+
}
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// SEED-001 side-effect 4: the child registry entry carries parent + depth + path,
|
|
422
|
+
// AND the parent's `children: [..., <new-slug>]` is updated. Returns true only
|
|
423
|
+
// when BOTH the child and parent entries exist and were patched (fail-closed).
|
|
424
|
+
function _patchRegistryLineage(roomsHome, slug, parentSlug, roomDir, depth) {
|
|
425
|
+
const regPath = path.join(roomsHome, '.rooms', 'registry.json');
|
|
426
|
+
if (!fs.existsSync(regPath)) return false;
|
|
427
|
+
const reg = JSON.parse(fs.readFileSync(regPath, 'utf8'));
|
|
428
|
+
if (!reg || typeof reg.rooms !== 'object' || Array.isArray(reg.rooms)) return false;
|
|
429
|
+
const child = reg.rooms[slug];
|
|
430
|
+
const parentEntry = reg.rooms[parentSlug];
|
|
431
|
+
if (!child || !parentEntry) return false; // a real parent MUST be registered
|
|
432
|
+
child.parent = parentSlug;
|
|
433
|
+
child.depth = depth;
|
|
434
|
+
let rel = roomDir;
|
|
435
|
+
try { const r = path.relative(roomsHome, roomDir); if (r && !r.startsWith('..')) rel = r; } catch (_e) {}
|
|
436
|
+
child.path = rel;
|
|
437
|
+
if (!Array.isArray(parentEntry.children)) parentEntry.children = [];
|
|
438
|
+
if (parentEntry.children.indexOf(slug) === -1) parentEntry.children.push(slug);
|
|
439
|
+
const tmp = regPath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
440
|
+
fs.writeFileSync(tmp, JSON.stringify(reg, null, 2), 'utf8');
|
|
441
|
+
fs.renameSync(tmp, regPath);
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// SEED-001 side-effect 2: the child STATE.md gets `parent: [[<parent>]]` in
|
|
446
|
+
// frontmatter + a `## Parent Room` link section in the body. Idempotent.
|
|
447
|
+
function _patchChildStateParent(roomDir, parentSlug) {
|
|
448
|
+
const statePath = path.join(roomDir, 'STATE.md');
|
|
449
|
+
let raw = '';
|
|
450
|
+
try { raw = fs.readFileSync(statePath, 'utf8'); } catch (_e) { raw = ''; }
|
|
451
|
+
let fm = '';
|
|
452
|
+
let body = '';
|
|
453
|
+
const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
454
|
+
if (m) { fm = m[1]; body = m[2]; } else { body = raw; }
|
|
455
|
+
const parentLink = '[[' + parentSlug + ']]';
|
|
456
|
+
if (!/^parent\s*:/m.test(fm)) {
|
|
457
|
+
fm = (fm.length ? fm + '\n' : '') + 'parent: "' + parentLink + '"';
|
|
458
|
+
} else {
|
|
459
|
+
fm = fm.replace(/^parent\s*:.*$/m, 'parent: "' + parentLink + '"');
|
|
460
|
+
}
|
|
461
|
+
if (body.indexOf('## Parent Room') === -1) {
|
|
462
|
+
body = body.replace(/\s*$/, '') + '\n\n## Parent Room\n\n- ' + parentLink + '\n';
|
|
463
|
+
}
|
|
464
|
+
const content = '---\n' + fm + '\n---\n' + (body.charAt(0) === '\n' ? body : '\n' + body);
|
|
465
|
+
const tmp = statePath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
466
|
+
fs.writeFileSync(tmp, content, 'utf8');
|
|
467
|
+
fs.renameSync(tmp, statePath);
|
|
468
|
+
return true;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// SEED-001 side-effect 1: the parent STATE.md gets a `[[<child>]]` entry under a
|
|
472
|
+
// `## Sub-rooms` section (created if missing). Idempotent.
|
|
473
|
+
function _patchParentStateSubroom(parentRoomDir, childSlug) {
|
|
474
|
+
const statePath = path.join(parentRoomDir, 'STATE.md');
|
|
475
|
+
let raw = '';
|
|
476
|
+
try { raw = fs.readFileSync(statePath, 'utf8'); } catch (_e) { raw = ''; }
|
|
477
|
+
const childLink = '[[' + childSlug + ']]';
|
|
478
|
+
if (raw.indexOf(childLink) !== -1) return true; // idempotent
|
|
479
|
+
let content;
|
|
480
|
+
if (raw.indexOf('## Sub-rooms') === -1) {
|
|
481
|
+
const base = raw.length ? raw.replace(/\s*$/, '') : '---\nroom: ' + path.basename(parentRoomDir) + '\n---\n\n# STATE.md';
|
|
482
|
+
content = base + '\n\n## Sub-rooms\n\n- ' + childLink + '\n';
|
|
483
|
+
} else {
|
|
484
|
+
content = raw.replace(/(##\s+Sub-rooms[^\n]*\n)/, '$1- ' + childLink + '\n');
|
|
485
|
+
if (content === raw) content = raw.replace(/\s*$/, '') + '\n- ' + childLink + '\n';
|
|
486
|
+
}
|
|
487
|
+
const tmp = statePath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
488
|
+
fs.writeFileSync(tmp, content, 'utf8');
|
|
489
|
+
fs.renameSync(tmp, statePath);
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// SEED-001 side-effect 5: invalidate the parent room's wikilink resolver cache.
|
|
494
|
+
// On today's spine lib/vault/wikilink-builder.cjs is a STATELESS live-read
|
|
495
|
+
// builder (no persistent cache), so rewriting the parent STATE.md (side-effect 1)
|
|
496
|
+
// IS the effective bust -- the next render reads the updated file. We also remove
|
|
497
|
+
// any materialized cache artifact if one exists (defense-in-depth); absent one
|
|
498
|
+
// this is a no-op that succeeds (nothing stale to invalidate). Part 8: local fs.
|
|
499
|
+
function _invalidateParentWikilinkCache(parentRoomDir) {
|
|
500
|
+
try {
|
|
501
|
+
const cachePath = path.join(parentRoomDir, '.mindrian', 'wikilink-cache.json');
|
|
502
|
+
if (fs.existsSync(cachePath)) fs.rmSync(cachePath, { force: true });
|
|
503
|
+
return true;
|
|
504
|
+
} catch (_e) { return false; }
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// FCM-06 / Part 4 rejection-is-data: a REJECTED sub-room birth is graph data. We
|
|
508
|
+
// log a subroom_birth_rejected memory_event into the PARENT room.db (the parent
|
|
509
|
+
// exists; the child folder was never created). No folder, no side-effects.
|
|
510
|
+
function _recordBirthRejection(parentRoomDir, childSlug, parentSlug, gate) {
|
|
511
|
+
if (!parentRoomDir || !fs.existsSync(parentRoomDir)) return false;
|
|
512
|
+
let pdb = null;
|
|
513
|
+
try {
|
|
514
|
+
pdb = roomDbMod.openRoomDb(parentRoomDir);
|
|
515
|
+
if (!pdb) return false;
|
|
516
|
+
const res = memoryEvents.logEvent(pdb, 'subroom_birth_rejected', {
|
|
517
|
+
rejected_slug: childSlug,
|
|
518
|
+
parent: parentSlug,
|
|
519
|
+
reason: String(gate.free_text || '').slice(0, 200),
|
|
520
|
+
created_by: 'system',
|
|
521
|
+
source_path: 'birth:subroom_rejected:' + childSlug,
|
|
522
|
+
});
|
|
523
|
+
return !!(res && res.ok);
|
|
524
|
+
} catch (_e) {
|
|
525
|
+
return false;
|
|
526
|
+
} finally {
|
|
527
|
+
if (pdb) { try { pdb.close(); } catch (_e2) {} }
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Write a minimal BRAIN.md stub at birth so the 6-file complement is 6/6
|
|
532
|
+
// synchronously (Phase 90 Brain derivation overwrites it later, STEP 7).
|
|
533
|
+
// Idempotent (only writes when absent).
|
|
534
|
+
function _writeBrainStub(roomDir, slug) {
|
|
535
|
+
const brainPath = path.join(roomDir, 'BRAIN.md');
|
|
536
|
+
if (fs.existsSync(brainPath)) return false;
|
|
537
|
+
const content = '---\nkind: BRAIN\nroom: ' + slug + '\nderived: false\n---\n\n' +
|
|
538
|
+
'# BRAIN.md\n\n' +
|
|
539
|
+
'Seeded at birth. Phase 90 Brain derivation overwrites this stub with the ' +
|
|
540
|
+
'generic framework handles derived for this room.\n';
|
|
541
|
+
try {
|
|
542
|
+
const tmp = brainPath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
543
|
+
fs.writeFileSync(tmp, content, 'utf8');
|
|
544
|
+
fs.renameSync(tmp, brainPath);
|
|
545
|
+
return true;
|
|
546
|
+
} catch (_e) { return false; }
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// FCM-04: seed the child's USER/BRAIN from the parent when the parent .umbilical
|
|
550
|
+
// marks them `parent`. A seed-time ONE-SHOT (not a live link). Part 8: ONLY the
|
|
551
|
+
// generic persona enums (extractPersona) + frozen framework handles
|
|
552
|
+
// (extractBrainAnchors) cross the cord -- STATE/MINTO/FEYNMAN are never derived
|
|
553
|
+
// and no parent prose is ever written into the child files.
|
|
554
|
+
function _seedInheritedMemory(roomDir, parentRoomDir) {
|
|
555
|
+
const result = { user_derived: false, brain_derived: false, map: null };
|
|
556
|
+
if (!parentRoomDir) return result;
|
|
557
|
+
let map = null;
|
|
558
|
+
try {
|
|
559
|
+
const resolver = require('../resolve-umbilical-target.cjs');
|
|
560
|
+
map = resolver.parseUmbilicalInheritance(path.join(parentRoomDir, '.umbilical'));
|
|
561
|
+
} catch (_e) { map = null; }
|
|
562
|
+
if (!map) return result;
|
|
563
|
+
result.map = map;
|
|
564
|
+
|
|
565
|
+
let reconcile = null;
|
|
566
|
+
try { reconcile = require('../memory/reconcile-memory-runner.cjs'); } catch (_e) { reconcile = null; }
|
|
567
|
+
|
|
568
|
+
// USER derives the generic persona enums from the parent's USER.md.
|
|
569
|
+
if (map.USER === 'parent' && reconcile && typeof reconcile.extractPersona === 'function') {
|
|
570
|
+
try {
|
|
571
|
+
const parentUserRaw = fs.readFileSync(path.join(parentRoomDir, 'USER.md'), 'utf8');
|
|
572
|
+
const persona = reconcile.extractPersona(parentUserRaw); // { roleBlend, journeyStage }
|
|
573
|
+
const data = {};
|
|
574
|
+
if (persona.roleBlend) {
|
|
575
|
+
data.canonical_role = persona.roleBlend;
|
|
576
|
+
const rb = {};
|
|
577
|
+
rb[persona.roleBlend] = 1; // single-axis generic handle, never the weight vector
|
|
578
|
+
data.role_blend = rb;
|
|
579
|
+
}
|
|
580
|
+
if (persona.journeyStage) data.journey_stage = persona.journeyStage;
|
|
581
|
+
if (Object.keys(data).length > 0) {
|
|
582
|
+
userMdOps.writeUserMdAtomic(path.join(roomDir, 'USER.md'), data);
|
|
583
|
+
result.user_derived = true;
|
|
584
|
+
}
|
|
585
|
+
} catch (_e) { /* tolerate: baseline USER.md stands */ }
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// BRAIN derives the generic framework handles from the parent's BRAIN.md.
|
|
589
|
+
if (map.BRAIN === 'parent' && reconcile && typeof reconcile.extractBrainAnchors === 'function') {
|
|
590
|
+
try {
|
|
591
|
+
const parentBrainRaw = fs.readFileSync(path.join(parentRoomDir, 'BRAIN.md'), 'utf8');
|
|
592
|
+
const anchors = reconcile.extractBrainAnchors(parentBrainRaw); // [ framework names ]
|
|
593
|
+
const list = anchors.length ? anchors.map((a) => '- ' + a).join('\n') : '- (none)';
|
|
594
|
+
const content = '---\nkind: BRAIN\nderived: inherited\nframework_anchors: [' +
|
|
595
|
+
anchors.join(', ') + ']\n---\n\n# BRAIN.md\n\n' +
|
|
596
|
+
'Framework anchors inherited from the parent room (generic handles only, ' +
|
|
597
|
+
'Part 8; no parent prose crosses the cord):\n\n' + list + '\n';
|
|
598
|
+
const brainPath = path.join(roomDir, 'BRAIN.md');
|
|
599
|
+
const tmp = brainPath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 8);
|
|
600
|
+
fs.writeFileSync(tmp, content, 'utf8');
|
|
601
|
+
fs.renameSync(tmp, brainPath);
|
|
602
|
+
result.brain_derived = true;
|
|
603
|
+
} catch (_e) { /* tolerate: baseline BRAIN stub stands */ }
|
|
604
|
+
}
|
|
605
|
+
return result;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// Verify the NESTED_WITHIN lineage edge landed in the child's room.db (the
|
|
609
|
+
// side-effect 3 post-write gate for the born-wired verification).
|
|
610
|
+
function _verifyNestedWithin(roomDir, slug, parent) {
|
|
611
|
+
let db = null;
|
|
612
|
+
try {
|
|
613
|
+
db = roomDbMod.openRoomDb(roomDir);
|
|
614
|
+
if (!db) return false;
|
|
615
|
+
const row = db.prepare(
|
|
616
|
+
"SELECT 1 FROM edges WHERE source = ? AND target = ? AND type = 'NESTED_WITHIN'"
|
|
617
|
+
).get('room:' + slug, 'room:' + parent);
|
|
618
|
+
return !!row;
|
|
619
|
+
} catch (_e) {
|
|
620
|
+
return false;
|
|
621
|
+
} finally {
|
|
622
|
+
if (db) { try { db.close(); } catch (_e2) {} }
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// ---------------------------------------------------------------------------
|
|
627
|
+
// birthRoom(opts) -- the public entry point.
|
|
628
|
+
//
|
|
629
|
+
// opts: {
|
|
630
|
+
// slug string (room registry name key)
|
|
631
|
+
// roomDir string (absolute path; MUST already be inside ROOMS_HOME)
|
|
632
|
+
// sessionId string
|
|
633
|
+
// ventureText string (user-supplied venture description)
|
|
634
|
+
// jtbd string (JTBD statement)
|
|
635
|
+
// blueprintFamily string ('venture' default)
|
|
636
|
+
// gateAnswers Array (B1/B2/U0 gate answers to drain)
|
|
637
|
+
// approvedBy string (B2 Approve attribution; required)
|
|
638
|
+
// canonicalRole string (USER.md role; default 'navigator')
|
|
639
|
+
// roleBlend object (USER.md role_blend; default {})
|
|
640
|
+
// journeyStage string (USER.md journey_stage; default 'Ordinary World')
|
|
641
|
+
// vname string (venture name for registry; default slug)
|
|
642
|
+
// vstage string (venture stage for registry; default 'Pre-Opportunity')
|
|
643
|
+
// parent string (OPTIONAL parent room slug; Phase 169-07 additive
|
|
644
|
+
// amendment for the D-169-11 fractal joint. When non-empty it is
|
|
645
|
+
// threaded to BOTH the `.room-root` sentinel JSON (a `parent`
|
|
646
|
+
// field) AND the registry create (a `set-parent` follow-on), so a
|
|
647
|
+
// sub-room born via SEED-001 carries the operational lineage joint.
|
|
648
|
+
// DEFAULT-OMITTED: when absent the sentinel + registry are
|
|
649
|
+
// byte-unchanged from prior born-room behavior.)
|
|
650
|
+
// }
|
|
651
|
+
//
|
|
652
|
+
// Returns {ok:true, roomDir, slug, db_created:true} on success,
|
|
653
|
+
// or {ok:false, reason} on failure (never throws).
|
|
654
|
+
// ---------------------------------------------------------------------------
|
|
655
|
+
function birthRoom(opts) {
|
|
656
|
+
const options = opts || {};
|
|
657
|
+
|
|
658
|
+
// T-155-02-03: Hard guard on opts.approvedBy (gate bypass protection).
|
|
659
|
+
if (!options.approvedBy) {
|
|
660
|
+
return { ok: false, reason: 'no_approval', detail: 'approvedBy is required (B2 Approve gate)' };
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
const roomDir = options.roomDir;
|
|
664
|
+
const slug = options.slug;
|
|
665
|
+
|
|
666
|
+
// Path safety guard (T-155-02-02).
|
|
667
|
+
const pathErr = _pathSafetyReason(roomDir);
|
|
668
|
+
if (pathErr) {
|
|
669
|
+
return { ok: false, reason: 'invalid_room_dir', detail: pathErr };
|
|
670
|
+
}
|
|
671
|
+
if (typeof slug !== 'string' || slug.length === 0) {
|
|
672
|
+
return { ok: false, reason: 'invalid_slug' };
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
const sessionId = typeof options.sessionId === 'string' ? options.sessionId : 'nosession';
|
|
676
|
+
const ventureText = typeof options.ventureText === 'string' && options.ventureText.length > 0
|
|
677
|
+
? options.ventureText : 'A new venture';
|
|
678
|
+
const jtbd = typeof options.jtbd === 'string' ? options.jtbd : '';
|
|
679
|
+
const blueprintFamily = typeof options.blueprintFamily === 'string' ? options.blueprintFamily : 'venture';
|
|
680
|
+
// Copy the caller's gateAnswers so the born-wired Approve answer we push below
|
|
681
|
+
// never mutates the caller's array.
|
|
682
|
+
const gateAnswers = Array.isArray(options.gateAnswers) ? options.gateAnswers.slice() : [];
|
|
683
|
+
const vname = typeof options.vname === 'string' && options.vname.length > 0
|
|
684
|
+
? options.vname : slug;
|
|
685
|
+
const vstage = typeof options.vstage === 'string' && options.vstage.length > 0
|
|
686
|
+
? options.vstage : 'Pre-Opportunity';
|
|
687
|
+
const canonicalRole = typeof options.canonicalRole === 'string' ? options.canonicalRole : 'navigator';
|
|
688
|
+
const roleBlend = (options.roleBlend && typeof options.roleBlend === 'object') ? options.roleBlend : {};
|
|
689
|
+
const journeyStage = typeof options.journeyStage === 'string' ? options.journeyStage : 'Ordinary World';
|
|
690
|
+
// Phase 169-07 additive amendment: the OPTIONAL parent room slug for the
|
|
691
|
+
// D-169-11 operational lineage joint. Default-omitted so the no-parent case is
|
|
692
|
+
// byte-unchanged.
|
|
693
|
+
const parent = (typeof options.parent === 'string' && options.parent.length > 0) ? options.parent : '';
|
|
694
|
+
|
|
695
|
+
// --------------------------------------------------------------------------
|
|
696
|
+
// Phase 195-03 born-wired setup (FCM-05/06). The born-wired path activates
|
|
697
|
+
// ONLY when opts.parent is set AND opts.bornWired === true. Everything below
|
|
698
|
+
// is a no-op for top-level rooms and the Phase 169 self-heal parent birth.
|
|
699
|
+
// --------------------------------------------------------------------------
|
|
700
|
+
const bornWired = options.bornWired === true && parent.length > 0;
|
|
701
|
+
const roomsHomeForBirth = _roomsHome();
|
|
702
|
+
let parentRoomDir = '';
|
|
703
|
+
let bornWiredDepth = 1;
|
|
704
|
+
if (bornWired) {
|
|
705
|
+
parentRoomDir = (typeof options.parentRoomDir === 'string' && options.parentRoomDir.length > 0)
|
|
706
|
+
? options.parentRoomDir
|
|
707
|
+
: _resolveRoomDirFromRegistry(parent, roomsHomeForBirth);
|
|
708
|
+
// Fail closed BEFORE mkdir if the parent room cannot be resolved: a sub-room
|
|
709
|
+
// has no home without a real registered parent (no orphan promotion).
|
|
710
|
+
if (!parentRoomDir || !fs.existsSync(parentRoomDir)) {
|
|
711
|
+
return { ok: false, reason: 'parent_room_not_found', detail: parent };
|
|
712
|
+
}
|
|
713
|
+
bornWiredDepth = _computeDepth(roomsHomeForBirth, parent);
|
|
714
|
+
|
|
715
|
+
// FCM-06: the human-approval gate fires BEFORE fs.mkdirSync. On Reject no
|
|
716
|
+
// folder is created and the rejection is recorded as graph data in the
|
|
717
|
+
// parent room.db (Part 4 rejection-is-data). The approvedBy string-guard
|
|
718
|
+
// above stays as the bypass hard-guard.
|
|
719
|
+
const gate = runBirthGate(options, { slug: slug, parent: parent, parentRoomDir: parentRoomDir });
|
|
720
|
+
if (!gate.approved) {
|
|
721
|
+
const rejectionRecorded = _recordBirthRejection(parentRoomDir, slug, parent, gate);
|
|
722
|
+
return {
|
|
723
|
+
ok: false,
|
|
724
|
+
reason: 'birth_rejected',
|
|
725
|
+
rejection_recorded: rejectionRecorded,
|
|
726
|
+
canonical_verb: gate.canonical_verb,
|
|
727
|
+
slug: slug,
|
|
728
|
+
parent: parent,
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
// Approve is data too: push it so STEP 2 drainBirthGateAnswers files a
|
|
732
|
+
// FILED_AS_DECISION edge for the sub-room birth approval.
|
|
733
|
+
gateAnswers.push({
|
|
734
|
+
gate_id: 'SUBROOM_BIRTH',
|
|
735
|
+
canonical_verb: 'Approve',
|
|
736
|
+
option_key: 'approve',
|
|
737
|
+
alias_label: 'Approve sub-room ' + slug + ' under ' + parent,
|
|
738
|
+
ts: Date.now(),
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// --------------------------------------------------------------------------
|
|
743
|
+
// STEP 1: scaffold (idempotent, unregistered)
|
|
744
|
+
//
|
|
745
|
+
// mkdir + .room-root sentinel + scaffoldRoomSkeleton + seedSection per
|
|
746
|
+
// section + USER.md (MUST happen before confirmNode resolveByUser so
|
|
747
|
+
// USER.md exists when resolveByUser reads it; RESEARCH Pitfall 12).
|
|
748
|
+
// --------------------------------------------------------------------------
|
|
749
|
+
try {
|
|
750
|
+
fs.mkdirSync(roomDir, { recursive: true });
|
|
751
|
+
|
|
752
|
+
// Write .room-root sentinel (used by resolve-umbilical-target.cjs).
|
|
753
|
+
const roomRootPath = path.join(roomDir, '.room-root');
|
|
754
|
+
if (!fs.existsSync(roomRootPath)) {
|
|
755
|
+
// The base sentinel shape is byte-unchanged ({room, active, born}). When
|
|
756
|
+
// opts.parent is provided (Phase 169-07), append a `parent` field ONLY then
|
|
757
|
+
// so the omitted case is byte-identical to prior born-room behavior. A
|
|
758
|
+
// `slug` field is added when parent is set so the rollup walk's
|
|
759
|
+
// _childDirForSlug (graph-derivation.cjs) can match the healed sub-room by
|
|
760
|
+
// slug; the omitted case stays byte-unchanged.
|
|
761
|
+
const sentinelObj = {
|
|
762
|
+
room: slug,
|
|
763
|
+
active: true,
|
|
764
|
+
born: new Date().toISOString(),
|
|
765
|
+
};
|
|
766
|
+
if (parent) {
|
|
767
|
+
sentinelObj.parent = parent;
|
|
768
|
+
sentinelObj.slug = slug;
|
|
769
|
+
}
|
|
770
|
+
const sentinel = JSON.stringify(sentinelObj);
|
|
771
|
+
const tmpRoot = roomRootPath + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 10);
|
|
772
|
+
fs.writeFileSync(tmpRoot, sentinel, 'utf8');
|
|
773
|
+
fs.renameSync(tmpRoot, roomRootPath);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// scaffoldRoomSkeleton: fills the room with the canonical 8-section ICM
|
|
777
|
+
// structure + STATE.md + MINTO.md + USER.md + ROOM.md identity files.
|
|
778
|
+
// Idempotent: never overwrites human-authored content.
|
|
779
|
+
scaffold.scaffoldRoomSkeleton(roomDir, { blueprintFamily: blueprintFamily });
|
|
780
|
+
|
|
781
|
+
// seedSection per section to close the 4/6 -> 6/6 memory complement gap.
|
|
782
|
+
// scaffold writes ROOM.md / STATE.md / MINTO.md / USER.md; FEYNMAN.md and
|
|
783
|
+
// BRAIN.md have no scaffold templates. feynman-seed-writer closes FEYNMAN.md.
|
|
784
|
+
// (BRAIN.md is written by Phase 90 brain-derivation; STEP 7 enqueues it.)
|
|
785
|
+
// Lazy-require feynman-seed-writer here (not at file top) to avoid the
|
|
786
|
+
// circular dep: feynman-seed-writer -> navigation -> room-birth -> feynman-seed-writer.
|
|
787
|
+
let feynmanSeedWriter = null;
|
|
788
|
+
try {
|
|
789
|
+
feynmanSeedWriter = require('../feynman/feynman-seed-writer.cjs');
|
|
790
|
+
} catch (_e) {
|
|
791
|
+
// Best-effort: if the seed-writer cannot load, skip seeding.
|
|
792
|
+
}
|
|
793
|
+
if (feynmanSeedWriter && typeof feynmanSeedWriter.seedSection === 'function') {
|
|
794
|
+
for (const sectionSlug of SECTION_NAMES) {
|
|
795
|
+
const seedBody = 'Seeded at birth -- replace with your content for the ' +
|
|
796
|
+
sectionSlug + ' section of your venture.';
|
|
797
|
+
try {
|
|
798
|
+
feynmanSeedWriter.seedSection(roomDir, sectionSlug, seedBody, { db: null });
|
|
799
|
+
} catch (_e) {
|
|
800
|
+
// Best-effort: seedSection failure never aborts birth.
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// Write USER.md via writeUserMdAtomic (RESEARCH Pitfall 12: USER.md MUST
|
|
806
|
+
// exist before confirmNode is called in STEP 2 so resolveByUser finds identity).
|
|
807
|
+
// Plan 03 owns the full USER.md schema; here we write the minimum identity.
|
|
808
|
+
const userMdPath = path.join(roomDir, 'USER.md');
|
|
809
|
+
// Only write if not already authored (idempotent).
|
|
810
|
+
try {
|
|
811
|
+
userMdOps.writeUserMdAtomic(userMdPath, {
|
|
812
|
+
canonical_role: canonicalRole,
|
|
813
|
+
role_blend: roleBlend,
|
|
814
|
+
journey_stage: journeyStage,
|
|
815
|
+
});
|
|
816
|
+
} catch (_e) {
|
|
817
|
+
// Tolerate: if USER.md already exists with human content, preserve it.
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
// Phase 195-03 born-wired STEP 1 additions (sub-room births only):
|
|
821
|
+
// - BRAIN.md stub so the 6-file complement is 6/6 synchronously.
|
|
822
|
+
// - FCM-04 inheritance seed: when the parent .umbilical marks USER/BRAIN
|
|
823
|
+
// `parent`, derive the child's USER/BRAIN from the parent (generic
|
|
824
|
+
// enums/handles only; Part 8). Runs BEFORE STEP 3 compute-state (which
|
|
825
|
+
// only rewrites STATE.md, never USER/BRAIN), so the derived files stand.
|
|
826
|
+
if (bornWired) {
|
|
827
|
+
_writeBrainStub(roomDir, slug);
|
|
828
|
+
_seedInheritedMemory(roomDir, parentRoomDir);
|
|
829
|
+
}
|
|
830
|
+
} catch (e) {
|
|
831
|
+
if (bornWired) { _bornWiredRollback(roomDir, slug, roomsHomeForBirth, null, parent); }
|
|
832
|
+
return { ok: false, reason: 'scaffold_failed', detail: String(e.message || '').slice(0, 200) };
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
// --------------------------------------------------------------------------
|
|
836
|
+
// STEP 2: SQLite transaction (the ACID block; mirrors writeBreakthrough D-20)
|
|
837
|
+
//
|
|
838
|
+
// openRoomDb (the lazy creator) creates room.db if absent. openRoomDbForCaller
|
|
839
|
+
// is FORBIDDEN here (it refuses creation; RESEARCH Canon note).
|
|
840
|
+
// BEGIN...COMMIT with ROLLBACK on any error.
|
|
841
|
+
// --------------------------------------------------------------------------
|
|
842
|
+
let db;
|
|
843
|
+
let ventureNodeId = null;
|
|
844
|
+
|
|
845
|
+
try {
|
|
846
|
+
db = roomDbMod.openRoomDb(roomDir);
|
|
847
|
+
} catch (e) {
|
|
848
|
+
return { ok: false, reason: 'open_room_db_failed', detail: String(e.message || '').slice(0, 200) };
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
try {
|
|
852
|
+
db.exec('BEGIN');
|
|
853
|
+
|
|
854
|
+
// writeClaimNode for the venture node (knowledge_type:'heuristic'; the initial
|
|
855
|
+
// framing of the venture is a heuristic claim at birth).
|
|
856
|
+
const claimResult = typedClaim.writeClaimNode(db, {
|
|
857
|
+
knowledge_type: 'heuristic',
|
|
858
|
+
text: ventureText,
|
|
859
|
+
sessionId: sessionId,
|
|
860
|
+
sourceSegment: 'birth:venture:' + slug,
|
|
861
|
+
});
|
|
862
|
+
if (claimResult && claimResult.ok) {
|
|
863
|
+
ventureNodeId = claimResult.node_id;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
// setFocus on the venture node ('user' is valid; 'auto-from-upload' is NOT --
|
|
867
|
+
// RESEARCH Pitfall 1). Falls back gracefully when ventureNodeId is null.
|
|
868
|
+
if (ventureNodeId) {
|
|
869
|
+
try {
|
|
870
|
+
focusMod.setFocus(db, sessionId, ventureNodeId, 'user');
|
|
871
|
+
} catch (_e) {
|
|
872
|
+
// Tolerate: setFocus failure does not abort the transaction.
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// drainBirthGateAnswers: converts gate answers into memory_events + typed edges.
|
|
877
|
+
// Called inside BEGIN...COMMIT so the gate audit trail is atomic with room birth.
|
|
878
|
+
drainBirthGateAnswers(db, roomDir, gateAnswers, ventureNodeId);
|
|
879
|
+
|
|
880
|
+
// confirmNode batch on all proposed truth-claim nodes. Resolves byUser from
|
|
881
|
+
// USER.md (written in STEP 1; RESEARCH Pitfall 12 guard). Uses resolveByUser
|
|
882
|
+
// after USER.md is confirmed written.
|
|
883
|
+
// OPEN-Q7: batch attribution; revisit for per-claim if navigator decides.
|
|
884
|
+
if (ventureNodeId) {
|
|
885
|
+
const byUser = confirmNodeMod.resolveByUser(roomDir);
|
|
886
|
+
try {
|
|
887
|
+
confirmNodeMod.confirmNode(db, ventureNodeId, byUser, 'confirmed at birth');
|
|
888
|
+
} catch (_e) {
|
|
889
|
+
// Tolerate: confirmNode failure does not abort birth.
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
// logJtbdTransition -- inside COMMIT sequence by passing the open db directly.
|
|
894
|
+
// The spine-events logJtbdTransition takes a roomDir and opens its own handle;
|
|
895
|
+
// to stay inside our transaction we call logMemoryEvent directly for the
|
|
896
|
+
// jtbd_transitioned event (the same net effect, one handle).
|
|
897
|
+
if (typeof jtbd === 'string' && jtbd.length > 0) {
|
|
898
|
+
try {
|
|
899
|
+
memoryEvents.logEvent(db, 'jtbd_transitioned', {
|
|
900
|
+
to: jtbd,
|
|
901
|
+
kind: 'set',
|
|
902
|
+
sessionId: sessionId,
|
|
903
|
+
created_by: 'system',
|
|
904
|
+
source_path: 'birth:jtbd',
|
|
905
|
+
});
|
|
906
|
+
} catch (_e) {
|
|
907
|
+
// Tolerate.
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
// Phase 162-02 (R11 / D-B): write real Section nodes into room.db INSIDE the
|
|
912
|
+
// birth ACID transaction so room.db is genuinely complete (Canon Part 9) and
|
|
913
|
+
// the export-time Section anchors in graph-export.cjs demote to a Tier-0
|
|
914
|
+
// fallback. Section nodes are SYSTEM-BOOKKEEPING structural anchors, NOT
|
|
915
|
+
// truth-claim nodes (Part 9 v1.5 audit-node carve-out: created_by=system,
|
|
916
|
+
// review_status=confirmed is canon-legal -- the same reasoning as focus/audit
|
|
917
|
+
// nodes). One node per canonical section, idempotent via the insertNode
|
|
918
|
+
// ON CONFLICT(id) upsert (re-birth never duplicates a Section id).
|
|
919
|
+
writeSectionNodes(db, SECTION_NAMES);
|
|
920
|
+
|
|
921
|
+
// room_created event: the canonical signal that birth succeeded. Emitted ONCE
|
|
922
|
+
// at the end of the STEP 2 transaction. Everything in Phase 155 composes on
|
|
923
|
+
// this event.
|
|
924
|
+
memoryEvents.logEvent(db, 'room_created', {
|
|
925
|
+
slug: slug,
|
|
926
|
+
blueprint_family: blueprintFamily,
|
|
927
|
+
sessionId: sessionId,
|
|
928
|
+
created_by: 'system',
|
|
929
|
+
source_path: 'birth:room_created',
|
|
930
|
+
});
|
|
931
|
+
|
|
932
|
+
// Phase 195-03 (FCM-05 side-effect 3): the child->parent NESTED_WITHIN
|
|
933
|
+
// lineage edge, written INSIDE this ACID block so lineage is ATOMIC with
|
|
934
|
+
// birth (today the edge is written by the 169 heal path, not birthRoom). A
|
|
935
|
+
// Room node for the sub-room is inserted first (system-bookkeeping structural
|
|
936
|
+
// anchor). Part 8: properties are ENUM/scalar ONLY (relation enum + parent
|
|
937
|
+
// slug handle + depth scalar); never prose. bornWired only; a failed edge
|
|
938
|
+
// write THROWS so the whole transaction ROLLBACKs (born WIRED or fail CLOSED).
|
|
939
|
+
if (bornWired) {
|
|
940
|
+
try {
|
|
941
|
+
insertNode(
|
|
942
|
+
db,
|
|
943
|
+
'room:' + slug,
|
|
944
|
+
'Room',
|
|
945
|
+
JSON.stringify({ room: slug, parent: parent, created_by: 'system' }),
|
|
946
|
+
{
|
|
947
|
+
source_path: 'system:room-node',
|
|
948
|
+
created_by: 'system',
|
|
949
|
+
// R17-02: 'observation' -- system-bookkeeping structural anchor
|
|
950
|
+
// (same class as the umbilical Project/Room handles).
|
|
951
|
+
epistemic_type: 'observation',
|
|
952
|
+
}
|
|
953
|
+
);
|
|
954
|
+
} catch (_e) {
|
|
955
|
+
// Tolerate node-anchor upsert failure; the edges table has no FK, so the
|
|
956
|
+
// NESTED_WITHIN edge below still lands. The verify gate is the authority.
|
|
957
|
+
}
|
|
958
|
+
const nwRes = edges.writeEdge(db, {
|
|
959
|
+
source_id: 'room:' + slug,
|
|
960
|
+
target_id: 'room:' + parent,
|
|
961
|
+
edge_type: 'NESTED_WITHIN',
|
|
962
|
+
properties: { relation: 'nested', parent: parent, depth: bornWiredDepth },
|
|
963
|
+
});
|
|
964
|
+
if (!nwRes || !nwRes.ok) {
|
|
965
|
+
throw new Error('nested_within_write_failed:' + (nwRes ? nwRes.reason : 'no_result'));
|
|
966
|
+
}
|
|
967
|
+
// Test-only fault seam: force a STEP-2 failure to exercise the ACID
|
|
968
|
+
// ROLLBACK + fs cleanup path (no half-born orphan). Never set in prod.
|
|
969
|
+
if (options._faultInject === 'step2') {
|
|
970
|
+
throw new Error('fault_inject_step2');
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
db.exec('COMMIT');
|
|
975
|
+
} catch (e) {
|
|
976
|
+
try { db.exec('ROLLBACK'); } catch (_) {}
|
|
977
|
+
try { db.close(); } catch (_) {}
|
|
978
|
+
// Fail-closed: a born-wired STEP-2 failure must leave NO half-born scaffold.
|
|
979
|
+
if (bornWired) { _bornWiredRollback(roomDir, slug, roomsHomeForBirth, null, parent); }
|
|
980
|
+
return { ok: false, reason: 'birth_transaction_failed', detail: String(e.message || '').slice(0, 200) };
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
// STEP 2 post-commit: logOperatorTransition safe now that room.db exists.
|
|
984
|
+
try {
|
|
985
|
+
spineEvents.logOperatorTransition(roomDir, {
|
|
986
|
+
to: 'BUILD_ROOM',
|
|
987
|
+
write_transition_edge: true,
|
|
988
|
+
sessionId: sessionId,
|
|
989
|
+
});
|
|
990
|
+
} catch (_e) {
|
|
991
|
+
// Tolerate: post-commit transition failure does not abort birth.
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// --------------------------------------------------------------------------
|
|
995
|
+
// STEP 3: compute-state (writes STATE.md; STATE.md is NEVER authored;
|
|
996
|
+
// RESEARCH Section 3 note).
|
|
997
|
+
//
|
|
998
|
+
// T-155-02-02: shellEscape via double-quoting; reject '..' in roomDir (done
|
|
999
|
+
// above via _pathSafetyReason). Only reach here when the path is safe.
|
|
1000
|
+
// --------------------------------------------------------------------------
|
|
1001
|
+
try {
|
|
1002
|
+
const computeStateScript = path.join(REPO_ROOT, 'scripts', 'compute-state');
|
|
1003
|
+
execSync(
|
|
1004
|
+
'node ' + JSON.stringify(computeStateScript) + ' ' + JSON.stringify(roomDir),
|
|
1005
|
+
{ stdio: 'pipe', cwd: REPO_ROOT }
|
|
1006
|
+
);
|
|
1007
|
+
} catch (_e) {
|
|
1008
|
+
// Tolerate: compute-state failure does not abort birth (STATE.md may be
|
|
1009
|
+
// missing until the next session-start, which calls compute-state again).
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
// --------------------------------------------------------------------------
|
|
1013
|
+
// STEP 4 (COMMIT POINT): room-registry create.
|
|
1014
|
+
//
|
|
1015
|
+
// The atomic tmp+mv registry flip is the LAST structural step. Registry-first
|
|
1016
|
+
// would dangle the active pointer during the structurally-incomplete window.
|
|
1017
|
+
// --------------------------------------------------------------------------
|
|
1018
|
+
try {
|
|
1019
|
+
const registryScript = path.join(REPO_ROOT, 'scripts', 'room-registry');
|
|
1020
|
+
// Determine ROOMS_HOME from the environment (the same source room-registry uses).
|
|
1021
|
+
const roomsHome = process.env.MINDRIAN_ROOMS_HOME || path.join(require('node:os').homedir(), 'MindrianRooms');
|
|
1022
|
+
|
|
1023
|
+
// T-155-02-02: args are JSON.stringify-quoted; the registry script
|
|
1024
|
+
// validates its own inputs. We only pass slug + absolute roomDir +
|
|
1025
|
+
// scalar vname + scalar vstage.
|
|
1026
|
+
execSync(
|
|
1027
|
+
'bash ' + JSON.stringify(registryScript) +
|
|
1028
|
+
' ' + JSON.stringify(roomsHome) +
|
|
1029
|
+
' create' +
|
|
1030
|
+
' ' + JSON.stringify(slug) +
|
|
1031
|
+
' ' + JSON.stringify(roomDir) +
|
|
1032
|
+
' ' + JSON.stringify(vname) +
|
|
1033
|
+
' ' + JSON.stringify(vstage),
|
|
1034
|
+
{ stdio: 'pipe', cwd: REPO_ROOT }
|
|
1035
|
+
);
|
|
1036
|
+
|
|
1037
|
+
// Phase 169-07 additive amendment: thread opts.parent into the registry as a
|
|
1038
|
+
// `parent` field via the existing `update <slug> parent <parent-slug>` verb
|
|
1039
|
+
// (Part 7 reuse -- no new registry verb invented). Only runs when parent is
|
|
1040
|
+
// provided; the omitted case leaves the registry create byte-unchanged.
|
|
1041
|
+
if (parent) {
|
|
1042
|
+
execSync(
|
|
1043
|
+
'bash ' + JSON.stringify(registryScript) +
|
|
1044
|
+
' ' + JSON.stringify(roomsHome) +
|
|
1045
|
+
' update' +
|
|
1046
|
+
' ' + JSON.stringify(slug) +
|
|
1047
|
+
' ' + JSON.stringify('parent') +
|
|
1048
|
+
' ' + JSON.stringify(parent),
|
|
1049
|
+
{ stdio: 'pipe', cwd: REPO_ROOT }
|
|
1050
|
+
);
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
// ------------------------------------------------------------------------
|
|
1054
|
+
// Bind the new room into THIS session's write scope (todo slug
|
|
1055
|
+
// 2026-06-28-birthroom-active-room-reverts-next-turn).
|
|
1056
|
+
//
|
|
1057
|
+
// The registry `active` flip above is only ONE of the two write authorities.
|
|
1058
|
+
// Phase 194 (PSB) made the per-session bound SET in session-binding.cjs the
|
|
1059
|
+
// PRIMARY write authority that scripts/write-scope-check.cjs consults
|
|
1060
|
+
// (readSessionBinding -> isRoomInWriteScope). Without ALSO adding the newborn
|
|
1061
|
+
// room to this session's bound SET, that set-membership guard BLOCKS every
|
|
1062
|
+
// write to the just-created room (the binding still lists only the prior
|
|
1063
|
+
// room), so the navigator cannot write into the room birthRoom just made
|
|
1064
|
+
// active. Reuse the shipped session-binding writer (Canon Part 7; no new
|
|
1065
|
+
// binding writer) and keep the write LOCAL (Canon Part 8; zero Brain egress).
|
|
1066
|
+
//
|
|
1067
|
+
// Design (navigator-locked): UNION the new slug into the bound SET and make
|
|
1068
|
+
// it PRIMARY -- do NOT replace the set (a session may legitimately span
|
|
1069
|
+
// rooms). Gate on a REAL interactive session (sessionId present and not the
|
|
1070
|
+
// 'nosession' sentinel), which naturally excludes the graph-self-heal /
|
|
1071
|
+
// migration / backfill callers that birth rooms with no session. This runs
|
|
1072
|
+
// only after the registry create above SUCCEEDED (an execSync throw jumps to
|
|
1073
|
+
// the catch below and skips this). Fire-and-forget: readSessionBinding /
|
|
1074
|
+
// writeSessionBinding never throw, and the whole block is wrapped so a
|
|
1075
|
+
// binding hiccup can NEVER block birth (Larry-never-blocks).
|
|
1076
|
+
if (typeof sessionId === 'string' && sessionId.length > 0 && sessionId !== 'nosession') {
|
|
1077
|
+
try {
|
|
1078
|
+
const sb = require('../session-binding.cjs');
|
|
1079
|
+
const prior = sb.readSessionBinding(sessionId, { home: roomsHome });
|
|
1080
|
+
const priorBound = (prior && Array.isArray(prior.bound)) ? prior.bound : [];
|
|
1081
|
+
const bound = Array.from(new Set(priorBound.concat([slug])));
|
|
1082
|
+
sb.writeSessionBinding(
|
|
1083
|
+
sessionId,
|
|
1084
|
+
{ bound: bound, primary: slug, sticky: prior ? prior.sticky : false },
|
|
1085
|
+
{ home: roomsHome }
|
|
1086
|
+
);
|
|
1087
|
+
} catch (_eBind) {
|
|
1088
|
+
// Fire-and-forget: a session-binding write failure never blocks birth.
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
} catch (_e) {
|
|
1092
|
+
// Tolerate: registry flip failure should not leave a half-born room stranded.
|
|
1093
|
+
// The room.db + files exist; the user can re-run /mos:register if needed.
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// --------------------------------------------------------------------------
|
|
1097
|
+
// STEP 5: reconcileMemoryArtifacts (cortex + SENS-08 scalars live before
|
|
1098
|
+
// next turn). Re-use the open db handle (still open from STEP 2 post-commit).
|
|
1099
|
+
// --------------------------------------------------------------------------
|
|
1100
|
+
try {
|
|
1101
|
+
// Guard: db may have been closed by an error path; reopen if needed.
|
|
1102
|
+
let reconDb = db;
|
|
1103
|
+
let reopened = false;
|
|
1104
|
+
try {
|
|
1105
|
+
// A simple probe to check if db is still open.
|
|
1106
|
+
reconDb.prepare('SELECT 1').get();
|
|
1107
|
+
} catch (_e) {
|
|
1108
|
+
try {
|
|
1109
|
+
reconDb = roomDbMod.openRoomDb(roomDir);
|
|
1110
|
+
reopened = true;
|
|
1111
|
+
} catch (_e2) {
|
|
1112
|
+
reconDb = null;
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
if (reconDb) {
|
|
1116
|
+
// Lazy-require to break the circular dep (see top-of-file comment).
|
|
1117
|
+
let reconcileRunner = null;
|
|
1118
|
+
try {
|
|
1119
|
+
reconcileRunner = require('../memory/reconcile-memory-runner.cjs');
|
|
1120
|
+
} catch (_e2) {
|
|
1121
|
+
// Best-effort: if the runner cannot load, skip reconcile.
|
|
1122
|
+
}
|
|
1123
|
+
if (reconcileRunner && typeof reconcileRunner.reconcileMemoryArtifacts === 'function') {
|
|
1124
|
+
reconcileRunner.reconcileMemoryArtifacts(roomDir, { db: reconDb });
|
|
1125
|
+
}
|
|
1126
|
+
if (reopened) {
|
|
1127
|
+
try { reconDb.close(); } catch (_) {}
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
} catch (_e) {
|
|
1131
|
+
// Tolerate: reconcile failure does not abort birth.
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
// --------------------------------------------------------------------------
|
|
1135
|
+
// STEP 6: scratchpadOps.migrateToRoom (drains banked opportunities and
|
|
1136
|
+
// highlights). Gate answers were consumed in STEP 2 via drainBirthGateAnswers;
|
|
1137
|
+
// migrateToRoom is safe to call now without losing them.
|
|
1138
|
+
// --------------------------------------------------------------------------
|
|
1139
|
+
try {
|
|
1140
|
+
scratchpadOps.migrateToRoom(roomDir);
|
|
1141
|
+
} catch (_e) {
|
|
1142
|
+
// Tolerate: scratchpad migration failure does not abort birth.
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
// --------------------------------------------------------------------------
|
|
1146
|
+
// STEP 7: BRAIN derivation enqueue (deferred enrichment).
|
|
1147
|
+
//
|
|
1148
|
+
// The actual Phase 90 enqueue is optional here; the log line makes the intent
|
|
1149
|
+
// explicit and prevents a future plan from forgetting it.
|
|
1150
|
+
// T-155-02-05: STEP 7 is a log line only (no real enqueue in this plan); the
|
|
1151
|
+
// Phase 90 enqueue sends only generic handles (Part 8).
|
|
1152
|
+
// --------------------------------------------------------------------------
|
|
1153
|
+
// BRAIN derivation enqueued for room: log entry here; Phase 90 enqueue picks
|
|
1154
|
+
// up on next session-start when Brain is reachable.
|
|
1155
|
+
process.stdout.write('[room-birth] BRAIN derivation enqueued for room: ' + slug + '\n');
|
|
1156
|
+
|
|
1157
|
+
// Close the db handle (if still open from STEP 2).
|
|
1158
|
+
try {
|
|
1159
|
+
db.prepare('SELECT 1').get(); // probe
|
|
1160
|
+
db.close();
|
|
1161
|
+
} catch (_e) {
|
|
1162
|
+
// Already closed or unavailable; tolerate.
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
// --------------------------------------------------------------------------
|
|
1166
|
+
// Phase 195-03 born-wired FINALIZE (FCM-05): the remaining SEED-001 side-effects
|
|
1167
|
+
// (1 parent STATE.md, 2 child STATE.md, 4 registry lineage, 5 wikilink cache)
|
|
1168
|
+
// wire here (STATE.md exists post-STEP-3; registry exists post-STEP-4; the db
|
|
1169
|
+
// is closed). Side-effect 3 (NESTED_WITHIN) already landed inside the ACID
|
|
1170
|
+
// block and is verified. ANY of the five missing -> compensating rollback so
|
|
1171
|
+
// NO half-born orphan remains (Part 11 R1/R2 fail-closed).
|
|
1172
|
+
// --------------------------------------------------------------------------
|
|
1173
|
+
if (bornWired) {
|
|
1174
|
+
const se = { s1: false, s2: false, s3: false, s4: false, s5: false };
|
|
1175
|
+
se.s3 = _verifyNestedWithin(roomDir, slug, parent);
|
|
1176
|
+
try {
|
|
1177
|
+
se.s2 = _patchChildStateParent(roomDir, parent);
|
|
1178
|
+
se.s4 = _patchRegistryLineage(roomsHomeForBirth, slug, parent, roomDir, bornWiredDepth);
|
|
1179
|
+
se.s1 = _patchParentStateSubroom(parentRoomDir, slug);
|
|
1180
|
+
se.s5 = _invalidateParentWikilinkCache(parentRoomDir);
|
|
1181
|
+
// Test-only fault seam: force one side-effect to read as failed to exercise
|
|
1182
|
+
// the compensating rollback. Never set in production.
|
|
1183
|
+
if (typeof options._faultInject === 'string' && /^s[1-5]$/.test(options._faultInject)) {
|
|
1184
|
+
se[options._faultInject] = false;
|
|
1185
|
+
}
|
|
1186
|
+
} catch (e) {
|
|
1187
|
+
_bornWiredRollback(roomDir, slug, roomsHomeForBirth, null, parent);
|
|
1188
|
+
return {
|
|
1189
|
+
ok: false,
|
|
1190
|
+
reason: 'born_wired_side_effect_failed',
|
|
1191
|
+
detail: String(e.message || '').slice(0, 120),
|
|
1192
|
+
side_effects: se,
|
|
1193
|
+
};
|
|
1194
|
+
}
|
|
1195
|
+
const allWired = se.s1 && se.s2 && se.s3 && se.s4 && se.s5;
|
|
1196
|
+
if (!allWired) {
|
|
1197
|
+
_bornWiredRollback(roomDir, slug, roomsHomeForBirth, null, parent);
|
|
1198
|
+
return { ok: false, reason: 'born_wired_incomplete', side_effects: se };
|
|
1199
|
+
}
|
|
1200
|
+
return {
|
|
1201
|
+
ok: true,
|
|
1202
|
+
roomDir: roomDir,
|
|
1203
|
+
slug: slug,
|
|
1204
|
+
db_created: true,
|
|
1205
|
+
born_wired: true,
|
|
1206
|
+
side_effects: se,
|
|
1207
|
+
};
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
return { ok: true, roomDir: roomDir, slug: slug, db_created: true };
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
module.exports = { birthRoom, drainBirthGateAnswers, writeSectionNodes, SECTION_NAMES };
|