mirror-mind 0.0.1 → 0.33.0
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/hooks/log-assistant-reply.sh +85 -0
- package/.claude/hooks/log-session-end.sh +85 -0
- package/.claude/hooks/log-user-prompt.sh +85 -0
- package/.claude/hooks/mirror-inject.sh +85 -0
- package/.claude/hooks/session-start.sh +85 -0
- package/.gemini/hooks/log-assistant.sh +85 -0
- package/.gemini/hooks/log-user.sh +85 -0
- package/.gemini/hooks/session-end.sh +85 -0
- package/.gemini/hooks/session-start.sh +85 -0
- package/.pi/extensions/mirror-logger.ts +646 -0
- package/.pi/skills/mm-backup/SKILL.md +21 -0
- package/.pi/skills/mm-build/SKILL.md +1206 -0
- package/.pi/skills/mm-consolidate/SKILL.md +112 -0
- package/.pi/skills/mm-consult/SKILL.md +70 -0
- package/.pi/skills/mm-conversations/SKILL.md +16 -0
- package/.pi/skills/mm-discard/SKILL.md +39 -0
- package/.pi/skills/mm-explore/SKILL.md +255 -0
- package/.pi/skills/mm-help/SKILL.md +74 -0
- package/.pi/skills/mm-identity/SKILL.md +96 -0
- package/.pi/skills/mm-journal/SKILL.md +16 -0
- package/.pi/skills/mm-journey/SKILL.md +23 -0
- package/.pi/skills/mm-journeys/SKILL.md +15 -0
- package/.pi/skills/mm-memories/SKILL.md +17 -0
- package/.pi/skills/mm-mirror/SKILL.md +98 -0
- package/.pi/skills/mm-mute/SKILL.md +18 -0
- package/.pi/skills/mm-new/SKILL.md +18 -0
- package/.pi/skills/mm-recall/SKILL.md +17 -0
- package/.pi/skills/mm-release-notes/SKILL.md +52 -0
- package/.pi/skills/mm-seed/SKILL.md +19 -0
- package/.pi/skills/mm-shadow/SKILL.md +117 -0
- package/.pi/skills/mm-soul/SKILL.md +502 -0
- package/.pi/skills/mm-tasks/SKILL.md +24 -0
- package/.pi/skills/mm-update/SKILL.md +32 -0
- package/.pi/skills/mm-week/SKILL.md +28 -0
- package/.pi/skills/mm-welcome/SKILL.md +24 -0
- package/AGENTS.md +188 -0
- package/README.md +126 -9
- package/bin/loader.js +67 -0
- package/bin/mirror-hook.js +7 -0
- package/bin/mirror.js +7 -0
- package/docs/releases/index.md +100 -0
- package/docs/releases/pending-cutoffs.md +510 -0
- package/docs/releases/v0.10.0.md +123 -0
- package/docs/releases/v0.10.1.md +66 -0
- package/docs/releases/v0.10.10.md +51 -0
- package/docs/releases/v0.10.11.md +39 -0
- package/docs/releases/v0.10.12.md +57 -0
- package/docs/releases/v0.10.13.md +35 -0
- package/docs/releases/v0.10.14.md +42 -0
- package/docs/releases/v0.10.15.md +53 -0
- package/docs/releases/v0.10.16.md +35 -0
- package/docs/releases/v0.10.17.md +43 -0
- package/docs/releases/v0.10.2.md +64 -0
- package/docs/releases/v0.10.3.md +78 -0
- package/docs/releases/v0.10.4.md +42 -0
- package/docs/releases/v0.10.5.md +57 -0
- package/docs/releases/v0.10.6.md +47 -0
- package/docs/releases/v0.10.7.md +53 -0
- package/docs/releases/v0.10.8.md +49 -0
- package/docs/releases/v0.10.9.md +37 -0
- package/docs/releases/v0.11.0.md +86 -0
- package/docs/releases/v0.12.0.md +67 -0
- package/docs/releases/v0.13.0.md +64 -0
- package/docs/releases/v0.14.0.md +68 -0
- package/docs/releases/v0.15.0.md +48 -0
- package/docs/releases/v0.16.0.md +50 -0
- package/docs/releases/v0.16.1.md +55 -0
- package/docs/releases/v0.16.2.md +36 -0
- package/docs/releases/v0.17.0.md +50 -0
- package/docs/releases/v0.17.1.md +58 -0
- package/docs/releases/v0.17.2.md +42 -0
- package/docs/releases/v0.17.3.md +58 -0
- package/docs/releases/v0.18.0.md +84 -0
- package/docs/releases/v0.18.1.md +51 -0
- package/docs/releases/v0.18.2.md +69 -0
- package/docs/releases/v0.19.0.md +85 -0
- package/docs/releases/v0.19.1.md +46 -0
- package/docs/releases/v0.20.0.md +85 -0
- package/docs/releases/v0.21.0.md +61 -0
- package/docs/releases/v0.21.1.md +47 -0
- package/docs/releases/v0.22.0.md +77 -0
- package/docs/releases/v0.22.1.md +42 -0
- package/docs/releases/v0.23.0.md +105 -0
- package/docs/releases/v0.24.0.md +125 -0
- package/docs/releases/v0.25.0.md +107 -0
- package/docs/releases/v0.26.0.md +139 -0
- package/docs/releases/v0.26.1.md +65 -0
- package/docs/releases/v0.26.2.md +43 -0
- package/docs/releases/v0.27.0.md +63 -0
- package/docs/releases/v0.28.0.md +59 -0
- package/docs/releases/v0.29.0.md +61 -0
- package/docs/releases/v0.29.1.md +59 -0
- package/docs/releases/v0.29.2.md +59 -0
- package/docs/releases/v0.29.3.md +93 -0
- package/docs/releases/v0.30.0.md +75 -0
- package/docs/releases/v0.30.1.md +93 -0
- package/docs/releases/v0.30.2.md +66 -0
- package/docs/releases/v0.31.0.md +122 -0
- package/docs/releases/v0.31.1.md +142 -0
- package/docs/releases/v0.31.10.md +118 -0
- package/docs/releases/v0.31.11.md +88 -0
- package/docs/releases/v0.31.12.md +105 -0
- package/docs/releases/v0.31.13.md +99 -0
- package/docs/releases/v0.31.14.md +97 -0
- package/docs/releases/v0.31.2.md +115 -0
- package/docs/releases/v0.31.3.md +142 -0
- package/docs/releases/v0.31.4.md +117 -0
- package/docs/releases/v0.31.5.md +155 -0
- package/docs/releases/v0.31.6.md +132 -0
- package/docs/releases/v0.31.7.md +132 -0
- package/docs/releases/v0.31.8.md +120 -0
- package/docs/releases/v0.31.9.md +120 -0
- package/docs/releases/v0.32.0.md +261 -0
- package/docs/releases/v0.32.1.md +59 -0
- package/docs/releases/v0.33.0.md +164 -0
- package/docs/releases/v0.8.0.md +118 -0
- package/docs/releases/v0.9.0.md +98 -0
- package/docs/releases/v0.9.1.md +83 -0
- package/package.json +102 -6
- package/plugins/mirror-mind/.claude-plugin/plugin.json +17 -0
- package/plugins/mirror-mind/hooks/hooks.json +62 -0
- package/plugins/mirror-mind/hooks/log-assistant-reply.sh +98 -0
- package/plugins/mirror-mind/hooks/log-session-end.sh +98 -0
- package/plugins/mirror-mind/hooks/log-user-prompt.sh +98 -0
- package/plugins/mirror-mind/hooks/mirror-inject.sh +98 -0
- package/plugins/mirror-mind/hooks/session-start.sh +98 -0
- package/plugins/mirror-mind/skills/mm-backup/SKILL.md +27 -0
- package/plugins/mirror-mind/skills/mm-build/SKILL.md +1206 -0
- package/plugins/mirror-mind/skills/mm-consolidate/SKILL.md +112 -0
- package/plugins/mirror-mind/skills/mm-consult/SKILL.md +83 -0
- package/plugins/mirror-mind/skills/mm-conversations/SKILL.md +17 -0
- package/plugins/mirror-mind/skills/mm-discard/SKILL.md +40 -0
- package/plugins/mirror-mind/skills/mm-explore/SKILL.md +241 -0
- package/plugins/mirror-mind/skills/mm-help/SKILL.md +104 -0
- package/plugins/mirror-mind/skills/mm-identity/SKILL.md +96 -0
- package/plugins/mirror-mind/skills/mm-journal/SKILL.md +21 -0
- package/plugins/mirror-mind/skills/mm-journey/SKILL.md +37 -0
- package/plugins/mirror-mind/skills/mm-journeys/SKILL.md +15 -0
- package/plugins/mirror-mind/skills/mm-memories/SKILL.md +20 -0
- package/plugins/mirror-mind/skills/mm-mirror/SKILL.md +67 -0
- package/plugins/mirror-mind/skills/mm-mute/SKILL.md +18 -0
- package/plugins/mirror-mind/skills/mm-new/SKILL.md +18 -0
- package/plugins/mirror-mind/skills/mm-recall/SKILL.md +17 -0
- package/plugins/mirror-mind/skills/mm-release-notes/SKILL.md +31 -0
- package/plugins/mirror-mind/skills/mm-seed/SKILL.md +15 -0
- package/plugins/mirror-mind/skills/mm-shadow/SKILL.md +117 -0
- package/plugins/mirror-mind/skills/mm-soul/SKILL.md +488 -0
- package/plugins/mirror-mind/skills/mm-tasks/SKILL.md +36 -0
- package/plugins/mirror-mind/skills/mm-update/SKILL.md +30 -0
- package/plugins/mirror-mind/skills/mm-week/SKILL.md +46 -0
- package/plugins/mirror-mind/skills/mm-welcome/SKILL.md +22 -0
- package/scripts/codex-hooks/session-end.sh +85 -0
- package/scripts/codex-hooks/session-start.sh +85 -0
- package/scripts/codex-mirror.sh +48 -0
- package/templates/identity/README.md +119 -0
- package/templates/identity/ego/behavior.yaml +52 -0
- package/templates/identity/ego/constraints.yaml +15 -0
- package/templates/identity/ego/identity.yaml +43 -0
- package/templates/identity/journeys/personal-growth.yaml +39 -0
- package/templates/identity/organization/identity.yaml +24 -0
- package/templates/identity/organization/principles.yaml +17 -0
- package/templates/identity/personas/coach.yaml +94 -0
- package/templates/identity/personas/designer.yaml +93 -0
- package/templates/identity/personas/doctor.yaml +96 -0
- package/templates/identity/personas/engineer.yaml +77 -0
- package/templates/identity/personas/financial.yaml +97 -0
- package/templates/identity/personas/prompt-engineer.yaml +122 -0
- package/templates/identity/personas/researcher.yaml +88 -0
- package/templates/identity/personas/strategist.yaml +91 -0
- package/templates/identity/personas/teacher.yaml +95 -0
- package/templates/identity/personas/therapist.yaml +91 -0
- package/templates/identity/personas/thinker.yaml +74 -0
- package/templates/identity/personas/writer.yaml +76 -0
- package/templates/identity/self/config.yaml +16 -0
- package/templates/identity/self/soul.yaml +105 -0
- package/templates/identity/user/identity.yaml +30 -0
- package/ts/src/backup/staging.ts +62 -0
- package/ts/src/backup/zipBackup.ts +267 -0
- package/ts/src/backup/zipReader.ts +109 -0
- package/ts/src/backup/zipWriter.ts +148 -0
- package/ts/src/builder/activeCheckpoint.ts +134 -0
- package/ts/src/builder/aggregateStatus.ts +34 -0
- package/ts/src/builder/approve.ts +149 -0
- package/ts/src/builder/argv.ts +292 -0
- package/ts/src/builder/ariadMethod.ts +536 -0
- package/ts/src/builder/artifacts/artifactSurfaces.ts +106 -0
- package/ts/src/builder/artifacts/artifactWriter.ts +113 -0
- package/ts/src/builder/artifacts/closureArtifacts.ts +199 -0
- package/ts/src/builder/artifacts/deliveryStoryArtifacts.ts +316 -0
- package/ts/src/builder/artifacts/planArtifacts.ts +242 -0
- package/ts/src/builder/artifacts/scaffoldSections.ts +273 -0
- package/ts/src/builder/artifacts/scaffoldState.ts +227 -0
- package/ts/src/builder/artifacts/storyFiles.ts +61 -0
- package/ts/src/builder/artifacts/storyIndex.ts +166 -0
- package/ts/src/builder/cadence.ts +59 -0
- package/ts/src/builder/card.ts +192 -0
- package/ts/src/builder/checkpointRefused.ts +66 -0
- package/ts/src/builder/closure.ts +964 -0
- package/ts/src/builder/commands.ts +2053 -0
- package/ts/src/builder/cursorPosition.ts +176 -0
- package/ts/src/builder/cursorTransitions.ts +77 -0
- package/ts/src/builder/deliveryCursor.ts +577 -0
- package/ts/src/builder/deliveryStoryClosure.ts +521 -0
- package/ts/src/builder/deliveryStoryPlan.ts +536 -0
- package/ts/src/builder/deliveryStoryReady.ts +160 -0
- package/ts/src/builder/deliveryStoryRoadmapClosure.ts +151 -0
- package/ts/src/builder/expand.ts +336 -0
- package/ts/src/builder/flowUnit.ts +339 -0
- package/ts/src/builder/homeSurface.ts +122 -0
- package/ts/src/builder/implementationGuard.ts +125 -0
- package/ts/src/builder/index.ts +11 -0
- package/ts/src/builder/lifecycleRefusal.ts +92 -0
- package/ts/src/builder/lifecycleRibbon.ts +159 -0
- package/ts/src/builder/load.ts +313 -0
- package/ts/src/builder/methodAdoption.ts +113 -0
- package/ts/src/builder/methodDefinition.ts +429 -0
- package/ts/src/builder/methodInspection.ts +371 -0
- package/ts/src/builder/plan.ts +408 -0
- package/ts/src/builder/planPreauthorization.ts +265 -0
- package/ts/src/builder/prepare.ts +225 -0
- package/ts/src/builder/projectPaths.ts +64 -0
- package/ts/src/builder/pull.ts +356 -0
- package/ts/src/builder/pullCandidates.ts +463 -0
- package/ts/src/builder/pullCandidatesRender.ts +238 -0
- package/ts/src/builder/refinementField.ts +93 -0
- package/ts/src/builder/releaseIntent.ts +173 -0
- package/ts/src/builder/resumeState.ts +84 -0
- package/ts/src/builder/resumeSurface.ts +149 -0
- package/ts/src/builder/roadmapGrammar.ts +300 -0
- package/ts/src/builder/roadmapScan.ts +97 -0
- package/ts/src/builder/roadmapScope.ts +210 -0
- package/ts/src/builder/scopePhrases.ts +146 -0
- package/ts/src/builder/storyPaths.ts +196 -0
- package/ts/src/builder/storyPlanPreauthorization.ts +287 -0
- package/ts/src/builder/surfaceProtocol.ts +42 -0
- package/ts/src/builder/templateGeneration.ts +148 -0
- package/ts/src/builder/transition.ts +178 -0
- package/ts/src/consult/args.ts +99 -0
- package/ts/src/consult/core.ts +122 -0
- package/ts/src/consult/modelCatalog.ts +55 -0
- package/ts/src/consult/render.ts +47 -0
- package/ts/src/conversation/append.ts +414 -0
- package/ts/src/conversation/backfill.ts +387 -0
- package/ts/src/conversation/closeTail.ts +467 -0
- package/ts/src/conversation/extraction.ts +333 -0
- package/ts/src/conversation/extractionDriver.ts +130 -0
- package/ts/src/conversation/extractionRun.ts +70 -0
- package/ts/src/conversation/hookPayload.ts +51 -0
- package/ts/src/conversation/journeyInference.ts +165 -0
- package/ts/src/conversation/journeyRepair.ts +114 -0
- package/ts/src/conversation/lifecycleFaces.ts +197 -0
- package/ts/src/conversation/lifecycleWrites.ts +313 -0
- package/ts/src/conversation/listing.ts +77 -0
- package/ts/src/conversation/logger.ts +851 -0
- package/ts/src/conversation/loggerCli.ts +321 -0
- package/ts/src/conversation/loggerRuntime.ts +259 -0
- package/ts/src/conversation/metadataLifecycle.ts +443 -0
- package/ts/src/conversation/recall.ts +66 -0
- package/ts/src/conversation/sessionComposites.ts +258 -0
- package/ts/src/conversation/sessionImport.ts +90 -0
- package/ts/src/conversation/transcriptBackfill.ts +141 -0
- package/ts/src/cultivation/applyActions.ts +241 -0
- package/ts/src/cultivation/cluster.ts +86 -0
- package/ts/src/cultivation/consolidationStore.ts +281 -0
- package/ts/src/cultivation/promptContext.ts +62 -0
- package/ts/src/cultivation/propose.ts +305 -0
- package/ts/src/cultivation/scan.ts +155 -0
- package/ts/src/db/backupGate.ts +47 -0
- package/ts/src/db/bootstrap.ts +108 -0
- package/ts/src/db/bootstrapLock.ts +223 -0
- package/ts/src/db/copyGuard.ts +60 -0
- package/ts/src/db/database.ts +397 -0
- package/ts/src/db/decode.ts +66 -0
- package/ts/src/db/ftsIntegrity.ts +41 -0
- package/ts/src/db/migrateOnOpen.ts +214 -0
- package/ts/src/db/migrations.ts +576 -0
- package/ts/src/db/readyOnOpen.ts +35 -0
- package/ts/src/db/rowDecode.ts +42 -0
- package/ts/src/db/schema.ts +432 -0
- package/ts/src/db/schemaInventory.ts +225 -0
- package/ts/src/db/schemaInventorySnapshot.ts +2107 -0
- package/ts/src/db/schemaState.ts +91 -0
- package/ts/src/db/schemaTsDivergence.ts +114 -0
- package/ts/src/descriptor/descriptorRead.ts +49 -0
- package/ts/src/docs/docsLint.ts +265 -0
- package/ts/src/explorer/handoff.ts +522 -0
- package/ts/src/explorer/render.ts +335 -0
- package/ts/src/explorer/story.ts +769 -0
- package/ts/src/explorer/transition.ts +72 -0
- package/ts/src/extensions/bindings.ts +170 -0
- package/ts/src/extensions/catalog.ts +249 -0
- package/ts/src/extensions/catalogCommands.ts +513 -0
- package/ts/src/extensions/catalogWrites.ts +652 -0
- package/ts/src/extensions/contextRuntime.ts +325 -0
- package/ts/src/extensions/dispatch.ts +374 -0
- package/ts/src/extensions/errors.ts +24 -0
- package/ts/src/extensions/manifest.ts +356 -0
- package/ts/src/extensions/migrations.ts +350 -0
- package/ts/src/extraction/conversation.ts +304 -0
- package/ts/src/extraction/conversationMetadata.ts +206 -0
- package/ts/src/extraction/fencing.ts +106 -0
- package/ts/src/extraction/json.ts +17 -0
- package/ts/src/extraction/prompts.ts +470 -0
- package/ts/src/frontDoor/args.ts +30 -0
- package/ts/src/frontDoor/argvShape.ts +106 -0
- package/ts/src/frontDoor/buildLoadRuntime.ts +139 -0
- package/ts/src/frontDoor/buildRoute.ts +398 -0
- package/ts/src/frontDoor/cli.ts +1872 -0
- package/ts/src/frontDoor/cloneRoleGuard.ts +98 -0
- package/ts/src/frontDoor/consultRoute.ts +50 -0
- package/ts/src/frontDoor/contentTailRoute.ts +239 -0
- package/ts/src/frontDoor/conversationLoggerRoute.ts +83 -0
- package/ts/src/frontDoor/cultivationRoute.ts +210 -0
- package/ts/src/frontDoor/dbPath.ts +131 -0
- package/ts/src/frontDoor/dbSafetyToolsRoute.ts +240 -0
- package/ts/src/frontDoor/exploreRoute.ts +572 -0
- package/ts/src/frontDoor/extensionCatalogRoute.ts +252 -0
- package/ts/src/frontDoor/frontDoorLog.ts +57 -0
- package/ts/src/frontDoor/identityWrite.ts +36 -0
- package/ts/src/frontDoor/journeyWriteRoute.ts +26 -0
- package/ts/src/frontDoor/lifecycleWriteRoute.ts +110 -0
- package/ts/src/frontDoor/liveBackup.ts +100 -0
- package/ts/src/frontDoor/mirrorModeRoute.ts +163 -0
- package/ts/src/frontDoor/namedRefusal.ts +35 -0
- package/ts/src/frontDoor/nodeSupport.ts +24 -0
- package/ts/src/frontDoor/render/consolidate.ts +199 -0
- package/ts/src/frontDoor/render/conversations.ts +33 -0
- package/ts/src/frontDoor/render/cultivationShared.ts +21 -0
- package/ts/src/frontDoor/render/descriptor.ts +20 -0
- package/ts/src/frontDoor/render/detectPersona.ts +50 -0
- package/ts/src/frontDoor/render/icons.ts +13 -0
- package/ts/src/frontDoor/render/identity.ts +59 -0
- package/ts/src/frontDoor/render/identityRows.ts +17 -0
- package/ts/src/frontDoor/render/inspectPersona.ts +53 -0
- package/ts/src/frontDoor/render/journeyStatus.ts +78 -0
- package/ts/src/frontDoor/render/journeys.ts +79 -0
- package/ts/src/frontDoor/render/list.ts +41 -0
- package/ts/src/frontDoor/render/memories.ts +67 -0
- package/ts/src/frontDoor/render/recall.ts +49 -0
- package/ts/src/frontDoor/render/shadow.ts +155 -0
- package/ts/src/frontDoor/render/tasks.ts +99 -0
- package/ts/src/frontDoor/render/tasksImportSync.ts +63 -0
- package/ts/src/frontDoor/render/week.ts +113 -0
- package/ts/src/frontDoor/routing.ts +1001 -0
- package/ts/src/frontDoor/runtimeRoute.ts +623 -0
- package/ts/src/frontDoor/searchRoute.ts +166 -0
- package/ts/src/frontDoor/seedPaths.ts +98 -0
- package/ts/src/frontDoor/sessionStartWelcomeRoute.ts +166 -0
- package/ts/src/frontDoor/soulRoute.ts +433 -0
- package/ts/src/frontDoor/stdinSource.ts +37 -0
- package/ts/src/frontDoor/tasksImportSyncRoute.ts +110 -0
- package/ts/src/frontDoor/tasksWriteRoute.ts +101 -0
- package/ts/src/frontDoor/usage.ts +176 -0
- package/ts/src/guards/claudePlugin.ts +298 -0
- package/ts/src/guards/packContents.ts +306 -0
- package/ts/src/guards/piSourcedSkills.ts +70 -0
- package/ts/src/guards/retiredRouteShadows.ts +57 -0
- package/ts/src/guards/retiredSurfaces.ts +564 -0
- package/ts/src/hooks/claude.ts +214 -0
- package/ts/src/hooks/codex.ts +45 -0
- package/ts/src/hooks/gemini.ts +126 -0
- package/ts/src/hooks/main.ts +109 -0
- package/ts/src/hooks/mirrorState.ts +71 -0
- package/ts/src/hooks/payload.ts +73 -0
- package/ts/src/hooks/runtime.ts +179 -0
- package/ts/src/hooks/runtimeDetection.ts +34 -0
- package/ts/src/identity/applyConsolidationIdentityUpdate.ts +67 -0
- package/ts/src/identity/descriptorGenerate.ts +162 -0
- package/ts/src/identity/identityEdit.ts +143 -0
- package/ts/src/identity/identityKey.ts +77 -0
- package/ts/src/identity/identityRead.ts +69 -0
- package/ts/src/identity/identityStore.ts +80 -0
- package/ts/src/identity/journeyListing.ts +53 -0
- package/ts/src/identity/personaInspect.ts +44 -0
- package/ts/src/identity/personaListing.ts +37 -0
- package/ts/src/identity/setIdentity.ts +64 -0
- package/ts/src/index.ts +231 -0
- package/ts/src/init/init.ts +111 -0
- package/ts/src/journey/journeyOptions.ts +131 -0
- package/ts/src/journey/journeyRemoval.ts +158 -0
- package/ts/src/journey/journeyStatus.ts +149 -0
- package/ts/src/journey/journeySyncFile.ts +87 -0
- package/ts/src/journey/journeyWrite.ts +203 -0
- package/ts/src/journey/parentJourney.ts +41 -0
- package/ts/src/journey/validateParentJourney.ts +55 -0
- package/ts/src/mcp/boundary.ts +151 -0
- package/ts/src/mcp/guards.ts +244 -0
- package/ts/src/mcp/main.ts +121 -0
- package/ts/src/mcp/payload.ts +141 -0
- package/ts/src/mcp/protocol.ts +141 -0
- package/ts/src/mcp/readModels.ts +241 -0
- package/ts/src/mcp/registry.ts +201 -0
- package/ts/src/mcp/serve.ts +120 -0
- package/ts/src/mcp/tools/deterministic.ts +137 -0
- package/ts/src/mcp/tools/providerCrossing.ts +187 -0
- package/ts/src/mcp/wire.ts +8 -0
- package/ts/src/memory/journal.ts +180 -0
- package/ts/src/memory/listing.ts +107 -0
- package/ts/src/memory/memoryWrite.ts +88 -0
- package/ts/src/memory/reinforcement.ts +35 -0
- package/ts/src/mirror/context.ts +161 -0
- package/ts/src/mirror/defaultResolution.ts +199 -0
- package/ts/src/mirror/mirrorForm.ts +43 -0
- package/ts/src/mirror/orchestration.ts +364 -0
- package/ts/src/mirror/reception.ts +194 -0
- package/ts/src/mirror/render.ts +75 -0
- package/ts/src/mirror/runtimeSession.ts +205 -0
- package/ts/src/mode/operatingMode.ts +148 -0
- package/ts/src/observability/callOutcome.ts +115 -0
- package/ts/src/observability/inspectLedger.ts +329 -0
- package/ts/src/observability/ledgerHooks.ts +126 -0
- package/ts/src/observability/llmCalls.ts +154 -0
- package/ts/src/persona/detectPersona.ts +81 -0
- package/ts/src/planning/promptAssembly.ts +111 -0
- package/ts/src/planning/weekPending.ts +81 -0
- package/ts/src/planning/weekPlan.ts +183 -0
- package/ts/src/planning/weekSave.ts +117 -0
- package/ts/src/providers/config.ts +189 -0
- package/ts/src/providers/cost.ts +64 -0
- package/ts/src/providers/credits.ts +204 -0
- package/ts/src/providers/embedding.ts +321 -0
- package/ts/src/providers/familyProviders.ts +147 -0
- package/ts/src/providers/llm.ts +334 -0
- package/ts/src/providers/openrouter.ts +244 -0
- package/ts/src/providers/redaction.ts +110 -0
- package/ts/src/providers/replay.ts +15 -0
- package/ts/src/providers/transport.ts +410 -0
- package/ts/src/repair/encodingRepair.ts +253 -0
- package/ts/src/runtime/backup.ts +151 -0
- package/ts/src/runtime/channel.ts +146 -0
- package/ts/src/runtime/config.ts +168 -0
- package/ts/src/runtime/diagnose.ts +686 -0
- package/ts/src/runtime/git.ts +510 -0
- package/ts/src/runtime/installKind.ts +220 -0
- package/ts/src/runtime/migrate.ts +154 -0
- package/ts/src/runtime/packageIdentity.ts +102 -0
- package/ts/src/runtime/releaseNotes.ts +244 -0
- package/ts/src/runtime/status.ts +557 -0
- package/ts/src/runtime/strategies/clone.ts +200 -0
- package/ts/src/runtime/strategies/package.ts +328 -0
- package/ts/src/runtime/treeRoot.ts +30 -0
- package/ts/src/runtime/update.ts +445 -0
- package/ts/src/runtime/updateGate.ts +40 -0
- package/ts/src/runtime/updatePipeline.ts +159 -0
- package/ts/src/runtime/version.ts +36 -0
- package/ts/src/runtime/wiring.ts +130 -0
- package/ts/src/search/memorySearch.ts +338 -0
- package/ts/src/search/ranker.ts +154 -0
- package/ts/src/seed/seed.ts +256 -0
- package/ts/src/seed/seedYaml.ts +133 -0
- package/ts/src/soul/apply.ts +218 -0
- package/ts/src/soul/harvest.ts +267 -0
- package/ts/src/soul/prompts/soul_beauty_voice.md +103 -0
- package/ts/src/soul/prompts/soul_self_voice.md +219 -0
- package/ts/src/soul/prompts/soul_wisdom_voice.md +121 -0
- package/ts/src/soul/prompts.ts +85 -0
- package/ts/src/soul/render.ts +358 -0
- package/ts/src/soul/state.ts +212 -0
- package/ts/src/soul/transition.ts +37 -0
- package/ts/src/tasks/journeyPathParse.ts +113 -0
- package/ts/src/tasks/taskImportSync.ts +142 -0
- package/ts/src/tasks/taskStore.ts +312 -0
- package/ts/src/tasks/weekView.ts +120 -0
- package/ts/src/util/clipCodePoints.ts +26 -0
- package/ts/src/util/paths.ts +63 -0
- package/ts/src/util/program.ts +9 -0
- package/ts/src/util/pyGenerators.ts +144 -0
- package/ts/src/util/pythonText.ts +317 -0
- package/ts/src/util/semver.ts +45 -0
- package/ts/src/util/shellWord.ts +25 -0
- package/ts/src/util/slug.ts +64 -0
- package/ts/src/welcome/card.ts +339 -0
- package/ts/src/welcome/statusLine.ts +101 -0
- package/ts/src/welcome/updateCache.ts +129 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.7 makes the document-first Refinement Workbench transferable between
|
|
4
|
+
contributors and their Mirrors. A natural inspection request now renders one
|
|
5
|
+
standard read-only view from the canonical Markdown index; active Change
|
|
6
|
+
Requests can name a human Driver and branch or pull-request Delivery
|
|
7
|
+
reference; and a project-owned collaboration protocol carries work from
|
|
8
|
+
capture through return handoff. Git remains responsible for history,
|
|
9
|
+
concurrency, conflicts, and recovery. The release adds no Markdown parser,
|
|
10
|
+
shared database, projection, synchronization, watcher, lock, ID service, or
|
|
11
|
+
custom Git protocol, and it never consults legacy SQLite state when the
|
|
12
|
+
canonical index exists.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# v0.31.7 — Collaborative Refinement Work
|
|
16
|
+
|
|
17
|
+
**Date:** 2026-08-03
|
|
18
|
+
|
|
19
|
+
## Highlights
|
|
20
|
+
|
|
21
|
+
- Adds a standard agent-composed `Refinement Workbench` view for natural
|
|
22
|
+
file-first inspection, including source, focus, RS status, ordered open CRs,
|
|
23
|
+
terminal history, next safe action, and an explicit read-only/SQLite boundary.
|
|
24
|
+
- Adds canonical `Driver` and `Delivery` fields so active execution names one
|
|
25
|
+
accountable human and its branch or pull request without encoding people or
|
|
26
|
+
local runtime state in RS/CR identity.
|
|
27
|
+
- Adds a project-owned Collaborative Refinement Protocol covering inspection,
|
|
28
|
+
capture, selection, planning, assignment, implementation evidence, Navigator
|
|
29
|
+
validation, debt review, terminal closure, return handoff, and Git conflict
|
|
30
|
+
handling.
|
|
31
|
+
- Preserves captured/planned work as unassigned, requires explicit assignment
|
|
32
|
+
before active execution, keeps provenance in terminal history, and never
|
|
33
|
+
infers ownership from a checkout, committer, journey, conversation, or SQLite.
|
|
34
|
+
- Validated through natural Pi prompts, an isolated second-Mirror capture smoke,
|
|
35
|
+
2,404 local unit/integration tests, clean Ruff checks, and green Python
|
|
36
|
+
3.10/3.12, TypeScript, and documentation PR CI.
|
|
37
|
+
|
|
38
|
+
## Where We Started
|
|
39
|
+
|
|
40
|
+
v0.31.6 established the document-first authority boundary: one canonical
|
|
41
|
+
Markdown index owns shared Refinement focus, ordering, and status, linked files
|
|
42
|
+
own narrative and evidence, and Git owns collaboration and recovery. That made
|
|
43
|
+
the Workbench portable, but the first post-release use exposed three experience
|
|
44
|
+
gaps before another contributor could use it independently.
|
|
45
|
+
|
|
46
|
+
Builder entry surfaces pointed to the canonical file without presenting its
|
|
47
|
+
contents. An `in_progress` status could not say who had assumed the work or where
|
|
48
|
+
it was being delivered. And another person's Mirror had no durable project
|
|
49
|
+
protocol for allocating IDs, capturing without changing focus, assigning work,
|
|
50
|
+
validating it, or returning a handoff. Maintainers still had to reconstruct and
|
|
51
|
+
transmit those rules through private conversation.
|
|
52
|
+
|
|
53
|
+
## What Changed
|
|
54
|
+
|
|
55
|
+
RS002 closed those gaps in three bounded Change Requests.
|
|
56
|
+
|
|
57
|
+
CR005 added a presentation contract to the Builder skill. When asked naturally
|
|
58
|
+
to show the Workbench, Mirror reads the canonical index and relevant linked
|
|
59
|
+
documents, preserves canonical ordering, visibly distinguishes focus, separates
|
|
60
|
+
open work from terminal history, recommends one grounded next action, and states
|
|
61
|
+
that inspection changed nothing and did not consult SQLite. This is agent file
|
|
62
|
+
reading, not a Python Markdown runtime or deterministic Ariad wrapper.
|
|
63
|
+
|
|
64
|
+
CR006 added two explicit columns to the canonical CR table. `Driver` names one
|
|
65
|
+
accountable human contributor. `Delivery` names a pull request when available or
|
|
66
|
+
a Git branch before one exists. Captured and planned work can remain empty;
|
|
67
|
+
active, blocked, and validated work retain both fields. Reassignment and stale
|
|
68
|
+
work disposition remain Navigator decisions, and completed history preserves
|
|
69
|
+
its delivery provenance.
|
|
70
|
+
|
|
71
|
+
CR007 made collaboration durable through an ordinary linked Markdown protocol.
|
|
72
|
+
It defines the complete contributor route: inspect, capture, select, plan,
|
|
73
|
+
assign, implement, validate, review, close, and return a handoff. Capture chooses
|
|
74
|
+
the next unused project-wide ID and requires an explicit RS under the current
|
|
75
|
+
layout while preserving focus. Git surfaces concurrent ID, index, status,
|
|
76
|
+
assignment, and narrative edits; Mirrors never silently renumber, overwrite,
|
|
77
|
+
merge narratives, or use SQLite to resolve semantic conflicts.
|
|
78
|
+
|
|
79
|
+
## Validation
|
|
80
|
+
|
|
81
|
+
The presentation was validated in newly loaded Pi sessions using the natural
|
|
82
|
+
prompt `Mostre o Refinement Workbench`. The output showed canonical focus,
|
|
83
|
+
ordering, statuses, Driver/Delivery only where assigned, terminal history, and
|
|
84
|
+
the read-only boundary.
|
|
85
|
+
|
|
86
|
+
The collaboration route was validated with the shorter prompt `como trabalhar
|
|
87
|
+
com refinements?`. The first response omitted return handoff and Git concurrency,
|
|
88
|
+
which correctly failed the acceptance boundary. Skill guidance was tightened in
|
|
89
|
+
cycle, and the repeated response covered all nine movements, handoff fields, and
|
|
90
|
+
semantic-conflict behavior.
|
|
91
|
+
|
|
92
|
+
An isolated second-Mirror smoke received a natural request to capture a fully
|
|
93
|
+
specified refinement under RS002. It allocated the next ID, created the CR
|
|
94
|
+
narrative, appended a captured/unassigned row, preserved current focus, linked
|
|
95
|
+
the CR from its RS, and avoided SQLite. The generated CR existed only in the
|
|
96
|
+
disposable `/tmp` project and never entered the real Workbench.
|
|
97
|
+
|
|
98
|
+
## Conscious Exclusions
|
|
99
|
+
|
|
100
|
+
- **No Markdown parser or second state model.** The agent reads project files;
|
|
101
|
+
Python does not parse or persist their meaning.
|
|
102
|
+
- **No assignment service.** Driver and Delivery are explicit Markdown facts,
|
|
103
|
+
not locks, leases, heartbeats, or inferred presence.
|
|
104
|
+
- **No automatic IDs or conflict resolution.** Contributors inspect the complete
|
|
105
|
+
index, and Git exposes concurrent choices for human resolution.
|
|
106
|
+
- **No automatic Git operations.** The protocol does not create branches,
|
|
107
|
+
commits, pushes, pull requests, merges, tags, or releases.
|
|
108
|
+
- **No legacy-state reconciliation.** File-first projects do not inspect,
|
|
109
|
+
migrate, compare, delete, or dual-write SQLite Workbench rows.
|
|
110
|
+
- **Claude Builder parity remains separate.** This release improves the Pi and
|
|
111
|
+
shared Gemini/Codex skill surface without changing Claude's independently
|
|
112
|
+
tuned Builder skill.
|
|
113
|
+
|
|
114
|
+
## What We Learned
|
|
115
|
+
|
|
116
|
+
Making project state portable was not the same as making collaboration
|
|
117
|
+
transferable. A second person also needs a visible field, explicit ownership,
|
|
118
|
+
and a shared operating route. Those needs were satisfied with documents and
|
|
119
|
+
agent guidance rather than a coordination subsystem.
|
|
120
|
+
|
|
121
|
+
Natural-language validation mattered. The first protocol response looked useful
|
|
122
|
+
while omitting the final handoff and conflict boundary. Treating that omission as
|
|
123
|
+
a failed acceptance test produced a better contract without introducing parser
|
|
124
|
+
or workflow machinery.
|
|
125
|
+
|
|
126
|
+
## Next Horizon
|
|
127
|
+
|
|
128
|
+
The next evidence should come from a real contributor using their own journey,
|
|
129
|
+
Mirror, branch, and pull request to add Builder/Ariad refinements. Any future
|
|
130
|
+
automation should answer a repeated observed failure in that collaboration,
|
|
131
|
+
not anticipate one. RS001's runtime-trust CRs remain independent canonical work
|
|
132
|
+
and are not promised by this release.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.8 introduces the Windows Desktop Frame as Mirror Mind's primary Windows
|
|
4
|
+
experience. One installer now carries a native Electron window for guided
|
|
5
|
+
onboarding, tabbed conversations through real Pi/ConPTY sessions, setup health,
|
|
6
|
+
controlled Pi updates, and a preserved terminal recovery route. The Frame
|
|
7
|
+
orchestrates the existing Mirror CLI and pins the homologated Pi version rather
|
|
8
|
+
than reimplementing either runtime. Packaging is fail-closed and validated on
|
|
9
|
+
Windows through unit tests, a session simulator, a packaged Electron/ConPTY
|
|
10
|
+
smoke, and a real non-ASCII user-profile smoke. The first release intentionally
|
|
11
|
+
remains unsigned and does not update the Mirror core from inside the Frame.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# v0.31.8 — Windows Desktop Frame
|
|
15
|
+
|
|
16
|
+
**Date:** 2026-08-07
|
|
17
|
+
|
|
18
|
+
## Highlights
|
|
19
|
+
|
|
20
|
+
- Adds the native Windows Desktop Frame: guided first-run onboarding, tabbed Pi
|
|
21
|
+
conversations over real ConPTY sessions, setup health, persona inspection,
|
|
22
|
+
subscription login, and controlled Pi maintenance in one window.
|
|
23
|
+
- Makes the Frame the primary Windows shortcut while preserving `Mirror Mind
|
|
24
|
+
(Terminal)` as an independent recovery and maintenance path.
|
|
25
|
+
- Pins Pi exactly to the homologated `0.83.0` release; install and update paths
|
|
26
|
+
converge absent, older, and newer versions to that pin and never use `@latest`.
|
|
27
|
+
- Gates every Frame PTY through one session authority so Pi cannot update while
|
|
28
|
+
Mirror, login, shell, or bootstrap sessions are open.
|
|
29
|
+
- Packages the Frame and its native ConPTY dependency through one fail-closed
|
|
30
|
+
build path before compiling installer `0.31.0`.
|
|
31
|
+
- Validates the integrated release on Python 3.10/3.12, TypeScript, documentation,
|
|
32
|
+
Pester, PSScriptAnalyzer, 63 Frame tests, session simulation, packaged
|
|
33
|
+
Electron/ConPTY, and a real non-ASCII `USERPROFILE` smoke.
|
|
34
|
+
|
|
35
|
+
## Where We Started
|
|
36
|
+
|
|
37
|
+
The existing Windows installer could bootstrap Mirror Mind and open Pi in a
|
|
38
|
+
terminal, but the experience still exposed installation and runtime mechanics as
|
|
39
|
+
the product. First-run identity setup, subscription login, health diagnosis, and
|
|
40
|
+
conversation management were separate terminal interactions. That path remained
|
|
41
|
+
valuable for recovery, but it was not yet the coherent desktop experience tested
|
|
42
|
+
through the ES-004 functional mockup.
|
|
43
|
+
|
|
44
|
+
The first Frame proposal proved the product direction and a viable
|
|
45
|
+
Electron/ConPTY stack. Release review then exposed a stricter boundary: a native
|
|
46
|
+
window also becomes an installer, updater, credential-transit, native-binary,
|
|
47
|
+
and session-lifecycle responsibility. Shipping it required more than rendering a
|
|
48
|
+
terminal inside Electron.
|
|
49
|
+
|
|
50
|
+
## What Changed
|
|
51
|
+
|
|
52
|
+
The Frame now installs as a private component of Mirror Mind and follows the
|
|
53
|
+
Mirror release version. Its renderer runs sandboxed with context isolation and no
|
|
54
|
+
Node integration. A narrow preload API reaches main-process handlers that verify
|
|
55
|
+
their sender, reject unexpected navigation and windows, validate environment
|
|
56
|
+
values against CR/LF injection, and execute only fixed command-registry entries.
|
|
57
|
+
Pi owns OAuth tokens; the Frame observes only readiness and completion signals.
|
|
58
|
+
|
|
59
|
+
Onboarding performs the real `.env` → `memory init` → `seed` flow and remains
|
|
60
|
+
recoverable when initialization fails. Reinstalling preserves the identity home
|
|
61
|
+
without silently rebinding it. The user explicitly enters the same identity name,
|
|
62
|
+
and OpenRouter credentials remain guarded transient state until persistence.
|
|
63
|
+
|
|
64
|
+
All PTYs participate in one `SessionGate`. Mirror conversations, hidden login,
|
|
65
|
+
system terminals, and bootstrap sessions prevent a concurrent Pi update. The
|
|
66
|
+
homologated Pi version lives in `installer/pi-version.txt`; both installer and
|
|
67
|
+
packaged Frame read that installed authority and converge precisely to `0.83.0`.
|
|
68
|
+
A missing or malformed pin disables automatic Pi maintenance rather than falling
|
|
69
|
+
back to an uncontrolled version.
|
|
70
|
+
|
|
71
|
+
Packaging is now reproducible outside CI. `frame/scripts/package.ps1`
|
|
72
|
+
materializes the pinned Electron binary, assembles runtime dependencies, and
|
|
73
|
+
feeds one verified payload into Inno Setup. Missing `MirrorFrame.exe`, ConPTY,
|
|
74
|
+
preload, renderer, or required assets aborts the build. CI follows the same
|
|
75
|
+
`npm ci → tests → simulator → package → verify → installer → smoke → upload`
|
|
76
|
+
route and exercises the installed path under a genuinely non-ASCII Windows user
|
|
77
|
+
profile.
|
|
78
|
+
|
|
79
|
+
## Distribution Boundary
|
|
80
|
+
|
|
81
|
+
The downloadable artifact is `MirrorMind-Setup-0.31.0.exe`. Installer versioning
|
|
82
|
+
is independent because `0.31.0` describes the materially changed bootstrapper;
|
|
83
|
+
the Frame inside it is version `0.31.8`, matching Mirror itself.
|
|
84
|
+
|
|
85
|
+
The installer is not code-signed in this release. Windows SmartScreen may warn
|
|
86
|
+
before execution. The release publishes a SHA-256 checksum so users can verify
|
|
87
|
+
the exact artifact produced by the integrated GitHub Actions run.
|
|
88
|
+
|
|
89
|
+
## Conscious Exclusions
|
|
90
|
+
|
|
91
|
+
- **No automatic Mirror-core update inside the Frame.** The installed Frame and
|
|
92
|
+
core move together through a new installer; conscious manual maintenance
|
|
93
|
+
remains available through the Terminal shortcut.
|
|
94
|
+
- **No unpinned Pi channel.** Moving beyond Pi `0.83.0` requires rerunning the
|
|
95
|
+
login, OAuth, fallback, and update compatibility matrix.
|
|
96
|
+
- **No code-signing certificate.** The first installer remains unsigned, with
|
|
97
|
+
the SmartScreen consequence documented rather than hidden.
|
|
98
|
+
- **No Microsoft Store distribution or TD-003 transport work.** Those require a
|
|
99
|
+
separate delivery and trust boundary.
|
|
100
|
+
- **No Python-core redesign.** The Frame orchestrates the existing CLI and does
|
|
101
|
+
not alter the core under `src/memory/`.
|
|
102
|
+
- **No in-executable Mirror icon stamping.** Installer shortcuts and the window
|
|
103
|
+
carry Mirror branding, while the executable resource may still show Electron's
|
|
104
|
+
default icon in some Windows surfaces.
|
|
105
|
+
|
|
106
|
+
## What We Learned
|
|
107
|
+
|
|
108
|
+
A desktop shell is not merely a new presentation layer. Once it owns onboarding,
|
|
109
|
+
PTYs, updates, and installation, correctness depends on authority boundaries that
|
|
110
|
+
remain valid when the renderer is wrong, the path contains spaces or accents,
|
|
111
|
+
the native ABI differs from ordinary Node, or a setup attempt fails halfway.
|
|
112
|
+
Making those boundaries executable in the canonical packaging and CI route was
|
|
113
|
+
what turned the Frame from a promising prototype into a releasable Windows path.
|
|
114
|
+
|
|
115
|
+
## Next Horizon
|
|
116
|
+
|
|
117
|
+
The next evidence should come from installing the exact release asset on a clean
|
|
118
|
+
Windows environment and observing real onboarding and daily conversation use.
|
|
119
|
+
Code signing, executable-resource branding, broader distribution, and any future
|
|
120
|
+
Frame-aware core updater remain separate decisions informed by that use.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.9 removes Mirror Mind's artificial two-level journey limit and makes
|
|
4
|
+
organizational journey trees recursively visible across textual and web
|
|
5
|
+
surfaces. Parent assignment now supports arbitrary depth while rejecting
|
|
6
|
+
direct, indirect, and malformed cycles; moves preserve journey identity,
|
|
7
|
+
project paths, and filesystem content. Journey removal is conservative and
|
|
8
|
+
transactional, allowing only empty leaves and never cascading into associated
|
|
9
|
+
records. The release also replaces the TypeScript migration's strict Python
|
|
10
|
+
feature freeze with an explicit moving-target parity contract, so the current
|
|
11
|
+
product can evolve while command authority transfers incrementally to TS.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# v0.31.9 — Recursive Journey Hierarchy
|
|
15
|
+
|
|
16
|
+
**Date:** 2026-08-14
|
|
17
|
+
|
|
18
|
+
## Highlights
|
|
19
|
+
|
|
20
|
+
- Allows journeys to form organizational trees of arbitrary depth using the
|
|
21
|
+
existing `parent_journey` metadata contract, with no schema migration.
|
|
22
|
+
- Rejects direct and indirect cycles before mutation and keeps malformed legacy
|
|
23
|
+
cycles bounded on read surfaces instead of hanging.
|
|
24
|
+
- Renders the complete hierarchy recursively in `mm-journeys`, Workspace
|
|
25
|
+
navigation, Current Scene, All Journeys, and journey selectors.
|
|
26
|
+
- Shows complete root-to-selected lineage while keeping conversations, memories,
|
|
27
|
+
tasks, attachments, routing, Builder state, and Scene movement exact to each
|
|
28
|
+
journey.
|
|
29
|
+
- Preserves stable journey ids and independent `project_path` values when a
|
|
30
|
+
journey or subtree moves; no filesystem content is inferred or moved.
|
|
31
|
+
- Makes removal fail closed: parents with children and leaves with associated
|
|
32
|
+
records are refused in one transaction; only empty leaves can be removed.
|
|
33
|
+
- Establishes a moving-target TypeScript strangler contract: Python may evolve
|
|
34
|
+
while it remains authority for an unported command, and each change becomes
|
|
35
|
+
explicit TS parity scope before authority transfers.
|
|
36
|
+
|
|
37
|
+
## Where We Started
|
|
38
|
+
|
|
39
|
+
CV15 originally shipped a deliberately small one-level hierarchy. That was enough
|
|
40
|
+
to prove that parent-child relationships could organize the journey field without
|
|
41
|
+
merging context, and Current Scene then used that map to return cognitive
|
|
42
|
+
location. Real use exposed the remaining artificial boundary: life areas,
|
|
43
|
+
businesses, products, and projects naturally form deeper structures, while Mirror
|
|
44
|
+
refused a child beneath an existing child.
|
|
45
|
+
|
|
46
|
+
The TypeScript strangler introduced a second tension. Its original policy froze
|
|
47
|
+
new Python features so the migration target would stay stable. The principle was
|
|
48
|
+
coherent, but the migration is a long-running background effort; in practice the
|
|
49
|
+
freeze required product evolution to wait months for TS sequencing.
|
|
50
|
+
|
|
51
|
+
## What Changed
|
|
52
|
+
|
|
53
|
+
`JourneyService` now validates a proposed parent by walking the complete ancestor
|
|
54
|
+
chain. A journey may sit at any depth, including beneath a node that already has
|
|
55
|
+
children. Reaching the journey itself rejects the move as a cycle; encountering a
|
|
56
|
+
pre-existing cycle rejects extending malformed ancestry. Reads track visited ids,
|
|
57
|
+
so corrupt rootless cycles remain visible and bounded.
|
|
58
|
+
|
|
59
|
+
Journey options carry depth and complete lineage. The textual journey list,
|
|
60
|
+
Workspace tree, Scene map, All Journeys view, and selection controls render
|
|
61
|
+
recursively. Selecting a deep node opens its full ancestor chain. Current Scene
|
|
62
|
+
returns the complete lineage and only immediate siblings, while all movement and
|
|
63
|
+
content queries remain scoped to the exact selected journey.
|
|
64
|
+
|
|
65
|
+
Movement changes only the moved node's `parent_journey`. Regression coverage and
|
|
66
|
+
an isolated smoke prove that identity ids and `project_path` values remain stable.
|
|
67
|
+
No directory is created, renamed, moved, or removed.
|
|
68
|
+
|
|
69
|
+
Removal gained a conservative domain operation without a public UI. Storage uses
|
|
70
|
+
an immediate transaction to check child journeys and every known associated
|
|
71
|
+
record before deleting the identity. This closes the check-then-delete race and
|
|
72
|
+
prevents implicit reparenting, orphaning, and cascades.
|
|
73
|
+
|
|
74
|
+
Navigator homologation created a third-level journey through ordinary Mirror
|
|
75
|
+
conversation. It also exposed a presentation defect: deep leading-space
|
|
76
|
+
indentation crossed Markdown's code-block boundary. Text trees now use
|
|
77
|
+
column-zero `│` connectors at every depth, with regression coverage preventing a
|
|
78
|
+
return to fenced output.
|
|
79
|
+
|
|
80
|
+
Finally, the migration policy now transfers authority command by command. Python
|
|
81
|
+
continues to evolve where it still serves the product; CV22 must absorb the
|
|
82
|
+
current observable contract before claiming parity. Recursive journey reads are
|
|
83
|
+
assigned to CV22.E2.S5, and writes plus removal semantics to CV22.E4.
|
|
84
|
+
|
|
85
|
+
## Conscious Exclusions
|
|
86
|
+
|
|
87
|
+
- **No inherited context.** Parentage does not merge documents, memories,
|
|
88
|
+
conversations, tasks, attachments, instructions, status, routing, search, or
|
|
89
|
+
Builder state.
|
|
90
|
+
- **No filesystem synchronization.** Paths do not infer parentage, and parentage
|
|
91
|
+
does not create or move directories.
|
|
92
|
+
- **No automatic reparenting or cascade.** Removing a parent with children is a
|
|
93
|
+
simple refusal.
|
|
94
|
+
- **No public journey-removal UI.** The domain operation exists, but irreversible
|
|
95
|
+
user-facing removal requires separate product work.
|
|
96
|
+
- **No simultaneous TypeScript implementation.** Parity obligations are explicit
|
|
97
|
+
in CV22, but this patch does not duplicate the feature before the relevant TS
|
|
98
|
+
read/write foundations exist.
|
|
99
|
+
- **No hierarchy watchers, aggregate status, or structural auto-repair.** The
|
|
100
|
+
capability remains a simple organizational tree.
|
|
101
|
+
|
|
102
|
+
## What We Learned
|
|
103
|
+
|
|
104
|
+
A stable migration target is valuable only while it does not make the product
|
|
105
|
+
stand still. The safer long-running strangler is not one with no drift; it is one
|
|
106
|
+
that makes drift explicit, captures observable contracts, and transfers authority
|
|
107
|
+
at clear command boundaries.
|
|
108
|
+
|
|
109
|
+
The homologation also reinforced that recursive behavior must be validated at the
|
|
110
|
+
rendering boundary, not only in the data model. The hierarchy was semantically
|
|
111
|
+
correct while Markdown made its deepest node look like code. Normal conversational
|
|
112
|
+
use found what green service tests could not.
|
|
113
|
+
|
|
114
|
+
## Next Horizon
|
|
115
|
+
|
|
116
|
+
CV22 must absorb recursive journey behavior before its read and write commands
|
|
117
|
+
claim authority. Public journey removal may later build on the conservative
|
|
118
|
+
domain operation, but only with an explicit interaction and recovery design. The
|
|
119
|
+
product can now gather real evidence from deeper journey organization without
|
|
120
|
+
waiting for either horizon.
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.32.0 closes CV22, the TypeScript Core Port. Mirror Mind is now one
|
|
4
|
+
TypeScript package run by Node.js 24, installed with `npm install -g
|
|
5
|
+
mirror-mind` and wired to Pi, Claude Code, Gemini CLI, or Codex by one
|
|
6
|
+
documented step each; no Python remains in the repository or the shipped
|
|
7
|
+
artifact. Every command, its arguments, and its output are what they were.
|
|
8
|
+
The migration was a database-seam strangler, one command at a time, each
|
|
9
|
+
proven against the Python engine before it answered users, decided on
|
|
10
|
+
2026-06-23 and finished on 2026-10-10. Eleven surfaces were retired with
|
|
11
|
+
cutoffs rather than ported, the Windows Frame and the web console among
|
|
12
|
+
them; the Python core's last tree is kept at `cv22-last-python-bearing`.
|
|
13
|
+
A clone updated by the previous release's updater completes and reports
|
|
14
|
+
success; then run `npm ci && npm link && mirror runtime migrate` once at the
|
|
15
|
+
clone root (see Upgrading from a clone in this note).
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# v0.32.0 — One Language, One Install
|
|
19
|
+
|
|
20
|
+
**Date:** 2026-10-11
|
|
21
|
+
|
|
22
|
+
## Highlights
|
|
23
|
+
|
|
24
|
+
- **Install is one command and no checkout:** `npm install -g mirror-mind`, then
|
|
25
|
+
`mirror init <you>`. Two bins on the `PATH`, `mirror` and `mirror-hook`; configuration in
|
|
26
|
+
`~/.config/mirror/env`; your home at `~/.mirror-minds/<you>`. Node.js 24 or newer is the
|
|
27
|
+
only prerequisite. See [Getting Started](../getting-started.md).
|
|
28
|
+
- **No Python anywhere.** `src/memory/`, `uv`, `pyproject.toml`, and every way to reach
|
|
29
|
+
them are gone from the repository, and a guard proves the shipped package holds none by
|
|
30
|
+
path and by content. The TypeScript engine owns the database: bootstrap, migrations, and
|
|
31
|
+
every read and write.
|
|
32
|
+
- **Each runtime wires by a counted step:** Pi 1, Claude Code 1, Gemini CLI 2, Codex 2,
|
|
33
|
+
printed by `init` for the runtimes it finds, and the Operating Instructions reach each
|
|
34
|
+
runtime its own way.
|
|
35
|
+
- **The same commands, the same answers.** 31 front-door commands, 25 skills in three
|
|
36
|
+
copies that all say `mirror`. The last command family was proven byte-identical to the
|
|
37
|
+
Python oracle before the oracle was deleted.
|
|
38
|
+
- **Upgrading from a clone is five lines**, described below. The previous release's
|
|
39
|
+
updater completes the hop and reports success; it does not know about the five lines,
|
|
40
|
+
so this note has to.
|
|
41
|
+
- **Eleven surfaces are retired with cutoffs rather than ported**, each with what to do
|
|
42
|
+
instead and what still works if you do nothing: the web console, the Windows Frame and
|
|
43
|
+
installer, the Python extension API, journey projections, and seven smaller ones.
|
|
44
|
+
Summarized below; the full record is [Pending Cutoffs](pending-cutoffs.md).
|
|
45
|
+
- **One behavior change a Pi user can notice:** a new home imports only the Pi sessions
|
|
46
|
+
that are newer than itself. Your earlier Pi history stays where it is.
|
|
47
|
+
- **Not in this release:** Windows, Mirror Desktop, a programmatic API. Each is named
|
|
48
|
+
under Conscious Exclusions.
|
|
49
|
+
|
|
50
|
+
## Where We Started
|
|
51
|
+
|
|
52
|
+
Mirror Mind was a Python core with four runtime harnesses written in TypeScript around it.
|
|
53
|
+
Installing it meant cloning the repository, running `uv sync`, keeping a `.env` in the
|
|
54
|
+
clone, and opening your harness inside that directory, because the directory *was* the
|
|
55
|
+
install. Every skill called the core by its path inside the clone. The Windows path was a
|
|
56
|
+
separate Electron Frame with a PowerShell installer that cloned the repository for you.
|
|
57
|
+
|
|
58
|
+
That shape worked for its first users and could not reach the next ones. Two languages
|
|
59
|
+
meant two toolchains on every machine and two sets of idioms for every contributor. A
|
|
60
|
+
clone is not a thing you can tell a stranger to install. And the harnesses, the MCP
|
|
61
|
+
ecosystem, and the plugin formats Mirror lives in are all TypeScript; the core was the
|
|
62
|
+
one piece that was not.
|
|
63
|
+
|
|
64
|
+
On 2026-06-23 the decision was taken to
|
|
65
|
+
[port the core to TypeScript through a database-seam strangler, not a rewrite](../project/decisions.md#mirror-mind-ports-to-typescript-via-a-database-seam-strangler-not-a-rewrite):
|
|
66
|
+
the shared SQLite database would be the seam, a TypeScript front door would take one
|
|
67
|
+
observable command at a time, each proven against the Python engine on copies of real
|
|
68
|
+
databases before it answered anyone, and Python would dissolve as the front door grew.
|
|
69
|
+
No big bang, no freeze, no feature pause: the Python product kept moving through
|
|
70
|
+
v0.31.14, and every change to it created named parity scope on the TypeScript side.
|
|
71
|
+
|
|
72
|
+
From 2026-09-07 the migration was a
|
|
73
|
+
[single-owner effort](../project/decisions.md#cv22-becomes-a-single-owner-migration), with
|
|
74
|
+
a multi-persona technical review standing in as the second opinion at each plan and each
|
|
75
|
+
handoff. And from 2026-09-13 it was decided that
|
|
76
|
+
[CV22 releases once, when the migration is complete](../project/decisions.md#cv22-releases-once-when-the-migration-is-complete):
|
|
77
|
+
a half-migrated core is not a product story, so nothing shipped until all of it had.
|
|
78
|
+
|
|
79
|
+
## What Changed
|
|
80
|
+
|
|
81
|
+
### The strangler, in ten Delivery Stories
|
|
82
|
+
|
|
83
|
+
The arc ran from a parity spike on hybrid search (DS1), through a read-only TypeScript
|
|
84
|
+
foundation (DS2) and a Pi front door that wrapped the unported remainder (DS3), to
|
|
85
|
+
deterministic writes (DS4) and the external-API commands, extraction and embeddings among
|
|
86
|
+
them (DS5). DS6 moved schema custody: the TypeScript engine took over database creation
|
|
87
|
+
and migrations, and proved a fresh database it creates is structurally identical to one
|
|
88
|
+
Python created. DS7 burned down the remaining command surface, fourteen stories, until
|
|
89
|
+
the deterministic Python command surface was empty. DS8 cut the live providers over.
|
|
90
|
+
DS9 ported the MCP server, with a threat model first and wallet guards against denial of
|
|
91
|
+
spend. DS10 retired what was left and made the package.
|
|
92
|
+
|
|
93
|
+
Every ported family answered from TypeScript behind a one-variable revert to Python while
|
|
94
|
+
it was young, and every revert was removed only when Python itself was. The oracle
|
|
95
|
+
harness that graded TypeScript against Python on copies of real databases went with the
|
|
96
|
+
oracle; its goldens are frozen fixtures the tests still grade against.
|
|
97
|
+
|
|
98
|
+
### Deletion as a product decision
|
|
99
|
+
|
|
100
|
+
Not everything was ported. Where a surface had no user the migration could name, it was
|
|
101
|
+
[retired with a cutoff rather than carried across](../project/decisions.md#the-web-console-is-retired-not-ported-and-ds7-closes-at-1414):
|
|
102
|
+
the web console, whose successor is `mirror-gui`; the
|
|
103
|
+
[Windows Frame and installer](../project/decisions.md#the-windows-frame-and-installer-are-retired-not-re-homed-and-no-windows-story-is-promised),
|
|
104
|
+
with three downloads ever and no known user; the Python extension API and the
|
|
105
|
+
compatibility host that served it;
|
|
106
|
+
[journey projections](../project/decisions.md#journey-projections-retire-with-the-python-core-mirror-desktop-is-outside-the-migration),
|
|
107
|
+
whose one consumer is outside the migration; the SQLite Refinement Workbench, replaced by
|
|
108
|
+
the file-first Refinement route; the legacy database conversion, the migration rehearsal
|
|
109
|
+
tool, the journey admin verbs, the metadata backfill, and the Python-era release tooling.
|
|
110
|
+
Each cutoff answers what no longer exists, what to do instead, and what still works if
|
|
111
|
+
you do nothing. The full record, one section per surface, is
|
|
112
|
+
[Pending Cutoffs](pending-cutoffs.md); the short version:
|
|
113
|
+
|
|
114
|
+
| Removed | Instead |
|
|
115
|
+
|---|---|
|
|
116
|
+
| The Python core: `python -m memory …`, `uv`, the `MIRROR_TS_*` reverts, the Python API | `mirror <command>`; clean `MIRROR_TS_*` and the three path variables out of `.env` |
|
|
117
|
+
| The web console (`python -m memory web`) and its scene synthesis | Everything it showed is in the terminal: `journeys`, `journey <slug>`, `memories`, `conversations`, `tasks`, and the four modes; `mirror-gui` is the graphical successor; the scene synthesis has no replacement |
|
|
118
|
+
| The Windows Frame and PowerShell installer | Nothing on Windows in this release; a Frame install keeps working on `v0.31.14` and must not update from inside the Frame |
|
|
119
|
+
| `register(api)`, `extension.py`, the compatibility host | An extension declares a runtime per capability in `skill.yaml`; install validates what the manifest declares |
|
|
120
|
+
| Journey projections and `.mirror/projections` | Nothing; existing trees are inert; Mirror Desktop stays on the last Python-bearing release |
|
|
121
|
+
| The SQLite Refinement Workbench's twenty verbs | `docs/project/refinement/index.md` and the file-first route |
|
|
122
|
+
| `migrate-legacy` (the Portuguese-era conversion) | Convert once with the last Python-bearing release; any home Mirror has ever opened is already current |
|
|
123
|
+
| `memory-rehearse-migration` | The TypeScript engine's own migration tests; backups before every write |
|
|
124
|
+
| `journey export-registry` and `journey mutate` | `journeys` and `journey <slug>` to read; the Mirror, Builder, and Explorer surfaces to change; no machine-readable dump |
|
|
125
|
+
| The conversation metadata backfill flags | Nothing: a one-shot pass whose moment has passed; the lifecycle faces stay |
|
|
126
|
+
| `runtime release-doctor` and `release-promote` | Maintainer scripts, `npm run release:doctor` and `release:promote`, from a checkout |
|
|
127
|
+
|
|
128
|
+
The last tree that contains the Python core is kept at the
|
|
129
|
+
[`cv22-last-python-bearing`](https://github.com/mirror-mind-ai/mirror/tree/cv22-last-python-bearing)
|
|
130
|
+
tag, so nothing is gone from the world, only from this version.
|
|
131
|
+
|
|
132
|
+
### The package
|
|
133
|
+
|
|
134
|
+
The repository is the package: `npm pack` produces 468 files with the same paths as a
|
|
135
|
+
checkout, two bins on a loader shim that strips types for its own package only, no build
|
|
136
|
+
step, no install script. The core reads its configuration in one order — environment,
|
|
137
|
+
`<clone>/.env`, `~/.config/mirror/env` — and `init` writes `MIRROR_USER` there, readable by
|
|
138
|
+
you only, never taking a key from the command line. All 25 skills, in the Pi, Claude
|
|
139
|
+
Code, and plugin copies, say `mirror` under a guard that forbids any other form. A smoke
|
|
140
|
+
in CI packs, installs into a scratch prefix, initializes, seeds, opens a migrating
|
|
141
|
+
database, exercises the four runtimes' wrappers and the MCP server, and proves no
|
|
142
|
+
interpreter was spawned.
|
|
143
|
+
|
|
144
|
+
The package is published by npm's trusted publisher for this repository:
|
|
145
|
+
[staged from CI with provenance, and a maintainer makes it public with 2FA](../project/decisions.md#the-npm-package-is-published-by-staging-from-ci-with-provenance-and-a-maintainer-approves-with-2fa).
|
|
146
|
+
No long-lived token exists. The route was rehearsed end to end before this release.
|
|
147
|
+
|
|
148
|
+
### One behavior change
|
|
149
|
+
|
|
150
|
+
[A new home imports only the Pi sessions that are newer than itself](../project/decisions.md#a-new-mirror-home-imports-only-the-pi-sessions-that-are-newer-than-itself).
|
|
151
|
+
Session maintenance used to backfill every untracked Pi session on the machine; for a
|
|
152
|
+
home that had tracked Pi from the start that filled gaps, but for a new home it copied
|
|
153
|
+
the person's whole Pi history, from every project, and then spent on retitling and
|
|
154
|
+
extracting it before the first prompt was answered. Now a session is Mirror's only if it
|
|
155
|
+
ended after the home existed; the home's age is its database's first open. For an
|
|
156
|
+
existing home, nothing changes: your home is older than your sessions. The one case where
|
|
157
|
+
a person loses an import they used to get: a database rebuilt from scratch is a new home,
|
|
158
|
+
born now, and the sessions the old one held are not imported again. The home is the
|
|
159
|
+
database.
|
|
160
|
+
|
|
161
|
+
## Upgrading from a clone
|
|
162
|
+
|
|
163
|
+
Until this release Mirror ran from a git clone and the skills called the core by its path
|
|
164
|
+
inside it. The skills now say `mirror`, and nothing provides that name until you do, once.
|
|
165
|
+
Node.js 24 or newer is required, and was not before: check `node --version` first.
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
cd <your clone>
|
|
169
|
+
git pull # or: the previous release's runtime update, which completes
|
|
170
|
+
npm ci
|
|
171
|
+
npm link # puts `mirror` and `mirror-hook` on your PATH from this tree
|
|
172
|
+
mirror runtime migrate # applies this release's pending migration, snapshot first
|
|
173
|
+
mirror runtime status # should say: Install: clone (<your clone>) ... Status: ready
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Keep opening your harness in the clone, as before; everything it finds there now answers
|
|
177
|
+
through `mirror`. Your `.env` stays where it is. Your home and database are untouched.
|
|
178
|
+
`runtime status` is read-only: it reports a pending migration and does not apply it;
|
|
179
|
+
`runtime migrate` does, with a snapshot first, and so does the first ordinary command
|
|
180
|
+
that opens the database, which is why the line is there.
|
|
181
|
+
|
|
182
|
+
**If you updated with the previous release's `runtime update`**, it completes and
|
|
183
|
+
reports success, lists this release, and shows its summary. It ran entirely inside a
|
|
184
|
+
process that had loaded the Python engine before the tree changed under it, so nothing
|
|
185
|
+
it checked could fail; and it knows nothing of the lines above. Run them. From then on
|
|
186
|
+
`mirror runtime update` is the Node one. The old form, `uv run python -m memory …`, now
|
|
187
|
+
fails with `No module named memory.__main__`: the package is gone, and only ignored
|
|
188
|
+
`__pycache__` residue remains under `src/`.
|
|
189
|
+
|
|
190
|
+
Then the housekeeping the cutoffs ask for: `rm -rf src .venv` at the clone root removes
|
|
191
|
+
the Python residue, since nothing tracked lives under `src/` any more, and `uv` itself can
|
|
192
|
+
go; remove any `MIRROR_TS_<FAMILY>=0` line and `EXPORT_DIR`, `TRANSCRIPT_EXPORT_DIR`,
|
|
193
|
+
`DB_BACKUP_PATH` from `.env` (`mirror runtime diagnose` names the stragglers); if your
|
|
194
|
+
`identity/user/identity.yaml` still says `uv run python -m memory identity edit`, the
|
|
195
|
+
command is `mirror identity edit user identity`; and if you have extensions with their
|
|
196
|
+
own skills, re-run `mirror extensions sync` after their repositories are updated.
|
|
197
|
+
|
|
198
|
+
**You can move to the package instead** of keeping the clone: `npm install -g
|
|
199
|
+
mirror-mind`, `mirror init <your-name>` (it finds your existing home by name and copies
|
|
200
|
+
nothing), add your `OPENROUTER_API_KEY` to `~/.config/mirror/env`, run the wiring step
|
|
201
|
+
`init` prints for your runtime, and delete the clone. A checkout opened in Pi and an
|
|
202
|
+
installed package both provide the extension; there is no reason to keep both.
|
|
203
|
+
|
|
204
|
+
## Conscious Exclusions
|
|
205
|
+
|
|
206
|
+
- **Windows.** The Frame and installer are retired and no Windows story is promised. The
|
|
207
|
+
supported platform is POSIX (macOS, Linux). A Frame install keeps working on
|
|
208
|
+
`v0.31.14` as it is, and must not update from inside the Frame.
|
|
209
|
+
- **Mirror Desktop.** Outside the migration. It couples to the Python era well beyond
|
|
210
|
+
projections and stays on the last Python-bearing release; its integration with the
|
|
211
|
+
TypeScript core is a separate effort after this one.
|
|
212
|
+
- **A programmatic API.** `from memory import MemoryClient` has no TypeScript
|
|
213
|
+
counterpart in this release. The command line and the MCP server are the interfaces.
|
|
214
|
+
- **A Gemini extension and Codex hooks.** Both runtimes wire by two documented steps and
|
|
215
|
+
Codex runs through a shipped wrapper; a packaged Gemini extension and Codex hooks were
|
|
216
|
+
considered and not built.
|
|
217
|
+
- **Importing earlier Pi history on request.** The new rule does not ask and offers no
|
|
218
|
+
import of what it skips; if one is wanted, it is a feature with its own story.
|
|
219
|
+
- **`v1.0.0`.** This release completes a Capability Value, which the versioning rule
|
|
220
|
+
would call a MAJOR, but
|
|
221
|
+
[that number is CV9's](../project/decisions.md#cv22-releases-as-v0320-not-v100): a
|
|
222
|
+
migration built not to be noticed does not get to be the 1.0.
|
|
223
|
+
|
|
224
|
+
## What We Learned
|
|
225
|
+
|
|
226
|
+
**The seam was the method.** Choosing the database as the boundary, rather than an API or
|
|
227
|
+
a module, meant the two engines could run side by side over the same real data for three and
|
|
228
|
+
a half months, and parity could be graded as resulting database state rather than argued. Every
|
|
229
|
+
family flipped with a revert and lost it only when the oracle it would revert to was
|
|
230
|
+
gone.
|
|
231
|
+
|
|
232
|
+
**Deletion needs the same rigor as construction.** The surfaces retired here each got an
|
|
233
|
+
inventory, a decision with the alternative written down, a cutoff that answers three
|
|
234
|
+
questions for a user, and a guard in CI that keeps them retired. A retirement that was
|
|
235
|
+
only a deletion would have come back.
|
|
236
|
+
|
|
237
|
+
**A single owner needs a written second opinion.** With one person on the migration from
|
|
238
|
+
September, the multi-persona plan and handoff reviews were not a supplement to review;
|
|
239
|
+
they were the review. They found the loader shim Node's type-stripping needed, the
|
|
240
|
+
operating instructions that had not shipped, the fail-open default in the backfill rule,
|
|
241
|
+
and the full-scan that rule would have introduced.
|
|
242
|
+
|
|
243
|
+
**Rehearse the one-shot step on a copy.** The release note said the previous updater
|
|
244
|
+
would fail its post-update check on the Python-less tree. A rehearsal on a copy of the
|
|
245
|
+
production clone showed it succeeding instead, in-process, with the engine already in
|
|
246
|
+
memory, and showing the new release's summary as its only word to the user. The note was
|
|
247
|
+
rewritten before anyone read it through that updater. There was exactly one Python-era
|
|
248
|
+
production clone to learn this from; the copy was the second chance.
|
|
249
|
+
|
|
250
|
+
**The documentation is read by the next session, not the next person.** Resumable
|
|
251
|
+
plateaus with handoff statements, decisions recorded near the roadmap, and routes written
|
|
252
|
+
so a stranger could run them made a part-time migration survivable across gaps of days.
|
|
253
|
+
Where a pointer went stale, work was redone.
|
|
254
|
+
|
|
255
|
+
## Next Horizon
|
|
256
|
+
|
|
257
|
+
Mirror Mind is one package in one language, and the roadmap it serves is the product's
|
|
258
|
+
again. Mirror Desktop's integration with the TypeScript core is the first thing waiting
|
|
259
|
+
on the far side of this release. The Refinement index carries what the migration found
|
|
260
|
+
and chose not to fix on its way out, CR124 the last of them, found on this release's own
|
|
261
|
+
validation. And CV9, Mirror Mind 1.0, keeps its number.
|