mirror-mind 0.0.1 → 0.32.1
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-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 +561 -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 +99 -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.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 +13 -0
- package/plugins/mirror-mind/hooks/hooks.json +50 -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/mcp/launch.sh +52 -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 +65 -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/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 +576 -0
- package/ts/src/conversation/loggerCli.ts +282 -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 +1865 -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 +73 -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 +999 -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/soulRoute.ts +433 -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 +252 -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 +176 -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 +68 -0
- package/ts/src/hooks/runtime.ts +159 -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/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,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.10 gives local consumers and installed extensions a secure, deterministic,
|
|
4
|
+
versioned way to read Journey operational state without gaining mutation
|
|
5
|
+
authority. Mirror now implements mirror.journey-projections@1.0 in the Python
|
|
6
|
+
Core with registered-root confinement, linearizable publication, immutable
|
|
7
|
+
receipts, a namespace-bound Extension API 1.1, deterministic Ariad compilation,
|
|
8
|
+
and post-commit lifecycle refresh. The unchanged consumer-owned black-box probe
|
|
9
|
+
passes against isolated synthetic state; release acceptance remains explicit
|
|
10
|
+
through installed-runtime verification and a consumer-owned return record.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v0.31.10 — Journey Projection Contract
|
|
14
|
+
|
|
15
|
+
**Date:** 2026-08-25
|
|
16
|
+
|
|
17
|
+
## Highlights
|
|
18
|
+
|
|
19
|
+
- Implements public contract `mirror.journey-projections@1.0` in the Python Core.
|
|
20
|
+
- Adds `journey-projection capabilities`, `rebuild-operational`, and `inspect`,
|
|
21
|
+
with isolated test-only preparation/publication routes for the immutable
|
|
22
|
+
consumer probe.
|
|
23
|
+
- Publishes projection and manifest state with one cross-process lock per Journey,
|
|
24
|
+
fresh manifest merge under lock, atomic replacement, last-valid preservation,
|
|
25
|
+
explicit divergence, and immutable snapshot receipts.
|
|
26
|
+
- Adds Extension API `1.1` with `api.journey_projections`, permanently bound to
|
|
27
|
+
the installed extension's identity; extensions cannot select `ariad`, another
|
|
28
|
+
namespace, or a filesystem root.
|
|
29
|
+
- Compiles Ariad roadmap, active Delivery work, public Explorer handoffs, and
|
|
30
|
+
canonical Refinement state into deterministic `ariad:operational` documents.
|
|
31
|
+
- Refreshes represented state after source commits without making projection
|
|
32
|
+
availability a transaction dependency or rolling durable truth back.
|
|
33
|
+
- Passes the unchanged consumer-owned probe with exact normative fixture parity,
|
|
34
|
+
schema/path/namespace attack rejection, atomic consistency, and no production
|
|
35
|
+
data.
|
|
36
|
+
|
|
37
|
+
## Where We Started
|
|
38
|
+
|
|
39
|
+
Nautilus needed a stable local reading of Journey state, but Mirror had only
|
|
40
|
+
human-facing Markdown and runtime records. A consumer could either parse internal
|
|
41
|
+
files directly, depend on private implementation details, or ask Mirror to
|
|
42
|
+
surrender mutation authority. None was acceptable. The handoff therefore began
|
|
43
|
+
with a consumer-owned contract and acceptance kit rather than a Mirror-owned API
|
|
44
|
+
proposal.
|
|
45
|
+
|
|
46
|
+
The central tension was authority. Ariad documents and lifecycle records had to
|
|
47
|
+
remain the source of truth, extensions had to remain inside their own namespaces,
|
|
48
|
+
and production callers could identify a Journey but never choose a filesystem
|
|
49
|
+
root. At the same time, concurrent Core and extension publishers needed one
|
|
50
|
+
consistent manifest rather than a collection of atomic files with lost-update
|
|
51
|
+
races between them.
|
|
52
|
+
|
|
53
|
+
## What Changed
|
|
54
|
+
|
|
55
|
+
Mirror adopted the contract in layers. Public models, JSON Schema 2020-12
|
|
56
|
+
validation, canonical UTF-8 serialization, stable payload-free errors, and honest
|
|
57
|
+
capability discovery established the boundary first. The storage kernel then made
|
|
58
|
+
publication linearizable per Journey across processes. Every writer acquires the
|
|
59
|
+
same Journey lock, rereads the current manifest after acquisition, verifies or
|
|
60
|
+
creates an immutable receipt, replaces the projection, and makes manifest
|
|
61
|
+
replacement the publication linearization point. Controlled failures restore the
|
|
62
|
+
previous pair when possible; unrecoverable states surface bounded divergence and
|
|
63
|
+
inspection never repairs implicitly.
|
|
64
|
+
|
|
65
|
+
Extension API `1.1` exposes that kernel through a façade bound at construction to
|
|
66
|
+
`extension_id`. Envelope namespace and producer identity must match that binding,
|
|
67
|
+
and `ariad` remains Core-only. A raw extension database connection grants no
|
|
68
|
+
projection filesystem authority.
|
|
69
|
+
|
|
70
|
+
The Ariad compiler reuses shared roadmap grammar and emits only represented,
|
|
71
|
+
public durable state. Authored hierarchy order is preserved. Artifact paths are
|
|
72
|
+
Journey-relative and confined. Explorer source conversations, prompts, raw
|
|
73
|
+
reasoning, environment state, transcript bodies, and private narrative evidence
|
|
74
|
+
are excluded. `sourceRevision` fingerprints projected content, so excluded data
|
|
75
|
+
cannot perturb consumer identity.
|
|
76
|
+
|
|
77
|
+
Lifecycle refresh is deliberately a post-commit observer. Delivery artifacts are
|
|
78
|
+
refreshed only after their files exist; Explorer public state is projected only
|
|
79
|
+
through durable confined handoffs; Refinement stays document-first. Equal source
|
|
80
|
+
revisions are quiet. Compiler or publication failure cannot roll back the source
|
|
81
|
+
mutation that already succeeded.
|
|
82
|
+
|
|
83
|
+
Finally, the complete command surface was exercised by the unchanged external
|
|
84
|
+
probe against a fresh isolated home. Fixed fixture identities exist only behind
|
|
85
|
+
strict test-mode guards. The probe proved capability discovery, isolated
|
|
86
|
+
preparation, exact Operational content, inspection, extension publication,
|
|
87
|
+
last-valid preservation, traversal/namespace refusal, and atomic consistency.
|
|
88
|
+
|
|
89
|
+
## Conscious Exclusions
|
|
90
|
+
|
|
91
|
+
- No Tactical or Strategic interpretation is implemented by Mirror Core.
|
|
92
|
+
- No projection write-back, implicit repair, semantic synthesis, model call, or
|
|
93
|
+
network dependency enters compilation or publication.
|
|
94
|
+
- No caller-supplied production root and no extension-selected namespace.
|
|
95
|
+
- No TypeScript implementation while CV22 remains paused; Python is the sole
|
|
96
|
+
product authority for this contract.
|
|
97
|
+
- No production schema migration is required.
|
|
98
|
+
- The release does not authorize Nautilus projection work until its consumer-owned
|
|
99
|
+
installed-runtime return record opens the gate.
|
|
100
|
+
|
|
101
|
+
## What We Learned
|
|
102
|
+
|
|
103
|
+
Atomic replacement alone is not a concurrency model. A trustworthy read-model
|
|
104
|
+
contract needs a clear linearization point, fresh state under exclusion, immutable
|
|
105
|
+
identity evidence, and an explicit posture for the narrow interval where one file
|
|
106
|
+
has moved and another has not.
|
|
107
|
+
|
|
108
|
+
Consumer-owned acceptance also sharpened the product boundary. By keeping the
|
|
109
|
+
probe immutable and external, Mirror could choose its architecture freely while
|
|
110
|
+
remaining unable to weaken the observable contract to fit its implementation.
|
|
111
|
+
|
|
112
|
+
## Next Horizon
|
|
113
|
+
|
|
114
|
+
With the installed-runtime return accepted, local consumers can build against the
|
|
115
|
+
Operational projection and extensions can publish their own versioned readings.
|
|
116
|
+
Tactical and Strategic meaning remains consumer/extension work. CV22 may later
|
|
117
|
+
port the observable command contract when its paused TypeScript migration resumes,
|
|
118
|
+
but no dual-authority obligation is created by this release.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.11 corrects Operational link confinement without weakening the Journey
|
|
4
|
+
security boundary. Authored parent-relative Markdown links now resolve from
|
|
5
|
+
their containing document and compile only when the canonical target remains
|
|
6
|
+
inside the registered Journey root. Real escapes, absolute and URI-like
|
|
7
|
+
targets, Windows separators, symlink escapes, and missing-target publication
|
|
8
|
+
failures remain bounded, while the last valid projection pair is preserved.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# v0.31.11 — Confined Operational Relative Links
|
|
12
|
+
|
|
13
|
+
**Date:** 2026-08-26
|
|
14
|
+
|
|
15
|
+
## Highlights
|
|
16
|
+
|
|
17
|
+
- Accepts one-level and multi-level parent-relative Ariad roadmap links when the
|
|
18
|
+
canonical target remains inside the registered Journey.
|
|
19
|
+
- Preserves normalized Journey-relative projection paths and confined directory
|
|
20
|
+
links resolving to `index.md`.
|
|
21
|
+
- Continues rejecting canonical escapes, absolute paths, URI-like targets,
|
|
22
|
+
backslash-based paths, and directory or file symlinks escaping the Journey.
|
|
23
|
+
- Preserves the previous valid Operational document and manifest when a confined
|
|
24
|
+
target is missing or compilation otherwise fails before publication.
|
|
25
|
+
- Adds an isolated public-CLI regression matching the Nautilus capability package
|
|
26
|
+
linking to a root-level Delivery Story.
|
|
27
|
+
|
|
28
|
+
## Where We Started
|
|
29
|
+
|
|
30
|
+
Nautilus adopted `mirror.journey-projections@1.0` from v0.31.10 and immediately
|
|
31
|
+
exercised a legitimate roadmap topology the normative synthetic fixture did not
|
|
32
|
+
contain: a capability package linked back to a root-level Delivery Story through
|
|
33
|
+
`../ds-001/index.md`. Mirror rejected the lexical `..` segment before asking
|
|
34
|
+
whether the resolved file remained inside the registered Journey.
|
|
35
|
+
|
|
36
|
+
The source Ariad mutation still committed and the projection kernel correctly
|
|
37
|
+
preserved the previous valid pair. That safety posture prevented corruption, but
|
|
38
|
+
left the Operational snapshot stale and blocked Tactical and Strategic consumers
|
|
39
|
+
from claiming ancestry from current truth.
|
|
40
|
+
|
|
41
|
+
## What Changed
|
|
42
|
+
|
|
43
|
+
`OperationalCompiler` now resolves a relative source target from the containing
|
|
44
|
+
document before classifying its safety. Canonical Journey-root confinement, not
|
|
45
|
+
the mere presence of a parent segment, is the authority. Existing target and
|
|
46
|
+
symlink components are canonicalized; a result outside the registered root still
|
|
47
|
+
returns the structured `unsafe_projection_path` error without leaking a host
|
|
48
|
+
path.
|
|
49
|
+
|
|
50
|
+
A missing target whose unresolved canonical location remains inside the Journey
|
|
51
|
+
continues to return a bounded source-compilation failure. Directory targets still
|
|
52
|
+
resolve only to a confined `index.md`. Publication remains exclusively owned by
|
|
53
|
+
the existing per-Journey linearizable kernel, so compiler failure cannot replace
|
|
54
|
+
the last valid projection or manifest.
|
|
55
|
+
|
|
56
|
+
The regression matrix covers same-directory links, one and multiple confined
|
|
57
|
+
parent segments, confined directories, canonical escape, absolute path, file URI,
|
|
58
|
+
Windows separator, file and directory symlink escape, missing target, and
|
|
59
|
+
last-valid preservation. A guarded isolated public rebuild reproduces the exact
|
|
60
|
+
CV-to-root-DS shape that exposed the defect.
|
|
61
|
+
|
|
62
|
+
## Conscious Exclusions
|
|
63
|
+
|
|
64
|
+
- No Nautilus-specific semantics enter Mirror Core.
|
|
65
|
+
- No Tactical or Strategic schema or synthesis behavior changes.
|
|
66
|
+
- No roadmap links are rewritten as a workaround.
|
|
67
|
+
- No projection namespace, atomicity, receipt, or publication rule changes.
|
|
68
|
+
- No TypeScript parity work while CV22 remains paused.
|
|
69
|
+
|
|
70
|
+
## What We Learned
|
|
71
|
+
|
|
72
|
+
Lexical traversal and boundary escape are not equivalent. Rejecting every `..`
|
|
73
|
+
looks conservative, but it substitutes syntax for authority and can make valid
|
|
74
|
+
repository structure unavailable. The secure question is where the canonical
|
|
75
|
+
existing target resolves, followed by an explicit root-boundary and file-type
|
|
76
|
+
check.
|
|
77
|
+
|
|
78
|
+
Consumer-owned acceptance remains valuable precisely because it supplies real
|
|
79
|
+
shapes rather than implementation assumptions. The v1 contract was secure, but
|
|
80
|
+
its first fixture did not represent this topology; Nautilus exposed the missing
|
|
81
|
+
case without requiring Mirror to absorb consumer semantics.
|
|
82
|
+
|
|
83
|
+
## Next Horizon
|
|
84
|
+
|
|
85
|
+
After the installed Nautilus rebuild advances `operational.json` and its manifest
|
|
86
|
+
to current Ariad truth, Nautilus can close TD-001 and resume explicit Tactical
|
|
87
|
+
and Strategic synthesis over a current Operational ancestor. The consumer return
|
|
88
|
+
remains the final gate; source-only success is insufficient.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.12 makes authority boundaries explicit across Builder orchestration and
|
|
4
|
+
Journey administration. Natural or cadence-declared delegation can authorize
|
|
5
|
+
one exact story Plan without weakening the mandatory Navigator Validation
|
|
6
|
+
gate, while Driver-authored Plans remain preserved and implementable. Release
|
|
7
|
+
intent is now durable context rather than permission to publish. A versioned,
|
|
8
|
+
model-free Journey mutation service adds transactional hierarchy changes, and
|
|
9
|
+
Delivery Story Done now refuses to claim coherence until authored roadmap
|
|
10
|
+
status is actually aligned.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v0.31.12 — Bounded Authority and Journey Integrity
|
|
14
|
+
|
|
15
|
+
**Date:** 2026-08-29
|
|
16
|
+
|
|
17
|
+
## Highlights
|
|
18
|
+
|
|
19
|
+
- Accepts natural one-turn story Plan delegation in stepwise/checkpoint cadence
|
|
20
|
+
and declarative bounded story authority in accelerated cadence.
|
|
21
|
+
- Preserves exact active-item, generation, level, expiry, single-use, and
|
|
22
|
+
concurrency boundaries while keeping Navigator Validation mandatory.
|
|
23
|
+
- Keeps Driver-authored Plan bodies intact through approval and distinguishes a
|
|
24
|
+
Delivery Story's release intent from commit, push, tag, and publication
|
|
25
|
+
authority.
|
|
26
|
+
- Adds `mirror.journey-mutation@1.0`, a deterministic and model-free service for
|
|
27
|
+
transactional Journey creation, update, movement, ordering, and guarded
|
|
28
|
+
removal.
|
|
29
|
+
- Refuses Delivery Story Done before cursor or artifact mutation when authored DS,
|
|
30
|
+
child, candidate-row, or canonical roadmap status remains non-Done.
|
|
31
|
+
|
|
32
|
+
## Where We Started
|
|
33
|
+
|
|
34
|
+
Ariad's safe defaults had become too literal. Even when the Navigator naturally
|
|
35
|
+
asked for a Plan and immediate implementation, story-by-story flow stopped for a
|
|
36
|
+
second approval; accelerated cadence carried no declarative policy for that same
|
|
37
|
+
boundary. The first implementation also risked replacing a useful Driver-authored
|
|
38
|
+
Plan at approval time, and release intent could be mistaken for authority to
|
|
39
|
+
publish.
|
|
40
|
+
|
|
41
|
+
At the same time, Journey hierarchy mutation still depended on scattered storage
|
|
42
|
+
operations rather than one versioned, model-free transactional contract. The
|
|
43
|
+
CV20.DS16 closure then exposed a final trust defect: `done-delivery-story` could
|
|
44
|
+
render “Closure coherence passed” while authored roadmap files still said `In
|
|
45
|
+
Progress`.
|
|
46
|
+
|
|
47
|
+
## What Changed
|
|
48
|
+
|
|
49
|
+
Story Plan preauthorization now records bounded structural authority for one
|
|
50
|
+
exact active User or Technical Story. Natural delegation can create and approve a
|
|
51
|
+
complete Plan in one flow for stepwise/checkpoint work; accelerated cadence reads
|
|
52
|
+
`plan_approval_policy=bounded_story_authority` from method data instead of
|
|
53
|
+
receiving authority from a hard-coded profile name. Receipts are generation-bound,
|
|
54
|
+
single-use, atomic under concurrent attempts, and never cross Navigator
|
|
55
|
+
Validation. The completeness classifier recognizes actual scaffold markers
|
|
56
|
+
without treating legitimate domain prose such as “Payment placeholder” as an
|
|
57
|
+
unfinished Plan.
|
|
58
|
+
|
|
59
|
+
Plan approval no longer regenerates or overwrites an authored Plan. Release intent
|
|
60
|
+
is persisted and rendered as orientation, but its contract explicitly grants no
|
|
61
|
+
commit, push, tag, stable-promotion, or publication authority.
|
|
62
|
+
|
|
63
|
+
`JourneyAdminService` introduces the versioned `mirror.journey-mutation@1.0`
|
|
64
|
+
contract. It exports deterministic registry state and performs hierarchy writes
|
|
65
|
+
transactionally without model calls. Parent changes, sibling ordering, protected
|
|
66
|
+
historical associations, and projection refresh ordering are checked before a
|
|
67
|
+
mutation can leave an orphaned or partially moved Journey.
|
|
68
|
+
|
|
69
|
+
Delivery Story closure now performs a read-only authored-roadmap preflight before
|
|
70
|
+
calling the mutating Done core. Existing packages resolve through heading-based
|
|
71
|
+
story identity. Explicit DS and child package statuses, child candidate rows, and
|
|
72
|
+
canonical Code/Status table rows must already report Done; otherwise the command
|
|
73
|
+
returns project-relative evidence, leaves the cursor unchanged, and creates no
|
|
74
|
+
Done artifact. The agent retains semantic ownership of Markdown edits.
|
|
75
|
+
|
|
76
|
+
## Conscious Exclusions
|
|
77
|
+
|
|
78
|
+
- Natural Plan delegation does not bypass Navigator Validation, broaden to a
|
|
79
|
+
different story, survive generation mismatch, or authorize external effects.
|
|
80
|
+
- Release intent does not authorize commit, push, merge, tagging, stable
|
|
81
|
+
promotion, GitHub publication, or installation.
|
|
82
|
+
- Python verifies authored closure status but does not rewrite roadmap prose or
|
|
83
|
+
infer project meaning.
|
|
84
|
+
- Journey mutation remains a local Core contract; it adds no hosted service,
|
|
85
|
+
synchronization protocol, model-based planning, or destructive cascade.
|
|
86
|
+
- The four pre-existing repository-wide Ruff findings under
|
|
87
|
+
`spikes/ts-search-parity/` are unchanged.
|
|
88
|
+
|
|
89
|
+
## What We Learned
|
|
90
|
+
|
|
91
|
+
Good autonomy is not the absence of checkpoints. It is authority represented at
|
|
92
|
+
the right granularity: exact scope, explicit policy, bounded lifetime, atomic
|
|
93
|
+
consumption, and a visible hard stop where human judgment still matters.
|
|
94
|
+
|
|
95
|
+
Coherence must also be proven from authored state rather than inferred from a
|
|
96
|
+
runtime transition. A Done surface earns trust only when it refuses to speak
|
|
97
|
+
more strongly than the files and cursor allow.
|
|
98
|
+
|
|
99
|
+
## Next Horizon
|
|
100
|
+
|
|
101
|
+
CV20 can continue refining Ariad's remaining release/push and debt-loop behavior
|
|
102
|
+
on top of explicit authority contracts. Journey consumers can adopt the versioned
|
|
103
|
+
mutation service without coupling hierarchy administration to model behavior.
|
|
104
|
+
The next release boundary should remain driven by a completed story or
|
|
105
|
+
maintenance need rather than by this horizon alone.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.13 gives external shells one explicit, generic boundary for appending
|
|
4
|
+
externally identified messages to an exact Mirror conversation. The contract
|
|
5
|
+
is atomic and idempotent, guards Journey ownership, and remains independent of
|
|
6
|
+
runtime-session routing and conversation lifecycle inference. The release also
|
|
7
|
+
repairs Ariad Coherence reentry after evidence correction and closes the lazy
|
|
8
|
+
SQLite WAL recovery defect that blocked this candidate. No model pin or prompt
|
|
9
|
+
changed, so the model-behavior eval gate is not activated.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# v0.31.13 — Explicit Append and Lifecycle Recovery
|
|
13
|
+
|
|
14
|
+
**Date:** 2026-08-29
|
|
15
|
+
|
|
16
|
+
## Highlights
|
|
17
|
+
|
|
18
|
+
- Adds the public `conversations append` JSON interface for exact-destination,
|
|
19
|
+
externally identified message appends.
|
|
20
|
+
- Commits each batch atomically, classifies canonical-equivalent retries as
|
|
21
|
+
idempotent, and rejects divergent or cross-conversation message-ID reuse.
|
|
22
|
+
- Requires exact Journey ownership without consulting runtime sessions,
|
|
23
|
+
generations, recent activity, or conversation-logger state.
|
|
24
|
+
- Allows explicit late append to ended conversations without reopening them or
|
|
25
|
+
rerunning extraction, summaries, titles, tags, embeddings, or other semantic
|
|
26
|
+
refresh.
|
|
27
|
+
- Lets Ariad rerun a pending Coherence checkpoint after evidence correction and
|
|
28
|
+
completes D-016's lazy SQLite WAL recovery fallback.
|
|
29
|
+
|
|
30
|
+
## Where We Started
|
|
31
|
+
|
|
32
|
+
External shells could not durably reconcile messages into one known Mirror
|
|
33
|
+
conversation through a generic public boundary. Reusing runtime-session or
|
|
34
|
+
conversation-logger behavior would have coupled explicit persistence to recency,
|
|
35
|
+
generation, lifecycle inference, and downstream-specific assumptions. The work
|
|
36
|
+
also exposed two independent runtime defects: a Coherence checkpoint could create
|
|
37
|
+
`navigator_coherence` without any legal reentry, and SQLite 3.51 could defer a
|
|
38
|
+
read-only WAL-sidecar failure until the first schema query, outside the existing
|
|
39
|
+
fallback guard.
|
|
40
|
+
|
|
41
|
+
## What Changed
|
|
42
|
+
|
|
43
|
+
`conversations append` accepts a strict versioned JSON request on stdin and
|
|
44
|
+
resolves only the complete caller-supplied conversation ID. It validates bounded
|
|
45
|
+
message IDs, roles, canonical timestamps, UTF-8 content and metadata limits,
|
|
46
|
+
batch size, and exact Journey equality before entering one storage-owned
|
|
47
|
+
`BEGIN IMMEDIATE` transaction. Caller message IDs are the idempotency authority:
|
|
48
|
+
canonical-equivalent retries return `existing`; divergent or cross-conversation
|
|
49
|
+
reuse rejects the whole batch. Receipts and failures remain bounded and never
|
|
50
|
+
echo message bodies or metadata.
|
|
51
|
+
|
|
52
|
+
The append boundary does not read or mutate runtime sessions and does not route
|
|
53
|
+
by generation, recency, or active logger state. Explicit append remains valid
|
|
54
|
+
after `ended_at` is populated, but it does not reopen the conversation or rerun
|
|
55
|
+
memory extraction, summary, title, tag, embedding, or other semantic state.
|
|
56
|
+
Message reads now order deterministically by `created_at, id`.
|
|
57
|
+
|
|
58
|
+
Ariad Coherence now permits reentry only for the exact pair
|
|
59
|
+
`pending_confirmation=navigator_coherence` and
|
|
60
|
+
`last_delivery_event=coherence`. Corrected evidence is re-evaluated normally;
|
|
61
|
+
unrelated or inconsistent pending confirmations remain blocked, and Done never
|
|
62
|
+
consumes the Coherence confirmation.
|
|
63
|
+
|
|
64
|
+
D-016 is Paid. `_connect_read_only()` performs one minimal schema read after
|
|
65
|
+
opening `mode=ro`; if and only if that read raises the exact expected
|
|
66
|
+
`unable to open database file` operational error, it closes the connection and
|
|
67
|
+
reopens the existing database with `mode=rw` so SQLite can recover WAL sidecars.
|
|
68
|
+
Missing databases are never created, unrelated SQLite errors propagate, and the
|
|
69
|
+
normal read-only path does not fall back.
|
|
70
|
+
|
|
71
|
+
## Conscious Exclusions
|
|
72
|
+
|
|
73
|
+
- The append interface does not generate caller message IDs, infer destinations,
|
|
74
|
+
route through runtime sessions, or reuse conversation-logger semantics.
|
|
75
|
+
- Late append does not trigger semantic re-extraction or refresh. Downstream
|
|
76
|
+
consumers remain responsible for any separate reconciliation policy.
|
|
77
|
+
- Ended conversations are not reopened and lifecycle timestamps are not changed.
|
|
78
|
+
- D-006 remains the pre-existing project-wide mypy baseline; this release adds no
|
|
79
|
+
typing regression and does not claim that debt is paid.
|
|
80
|
+
- No model pin or prompt changed. The model-behavior `eval --all` release gate is
|
|
81
|
+
therefore not activated.
|
|
82
|
+
- Release preparation does not authorize push, tagging, stable promotion, GitHub
|
|
83
|
+
Release publication, or production update.
|
|
84
|
+
|
|
85
|
+
## What We Learned
|
|
86
|
+
|
|
87
|
+
An explicit persistence boundary is safest when identity, destination, ordering,
|
|
88
|
+
and retry authority come from the caller while lifecycle inference stays out of
|
|
89
|
+
the transaction. Recovery flows need the same precision: a runtime must not only
|
|
90
|
+
represent a pending checkpoint or fallback condition, but also provide one
|
|
91
|
+
bounded path that can legally resolve it.
|
|
92
|
+
|
|
93
|
+
## Next Horizon
|
|
94
|
+
|
|
95
|
+
After the candidate commit and central verification are authorized, the release
|
|
96
|
+
can proceed through its separate tag, stable-promotion, GitHub publication, and
|
|
97
|
+
installed-runtime acceptance gates. External-shell consumers can then adopt the
|
|
98
|
+
append contract without coupling their reconciliation logic to Mirror runtime
|
|
99
|
+
sessions.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.14 adds the public Ariad Workbench `change-request resume` verb so a
|
|
4
|
+
non-terminal Change Request that lost the active pointer can continue without
|
|
5
|
+
direct SQLite edits or artificial status regression. The release closes CR011
|
|
6
|
+
from RS003 after a Nautilus Harness production reproduction showed an
|
|
7
|
+
implemented CR stranded behind a completed sibling. Resume preserves the CR
|
|
8
|
+
record and updates only the Refinement cursor, allowing implemented CRs to
|
|
9
|
+
validate and validated CRs to receive a Done note. No schema migration, model
|
|
10
|
+
pin, or prompt changed.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v0.31.14 — Change Request Resume
|
|
14
|
+
|
|
15
|
+
**Date:** 2026-08-30
|
|
16
|
+
|
|
17
|
+
## Highlights
|
|
18
|
+
|
|
19
|
+
- Adds `uv run python -m memory build change-request resume --journey <slug> --change-request-id <cr-id>`.
|
|
20
|
+
- Restores the active pointer for non-terminal advanced Change Requests without changing their status, evidence, timestamps, RS link, or provenance.
|
|
21
|
+
- Lets resumed `implemented` CRs proceed to `validate` and resumed `validated` CRs proceed to `done` through the existing public lifecycle.
|
|
22
|
+
- Refuses `captured` CRs with guidance to use `select`, and refuses terminal CRs (`done`, `parked`, `rejected`, `promoted`).
|
|
23
|
+
- Documents the command in the runtime reference and Pi Builder skill guidance, with deterministic `REFINEMENT_FLOW_EVENT` rendering for `CR RESUMED`.
|
|
24
|
+
|
|
25
|
+
## Where We Started
|
|
26
|
+
|
|
27
|
+
A real Nautilus Harness production Workbench reached a stranded state. RS012 had
|
|
28
|
+
CR028 in `implemented`. A sibling CR030 was selected, implemented, validated, and
|
|
29
|
+
marked `done`, which correctly cleared the active Change Request pointer. When
|
|
30
|
+
the Navigator later validated CR028, `change-request validate` refused with
|
|
31
|
+
`Error: active Change Request is required`; trying to reselect it refused with
|
|
32
|
+
`Error: cannot select from status 'implemented'; expected captured`.
|
|
33
|
+
|
|
34
|
+
The Workbench had no public operation to make a non-terminal advanced CR active
|
|
35
|
+
again. The only alternatives were wrong: direct SQLite editing, which violates
|
|
36
|
+
the public authority boundary, or artificial status regression, which corrupts
|
|
37
|
+
the lifecycle record.
|
|
38
|
+
|
|
39
|
+
## What Changed
|
|
40
|
+
|
|
41
|
+
`change-request resume` is a narrow recovery primitive. It resolves the requested
|
|
42
|
+
CR through the same Journey and active Refinement Story authority guards as the
|
|
43
|
+
ordinary CR lifecycle, then updates only the Refinement cursor. The Change
|
|
44
|
+
Request row is not rewritten: status, outcome notes, evidence, timestamps,
|
|
45
|
+
position, source, provenance, and RS linkage remain intact.
|
|
46
|
+
|
|
47
|
+
The verb accepts advanced non-terminal states, including `active`, `planned`,
|
|
48
|
+
`implemented`, and `validated`. That preserves the one-active-CR invariant while
|
|
49
|
+
letting a stranded item return to the correct lifecycle point. A resumed
|
|
50
|
+
`implemented` CR can run `change-request validate`; a resumed `validated` CR can
|
|
51
|
+
run `change-request done`.
|
|
52
|
+
|
|
53
|
+
The release intentionally keeps `select` strict. `select` starts a captured CR
|
|
54
|
+
and changes its status to `active`; overloading it for recovery would hide the
|
|
55
|
+
difference between beginning work and restoring lost focus. `resume` names the
|
|
56
|
+
recovery act explicitly.
|
|
57
|
+
|
|
58
|
+
Ariad surfaces now render `change_request_resumed` as a `REFINEMENT_FLOW_EVENT`
|
|
59
|
+
with stage-aware ribbon placement and next-move guidance. Tests cover the
|
|
60
|
+
required two-CR reproduction: CR A reaches `implemented`, CR B reaches `done` and
|
|
61
|
+
clears the pointer, CR A resumes without row mutation, validates, and completes.
|
|
62
|
+
Additional tests prove `validated` resumes to Done and terminal CRs cannot
|
|
63
|
+
resume.
|
|
64
|
+
|
|
65
|
+
## Conscious Exclusions
|
|
66
|
+
|
|
67
|
+
- No schema migration was added. This is a cursor recovery verb, not a redesign of
|
|
68
|
+
per-CR phase storage.
|
|
69
|
+
- The release does not make multiple Change Requests active concurrently.
|
|
70
|
+
- Broader revisable lifecycle work in RS003 remains outside this patch: CR010,
|
|
71
|
+
CR012, and CR013 are still captured.
|
|
72
|
+
- D-014 remains Carried as a pre-existing runtime-diagnose web-test polling
|
|
73
|
+
budget issue. It reproduced on the parent commit as well as this release
|
|
74
|
+
candidate and is not caused by CR011.
|
|
75
|
+
- A one-off process-death lock failure from the complete-suite run was not
|
|
76
|
+
reproduced in isolation on either HEAD or the parent commit; no new debt is
|
|
77
|
+
recorded without further evidence.
|
|
78
|
+
- No model pin or prompt changed. The model-behavior `eval --all` release gate is
|
|
79
|
+
therefore not activated.
|
|
80
|
+
- Release preparation does not authorize push, PR, merge, tagging, stable
|
|
81
|
+
promotion, GitHub Release publication, or production runtime update.
|
|
82
|
+
|
|
83
|
+
## What We Learned
|
|
84
|
+
|
|
85
|
+
A lifecycle that stores active work in one cursor slot needs an explicit recovery
|
|
86
|
+
vocabulary. Terminal exits already had public verbs because real refinement work
|
|
87
|
+
moves unevenly; resumption deserves the same public boundary. The safe version is
|
|
88
|
+
small and explicit: preserve the record, restore the cursor, and let the ordinary
|
|
89
|
+
status-driven lifecycle continue.
|
|
90
|
+
|
|
91
|
+
## Next Horizon
|
|
92
|
+
|
|
93
|
+
After local release preparation is accepted, publish this as a dedicated patch
|
|
94
|
+
release because it unblocks a production consumer without coupling to unrelated
|
|
95
|
+
Workbench work. The exact publication sequence remains separate: push to `main`,
|
|
96
|
+
verify GitHub Actions, tag `v0.31.14`, promote `stable`, publish the GitHub
|
|
97
|
+
Release, and only then update production runtimes through the safe updater.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.31.2 is a maintenance patch that stops the Ariad Builder runtime from
|
|
4
|
+
crashing on long document content. `build pull-item` on a Delivery Story
|
|
5
|
+
raised OSError [Errno 63] (File name too long) whenever a candidate story
|
|
6
|
+
title was paragraph-length, because the kebab slug used for the roadmap
|
|
7
|
+
folder had no length cap. The fix consolidates four drifted `_slugify`
|
|
8
|
+
copies into one accent-stripping, length-capped `memory.utils.kebab_slug`,
|
|
9
|
+
which also closes the identical latent crash in the Explorer handoff writer
|
|
10
|
+
and makes the roadmap package writer and locator derive the same path by
|
|
11
|
+
construction. A five-persona review of the plan corrected the original
|
|
12
|
+
handoff's "single choke point" assumption and left code-cell sanitization
|
|
13
|
+
and the transcript-export slug sibling as recorded debt.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# v0.31.2 — Filesystem-Safe Slug Consolidation
|
|
17
|
+
|
|
18
|
+
**Date:** 2026-07-22
|
|
19
|
+
|
|
20
|
+
## Highlights
|
|
21
|
+
|
|
22
|
+
- Fixes an `OSError [Errno 63] (File name too long)` crash in `build
|
|
23
|
+
pull-item` when a Delivery Story's candidate-story title is
|
|
24
|
+
paragraph-length: the roadmap folder slug now hard-caps at 80 characters,
|
|
25
|
+
well under the 255-byte filesystem `NAME_MAX`.
|
|
26
|
+
- Consolidates four drifted kebab `_slugify` copies (`builder/lifecycle`,
|
|
27
|
+
`cli/build`, `services/explorer_handoff`, `services/journey`) into a single
|
|
28
|
+
`memory.utils.kebab_slug` — accent-stripping, kebab-case, length-capped.
|
|
29
|
+
- Closes the *same* latent `mkdir` crash in the Explorer→Builder handoff
|
|
30
|
+
writer, which used `exist_ok=False` and would have failed harder on a long
|
|
31
|
+
handoff title.
|
|
32
|
+
- Makes the roadmap package *writer* (`lifecycle`) and *locator* (`build`)
|
|
33
|
+
derive the same folder path by construction, removing a silent divergence
|
|
34
|
+
that capping only one copy would have introduced.
|
|
35
|
+
- Empty-slug guard: an all-punctuation title now yields the bare code folder
|
|
36
|
+
(`ds-35-ts-1`) instead of a trailing-hyphen name (`ds-35-ts-1-`).
|
|
37
|
+
- Records two conscious exclusions as debt: D-012 (the candidate-table *code*
|
|
38
|
+
cell is still not sanitized for path separators) and D-013 (the
|
|
39
|
+
`transcript_export` capped-kebab sibling stays separate).
|
|
40
|
+
|
|
41
|
+
## Where We Started
|
|
42
|
+
|
|
43
|
+
A separate Builder session pulling Delivery Story DS-37 hit a hard runtime
|
|
44
|
+
crash. `build pull-item` ran `pull → prepare → expand`, and `expand` died
|
|
45
|
+
inside `mkdir` with `OSError [Errno 63] (File name too long)`. The Delivery
|
|
46
|
+
Story's candidate-stories table used full paragraphs as the "Story" cell, and
|
|
47
|
+
the kebab slug that becomes the child package's directory name had no length
|
|
48
|
+
cap — a ~650-character component against a 255-byte filesystem limit. The
|
|
49
|
+
runtime must never crash on document content, so this was a robustness bug,
|
|
50
|
+
not an authoring problem to be worked around by shortening a title.
|
|
51
|
+
|
|
52
|
+
## What Changed
|
|
53
|
+
|
|
54
|
+
The reported fix was a five-line length cap in one function. The review found
|
|
55
|
+
that would have been wrong in a subtle way. There were four separate
|
|
56
|
+
kebab-style `_slugify` implementations, and two of them —
|
|
57
|
+
`builder/lifecycle.py` (which *writes* the roadmap package) and
|
|
58
|
+
`cli/build.py` (which *locates* it) — derive the same folder path. Capping
|
|
59
|
+
only the crashing one would have made the writer and the locator disagree.
|
|
60
|
+
Meanwhile `services/journey.py` already carried the correct capped,
|
|
61
|
+
accent-stripping version, and `services/explorer_handoff.py` held a third
|
|
62
|
+
uncapped copy feeding a stricter `mkdir(exist_ok=False)`.
|
|
63
|
+
|
|
64
|
+
So the fix became a consolidation. The correct algorithm was promoted to a
|
|
65
|
+
single `memory.utils.kebab_slug` — strip accents, collapse to kebab-case,
|
|
66
|
+
hard-cap at 80 characters — and all four callers now route through it. That
|
|
67
|
+
one change fixes the DS-37 crash, closes the identical latent crash in the
|
|
68
|
+
Explorer handoff writer, keeps the writer and locator consistent by
|
|
69
|
+
construction, and adds accent-stripping to the two callers that lacked it. An
|
|
70
|
+
all-punctuation title now produces the bare code folder rather than a
|
|
71
|
+
trailing-hyphen name, matching the sibling path-derivation code that already
|
|
72
|
+
handled the empty case.
|
|
73
|
+
|
|
74
|
+
The plan was reviewed through five professional lenses — quality-assurance,
|
|
75
|
+
database-architect, security-engineer, devops-engineer, and ai-engineer —
|
|
76
|
+
before implementation. That review corrected the original handoff's premise
|
|
77
|
+
(the "single choke point" was actually four choke points), confirmed the
|
|
78
|
+
back-compat guarantee, and surfaced the two gaps now carried as debt.
|
|
79
|
+
Back-compat was verified against the live repository: the longest existing
|
|
80
|
+
roadmap slug is ~63 characters, under the 80 cap, and no existing folder ends
|
|
81
|
+
in a hyphen, so no package path on disk changes. The change shipped test-first
|
|
82
|
+
with unit coverage for `kebab_slug`, the empty-slug guard, both
|
|
83
|
+
paragraph-title crash regressions, and a single-source consolidation guard.
|
|
84
|
+
|
|
85
|
+
## Conscious Exclusions
|
|
86
|
+
|
|
87
|
+
- **D-012 — code-cell sanitization.** `kebab_slug` hardened the folder
|
|
88
|
+
*title*, but the work-item *code* segment is still only lower-cased and
|
|
89
|
+
dot-replaced, so a crafted code cell with path separators remains a latent
|
|
90
|
+
traversal vector. Low severity today — candidate tables are Navigator-
|
|
91
|
+
authored and local — so it is recorded, not fixed here.
|
|
92
|
+
- **D-013 — the fifth slugger.** `cli/transcript_export.slugify` is a
|
|
93
|
+
capped-kebab sibling with different semantics (public name, cap 50,
|
|
94
|
+
word-boundary truncation, `"conversation"` fallback) and stays separate;
|
|
95
|
+
`docs_lint.slugify` is a deliberately different GitHub-anchor slugger and is
|
|
96
|
+
not debt.
|
|
97
|
+
- **No behavior change to journey slugs.** `kebab_slug` reproduces
|
|
98
|
+
`journey.py`'s prior output exactly, so journey creation and validation are
|
|
99
|
+
untouched.
|
|
100
|
+
|
|
101
|
+
## What We Learned
|
|
102
|
+
|
|
103
|
+
A handoff that framed the fix as a five-line, single-site cap was accurate
|
|
104
|
+
about the crash and wrong about the blast radius. Reading the actual call
|
|
105
|
+
graph before writing the cap turned a local patch into a consolidation that
|
|
106
|
+
closed a second, unreported crash site and prevented a silent writer/locator
|
|
107
|
+
divergence. The cheap correctness came from treating the handoff's "root
|
|
108
|
+
cause" as a hypothesis to verify, not a conclusion to implement.
|
|
109
|
+
|
|
110
|
+
## Next Horizon
|
|
111
|
+
|
|
112
|
+
The two recorded debt items — code-segment sanitization (D-012) and the
|
|
113
|
+
transcript-export slug sibling (D-013) — are the visible follow-ups the next
|
|
114
|
+
time a change touches roadmap folder derivation or transcript export. The
|
|
115
|
+
consolidation leaves a single, obvious place to make those improvements.
|