@mindrian_os/cli 2.0.0-beta.3 → 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 +467 -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,1090 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Phase 167-01 Task 1 - the declared harness MANIFEST generator (HARN-01,
|
|
6
|
+
* D-167-01, D-167-06).
|
|
7
|
+
*
|
|
8
|
+
* Produces data/harness-manifest.json: the DECLARED, VERSIONED descriptor that
|
|
9
|
+
* NAMES the three existing recipe maps as ONE binding and nothing more. It is a
|
|
10
|
+
* READ LAYER OVER the three maps (a 3-MAP DIGEST), not a merge and not a
|
|
11
|
+
* per-surface registry. It does NOT merge or retire them (D-166-03 PRESERVED).
|
|
12
|
+
*
|
|
13
|
+
* THE GENERATOR IS A PART 7 REUSE SIBLING of
|
|
14
|
+
* scripts/build-orchestration-projection.cjs and
|
|
15
|
+
* scripts/build-connector-registry.cjs. It mirrors the shipped generator idiom
|
|
16
|
+
* wholesale: a deterministic source read -> build -> serialize
|
|
17
|
+
* (JSON.stringify(...,2) + a single trailing newline, byte-stable across
|
|
18
|
+
* machines) -> a 3-branch main (default write / --check / --refresh). The ONE
|
|
19
|
+
* structural difference is grain: the connector/projection generators emit a
|
|
20
|
+
* per-surface / per-node registry; this manifest emits EXACTLY THREE map entries
|
|
21
|
+
* (posture / wiring / ranked_next_reach) and NEVER a per-surface row. A surface
|
|
22
|
+
* (a /mos command, an agent, a skill) is reflected ONLY TRANSITIVELY: it lands
|
|
23
|
+
* in connector-registry.json (its real home, the per-surface registry), the
|
|
24
|
+
* wiring map's digest + source_count change, and this manifest's wiring entry
|
|
25
|
+
* digest + source_count update to match. The manifest digests the three maps; it
|
|
26
|
+
* never inlines or enumerates the surfaces inside them. This is what keeps
|
|
27
|
+
* D-166-03 inviolate.
|
|
28
|
+
*
|
|
29
|
+
* HIGH-1 (LOCKED): the manifest is a 3-MAP DIGEST naming EXACTLY the three maps
|
|
30
|
+
* as { role, path, digest(sha256), source_count }:
|
|
31
|
+
* posture -> data/command-registry.json
|
|
32
|
+
* wiring -> data/connector-registry.json
|
|
33
|
+
* ranked_next_reach -> data/brain-orchestration-projection.json
|
|
34
|
+
*
|
|
35
|
+
* Canon Part 8 (The Graph Boundary) + the Phase 157 amendment (Appendix D entry
|
|
36
|
+
* 19): the manifest carries methodology_tier=mindrian-operation machinery
|
|
37
|
+
* metadata ONLY (the sha256 digests are machinery metadata, NOT contents). It
|
|
38
|
+
* NEVER carries user content. It is a LOCAL artifact: there is NO live Brain read
|
|
39
|
+
* and NO live Brain write anywhere in this file - no brain-client require, no
|
|
40
|
+
* fetch, no http. It is NOT folded into the Brain projection (D-167-01). NO new
|
|
41
|
+
* deps; node built-ins only (node:fs, node:path, node:crypto for sha256). NO
|
|
42
|
+
* YAML; NO TS.
|
|
43
|
+
*
|
|
44
|
+
* Usage:
|
|
45
|
+
* node scripts/build-harness-manifest.cjs
|
|
46
|
+
* read the three maps -> write data/harness-manifest.json
|
|
47
|
+
* node scripts/build-harness-manifest.cjs --check
|
|
48
|
+
* regenerate in memory, assert STALE / UNRESOLVED / MALFORMED, exit-1 on
|
|
49
|
+
* any finding with a stderr recovery line, else print an OK line. Phase
|
|
50
|
+
* 298 (SEED-032) Plan 13: --check ALSO runs every `kind: "contract"`
|
|
51
|
+
* policy in data/harness-policies/ INLINE (runContractChecks below) --
|
|
52
|
+
* pure file reads a faster feedback path onto the truths the nine
|
|
53
|
+
* frozen-phrase tests already pin, never a second source of truth.
|
|
54
|
+
* node scripts/build-harness-manifest.cjs --refresh
|
|
55
|
+
* re-derive the digests + re-write the artifact (idempotent)
|
|
56
|
+
*
|
|
57
|
+
* House rule: hyphens only, no em-dashes.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
const fs = require('node:fs');
|
|
61
|
+
const path = require('node:path');
|
|
62
|
+
const crypto = require('node:crypto');
|
|
63
|
+
|
|
64
|
+
const REPO_ROOT = path.resolve(__dirname, '..');
|
|
65
|
+
const DATA_DIR = path.join(REPO_ROOT, 'data');
|
|
66
|
+
|
|
67
|
+
const COMMAND_REGISTRY_PATH = path.join(DATA_DIR, 'command-registry.json');
|
|
68
|
+
const CONNECTOR_REGISTRY_PATH = path.join(DATA_DIR, 'connector-registry.json');
|
|
69
|
+
const PROJECTION_PATH = path.join(DATA_DIR, 'brain-orchestration-projection.json');
|
|
70
|
+
const MANIFEST_PATH = path.join(DATA_DIR, 'harness-manifest.json');
|
|
71
|
+
|
|
72
|
+
const GENERATED_NOTE =
|
|
73
|
+
'GENERATED by scripts/build-harness-manifest.cjs - do not edit by hand';
|
|
74
|
+
|
|
75
|
+
// The only legal methodology_tier for this LOCAL machinery descriptor (Canon
|
|
76
|
+
// Part 8, Phase 157 amendment). The manifest is mindrian-operation machinery
|
|
77
|
+
// metadata, never pws teaching IP and never user content.
|
|
78
|
+
const TIER_OP = 'mindrian-operation';
|
|
79
|
+
|
|
80
|
+
const MANIFEST_VERSION = 2;
|
|
81
|
+
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// THE THREE-MAP BINDING (HIGH-1, D-167-01). EXACTLY three entries, one per map.
|
|
84
|
+
// Each entry declares { role, relPath, primaryArrayKey }. The generator reads
|
|
85
|
+
// the on-disk bytes of each path, sha256-digests them (machinery metadata, NOT
|
|
86
|
+
// contents), and counts the primary array's length for source_count. There is
|
|
87
|
+
// NO fourth entry, and NO per-surface row: a surface is digested transitively
|
|
88
|
+
// inside the wiring map's source_count.
|
|
89
|
+
//
|
|
90
|
+
// role -> map (LOCKED naming):
|
|
91
|
+
// posture command-registry.json (the posture / autonomy authority)
|
|
92
|
+
// wiring connector-registry.json (the reach -> surface wiring)
|
|
93
|
+
// ranked_next_reach brain-orchestration-projection.json (the ranked next-reach)
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
const MAP_BINDINGS = Object.freeze([
|
|
96
|
+
Object.freeze({
|
|
97
|
+
role: 'posture',
|
|
98
|
+
relPath: 'data/command-registry.json',
|
|
99
|
+
absPath: COMMAND_REGISTRY_PATH,
|
|
100
|
+
primaryArrayKey: 'commands',
|
|
101
|
+
}),
|
|
102
|
+
Object.freeze({
|
|
103
|
+
role: 'wiring',
|
|
104
|
+
relPath: 'data/connector-registry.json',
|
|
105
|
+
absPath: CONNECTOR_REGISTRY_PATH,
|
|
106
|
+
primaryArrayKey: 'connectors',
|
|
107
|
+
}),
|
|
108
|
+
Object.freeze({
|
|
109
|
+
role: 'ranked_next_reach',
|
|
110
|
+
relPath: 'data/brain-orchestration-projection.json',
|
|
111
|
+
absPath: PROJECTION_PATH,
|
|
112
|
+
primaryArrayKey: 'nodes',
|
|
113
|
+
}),
|
|
114
|
+
]);
|
|
115
|
+
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// THE RUNTIME-SURFACE BINDINGS (Phase 201-01, SEED-032, D-201-1). The agent is
|
|
118
|
+
// Model + Harness; the three maps above declare the harness's DATA, but SEED-032's
|
|
119
|
+
// point is that the harness's RUNTIME surfaces - the code the harness runs ON -
|
|
120
|
+
// belong in the SAME declared manifest too. These four bindings name each runtime
|
|
121
|
+
// surface as { role, path, digest(sha256) } - DIGEST-ONLY (D-201-1, the RECOMMENDED
|
|
122
|
+
// depth): a fixed-length fingerprint of the on-disk bytes, machinery metadata,
|
|
123
|
+
// NEVER the file contents. There is NO source_count (these are code files, not
|
|
124
|
+
// arrays of sources) and NO richer per-surface schema - a richer schema would turn
|
|
125
|
+
// the read/descriptor into a second orchestration brain (Canon Part 11: one
|
|
126
|
+
// governed path). This block is purely ADDITIVE: it DECLARES what already runs
|
|
127
|
+
// (Part 7), retires no map (D-166-03), keeps maps at EXACTLY three, and opens no
|
|
128
|
+
// Brain wire (Part 8). --check re-digests these files and fails closed on any drift
|
|
129
|
+
// between the declared harness and the on-disk harness.
|
|
130
|
+
//
|
|
131
|
+
// role -> the runtime surface (the code file that IS that surface):
|
|
132
|
+
// orchestration_spine lib/core/chain-executor.cjs (the runChain spine)
|
|
133
|
+
// decide_engine lib/core/navigation-engine.cjs (the decide() engine)
|
|
134
|
+
// cockpit lib/statusline/cockpit-renderer.cjs (the statusline cockpit)
|
|
135
|
+
// brain_orchestration lib/core/directive-envelope.cjs (the brain-orchestration reader)
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
const RUNTIME_SURFACE_BINDINGS = Object.freeze([
|
|
138
|
+
Object.freeze({
|
|
139
|
+
role: 'orchestration_spine',
|
|
140
|
+
relPath: 'lib/core/chain-executor.cjs',
|
|
141
|
+
absPath: path.join(REPO_ROOT, 'lib/core/chain-executor.cjs'),
|
|
142
|
+
}),
|
|
143
|
+
Object.freeze({
|
|
144
|
+
role: 'decide_engine',
|
|
145
|
+
relPath: 'lib/core/navigation-engine.cjs',
|
|
146
|
+
absPath: path.join(REPO_ROOT, 'lib/core/navigation-engine.cjs'),
|
|
147
|
+
}),
|
|
148
|
+
Object.freeze({
|
|
149
|
+
role: 'cockpit',
|
|
150
|
+
relPath: 'lib/statusline/cockpit-renderer.cjs',
|
|
151
|
+
absPath: path.join(REPO_ROOT, 'lib/statusline/cockpit-renderer.cjs'),
|
|
152
|
+
}),
|
|
153
|
+
Object.freeze({
|
|
154
|
+
role: 'brain_orchestration',
|
|
155
|
+
relPath: 'lib/core/directive-envelope.cjs',
|
|
156
|
+
absPath: path.join(REPO_ROOT, 'lib/core/directive-envelope.cjs'),
|
|
157
|
+
}),
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// THE LARRY SURFACE BINDINGS (Phase 298, SEED-032, D-201-1 sibling). Larry
|
|
162
|
+
// speaks through exactly THREE surfaces; each is its OWN declared, digested
|
|
163
|
+
// binding, kept OUT of RUNTIME_SURFACE_BINDINGS (which stays exactly four -
|
|
164
|
+
// tests/test-201-harness-manifest.cjs's EXPECTED_SURFACE_ROLES pins that
|
|
165
|
+
// length). buildSurfaceEntry(binding) is REUSED VERBATIM (Part 7): a
|
|
166
|
+
// `{ role, path, digest }` triple, digest-only, no source_count, matching the
|
|
167
|
+
// runtime-surface entry shape exactly.
|
|
168
|
+
//
|
|
169
|
+
// role -> the speaking surface (the file that IS that surface):
|
|
170
|
+
// cli_agent agents/larry-extended.md (the CLI agent)
|
|
171
|
+
// personality_skill skills/larry-personality/SKILL.md (the skill)
|
|
172
|
+
// desktop_cowork_wire lib/mcp/runtime-instructions.cjs (the Desktop/Cowork wire)
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
const LARRY_SURFACE_BINDINGS = Object.freeze([
|
|
175
|
+
Object.freeze({
|
|
176
|
+
role: 'cli_agent',
|
|
177
|
+
relPath: 'agents/larry-extended.md',
|
|
178
|
+
absPath: path.join(REPO_ROOT, 'agents/larry-extended.md'),
|
|
179
|
+
}),
|
|
180
|
+
Object.freeze({
|
|
181
|
+
role: 'personality_skill',
|
|
182
|
+
relPath: 'skills/larry-personality/SKILL.md',
|
|
183
|
+
absPath: path.join(REPO_ROOT, 'skills/larry-personality/SKILL.md'),
|
|
184
|
+
}),
|
|
185
|
+
Object.freeze({
|
|
186
|
+
role: 'desktop_cowork_wire',
|
|
187
|
+
relPath: 'lib/mcp/runtime-instructions.cjs',
|
|
188
|
+
absPath: path.join(REPO_ROOT, 'lib/mcp/runtime-instructions.cjs'),
|
|
189
|
+
}),
|
|
190
|
+
]);
|
|
191
|
+
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// THE POLICY DIRECTORY + FIXTURE DIRECTORY (Phase 298, SEED-032). Both are
|
|
194
|
+
// digested as ONE directory-wide entry (path, digest[, count]) - the manifest
|
|
195
|
+
// never enumerates a directory's individual files as rows, exactly as it never
|
|
196
|
+
// enumerates a map's individual sources as rows (HIGH-1's own discipline
|
|
197
|
+
// extended one level).
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
const POLICIES_DIR = 'data/harness-policies';
|
|
200
|
+
const POLICIES_ABS = path.join(REPO_ROOT, POLICIES_DIR);
|
|
201
|
+
const FIXTURE_DIR = 'data/harness-fixtures/converged-room';
|
|
202
|
+
const FIXTURE_ABS = path.join(REPO_ROOT, FIXTURE_DIR);
|
|
203
|
+
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
// The Part 8 boundary-scan field allowlists (D-167-06, BOG-10 sibling). SINGLE
|
|
206
|
+
// SOURCE OF TRUTH the Wave-1 boundary scan
|
|
207
|
+
// (tests/test-harness-manifest-part8-boundary.cjs) asserts against. A top-level
|
|
208
|
+
// manifest key outside NODE_FIELD_ALLOWLIST, or a maps-entry key outside
|
|
209
|
+
// ENTRY_FIELD_ALLOWLIST, is a Part 8 breach (a candidate user-content field) and
|
|
210
|
+
// fails the build before the artifact lands. Every name here is a GENERIC
|
|
211
|
+
// machinery field: an ontology reference, a generated note, a tier enum, a
|
|
212
|
+
// version int, the maps binding, and the per-entry { role, path, digest,
|
|
213
|
+
// source_count } machinery quadruple. NONE is a user-content channel.
|
|
214
|
+
const NODE_FIELD_ALLOWLIST = Object.freeze([
|
|
215
|
+
'ontology_ref',
|
|
216
|
+
'generated_note',
|
|
217
|
+
'methodology_tier',
|
|
218
|
+
'version',
|
|
219
|
+
'maps',
|
|
220
|
+
// Phase 201-01: the additive runtime-surface digest block. Each entry is the
|
|
221
|
+
// generic { role, path, digest } machinery triple (a subset of
|
|
222
|
+
// ENTRY_FIELD_ALLOWLIST); no source_count, no user-content channel.
|
|
223
|
+
'runtime_surfaces',
|
|
224
|
+
// Phase 298 (SEED-032): three additive generic machinery fields carrying no
|
|
225
|
+
// user content. `policies` and `fixture_ref` are DIRECTORY-DIGEST objects
|
|
226
|
+
// (path, digest[, count]), never a per-file enumeration. `larry_surfaces` is
|
|
227
|
+
// the same { role, path, digest } machinery triple as runtime_surfaces, just
|
|
228
|
+
// Larry's own three speaking surfaces kept in a separate frozen array.
|
|
229
|
+
'policies',
|
|
230
|
+
'larry_surfaces',
|
|
231
|
+
'fixture_ref',
|
|
232
|
+
]);
|
|
233
|
+
|
|
234
|
+
// Every maps entry is EXACTLY { role, path, digest, source_count }. A maps-entry
|
|
235
|
+
// key outside this set is a Part 8 breach.
|
|
236
|
+
const ENTRY_FIELD_ALLOWLIST = Object.freeze([
|
|
237
|
+
'role',
|
|
238
|
+
'path',
|
|
239
|
+
'digest',
|
|
240
|
+
'source_count',
|
|
241
|
+
]);
|
|
242
|
+
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// readBytes(p) -- read a committed source file's raw bytes. Returns null on any
|
|
245
|
+
// failure so the generator/validator degrades rather than throwing (mirrors the
|
|
246
|
+
// shipped generators' readJson degrade discipline).
|
|
247
|
+
// ---------------------------------------------------------------------------
|
|
248
|
+
function readBytes(p) {
|
|
249
|
+
try {
|
|
250
|
+
return fs.readFileSync(p);
|
|
251
|
+
} catch (_e) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
// digestBytes(buf) -- sha256 hex of the raw on-disk bytes. This is MACHINERY
|
|
258
|
+
// METADATA (a fixed-length hex fingerprint), NEVER the map's contents. A digest
|
|
259
|
+
// changes iff the map's bytes change, so a single surface landing in
|
|
260
|
+
// connector-registry.json flips the wiring entry's digest transitively.
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
function digestBytes(buf) {
|
|
263
|
+
return crypto.createHash('sha256').update(buf).digest('hex');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// primaryArrayCount(buf, key) -- parse the JSON bytes and return the length of
|
|
268
|
+
// the named primary array (a scalar count, NOT the contents). Returns 0 on a
|
|
269
|
+
// missing / malformed source or a non-array key, so the count degrades to a
|
|
270
|
+
// legible zero rather than throwing.
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
function primaryArrayCount(buf, key) {
|
|
273
|
+
if (!buf) return 0;
|
|
274
|
+
let parsed;
|
|
275
|
+
try {
|
|
276
|
+
parsed = JSON.parse(buf.toString('utf8'));
|
|
277
|
+
} catch (_e) {
|
|
278
|
+
return 0;
|
|
279
|
+
}
|
|
280
|
+
const arr = parsed && parsed[key];
|
|
281
|
+
return Array.isArray(arr) ? arr.length : 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
// buildMapEntry(binding) -- build ONE { role, path, digest, source_count } map
|
|
286
|
+
// entry. Reads the on-disk bytes once: digests them and counts the primary
|
|
287
|
+
// array. A missing source yields a stable empty-digest sentinel (the sha256 of
|
|
288
|
+
// the empty byte string) + a zero count, so the manifest is still byte-stable
|
|
289
|
+
// when a source is absent; --check then flags the absence as UNRESOLVED.
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
function buildMapEntry(binding) {
|
|
292
|
+
const buf = readBytes(binding.absPath);
|
|
293
|
+
const digest = buf ? digestBytes(buf) : digestBytes(Buffer.from(''));
|
|
294
|
+
const source_count = primaryArrayCount(buf, binding.primaryArrayKey);
|
|
295
|
+
return {
|
|
296
|
+
role: binding.role,
|
|
297
|
+
path: binding.relPath,
|
|
298
|
+
digest: digest,
|
|
299
|
+
source_count: source_count,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
// buildSurfaceEntry(binding) -- build ONE { role, path, digest } runtime-surface
|
|
305
|
+
// entry (Phase 201-01, D-201-1 digest-only). Reads the on-disk code bytes once and
|
|
306
|
+
// sha256-digests them (machinery metadata, NOT contents). A missing surface yields
|
|
307
|
+
// the stable empty-digest sentinel so the manifest stays byte-stable when a file is
|
|
308
|
+
// absent; --check then flags the absence as UNRESOLVED. There is NO source_count:
|
|
309
|
+
// a runtime surface is one code file, not an array of sources.
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
function buildSurfaceEntry(binding) {
|
|
312
|
+
const buf = readBytes(binding.absPath);
|
|
313
|
+
const digest = buf ? digestBytes(buf) : digestBytes(Buffer.from(''));
|
|
314
|
+
return {
|
|
315
|
+
role: binding.role,
|
|
316
|
+
path: binding.relPath,
|
|
317
|
+
digest: digest,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
// listFilesRecursive(rootDir) -- list every FILE under rootDir (recursing into
|
|
323
|
+
// subdirectories), as paths relative to rootDir using '/' separators
|
|
324
|
+
// regardless of OS, in a plain lexicographic sort over the FULL relative path.
|
|
325
|
+
// Returns [] for a missing or unreadable directory (degrade, never throw).
|
|
326
|
+
// ---------------------------------------------------------------------------
|
|
327
|
+
function listFilesRecursive(rootDir) {
|
|
328
|
+
const out = [];
|
|
329
|
+
function walk(dirAbs, relPrefix) {
|
|
330
|
+
let entries;
|
|
331
|
+
try {
|
|
332
|
+
entries = fs.readdirSync(dirAbs, { withFileTypes: true });
|
|
333
|
+
} catch (_e) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
for (const entry of entries) {
|
|
337
|
+
const relPath = relPrefix ? relPrefix + '/' + entry.name : entry.name;
|
|
338
|
+
const absPath = path.join(dirAbs, entry.name);
|
|
339
|
+
if (entry.isDirectory()) {
|
|
340
|
+
walk(absPath, relPath);
|
|
341
|
+
} else if (entry.isFile()) {
|
|
342
|
+
out.push(relPath);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
walk(rootDir, '');
|
|
347
|
+
return out.sort();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
// digestDirectory(dirPath) -- digest a DIRECTORY as ONE value (Phase 298,
|
|
352
|
+
// SEED-032). There is NO shipped directory-digest precedent in this file (the
|
|
353
|
+
// three existing digests are all single-file digestBytes calls), so THE
|
|
354
|
+
// COMPOSITION RULE IS STATED HERE, the way every other invariant in this file
|
|
355
|
+
// is stated:
|
|
356
|
+
//
|
|
357
|
+
// 1. List every file under dirPath, recursing into subdirectories.
|
|
358
|
+
// 2. Sort the relative paths with a plain lexicographic sort (the full
|
|
359
|
+
// relative path, '/' separators, no OS-specific ordering).
|
|
360
|
+
// 3. For each file, in that sorted order, build the line:
|
|
361
|
+
// <relative-path> + NUL(\0) + <lowercase-hex-sha256-of-the-file-bytes> + \n
|
|
362
|
+
// 4. Concatenate those lines in order and return the sha256 hex of the
|
|
363
|
+
// concatenation.
|
|
364
|
+
//
|
|
365
|
+
// This makes the digest filesystem-independent (relative paths only) and
|
|
366
|
+
// RENAME-SENSITIVE: renaming a file with byte-identical content changes the
|
|
367
|
+
// digest, because the relative path is part of what is hashed - which is the
|
|
368
|
+
// correct behavior for a declared harness fingerprint. A missing directory (or
|
|
369
|
+
// an empty one) yields the sha256 of the empty buffer, the SAME stable
|
|
370
|
+
// sentinel readBytes's degrade path already uses for a missing single file.
|
|
371
|
+
// ---------------------------------------------------------------------------
|
|
372
|
+
function digestDirectory(dirPath) {
|
|
373
|
+
const files = listFilesRecursive(dirPath);
|
|
374
|
+
if (files.length === 0) {
|
|
375
|
+
return digestBytes(Buffer.from(''));
|
|
376
|
+
}
|
|
377
|
+
const lines = files.map((relPath) => {
|
|
378
|
+
const buf = readBytes(path.join(dirPath, relPath));
|
|
379
|
+
const fileDigest = buf ? digestBytes(buf) : digestBytes(Buffer.from(''));
|
|
380
|
+
return relPath + '\0' + fileDigest + '\n';
|
|
381
|
+
});
|
|
382
|
+
return digestBytes(Buffer.from(lines.join(''), 'utf8'));
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// ---------------------------------------------------------------------------
|
|
386
|
+
// listPolicyFileNames(dirAbs) -- the policy directory's *.json files, EXCLUDING
|
|
387
|
+
// `_schema.json` (the vocabulary declaration itself, not a policy) and any
|
|
388
|
+
// non-JSON file (e.g. CONTEXT.md). Sorted for determinism. Returns [] for a
|
|
389
|
+
// missing/unreadable directory (degrade, never throw).
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
function listPolicyFileNames(dirAbs) {
|
|
392
|
+
let entries;
|
|
393
|
+
try {
|
|
394
|
+
entries = fs.readdirSync(dirAbs);
|
|
395
|
+
} catch (_e) {
|
|
396
|
+
return [];
|
|
397
|
+
}
|
|
398
|
+
return entries.filter((f) => f.endsWith('.json') && f !== '_schema.json').sort();
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// ---------------------------------------------------------------------------
|
|
402
|
+
// loadPolicySchema() -- read data/harness-policies/_schema.json's `_doc` block
|
|
403
|
+
// (the closed vocabularies + runner_path_rule + policy_fields). Returns null
|
|
404
|
+
// on any failure so a caller can degrade to a single MALFORMED finding rather
|
|
405
|
+
// than throwing (mirrors readBytes's degrade discipline).
|
|
406
|
+
// ---------------------------------------------------------------------------
|
|
407
|
+
function loadPolicySchema() {
|
|
408
|
+
try {
|
|
409
|
+
const raw = fs.readFileSync(path.join(POLICIES_ABS, '_schema.json'), 'utf8');
|
|
410
|
+
const parsed = JSON.parse(raw);
|
|
411
|
+
return parsed && typeof parsed === 'object' && parsed._doc ? parsed._doc : null;
|
|
412
|
+
} catch (_e) {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// ---------------------------------------------------------------------------
|
|
418
|
+
// EXTRA_KEYS_BY_POLICY_ID -- the narrow extra-key exception
|
|
419
|
+
// data/harness-policies/_schema.json's own `_doc.validation_rule` documents in
|
|
420
|
+
// prose (that file has no separate machine-readable field for it): two
|
|
421
|
+
// migration-slice-1 policy files carry a small set of additional keys beyond
|
|
422
|
+
// the eleven common `policy_fields`. This states that SAME exception verbatim
|
|
423
|
+
// rather than inventing a new one or restating a different description of it.
|
|
424
|
+
// ---------------------------------------------------------------------------
|
|
425
|
+
const EXTRA_KEYS_BY_POLICY_ID = Object.freeze({
|
|
426
|
+
'memory-write-policy': Object.freeze([
|
|
427
|
+
'channels', 'verbs', 'basket_fires_at', 'claim_review_status',
|
|
428
|
+
'toggled_off_writes', 'narrated',
|
|
429
|
+
]),
|
|
430
|
+
'contract-parity-larry': Object.freeze([
|
|
431
|
+
'surfaces', 'byte_budget',
|
|
432
|
+
]),
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
// ---------------------------------------------------------------------------
|
|
436
|
+
// isValidRunnerPath(runner) -- the schema's own runner_path_rule, implemented:
|
|
437
|
+
// null (an honest declared ghost) is always valid; otherwise runner must be a
|
|
438
|
+
// repo-relative string beginning with the literal prefix "scripts/", carrying
|
|
439
|
+
// no parent-directory ("..") segment, never an absolute path, and resolving
|
|
440
|
+
// inside the repository root when joined to it.
|
|
441
|
+
// ---------------------------------------------------------------------------
|
|
442
|
+
function isValidRunnerPath(runner) {
|
|
443
|
+
if (runner === null) return true;
|
|
444
|
+
if (typeof runner !== 'string' || runner.length === 0) return false;
|
|
445
|
+
if (!runner.startsWith('scripts/')) return false;
|
|
446
|
+
if (path.isAbsolute(runner)) return false;
|
|
447
|
+
if (runner.split('/').includes('..')) return false;
|
|
448
|
+
const resolved = path.resolve(REPO_ROOT, runner);
|
|
449
|
+
const rel = path.relative(REPO_ROOT, resolved);
|
|
450
|
+
return rel !== '' && rel !== '..' && !rel.startsWith('..' + path.sep) && !path.isAbsolute(rel);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// ---------------------------------------------------------------------------
|
|
454
|
+
// validatePolicyFile(policy, fileName, schema) -- validate ONE parsed policy
|
|
455
|
+
// object against the closed vocabularies + runner_path_rule READ from the
|
|
456
|
+
// schema (never restated as a second hardcoded copy). Returns an array of
|
|
457
|
+
// finding strings, each naming the file and the failing key; an empty array
|
|
458
|
+
// means the file is valid. Fails closed: every rejection reason from the
|
|
459
|
+
// schema's `default_on_miss` is enforced here.
|
|
460
|
+
// ---------------------------------------------------------------------------
|
|
461
|
+
function validatePolicyFile(policy, fileName, schema) {
|
|
462
|
+
const findings = [];
|
|
463
|
+
const RECOVERY_POLICY =
|
|
464
|
+
'Recovery: fix data/harness-policies/' + fileName +
|
|
465
|
+
' against data/harness-policies/_schema.json, then re-run ' +
|
|
466
|
+
'node scripts/build-harness-manifest.cjs --check.';
|
|
467
|
+
|
|
468
|
+
if (!policy || typeof policy !== 'object' || Array.isArray(policy)) {
|
|
469
|
+
findings.push(
|
|
470
|
+
'MALFORMED: policy file ' + fileName + ' is not a JSON object. ' + RECOVERY_POLICY
|
|
471
|
+
);
|
|
472
|
+
return findings;
|
|
473
|
+
}
|
|
474
|
+
if (!schema || typeof schema !== 'object') {
|
|
475
|
+
findings.push(
|
|
476
|
+
'MALFORMED: policy file ' + fileName + ' cannot be validated - ' +
|
|
477
|
+
'data/harness-policies/_schema.json is missing or invalid. ' + RECOVERY_POLICY
|
|
478
|
+
);
|
|
479
|
+
return findings;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
const commonFields = Array.isArray(schema.policy_fields)
|
|
483
|
+
? schema.policy_fields.map((f) => f && f.field).filter((f) => typeof f === 'string')
|
|
484
|
+
: [];
|
|
485
|
+
const id = typeof policy.id === 'string' ? policy.id : '';
|
|
486
|
+
const extraAllowed = EXTRA_KEYS_BY_POLICY_ID[id] || [];
|
|
487
|
+
const allowedKeys = new Set([...commonFields, ...extraAllowed]);
|
|
488
|
+
|
|
489
|
+
// Unknown top-level key.
|
|
490
|
+
for (const key of Object.keys(policy)) {
|
|
491
|
+
if (!allowedKeys.has(key)) {
|
|
492
|
+
findings.push(
|
|
493
|
+
'MALFORMED: policy file ' + fileName + ' carries unknown top-level key "' + key +
|
|
494
|
+
'" (not one of the schema\'s policy_fields, and not an extra key the schema ' +
|
|
495
|
+
'permits for this policy id). ' + RECOVERY_POLICY
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Missing required field.
|
|
501
|
+
for (const field of commonFields) {
|
|
502
|
+
if (!Object.prototype.hasOwnProperty.call(policy, field)) {
|
|
503
|
+
findings.push(
|
|
504
|
+
'MALFORMED: policy file ' + fileName + ' is missing required key "' + field + '". ' +
|
|
505
|
+
RECOVERY_POLICY
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// rung: member of the closed rung_vocabulary.
|
|
511
|
+
const rungVocab = Array.isArray(schema.rung_vocabulary) ? schema.rung_vocabulary : [];
|
|
512
|
+
if (Object.prototype.hasOwnProperty.call(policy, 'rung') && !rungVocab.includes(policy.rung)) {
|
|
513
|
+
findings.push(
|
|
514
|
+
'MALFORMED: policy file ' + fileName + ' carries unknown "rung" value ' +
|
|
515
|
+
JSON.stringify(policy.rung) + ' (not a member of the schema\'s rung_vocabulary). ' +
|
|
516
|
+
RECOVERY_POLICY
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// kind: member of the closed kind_vocabulary.
|
|
521
|
+
const kindVocab = Array.isArray(schema.kind_vocabulary) ? schema.kind_vocabulary : [];
|
|
522
|
+
if (Object.prototype.hasOwnProperty.call(policy, 'kind') && !kindVocab.includes(policy.kind)) {
|
|
523
|
+
findings.push(
|
|
524
|
+
'MALFORMED: policy file ' + fileName + ' carries unknown "kind" value ' +
|
|
525
|
+
JSON.stringify(policy.kind) + ' (not a member of the schema\'s kind_vocabulary). ' +
|
|
526
|
+
RECOVERY_POLICY
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// applies_to: every member is in the closed applies_to_vocabulary.
|
|
531
|
+
const appliesVocab = Array.isArray(schema.applies_to_vocabulary) ? schema.applies_to_vocabulary : [];
|
|
532
|
+
if (Object.prototype.hasOwnProperty.call(policy, 'applies_to')) {
|
|
533
|
+
if (!Array.isArray(policy.applies_to)) {
|
|
534
|
+
findings.push(
|
|
535
|
+
'MALFORMED: policy file ' + fileName + ' "applies_to" is not an array. ' + RECOVERY_POLICY
|
|
536
|
+
);
|
|
537
|
+
} else {
|
|
538
|
+
for (const member of policy.applies_to) {
|
|
539
|
+
if (!appliesVocab.includes(member)) {
|
|
540
|
+
findings.push(
|
|
541
|
+
'MALFORMED: policy file ' + fileName + ' carries unknown "applies_to" member ' +
|
|
542
|
+
JSON.stringify(member) + ' (not a member of the schema\'s applies_to_vocabulary). ' +
|
|
543
|
+
RECOVERY_POLICY
|
|
544
|
+
);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
// promotion_rule: exactly its three documented keys.
|
|
551
|
+
if (Object.prototype.hasOwnProperty.call(policy, 'promotion_rule')) {
|
|
552
|
+
const pr = policy.promotion_rule;
|
|
553
|
+
const requiredPrKeys = ['window_runs', 'max_false_positive_rate', 'min_true_positives'];
|
|
554
|
+
if (!pr || typeof pr !== 'object' || Array.isArray(pr)) {
|
|
555
|
+
findings.push(
|
|
556
|
+
'MALFORMED: policy file ' + fileName + ' "promotion_rule" is not an object. ' +
|
|
557
|
+
RECOVERY_POLICY
|
|
558
|
+
);
|
|
559
|
+
} else {
|
|
560
|
+
const missingPr = requiredPrKeys.filter(
|
|
561
|
+
(k) => !Object.prototype.hasOwnProperty.call(pr, k)
|
|
562
|
+
);
|
|
563
|
+
if (missingPr.length) {
|
|
564
|
+
findings.push(
|
|
565
|
+
'MALFORMED: policy file ' + fileName + ' "promotion_rule" is missing key(s): ' +
|
|
566
|
+
missingPr.join(', ') + '. ' + RECOVERY_POLICY
|
|
567
|
+
);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// runner: the schema's own runner_path_rule (read, not restated).
|
|
573
|
+
if (Object.prototype.hasOwnProperty.call(policy, 'runner') && !isValidRunnerPath(policy.runner)) {
|
|
574
|
+
findings.push(
|
|
575
|
+
'MALFORMED: policy file ' + fileName + ' "runner" value ' + JSON.stringify(policy.runner) +
|
|
576
|
+
' violates the schema\'s runner_path_rule (' +
|
|
577
|
+
(typeof schema.runner_path_rule === 'string'
|
|
578
|
+
? schema.runner_path_rule
|
|
579
|
+
: 'see data/harness-policies/_schema.json') +
|
|
580
|
+
'). ' + RECOVERY_POLICY
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return findings;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// ---------------------------------------------------------------------------
|
|
588
|
+
// loadPolicies(rootDir) -- read + validate every policy file in the policy
|
|
589
|
+
// directory. Per-file try/catch (T-233-01 / T-217-01 self-DoS-avoidance
|
|
590
|
+
// pattern): one malformed file is reported by name and skipped from the
|
|
591
|
+
// returned `policies` list, and the loop NEVER aborts the rest of the scan.
|
|
592
|
+
// Returns { policies: [{fileName, id, policy}], findings: string[] }.
|
|
593
|
+
// ---------------------------------------------------------------------------
|
|
594
|
+
function loadPolicies(rootDir) {
|
|
595
|
+
const dirAbs = rootDir || POLICIES_ABS;
|
|
596
|
+
const schema = loadPolicySchema();
|
|
597
|
+
const fileNames = listPolicyFileNames(dirAbs);
|
|
598
|
+
const policies = [];
|
|
599
|
+
const findings = [];
|
|
600
|
+
|
|
601
|
+
for (const fileName of fileNames) {
|
|
602
|
+
let parsed;
|
|
603
|
+
try {
|
|
604
|
+
parsed = JSON.parse(fs.readFileSync(path.join(dirAbs, fileName), 'utf8'));
|
|
605
|
+
} catch (e) {
|
|
606
|
+
findings.push(
|
|
607
|
+
'MALFORMED: policy file ' + fileName + ' is not valid JSON (' + e.message + '). ' +
|
|
608
|
+
'Recovery: fix the JSON syntax in data/harness-policies/' + fileName + '.'
|
|
609
|
+
);
|
|
610
|
+
continue;
|
|
611
|
+
}
|
|
612
|
+
const fileFindings = validatePolicyFile(parsed, fileName, schema);
|
|
613
|
+
if (fileFindings.length) {
|
|
614
|
+
for (const f of fileFindings) findings.push(f);
|
|
615
|
+
continue;
|
|
616
|
+
}
|
|
617
|
+
policies.push({ fileName, id: parsed.id, policy: parsed });
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
return { policies, findings };
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// ---------------------------------------------------------------------------
|
|
624
|
+
// runContractChecks(rootDir) -- Phase 298 Plan 13 (SEED-032, R-06). Runs every
|
|
625
|
+
// `kind: "contract"` policy in data/harness-policies/ INLINE (pure file
|
|
626
|
+
// reads, no spawn, no runner): each declared phrase must be a literal
|
|
627
|
+
// substring of its declared surface file, and the declared byte_budget's
|
|
628
|
+
// EVALUATED constant (required and read, never file-statted) must sit at or
|
|
629
|
+
// under its declared limit. The generator HARDCODES NO PHRASE of its own --
|
|
630
|
+
// `contract-parity-larry.json` is the single declaration (T-298-27); a grep
|
|
631
|
+
// for two of its pinned phrases inside this file must return zero. A missing
|
|
632
|
+
// phrase or a busted budget produces ONE named finding: the surface role,
|
|
633
|
+
// path and the exact missing phrase, or the constant name, the measured
|
|
634
|
+
// bytes and the limit -- so the failure is actionable without opening the
|
|
635
|
+
// policy file. Returns an array of finding strings (empty = clean).
|
|
636
|
+
// ---------------------------------------------------------------------------
|
|
637
|
+
function runContractChecks(rootDir) {
|
|
638
|
+
const dirAbs = rootDir || REPO_ROOT;
|
|
639
|
+
const { policies } = loadPolicies(POLICIES_ABS);
|
|
640
|
+
const findings = [];
|
|
641
|
+
const RECOVERY_CONTRACT =
|
|
642
|
+
'Recovery: restore the declared phrase, or the declared byte budget, or ' +
|
|
643
|
+
'update data/harness-policies/<id>.json if the contract itself changed, ' +
|
|
644
|
+
'then re-run node scripts/build-harness-manifest.cjs --check.';
|
|
645
|
+
|
|
646
|
+
for (const entry of policies) {
|
|
647
|
+
const policy = entry && entry.policy;
|
|
648
|
+
if (!policy || policy.kind !== 'contract') continue;
|
|
649
|
+
const fileName = entry.fileName;
|
|
650
|
+
|
|
651
|
+
const surfaces = Array.isArray(policy.surfaces) ? policy.surfaces : [];
|
|
652
|
+
for (const surface of surfaces) {
|
|
653
|
+
if (!surface || typeof surface.path !== 'string') continue;
|
|
654
|
+
const absSurfacePath = path.join(dirAbs, surface.path);
|
|
655
|
+
const buf = readBytes(absSurfacePath);
|
|
656
|
+
const text = buf ? buf.toString('utf8') : null;
|
|
657
|
+
const phrases = Array.isArray(surface.phrases) ? surface.phrases : [];
|
|
658
|
+
for (const phrase of phrases) {
|
|
659
|
+
if (typeof phrase !== 'string') continue;
|
|
660
|
+
if (text === null || text.indexOf(phrase) === -1) {
|
|
661
|
+
findings.push(
|
|
662
|
+
'CONTRACT: ' + fileName + ' declares the phrase ' + JSON.stringify(phrase) +
|
|
663
|
+
' on surface "' + (surface.role || surface.path) + '" (' + surface.path +
|
|
664
|
+
'), but it is not present on disk. ' + RECOVERY_CONTRACT
|
|
665
|
+
);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
const budget = policy.byte_budget;
|
|
671
|
+
if (budget && typeof budget.path === 'string' && typeof budget.constant === 'string' &&
|
|
672
|
+
typeof budget.limit === 'number') {
|
|
673
|
+
const absModulePath = path.resolve(dirAbs, budget.path);
|
|
674
|
+
let value;
|
|
675
|
+
try {
|
|
676
|
+
const resolved = require.resolve(absModulePath);
|
|
677
|
+
delete require.cache[resolved];
|
|
678
|
+
const mod = require(absModulePath);
|
|
679
|
+
value = mod && mod[budget.constant];
|
|
680
|
+
} catch (_e) {
|
|
681
|
+
value = undefined;
|
|
682
|
+
}
|
|
683
|
+
if (typeof value !== 'string') {
|
|
684
|
+
findings.push(
|
|
685
|
+
'CONTRACT: ' + fileName + ' declares byte_budget constant "' + budget.constant +
|
|
686
|
+
'" on ' + budget.path + ', but requiring the module and reading that export ' +
|
|
687
|
+
'failed. ' + RECOVERY_CONTRACT
|
|
688
|
+
);
|
|
689
|
+
} else {
|
|
690
|
+
const measured = Buffer.byteLength(value, 'utf8');
|
|
691
|
+
if (measured > budget.limit) {
|
|
692
|
+
findings.push(
|
|
693
|
+
'CONTRACT: ' + fileName + ' byte_budget constant "' + budget.constant + '" (' +
|
|
694
|
+
budget.path + ') measured ' + measured + ' bytes, exceeding its declared ' +
|
|
695
|
+
'limit of ' + budget.limit + ' bytes. ' + RECOVERY_CONTRACT
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
return findings;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
// ---------------------------------------------------------------------------
|
|
706
|
+
// buildManifest() -- the core. Emits the declared descriptor object:
|
|
707
|
+
// { ontology_ref, generated_note, methodology_tier, version, maps }
|
|
708
|
+
// where maps is EXACTLY the three { role, path, digest, source_count } entries
|
|
709
|
+
// (posture / wiring / ranked_next_reach). NO per-surface rows. NO inlined map
|
|
710
|
+
// contents. methodology_tier=mindrian-operation machinery metadata (D-167-01).
|
|
711
|
+
// ---------------------------------------------------------------------------
|
|
712
|
+
function buildManifest() {
|
|
713
|
+
const maps = MAP_BINDINGS.map((b) => buildMapEntry(b));
|
|
714
|
+
const runtime_surfaces = RUNTIME_SURFACE_BINDINGS.map((b) => buildSurfaceEntry(b));
|
|
715
|
+
const larry_surfaces = LARRY_SURFACE_BINDINGS.map((b) => buildSurfaceEntry(b));
|
|
716
|
+
const policyCount = listPolicyFileNames(POLICIES_ABS).length;
|
|
717
|
+
return {
|
|
718
|
+
ontology_ref:
|
|
719
|
+
'data/command-registry.json + data/connector-registry.json + ' +
|
|
720
|
+
'data/brain-orchestration-projection.json',
|
|
721
|
+
generated_note: GENERATED_NOTE,
|
|
722
|
+
methodology_tier: TIER_OP,
|
|
723
|
+
version: MANIFEST_VERSION,
|
|
724
|
+
maps: maps,
|
|
725
|
+
runtime_surfaces: runtime_surfaces,
|
|
726
|
+
policies: {
|
|
727
|
+
path: POLICIES_DIR,
|
|
728
|
+
digest: digestDirectory(POLICIES_ABS),
|
|
729
|
+
count: policyCount,
|
|
730
|
+
},
|
|
731
|
+
larry_surfaces: larry_surfaces,
|
|
732
|
+
fixture_ref: {
|
|
733
|
+
path: FIXTURE_DIR,
|
|
734
|
+
digest: digestDirectory(FIXTURE_ABS),
|
|
735
|
+
},
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
// ---------------------------------------------------------------------------
|
|
740
|
+
// serializeManifest(manifest) -- deterministic JSON + a single trailing newline
|
|
741
|
+
// (byte-stable across machines), mirroring the shipped serialize* idiom. Emits
|
|
742
|
+
// ONLY the serialized fields in a stable key order; each maps entry emits its
|
|
743
|
+
// four keys in a stable order.
|
|
744
|
+
// ---------------------------------------------------------------------------
|
|
745
|
+
function serializeManifest(manifest) {
|
|
746
|
+
const clean = {
|
|
747
|
+
ontology_ref: manifest.ontology_ref,
|
|
748
|
+
generated_note: manifest.generated_note,
|
|
749
|
+
methodology_tier: manifest.methodology_tier,
|
|
750
|
+
version: manifest.version,
|
|
751
|
+
maps: (Array.isArray(manifest.maps) ? manifest.maps : []).map((m) => ({
|
|
752
|
+
role: m.role,
|
|
753
|
+
path: m.path,
|
|
754
|
+
digest: m.digest,
|
|
755
|
+
source_count: m.source_count,
|
|
756
|
+
})),
|
|
757
|
+
runtime_surfaces: (Array.isArray(manifest.runtime_surfaces)
|
|
758
|
+
? manifest.runtime_surfaces
|
|
759
|
+
: []
|
|
760
|
+
).map((s) => ({
|
|
761
|
+
role: s.role,
|
|
762
|
+
path: s.path,
|
|
763
|
+
digest: s.digest,
|
|
764
|
+
})),
|
|
765
|
+
policies: {
|
|
766
|
+
path: manifest.policies && manifest.policies.path,
|
|
767
|
+
digest: manifest.policies && manifest.policies.digest,
|
|
768
|
+
count: manifest.policies && manifest.policies.count,
|
|
769
|
+
},
|
|
770
|
+
larry_surfaces: (Array.isArray(manifest.larry_surfaces)
|
|
771
|
+
? manifest.larry_surfaces
|
|
772
|
+
: []
|
|
773
|
+
).map((s) => ({
|
|
774
|
+
role: s.role,
|
|
775
|
+
path: s.path,
|
|
776
|
+
digest: s.digest,
|
|
777
|
+
})),
|
|
778
|
+
fixture_ref: {
|
|
779
|
+
path: manifest.fixture_ref && manifest.fixture_ref.path,
|
|
780
|
+
digest: manifest.fixture_ref && manifest.fixture_ref.digest,
|
|
781
|
+
},
|
|
782
|
+
};
|
|
783
|
+
return JSON.stringify(clean, null, 2) + '\n';
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
// ---------------------------------------------------------------------------
|
|
787
|
+
// validateManifest(manifest) -- the 3-mode drift taxonomy (D-167-01 / D-167-03).
|
|
788
|
+
// Returns { stale, unresolved, malformed }: three categorized arrays of error
|
|
789
|
+
// strings (each empty = that mode is clean). PURE with respect to the Brain:
|
|
790
|
+
// reads ONLY the passed manifest + the committed on-disk manifest file (for the
|
|
791
|
+
// byte-compare) + the three named source paths (for the resolve check). ZERO
|
|
792
|
+
// Brain/network calls (Part 8). Mirrors validateProjection in
|
|
793
|
+
// build-orchestration-projection.cjs (categorized error arrays exercised
|
|
794
|
+
// directly by the test without spawning a subprocess).
|
|
795
|
+
//
|
|
796
|
+
// STALE -- the serialized regeneration differs byte-for-byte from the
|
|
797
|
+
// committed data/harness-manifest.json (a source map changed, or
|
|
798
|
+
// the committed file was hand-edited, without regenerating).
|
|
799
|
+
// UNRESOLVED -- a named map path does not exist on disk (a spoofed binding).
|
|
800
|
+
// MALFORMED -- a maps entry is missing a required key (role / path / digest),
|
|
801
|
+
// OR the maps section is not exactly the three declared roles
|
|
802
|
+
// (an extra entry, a per-surface row, or a missing role).
|
|
803
|
+
// ---------------------------------------------------------------------------
|
|
804
|
+
function validateManifest(manifest) {
|
|
805
|
+
const stale = [];
|
|
806
|
+
const unresolved = [];
|
|
807
|
+
const malformed = [];
|
|
808
|
+
|
|
809
|
+
const RECOVERY = 'Run: node scripts/build-harness-manifest.cjs';
|
|
810
|
+
|
|
811
|
+
const m = manifest && typeof manifest === 'object' ? manifest : {};
|
|
812
|
+
const maps = Array.isArray(m.maps) ? m.maps : [];
|
|
813
|
+
|
|
814
|
+
// ---- STALE: byte-compare the serialized manifest vs the committed file. ----
|
|
815
|
+
const serialized = serializeManifest(m);
|
|
816
|
+
const onDisk = fs.existsSync(MANIFEST_PATH)
|
|
817
|
+
? fs.readFileSync(MANIFEST_PATH, 'utf8')
|
|
818
|
+
: '';
|
|
819
|
+
if (onDisk !== serialized) {
|
|
820
|
+
stale.push(
|
|
821
|
+
'STALE: data/harness-manifest.json diverges from the regenerated ' +
|
|
822
|
+
'manifest (a source map changed without regenerating, or the committed ' +
|
|
823
|
+
'file was hand-edited). ' + RECOVERY
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
// ---- UNRESOLVED: each of the three named map paths must exist on disk. ----
|
|
828
|
+
for (const binding of MAP_BINDINGS) {
|
|
829
|
+
if (!fs.existsSync(binding.absPath)) {
|
|
830
|
+
unresolved.push(
|
|
831
|
+
'UNRESOLVED: the ' + binding.role + ' map path "' + binding.relPath +
|
|
832
|
+
'" does not exist on disk (a fabricated / missing map binding). ' +
|
|
833
|
+
RECOVERY
|
|
834
|
+
);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
// ---- MALFORMED: per-entry well-formedness + EXACTLY the three roles. ----
|
|
839
|
+
// The maps section must carry EXACTLY three entries, one per declared role,
|
|
840
|
+
// and NO per-surface row (HIGH-1: a 3-map digest, never a per-surface
|
|
841
|
+
// registry). An extra entry, a missing role, or a non-declared role key is a
|
|
842
|
+
// MALFORMED finding.
|
|
843
|
+
const declaredRoles = MAP_BINDINGS.map((b) => b.role);
|
|
844
|
+
if (maps.length !== declaredRoles.length) {
|
|
845
|
+
malformed.push(
|
|
846
|
+
'MALFORMED: the maps section has ' + maps.length + ' entries; expected ' +
|
|
847
|
+
'EXACTLY ' + declaredRoles.length + ' (one per map: ' +
|
|
848
|
+
declaredRoles.join(', ') + '). A per-surface row or an extra entry ' +
|
|
849
|
+
'breaks the 3-map digest invariant (D-166-03 / HIGH-1). ' + RECOVERY
|
|
850
|
+
);
|
|
851
|
+
}
|
|
852
|
+
const seenRoles = new Set();
|
|
853
|
+
for (const entry of maps) {
|
|
854
|
+
if (!entry || typeof entry !== 'object') {
|
|
855
|
+
malformed.push('MALFORMED: a maps entry is not an object. ' + RECOVERY);
|
|
856
|
+
continue;
|
|
857
|
+
}
|
|
858
|
+
const missing = [];
|
|
859
|
+
if (typeof entry.role !== 'string' || !entry.role) missing.push('role');
|
|
860
|
+
if (typeof entry.path !== 'string' || !entry.path) missing.push('path');
|
|
861
|
+
if (typeof entry.digest !== 'string' || !entry.digest) missing.push('digest');
|
|
862
|
+
if (missing.length) {
|
|
863
|
+
malformed.push(
|
|
864
|
+
'MALFORMED: maps entry ' + JSON.stringify(entry.role || entry.path || '?') +
|
|
865
|
+
' is missing required key(s): ' + missing.join(', ') + '. ' + RECOVERY
|
|
866
|
+
);
|
|
867
|
+
}
|
|
868
|
+
if (typeof entry.role === 'string') {
|
|
869
|
+
if (!declaredRoles.includes(entry.role)) {
|
|
870
|
+
malformed.push(
|
|
871
|
+
'MALFORMED: maps entry carries non-declared role "' + entry.role +
|
|
872
|
+
'" (a per-surface row or an invented role; the only legal roles are ' +
|
|
873
|
+
declaredRoles.join(', ') + '). ' + RECOVERY
|
|
874
|
+
);
|
|
875
|
+
}
|
|
876
|
+
if (seenRoles.has(entry.role)) {
|
|
877
|
+
malformed.push(
|
|
878
|
+
'MALFORMED: duplicate maps role "' + entry.role + '". ' + RECOVERY
|
|
879
|
+
);
|
|
880
|
+
}
|
|
881
|
+
seenRoles.add(entry.role);
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
// ---- RUNTIME-SURFACE DRIFT (Phase 201-01, D-201-1, fail closed). Each
|
|
886
|
+
// declared runtime surface's committed digest must equal the sha256 of the
|
|
887
|
+
// on-disk code file. A missing surface file is UNRESOLVED; a digest that
|
|
888
|
+
// diverges from the file is STALE and NAMES THE ROLE, so --check fails closed
|
|
889
|
+
// the moment the declared harness and the running harness diverge. This reads
|
|
890
|
+
// the COMMITTED manifest (the byte-compare STALE above already covers a
|
|
891
|
+
// hand-edited / stale committed file); here we prove the declared surface
|
|
892
|
+
// fingerprints still match the code they fingerprint. Zero Brain/network. ----
|
|
893
|
+
let committed = null;
|
|
894
|
+
try {
|
|
895
|
+
committed = JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'));
|
|
896
|
+
} catch (_e) {
|
|
897
|
+
committed = null;
|
|
898
|
+
}
|
|
899
|
+
const committedSurfaces =
|
|
900
|
+
committed && Array.isArray(committed.runtime_surfaces)
|
|
901
|
+
? committed.runtime_surfaces
|
|
902
|
+
: [];
|
|
903
|
+
for (const binding of RUNTIME_SURFACE_BINDINGS) {
|
|
904
|
+
if (!fs.existsSync(binding.absPath)) {
|
|
905
|
+
unresolved.push(
|
|
906
|
+
'UNRESOLVED: the ' + binding.role + ' runtime surface "' +
|
|
907
|
+
binding.relPath + '" does not exist on disk (a fabricated / missing ' +
|
|
908
|
+
'surface binding). ' + RECOVERY
|
|
909
|
+
);
|
|
910
|
+
continue;
|
|
911
|
+
}
|
|
912
|
+
const declared = committedSurfaces.find(
|
|
913
|
+
(s) => s && s.role === binding.role
|
|
914
|
+
);
|
|
915
|
+
// A committed manifest that never declared this surface is caught by the
|
|
916
|
+
// byte-compare STALE (the regeneration adds the missing entry); skip here.
|
|
917
|
+
if (!declared || typeof declared.digest !== 'string') continue;
|
|
918
|
+
const actual = digestBytes(fs.readFileSync(binding.absPath));
|
|
919
|
+
if (declared.digest !== actual) {
|
|
920
|
+
stale.push(
|
|
921
|
+
'STALE: the ' + binding.role + ' runtime surface (' + binding.relPath +
|
|
922
|
+
') digest in the manifest drifts from the on-disk file - the DECLARED ' +
|
|
923
|
+
'harness and the RUNNING harness have diverged. ' + RECOVERY
|
|
924
|
+
);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
// ---- LARRY-SURFACE DRIFT (Phase 298, SEED-032). Copies the runtime-surface
|
|
929
|
+
// drift loop above EXACTLY, over LARRY_SURFACE_BINDINGS / committed.larry_surfaces
|
|
930
|
+
// instead. ----
|
|
931
|
+
const committedLarrySurfaces =
|
|
932
|
+
committed && Array.isArray(committed.larry_surfaces) ? committed.larry_surfaces : [];
|
|
933
|
+
for (const binding of LARRY_SURFACE_BINDINGS) {
|
|
934
|
+
if (!fs.existsSync(binding.absPath)) {
|
|
935
|
+
unresolved.push(
|
|
936
|
+
'UNRESOLVED: the ' + binding.role + ' larry surface "' +
|
|
937
|
+
binding.relPath + '" does not exist on disk (a fabricated / missing ' +
|
|
938
|
+
'surface binding). ' + RECOVERY
|
|
939
|
+
);
|
|
940
|
+
continue;
|
|
941
|
+
}
|
|
942
|
+
const declaredLarry = committedLarrySurfaces.find(
|
|
943
|
+
(s) => s && s.role === binding.role
|
|
944
|
+
);
|
|
945
|
+
if (!declaredLarry || typeof declaredLarry.digest !== 'string') continue;
|
|
946
|
+
const actualLarry = digestBytes(fs.readFileSync(binding.absPath));
|
|
947
|
+
if (declaredLarry.digest !== actualLarry) {
|
|
948
|
+
stale.push(
|
|
949
|
+
'STALE: the ' + binding.role + ' larry surface (' + binding.relPath +
|
|
950
|
+
') digest in the manifest drifts from the on-disk file - the DECLARED ' +
|
|
951
|
+
'harness and the RUNNING harness have diverged. ' + RECOVERY
|
|
952
|
+
);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
// ---- POLICIES DIRECTORY DRIFT (Phase 298). A directory-digest divergence
|
|
957
|
+
// between the committed manifest's `policies.digest` and the live directory. ----
|
|
958
|
+
if (!fs.existsSync(POLICIES_ABS)) {
|
|
959
|
+
unresolved.push(
|
|
960
|
+
'UNRESOLVED: the policies directory "' + POLICIES_DIR +
|
|
961
|
+
'" does not exist on disk (a fabricated / missing policies binding). ' + RECOVERY
|
|
962
|
+
);
|
|
963
|
+
} else if (committed && committed.policies && typeof committed.policies.digest === 'string') {
|
|
964
|
+
const actualPolicies = digestDirectory(POLICIES_ABS);
|
|
965
|
+
if (committed.policies.digest !== actualPolicies) {
|
|
966
|
+
stale.push(
|
|
967
|
+
'STALE: the policies directory (' + POLICIES_DIR + ') digest in the manifest ' +
|
|
968
|
+
'drifts from the on-disk directory - a policy file changed without regenerating. ' +
|
|
969
|
+
RECOVERY
|
|
970
|
+
);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
// ---- FIXTURE_REF DRIFT (Phase 298). A directory-digest divergence between
|
|
975
|
+
// the committed manifest's `fixture_ref.digest` and the live directory. ----
|
|
976
|
+
if (!fs.existsSync(FIXTURE_ABS)) {
|
|
977
|
+
unresolved.push(
|
|
978
|
+
'UNRESOLVED: the fixture directory "' + FIXTURE_DIR +
|
|
979
|
+
'" does not exist on disk (a fabricated / missing fixture_ref binding). ' + RECOVERY
|
|
980
|
+
);
|
|
981
|
+
} else if (committed && committed.fixture_ref && typeof committed.fixture_ref.digest === 'string') {
|
|
982
|
+
const actualFixture = digestDirectory(FIXTURE_ABS);
|
|
983
|
+
if (committed.fixture_ref.digest !== actualFixture) {
|
|
984
|
+
stale.push(
|
|
985
|
+
'STALE: the fixture_ref directory (' + FIXTURE_DIR + ') digest in the manifest ' +
|
|
986
|
+
'drifts from the on-disk directory - the converged-room fixture changed without ' +
|
|
987
|
+
'regenerating. ' + RECOVERY
|
|
988
|
+
);
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
return { stale, unresolved, malformed };
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// ---------------------------------------------------------------------------
|
|
996
|
+
// runCheck() -- the --check mode. Regenerate the manifest from the LIVE sources
|
|
997
|
+
// in memory, run validateManifest, print each named finding + its recovery line
|
|
998
|
+
// to stderr, and exit non-zero on ANY finding. Exit 0 + an OK line on a clean
|
|
999
|
+
// repo. Mirrors build-orchestration-projection.cjs runCheck. ZERO Brain/network
|
|
1000
|
+
// calls (Part 8).
|
|
1001
|
+
// ---------------------------------------------------------------------------
|
|
1002
|
+
function runCheck() {
|
|
1003
|
+
const manifest = buildManifest();
|
|
1004
|
+
const { stale, unresolved, malformed } = validateManifest(manifest);
|
|
1005
|
+
// Phase 298 (SEED-032): validate every policy file against the closed
|
|
1006
|
+
// schema. An invalid policy file is a MALFORMED finding naming the file and
|
|
1007
|
+
// the failing key; one bad file is reported and skipped, never aborting the
|
|
1008
|
+
// rest of the scan (T-233-01 / T-217-01 self-DoS-avoidance pattern).
|
|
1009
|
+
const { findings: policyFindings } = loadPolicies(POLICIES_ABS);
|
|
1010
|
+
// Phase 298 Plan 13 (R-06): the contract-* policies, run inline as a fourth
|
|
1011
|
+
// finding class beside stale/unresolved/malformed -- a dropped Larry phrase
|
|
1012
|
+
// or a busted Desktop-wire byte budget fails --check by name.
|
|
1013
|
+
const contractFindings = runContractChecks(REPO_ROOT);
|
|
1014
|
+
const all = [...stale, ...unresolved, ...malformed, ...policyFindings, ...contractFindings];
|
|
1015
|
+
if (all.length) {
|
|
1016
|
+
console.error(all.join('\n'));
|
|
1017
|
+
console.error(
|
|
1018
|
+
'Recovery: regenerate the manifest, then re-stage it: ' +
|
|
1019
|
+
'node scripts/build-harness-manifest.cjs'
|
|
1020
|
+
);
|
|
1021
|
+
process.exit(1);
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
1024
|
+
console.log('harness-manifest: OK');
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
// ---------------------------------------------------------------------------
|
|
1028
|
+
// writeManifest() -- the default + --refresh write path: re-derive the digests
|
|
1029
|
+
// from the live sources and write the artifact (idempotent). --refresh is the
|
|
1030
|
+
// manifest's analogue of the connector --refresh-names: it re-reads the sources,
|
|
1031
|
+
// re-digests, and re-writes, which is a byte-identical no-op when nothing
|
|
1032
|
+
// changed.
|
|
1033
|
+
// ---------------------------------------------------------------------------
|
|
1034
|
+
function writeManifest() {
|
|
1035
|
+
const manifest = buildManifest();
|
|
1036
|
+
fs.mkdirSync(DATA_DIR, { recursive: true });
|
|
1037
|
+
fs.writeFileSync(MANIFEST_PATH, serializeManifest(manifest));
|
|
1038
|
+
console.log(
|
|
1039
|
+
'Wrote data/harness-manifest.json (' + manifest.maps.length + ' map entries: ' +
|
|
1040
|
+
manifest.maps.map((e) => e.role).join(', ') + '; ' +
|
|
1041
|
+
manifest.runtime_surfaces.length + ' runtime surfaces: ' +
|
|
1042
|
+
manifest.runtime_surfaces.map((e) => e.role).join(', ') + '; ' +
|
|
1043
|
+
manifest.policies.count + ' policies digested; ' +
|
|
1044
|
+
manifest.larry_surfaces.length + ' larry surfaces: ' +
|
|
1045
|
+
manifest.larry_surfaces.map((e) => e.role).join(', ') + ')'
|
|
1046
|
+
);
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
// ---------------------------------------------------------------------------
|
|
1050
|
+
// main() -- the 3-branch entry: default write / --check / --refresh.
|
|
1051
|
+
// ---------------------------------------------------------------------------
|
|
1052
|
+
function main() {
|
|
1053
|
+
const argv = process.argv.slice(2);
|
|
1054
|
+
|
|
1055
|
+
if (argv.includes('--check')) {
|
|
1056
|
+
runCheck();
|
|
1057
|
+
return;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
// --refresh re-derives the digests + re-writes (idempotent). The default
|
|
1061
|
+
// branch is the same write path; --refresh is named for parity with the
|
|
1062
|
+
// connector generator's --refresh-names idiom.
|
|
1063
|
+
writeManifest();
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
if (require.main === module) {
|
|
1067
|
+
main();
|
|
1068
|
+
} else {
|
|
1069
|
+
module.exports = {
|
|
1070
|
+
buildManifest,
|
|
1071
|
+
buildMapEntry,
|
|
1072
|
+
buildSurfaceEntry,
|
|
1073
|
+
serializeManifest,
|
|
1074
|
+
validateManifest,
|
|
1075
|
+
digestBytes,
|
|
1076
|
+
digestDirectory,
|
|
1077
|
+
primaryArrayCount,
|
|
1078
|
+
loadPolicies,
|
|
1079
|
+
validatePolicyFile,
|
|
1080
|
+
runContractChecks,
|
|
1081
|
+
MAP_BINDINGS,
|
|
1082
|
+
RUNTIME_SURFACE_BINDINGS,
|
|
1083
|
+
LARRY_SURFACE_BINDINGS,
|
|
1084
|
+
POLICIES_DIR,
|
|
1085
|
+
FIXTURE_DIR,
|
|
1086
|
+
NODE_FIELD_ALLOWLIST,
|
|
1087
|
+
ENTRY_FIELD_ALLOWLIST,
|
|
1088
|
+
MANIFEST_PATH,
|
|
1089
|
+
};
|
|
1090
|
+
}
|