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.
Files changed (467) hide show
  1. package/.claude/hooks/log-session-end.sh +85 -0
  2. package/.claude/hooks/log-user-prompt.sh +85 -0
  3. package/.claude/hooks/mirror-inject.sh +85 -0
  4. package/.claude/hooks/session-start.sh +85 -0
  5. package/.gemini/hooks/log-assistant.sh +85 -0
  6. package/.gemini/hooks/log-user.sh +85 -0
  7. package/.gemini/hooks/session-end.sh +85 -0
  8. package/.gemini/hooks/session-start.sh +85 -0
  9. package/.pi/extensions/mirror-logger.ts +561 -0
  10. package/.pi/skills/mm-backup/SKILL.md +21 -0
  11. package/.pi/skills/mm-build/SKILL.md +1206 -0
  12. package/.pi/skills/mm-consolidate/SKILL.md +112 -0
  13. package/.pi/skills/mm-consult/SKILL.md +70 -0
  14. package/.pi/skills/mm-conversations/SKILL.md +16 -0
  15. package/.pi/skills/mm-discard/SKILL.md +39 -0
  16. package/.pi/skills/mm-explore/SKILL.md +255 -0
  17. package/.pi/skills/mm-help/SKILL.md +74 -0
  18. package/.pi/skills/mm-identity/SKILL.md +96 -0
  19. package/.pi/skills/mm-journal/SKILL.md +16 -0
  20. package/.pi/skills/mm-journey/SKILL.md +23 -0
  21. package/.pi/skills/mm-journeys/SKILL.md +15 -0
  22. package/.pi/skills/mm-memories/SKILL.md +17 -0
  23. package/.pi/skills/mm-mirror/SKILL.md +98 -0
  24. package/.pi/skills/mm-mute/SKILL.md +18 -0
  25. package/.pi/skills/mm-new/SKILL.md +18 -0
  26. package/.pi/skills/mm-recall/SKILL.md +17 -0
  27. package/.pi/skills/mm-release-notes/SKILL.md +52 -0
  28. package/.pi/skills/mm-seed/SKILL.md +19 -0
  29. package/.pi/skills/mm-shadow/SKILL.md +117 -0
  30. package/.pi/skills/mm-soul/SKILL.md +502 -0
  31. package/.pi/skills/mm-tasks/SKILL.md +24 -0
  32. package/.pi/skills/mm-update/SKILL.md +32 -0
  33. package/.pi/skills/mm-week/SKILL.md +28 -0
  34. package/.pi/skills/mm-welcome/SKILL.md +24 -0
  35. package/AGENTS.md +188 -0
  36. package/README.md +126 -9
  37. package/bin/loader.js +67 -0
  38. package/bin/mirror-hook.js +7 -0
  39. package/bin/mirror.js +7 -0
  40. package/docs/releases/index.md +99 -0
  41. package/docs/releases/pending-cutoffs.md +510 -0
  42. package/docs/releases/v0.10.0.md +123 -0
  43. package/docs/releases/v0.10.1.md +66 -0
  44. package/docs/releases/v0.10.10.md +51 -0
  45. package/docs/releases/v0.10.11.md +39 -0
  46. package/docs/releases/v0.10.12.md +57 -0
  47. package/docs/releases/v0.10.13.md +35 -0
  48. package/docs/releases/v0.10.14.md +42 -0
  49. package/docs/releases/v0.10.15.md +53 -0
  50. package/docs/releases/v0.10.16.md +35 -0
  51. package/docs/releases/v0.10.17.md +43 -0
  52. package/docs/releases/v0.10.2.md +64 -0
  53. package/docs/releases/v0.10.3.md +78 -0
  54. package/docs/releases/v0.10.4.md +42 -0
  55. package/docs/releases/v0.10.5.md +57 -0
  56. package/docs/releases/v0.10.6.md +47 -0
  57. package/docs/releases/v0.10.7.md +53 -0
  58. package/docs/releases/v0.10.8.md +49 -0
  59. package/docs/releases/v0.10.9.md +37 -0
  60. package/docs/releases/v0.11.0.md +86 -0
  61. package/docs/releases/v0.12.0.md +67 -0
  62. package/docs/releases/v0.13.0.md +64 -0
  63. package/docs/releases/v0.14.0.md +68 -0
  64. package/docs/releases/v0.15.0.md +48 -0
  65. package/docs/releases/v0.16.0.md +50 -0
  66. package/docs/releases/v0.16.1.md +55 -0
  67. package/docs/releases/v0.16.2.md +36 -0
  68. package/docs/releases/v0.17.0.md +50 -0
  69. package/docs/releases/v0.17.1.md +58 -0
  70. package/docs/releases/v0.17.2.md +42 -0
  71. package/docs/releases/v0.17.3.md +58 -0
  72. package/docs/releases/v0.18.0.md +84 -0
  73. package/docs/releases/v0.18.1.md +51 -0
  74. package/docs/releases/v0.18.2.md +69 -0
  75. package/docs/releases/v0.19.0.md +85 -0
  76. package/docs/releases/v0.19.1.md +46 -0
  77. package/docs/releases/v0.20.0.md +85 -0
  78. package/docs/releases/v0.21.0.md +61 -0
  79. package/docs/releases/v0.21.1.md +47 -0
  80. package/docs/releases/v0.22.0.md +77 -0
  81. package/docs/releases/v0.22.1.md +42 -0
  82. package/docs/releases/v0.23.0.md +105 -0
  83. package/docs/releases/v0.24.0.md +125 -0
  84. package/docs/releases/v0.25.0.md +107 -0
  85. package/docs/releases/v0.26.0.md +139 -0
  86. package/docs/releases/v0.26.1.md +65 -0
  87. package/docs/releases/v0.26.2.md +43 -0
  88. package/docs/releases/v0.27.0.md +63 -0
  89. package/docs/releases/v0.28.0.md +59 -0
  90. package/docs/releases/v0.29.0.md +61 -0
  91. package/docs/releases/v0.29.1.md +59 -0
  92. package/docs/releases/v0.29.2.md +59 -0
  93. package/docs/releases/v0.29.3.md +93 -0
  94. package/docs/releases/v0.30.0.md +75 -0
  95. package/docs/releases/v0.30.1.md +93 -0
  96. package/docs/releases/v0.30.2.md +66 -0
  97. package/docs/releases/v0.31.0.md +122 -0
  98. package/docs/releases/v0.31.1.md +142 -0
  99. package/docs/releases/v0.31.10.md +118 -0
  100. package/docs/releases/v0.31.11.md +88 -0
  101. package/docs/releases/v0.31.12.md +105 -0
  102. package/docs/releases/v0.31.13.md +99 -0
  103. package/docs/releases/v0.31.14.md +97 -0
  104. package/docs/releases/v0.31.2.md +115 -0
  105. package/docs/releases/v0.31.3.md +142 -0
  106. package/docs/releases/v0.31.4.md +117 -0
  107. package/docs/releases/v0.31.5.md +155 -0
  108. package/docs/releases/v0.31.6.md +132 -0
  109. package/docs/releases/v0.31.7.md +132 -0
  110. package/docs/releases/v0.31.8.md +120 -0
  111. package/docs/releases/v0.31.9.md +120 -0
  112. package/docs/releases/v0.32.0.md +261 -0
  113. package/docs/releases/v0.32.1.md +59 -0
  114. package/docs/releases/v0.8.0.md +118 -0
  115. package/docs/releases/v0.9.0.md +98 -0
  116. package/docs/releases/v0.9.1.md +83 -0
  117. package/package.json +102 -6
  118. package/plugins/mirror-mind/.claude-plugin/plugin.json +13 -0
  119. package/plugins/mirror-mind/hooks/hooks.json +50 -0
  120. package/plugins/mirror-mind/hooks/log-session-end.sh +98 -0
  121. package/plugins/mirror-mind/hooks/log-user-prompt.sh +98 -0
  122. package/plugins/mirror-mind/hooks/mirror-inject.sh +98 -0
  123. package/plugins/mirror-mind/hooks/session-start.sh +98 -0
  124. package/plugins/mirror-mind/mcp/launch.sh +52 -0
  125. package/plugins/mirror-mind/skills/mm-backup/SKILL.md +27 -0
  126. package/plugins/mirror-mind/skills/mm-build/SKILL.md +1206 -0
  127. package/plugins/mirror-mind/skills/mm-consolidate/SKILL.md +112 -0
  128. package/plugins/mirror-mind/skills/mm-consult/SKILL.md +83 -0
  129. package/plugins/mirror-mind/skills/mm-conversations/SKILL.md +17 -0
  130. package/plugins/mirror-mind/skills/mm-discard/SKILL.md +40 -0
  131. package/plugins/mirror-mind/skills/mm-explore/SKILL.md +241 -0
  132. package/plugins/mirror-mind/skills/mm-help/SKILL.md +104 -0
  133. package/plugins/mirror-mind/skills/mm-identity/SKILL.md +96 -0
  134. package/plugins/mirror-mind/skills/mm-journal/SKILL.md +21 -0
  135. package/plugins/mirror-mind/skills/mm-journey/SKILL.md +37 -0
  136. package/plugins/mirror-mind/skills/mm-journeys/SKILL.md +15 -0
  137. package/plugins/mirror-mind/skills/mm-memories/SKILL.md +20 -0
  138. package/plugins/mirror-mind/skills/mm-mirror/SKILL.md +65 -0
  139. package/plugins/mirror-mind/skills/mm-mute/SKILL.md +18 -0
  140. package/plugins/mirror-mind/skills/mm-new/SKILL.md +18 -0
  141. package/plugins/mirror-mind/skills/mm-recall/SKILL.md +17 -0
  142. package/plugins/mirror-mind/skills/mm-release-notes/SKILL.md +31 -0
  143. package/plugins/mirror-mind/skills/mm-seed/SKILL.md +15 -0
  144. package/plugins/mirror-mind/skills/mm-shadow/SKILL.md +117 -0
  145. package/plugins/mirror-mind/skills/mm-soul/SKILL.md +488 -0
  146. package/plugins/mirror-mind/skills/mm-tasks/SKILL.md +36 -0
  147. package/plugins/mirror-mind/skills/mm-update/SKILL.md +30 -0
  148. package/plugins/mirror-mind/skills/mm-week/SKILL.md +46 -0
  149. package/plugins/mirror-mind/skills/mm-welcome/SKILL.md +22 -0
  150. package/scripts/codex-hooks/session-end.sh +85 -0
  151. package/scripts/codex-hooks/session-start.sh +85 -0
  152. package/scripts/codex-mirror.sh +48 -0
  153. package/templates/identity/README.md +119 -0
  154. package/templates/identity/ego/behavior.yaml +52 -0
  155. package/templates/identity/ego/constraints.yaml +15 -0
  156. package/templates/identity/ego/identity.yaml +43 -0
  157. package/templates/identity/journeys/personal-growth.yaml +39 -0
  158. package/templates/identity/organization/identity.yaml +24 -0
  159. package/templates/identity/organization/principles.yaml +17 -0
  160. package/templates/identity/personas/coach.yaml +94 -0
  161. package/templates/identity/personas/designer.yaml +93 -0
  162. package/templates/identity/personas/doctor.yaml +96 -0
  163. package/templates/identity/personas/engineer.yaml +77 -0
  164. package/templates/identity/personas/financial.yaml +97 -0
  165. package/templates/identity/personas/prompt-engineer.yaml +122 -0
  166. package/templates/identity/personas/researcher.yaml +88 -0
  167. package/templates/identity/personas/strategist.yaml +91 -0
  168. package/templates/identity/personas/teacher.yaml +95 -0
  169. package/templates/identity/personas/therapist.yaml +91 -0
  170. package/templates/identity/personas/thinker.yaml +74 -0
  171. package/templates/identity/personas/writer.yaml +76 -0
  172. package/templates/identity/self/config.yaml +16 -0
  173. package/templates/identity/self/soul.yaml +105 -0
  174. package/templates/identity/user/identity.yaml +30 -0
  175. package/ts/src/backup/staging.ts +62 -0
  176. package/ts/src/backup/zipBackup.ts +267 -0
  177. package/ts/src/backup/zipReader.ts +109 -0
  178. package/ts/src/backup/zipWriter.ts +148 -0
  179. package/ts/src/builder/activeCheckpoint.ts +134 -0
  180. package/ts/src/builder/aggregateStatus.ts +34 -0
  181. package/ts/src/builder/approve.ts +149 -0
  182. package/ts/src/builder/argv.ts +292 -0
  183. package/ts/src/builder/ariadMethod.ts +536 -0
  184. package/ts/src/builder/artifacts/artifactSurfaces.ts +106 -0
  185. package/ts/src/builder/artifacts/artifactWriter.ts +113 -0
  186. package/ts/src/builder/artifacts/closureArtifacts.ts +199 -0
  187. package/ts/src/builder/artifacts/deliveryStoryArtifacts.ts +316 -0
  188. package/ts/src/builder/artifacts/planArtifacts.ts +242 -0
  189. package/ts/src/builder/artifacts/scaffoldSections.ts +273 -0
  190. package/ts/src/builder/artifacts/scaffoldState.ts +227 -0
  191. package/ts/src/builder/artifacts/storyFiles.ts +61 -0
  192. package/ts/src/builder/artifacts/storyIndex.ts +166 -0
  193. package/ts/src/builder/cadence.ts +59 -0
  194. package/ts/src/builder/card.ts +192 -0
  195. package/ts/src/builder/checkpointRefused.ts +66 -0
  196. package/ts/src/builder/closure.ts +964 -0
  197. package/ts/src/builder/commands.ts +2053 -0
  198. package/ts/src/builder/cursorPosition.ts +176 -0
  199. package/ts/src/builder/cursorTransitions.ts +77 -0
  200. package/ts/src/builder/deliveryCursor.ts +577 -0
  201. package/ts/src/builder/deliveryStoryClosure.ts +521 -0
  202. package/ts/src/builder/deliveryStoryPlan.ts +536 -0
  203. package/ts/src/builder/deliveryStoryReady.ts +160 -0
  204. package/ts/src/builder/deliveryStoryRoadmapClosure.ts +151 -0
  205. package/ts/src/builder/expand.ts +336 -0
  206. package/ts/src/builder/flowUnit.ts +339 -0
  207. package/ts/src/builder/homeSurface.ts +122 -0
  208. package/ts/src/builder/implementationGuard.ts +125 -0
  209. package/ts/src/builder/index.ts +11 -0
  210. package/ts/src/builder/lifecycleRefusal.ts +92 -0
  211. package/ts/src/builder/lifecycleRibbon.ts +159 -0
  212. package/ts/src/builder/load.ts +313 -0
  213. package/ts/src/builder/methodAdoption.ts +113 -0
  214. package/ts/src/builder/methodDefinition.ts +429 -0
  215. package/ts/src/builder/methodInspection.ts +371 -0
  216. package/ts/src/builder/plan.ts +408 -0
  217. package/ts/src/builder/planPreauthorization.ts +265 -0
  218. package/ts/src/builder/prepare.ts +225 -0
  219. package/ts/src/builder/projectPaths.ts +64 -0
  220. package/ts/src/builder/pull.ts +356 -0
  221. package/ts/src/builder/pullCandidates.ts +463 -0
  222. package/ts/src/builder/pullCandidatesRender.ts +238 -0
  223. package/ts/src/builder/refinementField.ts +93 -0
  224. package/ts/src/builder/releaseIntent.ts +173 -0
  225. package/ts/src/builder/resumeState.ts +84 -0
  226. package/ts/src/builder/resumeSurface.ts +149 -0
  227. package/ts/src/builder/roadmapGrammar.ts +300 -0
  228. package/ts/src/builder/roadmapScan.ts +97 -0
  229. package/ts/src/builder/roadmapScope.ts +210 -0
  230. package/ts/src/builder/scopePhrases.ts +146 -0
  231. package/ts/src/builder/storyPaths.ts +196 -0
  232. package/ts/src/builder/storyPlanPreauthorization.ts +287 -0
  233. package/ts/src/builder/surfaceProtocol.ts +42 -0
  234. package/ts/src/builder/templateGeneration.ts +148 -0
  235. package/ts/src/builder/transition.ts +178 -0
  236. package/ts/src/consult/args.ts +99 -0
  237. package/ts/src/consult/core.ts +122 -0
  238. package/ts/src/consult/modelCatalog.ts +55 -0
  239. package/ts/src/consult/render.ts +47 -0
  240. package/ts/src/conversation/append.ts +414 -0
  241. package/ts/src/conversation/backfill.ts +387 -0
  242. package/ts/src/conversation/closeTail.ts +467 -0
  243. package/ts/src/conversation/extraction.ts +333 -0
  244. package/ts/src/conversation/extractionDriver.ts +130 -0
  245. package/ts/src/conversation/extractionRun.ts +70 -0
  246. package/ts/src/conversation/journeyInference.ts +165 -0
  247. package/ts/src/conversation/journeyRepair.ts +114 -0
  248. package/ts/src/conversation/lifecycleFaces.ts +197 -0
  249. package/ts/src/conversation/lifecycleWrites.ts +313 -0
  250. package/ts/src/conversation/listing.ts +77 -0
  251. package/ts/src/conversation/logger.ts +576 -0
  252. package/ts/src/conversation/loggerCli.ts +282 -0
  253. package/ts/src/conversation/loggerRuntime.ts +259 -0
  254. package/ts/src/conversation/metadataLifecycle.ts +443 -0
  255. package/ts/src/conversation/recall.ts +66 -0
  256. package/ts/src/conversation/sessionComposites.ts +258 -0
  257. package/ts/src/conversation/sessionImport.ts +90 -0
  258. package/ts/src/conversation/transcriptBackfill.ts +141 -0
  259. package/ts/src/cultivation/applyActions.ts +241 -0
  260. package/ts/src/cultivation/cluster.ts +86 -0
  261. package/ts/src/cultivation/consolidationStore.ts +281 -0
  262. package/ts/src/cultivation/promptContext.ts +62 -0
  263. package/ts/src/cultivation/propose.ts +305 -0
  264. package/ts/src/cultivation/scan.ts +155 -0
  265. package/ts/src/db/backupGate.ts +47 -0
  266. package/ts/src/db/bootstrap.ts +108 -0
  267. package/ts/src/db/bootstrapLock.ts +223 -0
  268. package/ts/src/db/copyGuard.ts +60 -0
  269. package/ts/src/db/database.ts +397 -0
  270. package/ts/src/db/decode.ts +66 -0
  271. package/ts/src/db/ftsIntegrity.ts +41 -0
  272. package/ts/src/db/migrateOnOpen.ts +214 -0
  273. package/ts/src/db/migrations.ts +576 -0
  274. package/ts/src/db/readyOnOpen.ts +35 -0
  275. package/ts/src/db/rowDecode.ts +42 -0
  276. package/ts/src/db/schema.ts +432 -0
  277. package/ts/src/db/schemaInventory.ts +225 -0
  278. package/ts/src/db/schemaInventorySnapshot.ts +2107 -0
  279. package/ts/src/db/schemaState.ts +91 -0
  280. package/ts/src/db/schemaTsDivergence.ts +114 -0
  281. package/ts/src/descriptor/descriptorRead.ts +49 -0
  282. package/ts/src/docs/docsLint.ts +265 -0
  283. package/ts/src/explorer/handoff.ts +522 -0
  284. package/ts/src/explorer/render.ts +335 -0
  285. package/ts/src/explorer/story.ts +769 -0
  286. package/ts/src/explorer/transition.ts +72 -0
  287. package/ts/src/extensions/bindings.ts +170 -0
  288. package/ts/src/extensions/catalog.ts +249 -0
  289. package/ts/src/extensions/catalogCommands.ts +513 -0
  290. package/ts/src/extensions/catalogWrites.ts +652 -0
  291. package/ts/src/extensions/contextRuntime.ts +325 -0
  292. package/ts/src/extensions/dispatch.ts +374 -0
  293. package/ts/src/extensions/errors.ts +24 -0
  294. package/ts/src/extensions/manifest.ts +356 -0
  295. package/ts/src/extensions/migrations.ts +350 -0
  296. package/ts/src/extraction/conversation.ts +304 -0
  297. package/ts/src/extraction/conversationMetadata.ts +206 -0
  298. package/ts/src/extraction/fencing.ts +106 -0
  299. package/ts/src/extraction/json.ts +17 -0
  300. package/ts/src/extraction/prompts.ts +470 -0
  301. package/ts/src/frontDoor/args.ts +30 -0
  302. package/ts/src/frontDoor/argvShape.ts +106 -0
  303. package/ts/src/frontDoor/buildLoadRuntime.ts +139 -0
  304. package/ts/src/frontDoor/buildRoute.ts +398 -0
  305. package/ts/src/frontDoor/cli.ts +1865 -0
  306. package/ts/src/frontDoor/cloneRoleGuard.ts +98 -0
  307. package/ts/src/frontDoor/consultRoute.ts +50 -0
  308. package/ts/src/frontDoor/contentTailRoute.ts +239 -0
  309. package/ts/src/frontDoor/conversationLoggerRoute.ts +73 -0
  310. package/ts/src/frontDoor/cultivationRoute.ts +210 -0
  311. package/ts/src/frontDoor/dbPath.ts +131 -0
  312. package/ts/src/frontDoor/dbSafetyToolsRoute.ts +240 -0
  313. package/ts/src/frontDoor/exploreRoute.ts +572 -0
  314. package/ts/src/frontDoor/extensionCatalogRoute.ts +252 -0
  315. package/ts/src/frontDoor/frontDoorLog.ts +57 -0
  316. package/ts/src/frontDoor/identityWrite.ts +36 -0
  317. package/ts/src/frontDoor/journeyWriteRoute.ts +26 -0
  318. package/ts/src/frontDoor/lifecycleWriteRoute.ts +110 -0
  319. package/ts/src/frontDoor/liveBackup.ts +100 -0
  320. package/ts/src/frontDoor/mirrorModeRoute.ts +163 -0
  321. package/ts/src/frontDoor/namedRefusal.ts +35 -0
  322. package/ts/src/frontDoor/nodeSupport.ts +24 -0
  323. package/ts/src/frontDoor/render/consolidate.ts +199 -0
  324. package/ts/src/frontDoor/render/conversations.ts +33 -0
  325. package/ts/src/frontDoor/render/cultivationShared.ts +21 -0
  326. package/ts/src/frontDoor/render/descriptor.ts +20 -0
  327. package/ts/src/frontDoor/render/detectPersona.ts +50 -0
  328. package/ts/src/frontDoor/render/icons.ts +13 -0
  329. package/ts/src/frontDoor/render/identity.ts +59 -0
  330. package/ts/src/frontDoor/render/identityRows.ts +17 -0
  331. package/ts/src/frontDoor/render/inspectPersona.ts +53 -0
  332. package/ts/src/frontDoor/render/journeyStatus.ts +78 -0
  333. package/ts/src/frontDoor/render/journeys.ts +79 -0
  334. package/ts/src/frontDoor/render/list.ts +41 -0
  335. package/ts/src/frontDoor/render/memories.ts +67 -0
  336. package/ts/src/frontDoor/render/recall.ts +49 -0
  337. package/ts/src/frontDoor/render/shadow.ts +155 -0
  338. package/ts/src/frontDoor/render/tasks.ts +99 -0
  339. package/ts/src/frontDoor/render/tasksImportSync.ts +63 -0
  340. package/ts/src/frontDoor/render/week.ts +113 -0
  341. package/ts/src/frontDoor/routing.ts +999 -0
  342. package/ts/src/frontDoor/runtimeRoute.ts +623 -0
  343. package/ts/src/frontDoor/searchRoute.ts +166 -0
  344. package/ts/src/frontDoor/seedPaths.ts +98 -0
  345. package/ts/src/frontDoor/soulRoute.ts +433 -0
  346. package/ts/src/frontDoor/tasksImportSyncRoute.ts +110 -0
  347. package/ts/src/frontDoor/tasksWriteRoute.ts +101 -0
  348. package/ts/src/frontDoor/usage.ts +176 -0
  349. package/ts/src/guards/claudePlugin.ts +252 -0
  350. package/ts/src/guards/packContents.ts +306 -0
  351. package/ts/src/guards/piSourcedSkills.ts +70 -0
  352. package/ts/src/guards/retiredRouteShadows.ts +57 -0
  353. package/ts/src/guards/retiredSurfaces.ts +564 -0
  354. package/ts/src/hooks/claude.ts +176 -0
  355. package/ts/src/hooks/codex.ts +45 -0
  356. package/ts/src/hooks/gemini.ts +126 -0
  357. package/ts/src/hooks/main.ts +109 -0
  358. package/ts/src/hooks/mirrorState.ts +71 -0
  359. package/ts/src/hooks/payload.ts +68 -0
  360. package/ts/src/hooks/runtime.ts +159 -0
  361. package/ts/src/identity/applyConsolidationIdentityUpdate.ts +67 -0
  362. package/ts/src/identity/descriptorGenerate.ts +162 -0
  363. package/ts/src/identity/identityEdit.ts +143 -0
  364. package/ts/src/identity/identityKey.ts +77 -0
  365. package/ts/src/identity/identityRead.ts +69 -0
  366. package/ts/src/identity/identityStore.ts +80 -0
  367. package/ts/src/identity/journeyListing.ts +53 -0
  368. package/ts/src/identity/personaInspect.ts +44 -0
  369. package/ts/src/identity/personaListing.ts +37 -0
  370. package/ts/src/identity/setIdentity.ts +64 -0
  371. package/ts/src/index.ts +231 -0
  372. package/ts/src/init/init.ts +111 -0
  373. package/ts/src/journey/journeyOptions.ts +131 -0
  374. package/ts/src/journey/journeyRemoval.ts +158 -0
  375. package/ts/src/journey/journeyStatus.ts +149 -0
  376. package/ts/src/journey/journeySyncFile.ts +87 -0
  377. package/ts/src/journey/journeyWrite.ts +203 -0
  378. package/ts/src/journey/parentJourney.ts +41 -0
  379. package/ts/src/journey/validateParentJourney.ts +55 -0
  380. package/ts/src/mcp/boundary.ts +151 -0
  381. package/ts/src/mcp/guards.ts +244 -0
  382. package/ts/src/mcp/main.ts +121 -0
  383. package/ts/src/mcp/payload.ts +141 -0
  384. package/ts/src/mcp/protocol.ts +141 -0
  385. package/ts/src/mcp/readModels.ts +241 -0
  386. package/ts/src/mcp/registry.ts +201 -0
  387. package/ts/src/mcp/serve.ts +120 -0
  388. package/ts/src/mcp/tools/deterministic.ts +137 -0
  389. package/ts/src/mcp/tools/providerCrossing.ts +187 -0
  390. package/ts/src/mcp/wire.ts +8 -0
  391. package/ts/src/memory/journal.ts +180 -0
  392. package/ts/src/memory/listing.ts +107 -0
  393. package/ts/src/memory/memoryWrite.ts +88 -0
  394. package/ts/src/memory/reinforcement.ts +35 -0
  395. package/ts/src/mirror/context.ts +161 -0
  396. package/ts/src/mirror/defaultResolution.ts +199 -0
  397. package/ts/src/mirror/orchestration.ts +364 -0
  398. package/ts/src/mirror/reception.ts +194 -0
  399. package/ts/src/mirror/render.ts +75 -0
  400. package/ts/src/mirror/runtimeSession.ts +205 -0
  401. package/ts/src/mode/operatingMode.ts +148 -0
  402. package/ts/src/observability/callOutcome.ts +115 -0
  403. package/ts/src/observability/inspectLedger.ts +329 -0
  404. package/ts/src/observability/ledgerHooks.ts +126 -0
  405. package/ts/src/observability/llmCalls.ts +154 -0
  406. package/ts/src/persona/detectPersona.ts +81 -0
  407. package/ts/src/planning/promptAssembly.ts +111 -0
  408. package/ts/src/planning/weekPending.ts +81 -0
  409. package/ts/src/planning/weekPlan.ts +183 -0
  410. package/ts/src/planning/weekSave.ts +117 -0
  411. package/ts/src/providers/config.ts +189 -0
  412. package/ts/src/providers/cost.ts +64 -0
  413. package/ts/src/providers/credits.ts +204 -0
  414. package/ts/src/providers/embedding.ts +321 -0
  415. package/ts/src/providers/familyProviders.ts +147 -0
  416. package/ts/src/providers/llm.ts +334 -0
  417. package/ts/src/providers/openrouter.ts +244 -0
  418. package/ts/src/providers/redaction.ts +110 -0
  419. package/ts/src/providers/replay.ts +15 -0
  420. package/ts/src/providers/transport.ts +410 -0
  421. package/ts/src/repair/encodingRepair.ts +253 -0
  422. package/ts/src/runtime/backup.ts +151 -0
  423. package/ts/src/runtime/channel.ts +146 -0
  424. package/ts/src/runtime/config.ts +168 -0
  425. package/ts/src/runtime/diagnose.ts +686 -0
  426. package/ts/src/runtime/git.ts +510 -0
  427. package/ts/src/runtime/installKind.ts +220 -0
  428. package/ts/src/runtime/migrate.ts +154 -0
  429. package/ts/src/runtime/packageIdentity.ts +102 -0
  430. package/ts/src/runtime/releaseNotes.ts +244 -0
  431. package/ts/src/runtime/status.ts +557 -0
  432. package/ts/src/runtime/strategies/clone.ts +200 -0
  433. package/ts/src/runtime/strategies/package.ts +328 -0
  434. package/ts/src/runtime/treeRoot.ts +30 -0
  435. package/ts/src/runtime/update.ts +445 -0
  436. package/ts/src/runtime/updateGate.ts +40 -0
  437. package/ts/src/runtime/updatePipeline.ts +159 -0
  438. package/ts/src/runtime/version.ts +36 -0
  439. package/ts/src/runtime/wiring.ts +130 -0
  440. package/ts/src/search/memorySearch.ts +338 -0
  441. package/ts/src/search/ranker.ts +154 -0
  442. package/ts/src/seed/seed.ts +256 -0
  443. package/ts/src/seed/seedYaml.ts +133 -0
  444. package/ts/src/soul/apply.ts +218 -0
  445. package/ts/src/soul/harvest.ts +267 -0
  446. package/ts/src/soul/prompts/soul_beauty_voice.md +103 -0
  447. package/ts/src/soul/prompts/soul_self_voice.md +219 -0
  448. package/ts/src/soul/prompts/soul_wisdom_voice.md +121 -0
  449. package/ts/src/soul/prompts.ts +85 -0
  450. package/ts/src/soul/render.ts +358 -0
  451. package/ts/src/soul/state.ts +212 -0
  452. package/ts/src/soul/transition.ts +37 -0
  453. package/ts/src/tasks/journeyPathParse.ts +113 -0
  454. package/ts/src/tasks/taskImportSync.ts +142 -0
  455. package/ts/src/tasks/taskStore.ts +312 -0
  456. package/ts/src/tasks/weekView.ts +120 -0
  457. package/ts/src/util/clipCodePoints.ts +26 -0
  458. package/ts/src/util/paths.ts +63 -0
  459. package/ts/src/util/program.ts +9 -0
  460. package/ts/src/util/pyGenerators.ts +144 -0
  461. package/ts/src/util/pythonText.ts +317 -0
  462. package/ts/src/util/semver.ts +45 -0
  463. package/ts/src/util/shellWord.ts +25 -0
  464. package/ts/src/util/slug.ts +64 -0
  465. package/ts/src/welcome/card.ts +339 -0
  466. package/ts/src/welcome/statusLine.ts +101 -0
  467. 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.