akm-cli 0.9.0-rc.8 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/CHANGELOG.md +1063 -44
  2. package/README.md +51 -25
  3. package/SECURITY.md +14 -1
  4. package/STABILITY.md +497 -0
  5. package/dist/akm +148 -35
  6. package/dist/{akm-migrate-storage → akm-migrate} +6 -9
  7. package/dist/assets/hints/cli-hints-full.md +223 -95
  8. package/dist/assets/hints/cli-hints-short.md +85 -22
  9. package/dist/assets/improve-strategies/default.json +1 -1
  10. package/dist/assets/improve-strategies/reflect-distill.json +1 -1
  11. package/dist/assets/prompts/memory-infer-user.md +2 -3
  12. package/dist/assets/stash-skeleton/README.md +6 -5
  13. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
  14. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
  15. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
  16. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
  17. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
  18. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
  19. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
  20. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
  21. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
  22. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
  23. package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
  24. package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
  25. package/dist/assets/tasks/core/extract.yml +1 -1
  26. package/dist/assets/tasks/core/version-check.yml +1 -1
  27. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  28. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  29. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  30. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  31. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  32. package/dist/assets/templates/html/health.html +1 -3
  33. package/dist/assets/workflows/workflow-template.md +32 -15
  34. package/dist/cli/invocation.js +40 -15
  35. package/dist/cli/parse-args.js +0 -22
  36. package/dist/cli/retired-commands.js +121 -0
  37. package/dist/cli/shared.js +154 -22
  38. package/dist/cli/unknown-flags.js +236 -0
  39. package/dist/cli-node.mjs +2 -1
  40. package/dist/cli.js +696 -258
  41. package/dist/commands/agent/agent-dispatch.js +14 -3
  42. package/dist/commands/agent/contribute-cli.js +73 -88
  43. package/dist/commands/completions.js +79 -22
  44. package/dist/commands/config-cli.js +17 -150
  45. package/dist/commands/env/env-cli.js +59 -143
  46. package/dist/commands/env/env.js +12 -163
  47. package/dist/commands/env/marker-path.js +6 -0
  48. package/dist/commands/env/secret-cli.js +36 -66
  49. package/dist/commands/env/secret.js +24 -57
  50. package/dist/commands/feedback-cli.js +141 -87
  51. package/dist/commands/health/accept-rate.js +58 -0
  52. package/dist/commands/health/advisories.js +3 -4
  53. package/dist/commands/health/checks.js +85 -23
  54. package/dist/commands/health/html-report.js +7 -10
  55. package/dist/commands/health/improve-metrics.js +25 -83
  56. package/dist/commands/health/md-report.js +5 -9
  57. package/dist/commands/health/metrics.js +62 -20
  58. package/dist/commands/health/renderers.js +47 -0
  59. package/dist/commands/health/report-view-model.js +4 -5
  60. package/dist/commands/health/stash-exposure.js +1 -1
  61. package/dist/commands/health/surfaces.js +3 -48
  62. package/dist/commands/health/task-runs.js +3 -67
  63. package/dist/commands/health/types-improve.js +7 -0
  64. package/dist/commands/health.js +99 -28
  65. package/dist/commands/improve/anti-collapse.js +2 -2
  66. package/dist/commands/improve/autonomy-gate.js +68 -0
  67. package/dist/commands/improve/collapse-detector.js +41 -40
  68. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  69. package/dist/commands/improve/consolidate/merge.js +4 -0
  70. package/dist/commands/improve/consolidate.js +140 -1000
  71. package/dist/commands/improve/distill/promote-memory.js +12 -12
  72. package/dist/commands/improve/distill/quality-gate.js +6 -6
  73. package/dist/commands/improve/distill.js +58 -69
  74. package/dist/commands/improve/eligibility.js +105 -57
  75. package/dist/commands/improve/extract-cli.js +14 -133
  76. package/dist/commands/improve/improve-cli.js +98 -114
  77. package/dist/commands/improve/improve-result-file.js +1 -28
  78. package/dist/commands/improve/improve-strategies.js +8 -5
  79. package/dist/commands/improve/improve.js +128 -91
  80. package/dist/commands/improve/loop-stages.js +182 -20
  81. package/dist/commands/improve/memory/derived-ref.js +45 -43
  82. package/dist/commands/improve/memory/memory-belief.js +1 -1
  83. package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
  84. package/dist/commands/improve/memory/memory-improve.js +6 -5
  85. package/dist/commands/improve/outcome-loop.js +22 -65
  86. package/dist/commands/improve/preparation.js +114 -123
  87. package/dist/commands/improve/proactive-maintenance.js +2 -5
  88. package/dist/commands/improve/reflect.js +56 -160
  89. package/dist/commands/improve/salience.js +11 -122
  90. package/dist/commands/improve/source-identity.js +10 -38
  91. package/dist/commands/lint/base-linter.js +20 -124
  92. package/dist/commands/lint/env-key-rules.js +31 -47
  93. package/dist/commands/lint/index.js +249 -43
  94. package/dist/commands/{events.js → log.js} +33 -38
  95. package/dist/commands/migrate-cli.js +92 -12
  96. package/dist/commands/migration-tool.js +46 -0
  97. package/dist/commands/observability-cli.js +70 -209
  98. package/dist/commands/proposal/drain.js +101 -29
  99. package/dist/commands/proposal/proposal-cli.js +76 -48
  100. package/dist/commands/proposal/proposal.js +54 -18
  101. package/dist/commands/proposal/propose-cli.js +88 -0
  102. package/dist/commands/proposal/propose.js +23 -15
  103. package/dist/commands/proposal/repository.js +701 -278
  104. package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
  105. package/dist/commands/proposal/validators/proposal-validators.js +55 -7
  106. package/dist/commands/proposal/validators/proposals.js +4 -7
  107. package/dist/commands/read/curate.js +34 -53
  108. package/dist/commands/read/knowledge.js +150 -95
  109. package/dist/commands/read/registry-search.js +2 -2
  110. package/dist/commands/read/remember-cli.js +42 -15
  111. package/dist/commands/read/search-cli.js +180 -78
  112. package/dist/commands/read/search.js +58 -43
  113. package/dist/commands/read/show.js +197 -141
  114. package/dist/commands/registry-cli.js +12 -51
  115. package/dist/commands/remember.js +14 -57
  116. package/dist/commands/sources/add-cli.js +100 -31
  117. package/dist/commands/sources/bundle-cli.js +166 -0
  118. package/dist/commands/sources/bundle-config-ops.js +7 -2
  119. package/dist/commands/sources/info.js +18 -5
  120. package/dist/commands/sources/init.js +12 -12
  121. package/dist/commands/sources/installed-stashes.js +382 -98
  122. package/dist/commands/sources/schema-repair.js +3 -2
  123. package/dist/commands/sources/self-update.js +131 -38
  124. package/dist/commands/sources/source-add.js +72 -17
  125. package/dist/commands/sources/source-clone.js +129 -45
  126. package/dist/commands/sources/source-manage.js +43 -23
  127. package/dist/commands/sources/sources-cli.js +57 -208
  128. package/dist/commands/sources/stash-cli.js +46 -53
  129. package/dist/commands/tasks/tasks-cli.js +91 -97
  130. package/dist/commands/tasks/tasks.js +276 -421
  131. package/dist/commands/workflow-cli.js +175 -450
  132. package/dist/core/adapter/adapters/akm-adapter.js +47 -28
  133. package/dist/core/adapter/adapters/akm-lint.js +42 -27
  134. package/dist/core/adapter/adapters/akm-metadata.js +15 -44
  135. package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
  136. package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
  137. package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
  138. package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
  139. package/dist/core/adapter/adapters/index.js +6 -6
  140. package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
  141. package/dist/core/adapter/adapters/okf-adapter.js +187 -19
  142. package/dist/core/adapter/adapters/shared.js +3 -19
  143. package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
  144. package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
  145. package/dist/core/adapter/detect-adapter.js +17 -0
  146. package/dist/core/adapter/recognize-match.js +6 -4
  147. package/dist/core/adapter/validate-context.js +214 -0
  148. package/dist/core/asset/akm-markdown.js +63 -0
  149. package/dist/core/asset/asset-placement.js +20 -6
  150. package/dist/core/asset/asset-ref.js +11 -9
  151. package/dist/core/asset/frontmatter-lint.js +30 -0
  152. package/dist/core/asset/frontmatter.js +37 -9
  153. package/dist/core/asset/markdown.js +40 -51
  154. package/dist/core/asset/resolve-ref.js +89 -18
  155. package/dist/core/asset/stash-meta.js +1 -1
  156. package/dist/core/bundle-id.js +51 -0
  157. package/dist/core/common.js +152 -38
  158. package/dist/core/config/config-io.js +12 -1
  159. package/dist/core/config/config-schema.js +35 -8
  160. package/dist/core/config/config-sources.js +55 -11
  161. package/dist/core/config/config-walker.js +25 -9
  162. package/dist/core/config/config.js +9 -48
  163. package/dist/core/config/experimental.js +21 -0
  164. package/dist/core/config/schema/embedding.js +5 -1
  165. package/dist/core/config/schema/experimental.js +30 -0
  166. package/dist/core/config/schema/improve-processes.js +0 -6
  167. package/dist/core/config/schema/improve.js +21 -3
  168. package/dist/core/config/schema/index-config.js +8 -15
  169. package/dist/core/config/schema/output.js +4 -1
  170. package/dist/core/config/schema/setup.js +9 -18
  171. package/dist/core/config/schema/sources-bundles.js +49 -33
  172. package/dist/core/config/schema/workflow.js +3 -3
  173. package/dist/core/env-secret-ref.js +76 -46
  174. package/dist/core/errors.js +18 -12
  175. package/dist/core/events.js +46 -128
  176. package/dist/core/file-change.js +6 -5
  177. package/dist/core/fs-txn.js +83 -7
  178. package/dist/core/git-message.js +2 -2
  179. package/dist/core/improve-result.js +1 -100
  180. package/dist/core/lesson-lint.js +1 -17
  181. package/dist/core/logs-db.js +2 -1
  182. package/dist/core/migration-operation.js +16 -0
  183. package/dist/core/mutation-target.js +78 -0
  184. package/dist/core/parse.js +4 -1
  185. package/dist/core/paths.js +17 -20
  186. package/dist/core/recognition-util.js +12 -14
  187. package/dist/core/redaction.js +34 -0
  188. package/dist/core/standards/resolve-standards-context.js +2 -14
  189. package/dist/core/standards/resolve-stash-standards.js +2 -2
  190. package/dist/core/standards/resolve-type-conventions.js +2 -2
  191. package/dist/core/state/migrations.js +41 -18
  192. package/dist/core/state-db.js +5 -14
  193. package/dist/core/structured.js +1 -1
  194. package/dist/core/subprocess.js +6 -4
  195. package/dist/core/text-truncation.js +9 -5
  196. package/dist/core/type-presentation.js +3 -3
  197. package/dist/core/warn.js +0 -3
  198. package/dist/core/write-source.js +771 -95
  199. package/dist/indexer/bundle-identity-guard.js +3 -2
  200. package/dist/indexer/db/graph-db.js +0 -24
  201. package/dist/indexer/ensure-index.js +1 -0
  202. package/dist/indexer/graph/graph-boost.js +9 -34
  203. package/dist/indexer/graph/graph-extraction.js +8 -5
  204. package/dist/indexer/index-writer-lock.js +53 -17
  205. package/dist/indexer/index-written-assets.js +16 -22
  206. package/dist/indexer/indexer.js +497 -239
  207. package/dist/indexer/installations.js +14 -96
  208. package/dist/indexer/passes/dir-staleness.js +16 -9
  209. package/dist/indexer/passes/memory-inference.js +11 -9
  210. package/dist/indexer/passes/metadata.js +113 -47
  211. package/dist/indexer/scan/doc-to-entry.js +38 -1
  212. package/dist/indexer/scan/drain-dir.js +13 -23
  213. package/dist/indexer/search/db-search.js +99 -54
  214. package/dist/indexer/search/fts-query.js +47 -24
  215. package/dist/indexer/search/ranking-contributors.js +42 -20
  216. package/dist/indexer/search/ranking.js +18 -99
  217. package/dist/indexer/search/search-fields.js +7 -2
  218. package/dist/indexer/search/search-source.js +82 -93
  219. package/dist/indexer/usage/usage-events.js +0 -89
  220. package/dist/indexer/walk/file-context.js +2 -1
  221. package/dist/indexer/walk/matchers.js +30 -43
  222. package/dist/indexer/walk/path-resolver.js +7 -2
  223. package/dist/indexer/walk/walker.js +38 -12
  224. package/dist/integrations/agent/builders.js +0 -6
  225. package/dist/integrations/agent/config.js +2 -2
  226. package/dist/integrations/agent/detect.js +49 -19
  227. package/dist/integrations/agent/engine-fallback.js +76 -0
  228. package/dist/integrations/agent/profiles.js +14 -0
  229. package/dist/integrations/agent/prompts.js +12 -8
  230. package/dist/integrations/agent/runner-dispatch.js +4 -2
  231. package/dist/integrations/agent/runner.js +0 -1
  232. package/dist/integrations/agent/spawn.js +5 -6
  233. package/dist/integrations/github.js +1 -1
  234. package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
  235. package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
  236. package/dist/integrations/harnesses/claude/session-log.js +0 -10
  237. package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
  238. package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
  239. package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
  240. package/dist/integrations/harnesses/index.js +3 -7
  241. package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
  242. package/dist/integrations/harnesses/opencode/session-log.js +0 -15
  243. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
  244. package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
  245. package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
  246. package/dist/integrations/lockfile.js +101 -6
  247. package/dist/integrations/session-logs/index.js +3 -28
  248. package/dist/llm/client.js +136 -100
  249. package/dist/llm/embedders/remote.js +13 -5
  250. package/dist/llm/feature-gate.js +4 -12
  251. package/dist/llm/graph-extract.js +5 -11
  252. package/dist/llm/memory-infer.js +144 -1
  253. package/dist/llm/metadata-enhance.js +5 -7
  254. package/dist/llm/structured-call.js +1 -1
  255. package/dist/llm/usage-persist.js +26 -5
  256. package/dist/llm/usage-telemetry.js +25 -2
  257. package/dist/output/cli-hints.js +1 -2
  258. package/dist/output/context.js +22 -7
  259. package/dist/output/format-exempt.js +80 -0
  260. package/dist/output/generic-render.js +259 -0
  261. package/dist/output/render-registry.js +57 -0
  262. package/dist/output/renderers.js +14 -36
  263. package/dist/output/shapes/curate.js +10 -1
  264. package/dist/output/shapes/events.js +12 -7
  265. package/dist/output/shapes/helpers.js +56 -83
  266. package/dist/output/shapes/migrate.js +8 -0
  267. package/dist/output/shapes/passthrough.js +7 -41
  268. package/dist/output/shapes/proposal/producer.js +15 -7
  269. package/dist/output/shapes.js +2 -9
  270. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  271. package/dist/output/text/bundle-show.js +7 -0
  272. package/dist/output/text/command-format.js +164 -96
  273. package/dist/output/text/env.js +1 -3
  274. package/dist/output/text/events.js +8 -7
  275. package/dist/output/text/health-format.js +103 -0
  276. package/dist/output/text/health.js +7 -0
  277. package/dist/output/text/helpers.js +10 -8
  278. package/dist/output/text/lint-format.js +43 -0
  279. package/dist/output/text/{save.js → lint.js} +2 -2
  280. package/dist/output/text/migrate.js +88 -0
  281. package/dist/output/text/proposal/producer.js +4 -2
  282. package/dist/output/text/proposal-format.js +44 -72
  283. package/dist/output/text/registry-commands.js +1 -2
  284. package/dist/output/text/show-directives.js +15 -7
  285. package/dist/output/text/status-list.js +32 -0
  286. package/dist/output/text/sync.js +5 -0
  287. package/dist/output/text/workflow-format.js +24 -203
  288. package/dist/output/text/workflow.js +1 -7
  289. package/dist/output/text.js +16 -17
  290. package/dist/registry/factory.js +4 -6
  291. package/dist/registry/origin-resolve.js +16 -27
  292. package/dist/registry/providers/skills-sh.js +3 -3
  293. package/dist/registry/providers/static-index.js +13 -23
  294. package/dist/registry/resolve.js +42 -7
  295. package/dist/registry/semver.js +34 -84
  296. package/dist/runtime.js +2 -23
  297. package/dist/scripts/akm-migrate-node.js +60290 -0
  298. package/dist/scripts/akm-migrate.js +59628 -0
  299. package/dist/setup/detect.js +42 -15
  300. package/dist/setup/registry-stash-loader.js +2 -2
  301. package/dist/setup/setup.js +236 -136
  302. package/dist/setup/steps/connection.js +7 -9
  303. package/dist/setup/steps/platforms.js +9 -9
  304. package/dist/setup/steps/semantic.js +15 -3
  305. package/dist/setup/steps/sources.js +12 -13
  306. package/dist/setup/steps/stashdir.js +2 -3
  307. package/dist/setup/steps/tasks.js +237 -120
  308. package/dist/sources/freshness.js +1 -1
  309. package/dist/sources/provider-factory.js +11 -17
  310. package/dist/sources/providers/filesystem.js +2 -3
  311. package/dist/sources/providers/git-install.js +278 -34
  312. package/dist/sources/providers/git-provider.js +25 -23
  313. package/dist/sources/providers/git-stash.js +395 -106
  314. package/dist/sources/providers/git.js +2 -2
  315. package/dist/sources/providers/npm.js +16 -19
  316. package/dist/sources/providers/provider-utils.js +7 -4
  317. package/dist/sources/providers/sync-from-ref.js +3 -9
  318. package/dist/sources/providers/website.js +6 -1
  319. package/dist/sources/resolve.js +6 -5
  320. package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
  321. package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
  322. package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
  323. package/dist/sources/snapshot-fetchers/github.js +100 -0
  324. package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
  325. package/dist/sources/snapshot-fetchers/registry.js +17 -1
  326. package/dist/sources/snapshot-fetchers/robots.js +348 -0
  327. package/dist/sources/snapshot-fetchers/rss.js +282 -0
  328. package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
  329. package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
  330. package/dist/sources/snapshot-fetchers/x.js +910 -0
  331. package/dist/storage/database.js +7 -0
  332. package/dist/storage/engines/sqlite-migrations.js +23 -111
  333. package/dist/storage/managed-db.js +2 -2
  334. package/dist/storage/repositories/canaries-repository.js +1 -1
  335. package/dist/storage/repositories/events-repository.js +27 -11
  336. package/dist/storage/repositories/improve-runs-repository.js +6 -12
  337. package/dist/storage/repositories/index-connection.js +17 -6
  338. package/dist/storage/repositories/index-entries-repository.js +151 -240
  339. package/dist/storage/repositories/index-entry-mapper.js +15 -11
  340. package/dist/storage/repositories/index-fts-repository.js +5 -2
  341. package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
  342. package/dist/storage/repositories/index-meta-repository.js +2 -3
  343. package/dist/storage/repositories/index-schema.js +10 -25
  344. package/dist/storage/repositories/index-utility-repository.js +15 -28
  345. package/dist/storage/repositories/index-vec-repository.js +6 -1
  346. package/dist/storage/repositories/outcome-repository.js +119 -0
  347. package/dist/storage/repositories/proposals-repository.js +296 -59
  348. package/dist/storage/repositories/registry-cache.js +19 -0
  349. package/dist/storage/repositories/salience-repository.js +172 -0
  350. package/dist/storage/repositories/task-history-repository.js +15 -13
  351. package/dist/storage/repositories/workflow-runs-repository.js +52 -40
  352. package/dist/tasks/backends/cron.js +105 -15
  353. package/dist/tasks/backends/index.js +1 -1
  354. package/dist/tasks/backends/launchd.js +85 -38
  355. package/dist/tasks/backends/schtasks.js +135 -15
  356. package/dist/tasks/embedded.js +56 -40
  357. package/dist/tasks/parser.js +7 -157
  358. package/dist/tasks/resolve-akm-bin.js +137 -59
  359. package/dist/tasks/runner.js +79 -42
  360. package/dist/tasks/scheduler-invocation.js +220 -10
  361. package/dist/tasks/schema.js +24 -1
  362. package/dist/tasks/task-id.js +1 -3
  363. package/dist/tasks/validator.js +20 -6
  364. package/dist/workflows/authoring/authoring.js +94 -143
  365. package/dist/workflows/authoring/scope-key.js +1 -1
  366. package/dist/workflows/exec/frozen-judge.js +28 -2
  367. package/dist/workflows/exec/native-executor.js +77 -57
  368. package/dist/workflows/exec/param-secrets.js +9 -9
  369. package/dist/workflows/exec/run-workflow.js +133 -79
  370. package/dist/workflows/exec/step-work.js +219 -346
  371. package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
  372. package/dist/workflows/ir/compile.js +141 -270
  373. package/dist/workflows/ir/freeze.js +40 -30
  374. package/dist/workflows/ir/params.js +135 -11
  375. package/dist/workflows/ir/plan-hash.js +1 -1
  376. package/dist/workflows/ir/schema.js +25 -26
  377. package/dist/workflows/parser.js +872 -307
  378. package/dist/workflows/program/expressions.js +20 -208
  379. package/dist/workflows/program/schema.js +7 -10
  380. package/dist/workflows/renderer.js +95 -68
  381. package/dist/workflows/resource-limits.js +2 -0
  382. package/dist/workflows/runtime/checkin.js +3 -3
  383. package/dist/workflows/runtime/plan-classifier.js +16 -75
  384. package/dist/workflows/runtime/runs.js +186 -127
  385. package/dist/workflows/runtime/unit-checkin.js +1 -1
  386. package/dist/workflows/runtime/unit-phases.js +2 -2
  387. package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
  388. package/dist/workflows/schema.js +1 -11
  389. package/dist/workflows/validate-summary.js +30 -36
  390. package/dist/workflows/validator.js +21 -62
  391. package/docs/README.md +68 -0
  392. package/docs/migration/README.md +8 -0
  393. package/docs/migration/release-notes/0.7.0.md +11 -11
  394. package/docs/migration/release-notes/0.9.0.md +208 -27
  395. package/docs/migration/v0.7-to-v0.8.md +46 -47
  396. package/docs/migration/v0.8-to-v0.9.md +564 -208
  397. package/docs/migration/v0.9.0-troubleshooting.md +561 -0
  398. package/docs/reference/README.md +12 -0
  399. package/docs/reference/cli.md +2253 -0
  400. package/docs/reference/configuration.md +358 -0
  401. package/docs/reference/data-and-telemetry.md +105 -42
  402. package/docs/reference/workflows.md +647 -0
  403. package/package.json +22 -11
  404. package/schemas/akm-asset-envelope.json +93 -0
  405. package/schemas/akm-config.json +81 -128
  406. package/schemas/akm-workflow.json +74 -73
  407. package/dist/assets/tasks/core/backup.yml +0 -5
  408. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  409. package/dist/cli/config-migrate.js +0 -1806
  410. package/dist/cli/config-validate.js +0 -41
  411. package/dist/commands/backup-cli.js +0 -56
  412. package/dist/commands/bundle/bundle-cli.js +0 -68
  413. package/dist/commands/bundle/bundle.js +0 -219
  414. package/dist/commands/graph/graph-cli.js +0 -124
  415. package/dist/commands/graph/graph.js +0 -489
  416. package/dist/commands/improve/extract-watch.js +0 -140
  417. package/dist/commands/mv-cli.js +0 -1221
  418. package/dist/commands/sources/history.js +0 -201
  419. package/dist/commands/tasks/default-tasks.js +0 -186
  420. package/dist/core/migration-backup.js +0 -1234
  421. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
  422. package/dist/llm/memory-infer-impl.js +0 -138
  423. package/dist/migrate/legacy/config-source-migration.js +0 -223
  424. package/dist/migrate/legacy/content-migration.js +0 -305
  425. package/dist/migrate/legacy/legacy-layout.js +0 -779
  426. package/dist/migrate/legacy/legacy-paths.js +0 -25
  427. package/dist/migrate/legacy/legacy-stash-json.js +0 -72
  428. package/dist/migrate/legacy/proposal-fs-import.js +0 -168
  429. package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
  430. package/dist/migrate/legacy/three-db-cutover.js +0 -841
  431. package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
  432. package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
  433. package/dist/migrate/legacy-ref-grammar.js +0 -214
  434. package/dist/output/shapes/distill.js +0 -14
  435. package/dist/output/shapes/history.js +0 -11
  436. package/dist/output/text/distill.js +0 -6
  437. package/dist/output/text/enable-disable.js +0 -8
  438. package/dist/output/text/history.js +0 -6
  439. package/dist/registry/build-index.js +0 -382
  440. package/dist/schemas/akm-config.json +0 -4704
  441. package/dist/schemas/akm-task.json +0 -87
  442. package/dist/schemas/akm-workflow.json +0 -372
  443. package/dist/scripts/migrate-storage.js +0 -3816
  444. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  445. package/dist/workflows/cli.js +0 -53
  446. package/dist/workflows/exec/brief.js +0 -481
  447. package/dist/workflows/exec/report.js +0 -1460
  448. package/dist/workflows/exec/watch.js +0 -116
  449. package/dist/workflows/program/parser.js +0 -813
  450. package/dist/workflows/program/project.js +0 -104
@@ -0,0 +1,561 @@
1
+ # AKM 0.9.0 Migration Troubleshooting
2
+
3
+ This guide covers recovery actions for a 0.9.0 installation that did not
4
+ complete cleanly. It is written for operators repairing their own AKM
5
+ installation; no source-code changes are required.
6
+
7
+ ## Where AKM Stores Data
8
+
9
+ Recovery steps below reference these locations. Each default can be
10
+ overridden with the matching `AKM_*_DIR` environment variable; check the
11
+ environment before assuming the defaults.
12
+
13
+ | Variable | Default | Contents |
14
+ |---|---|---|
15
+ | `$CONFIG` | `~/.config/akm` | `config.json` |
16
+ | `$DATA` | `~/.local/share/akm` | `state.db`, `index.db`, `logs.db`, `txn/`, `backups/` |
17
+ | `$CACHE` | `~/.cache/akm` | task logs under `tasks/logs/`, index logs under `logs/` |
18
+ | `$BUNDLE` | `~/akm` | working bundle: assets, tasks, scripts, workflows, env files |
19
+
20
+ `akm config path --all` prints the resolved config, bundle, cache, and index
21
+ paths for the installation you are repairing.
22
+
23
+ ## Before You Retry
24
+
25
+ Stop scheduled AKM jobs and any running `akm improve`, `akm proposal extract`, or
26
+ workflow processes. Do not delete databases, migration sentinels, WAL files, or
27
+ backup directories while a migration is incomplete.
28
+
29
+ Confirm that the command you are invoking is the intended 0.9 binary:
30
+
31
+ ```sh
32
+ command -v akm
33
+ akm --version
34
+ akm upgrade --check
35
+ ```
36
+
37
+ If the shell resolves an older installation, invoke the new package-manager
38
+ launcher or staged binary explicitly for every migration command.
39
+
40
+ ## Pin the Runtime the Scheduler Uses
41
+
42
+ `akm task doctor` reports the runtime `kind` and whether it is `eligible`
43
+ for scheduling. Scheduled jobs must be bound to an installed release, never
44
+ to a development checkout:
45
+
46
+ - If doctor reports `kind: checkout` with `eligible: false`, the scheduler
47
+ is invoking a mutable source tree. Rebuilding that tree changes task
48
+ behavior mid-schedule, which shows up as failures flipping to successes
49
+ (or the reverse) within the same day's logs with no configuration change.
50
+ - A launcher on `PATH` can be a thin wrapper back into a checkout. Verify
51
+ with `command -v akm` and `realpath` before trusting the version string.
52
+ - The version string itself can lie: an uncommitted local `package.json`
53
+ edit produces a version that corresponds to no reproducible artifact.
54
+
55
+ Also audit the task definitions and their helper scripts. Any command that
56
+ invokes bare `akm` resolves through the scheduler's `PATH` at run time and
57
+ can silently pick up a different binary than the one you validated. Pin
58
+ nested invocations to the absolute launcher path — including in currently
59
+ disabled tasks, so re-enabling one later cannot fall back to a stale
60
+ binary — then resynchronize the bindings:
61
+
62
+ ```sh
63
+ akm task doctor
64
+ akm task sync --rebind
65
+ akm task doctor
66
+ ```
67
+
68
+ ## Migration Status
69
+
70
+ Start with the read-only status command:
71
+
72
+ ```sh
73
+ akm migrate status
74
+ ```
75
+
76
+ If you prepared a separate target configuration, pass it again:
77
+
78
+ ```sh
79
+ akm migrate status --config ./prepared-0.9.json
80
+ ```
81
+
82
+ The status output identifies any incomplete operation, source configuration,
83
+ target configuration, and whether recovery is required.
84
+
85
+ ## Common Failures
86
+
87
+ ### WAL or database is busy
88
+
89
+ If migration reports that another process holds a database, lock, or workflow
90
+ claim, stop all schedulers and close every AKM process. Check for remaining
91
+ processes, then retry:
92
+
93
+ ```sh
94
+ akm migrate apply --config ./prepared-0.9.json
95
+ ```
96
+
97
+ Do not remove `state.db-wal` or `state.db-shm` manually. SQLite owns those files.
98
+
99
+ ### Migration was interrupted
100
+
101
+ After a killed process, host crash, or power loss, run status and retry apply:
102
+
103
+ ```sh
104
+ akm migrate status
105
+ akm migrate apply
106
+ ```
107
+
108
+ The coordinator reuses the original backup and phase-free incomplete sentinel,
109
+ including its retained target config and path base, then reruns the idempotent
110
+ schema, data, and asset transforms. Do not edit or delete files under the AKM
111
+ data directory to force progress. Preserve the sentinel and backup if retry
112
+ reports malformed control data.
113
+
114
+ ### `akm migrate status` stays "old" for one surface
115
+
116
+ If status reports every surface current except one, look for an obsolete
117
+ database file left behind by an earlier version — for example an empty
118
+ `workflow.db` in `$DATA` from a pre-0.9 install. Its mere presence can make
119
+ that surface report as unmigrated. Stop all writers, move the file into a
120
+ dated backup directory, and re-run `akm migrate status`. Do not delete the
121
+ file; a later diagnosis may need it.
122
+
123
+ ### Configuration still uses retired keys
124
+
125
+ Errors naming `stashDir`, `sources`, `installed`, `wikiName`, or another
126
+ pre-0.9 key mean the current configuration has not crossed the bundle cutover.
127
+ Prepare a 0.9 configuration with `bundles` and `defaultBundle`, then run the
128
+ migration with that file:
129
+
130
+ ```sh
131
+ akm migrate status --config ./prepared-0.9.json
132
+ akm migrate apply --config ./prepared-0.9.json --dry-run
133
+ akm migrate apply --config ./prepared-0.9.json
134
+ ```
135
+
136
+ Do not run a 0.8 binary with `akm migrate`; that command exists only in the
137
+ 0.9 runtime.
138
+
139
+ Retired keys also linger inside task commands and helper scripts. A common
140
+ 0.8 pattern was `akm config get stashDir`; it now fails with an unknown-key
141
+ error on every scheduled run. Replace it with the bundle path from
142
+ `akm config path --all` or `akm info`. Use `akm task history` to spot
143
+ tasks failing on every interval: an unbroken run of failures starting at
144
+ the migration date almost always means a retired key or reference inside
145
+ the task definition, not a scheduler fault.
146
+
147
+ ### Old references no longer resolve
148
+
149
+ The normal 0.9 grammar is `[bundle//]conceptId`, such as:
150
+
151
+ ```text
152
+ skills/code-review
153
+ memories/vpn-note
154
+ knowledge/api-guide
155
+ env/production
156
+ ```
157
+
158
+ Replace old `type:name` references in your own prompts, task files, scripts,
159
+ and documentation. The migration rewrites durable state and eligible asset
160
+ content, but it cannot safely infer every reference embedded in operator-owned
161
+ text.
162
+
163
+ Check scheduled task YAML and workflow documents first: `env:name`,
164
+ `workflow:name`, `knowledge:name`, and `skill:name` references inside a
165
+ task definition fail on every run until rewritten as `env/name`,
166
+ `workflows/name`, and so on.
167
+
168
+ Workflow runs that were already in flight before the upgrade keep their
169
+ frozen pre-0.9 plan. If a driver task resumes such a run, it executes the
170
+ old plan — including retired commands — even after you rewrite the workflow
171
+ document. Let the stale run reach a terminal state or abandon it, then
172
+ start a fresh run so the rewritten plan is what executes.
173
+
174
+ ### Renamed or moved assets lose their ranking signal
175
+
176
+ `akm mv` was removed in 0.9. A rename is now a plain filesystem move followed
177
+ by `akm index` and `akm lint`, and the destination gets a **fresh identity**.
178
+ Everything the old ref had earned — feedback events, usage events, salience and
179
+ outcome history — stays keyed to the ref that no longer exists. The symptom is a
180
+ long-serving asset that suddenly ranks like a brand-new one after you renamed
181
+ or reorganized it, and orphaned rows accumulating in `state.db`.
182
+
183
+ Re-key the rows onto the new ref from a source clone:
184
+
185
+ ```sh
186
+ # Preview the counts it would move
187
+ bun scripts/rekey-asset-ref.ts memories/old-note memories/new-note --dry-run
188
+
189
+ # Apply
190
+ bun scripts/rekey-asset-ref.ts memories/old-note memories/new-note
191
+ ```
192
+
193
+ It re-keys the index `entries` row **in place** (preserving the row id, and
194
+ with it the utility/embedding history keyed to that id), the `asset_salience`
195
+ and `asset_outcome` rows, and `usage_events.entry_ref` — then appends one
196
+ `rekey` event. It is idempotent: a second run reports zero changed rows.
197
+
198
+ Two constraints follow from the identity model, and the script refuses rather
199
+ than guess: refs must name the same bundle and the same asset type
200
+ (cross-bundle and cross-type movement is copy/import plus delete), and the old
201
+ file must be gone — if both files exist that is a copy, not a rename.
202
+
203
+ Run it **before** `akm index` when you can. Afterwards still works and carries
204
+ the `state.db` signal, but `akm index` will already have dropped the old
205
+ `entries` row and minted a fresh one, so the utility/embedding history attached
206
+ to that row id is gone. The improve maintenance pass marks and clears orphaned
207
+ salience/outcome state. With `improve.stateGc.collect: true`, it collects rows
208
+ that remain orphaned after the seven-day grace period and emits an
209
+ `asset_state_gc` event. Re-key before indexing when you need to preserve that
210
+ history rather than collect it.
211
+
212
+ ### `akm wiki` commands fail
213
+
214
+ The `akm wiki` command family was removed in 0.9. Use ordinary bundle and
215
+ knowledge commands instead:
216
+
217
+ ```sh
218
+ akm index
219
+ akm search "your query"
220
+ akm show knowledge/your-document
221
+ akm lint --type knowledge
222
+ ```
223
+
224
+ For URL snapshots, use `akm import URL --path articles`, then index and lint
225
+ the destination.
226
+
227
+ Scheduled pipelines built on `akm wiki` must be rewritten, not renamed:
228
+
229
+ 1. Acquire URLs with `akm import <url> --path <subdir>` into an ordinary
230
+ knowledge subtree (for example `knowledge/articles`).
231
+ 2. Deduplicate by source URL before importing, and normalize alias hosts
232
+ (for example `twitter.com` vs `x.com`) so one article is not imported
233
+ twice under two URLs.
234
+ 3. Verify with `akm index`, `akm search`, and `akm show`, and lint the
235
+ destination subtree rather than the whole bundle.
236
+ 4. Advance any incremental cursor (channel position, feed offset) only
237
+ after the whole task run succeeds, so a failed run is retried instead
238
+ of silently skipped.
239
+
240
+ ### Tasks do not run after migration
241
+
242
+ Task files are strict YAML v2 in 0.9. Inspect and resynchronize the installed
243
+ scheduler bindings:
244
+
245
+ ```sh
246
+ akm task doctor
247
+ akm task sync --rebind
248
+ akm task doctor
249
+ ```
250
+
251
+ Use `akm task history` to distinguish a disabled task, a failed command, and a
252
+ task that was never installed. A disabled task can still be run explicitly for
253
+ testing:
254
+
255
+ ```sh
256
+ akm task run <task-id>
257
+ ```
258
+
259
+ If a periodic task fails only when it coincides with a running improve
260
+ cycle, add `--skip-if-locked` to its improve invocation so the overlap is
261
+ skipped instead of recorded as a failure.
262
+
263
+ `akm task history` can also show rows stuck in an active state from runs
264
+ interrupted by a crash or power loss. Confirm no AKM process is actually
265
+ running before treating them as abandoned. Such rows are historical
266
+ records only, but they distort health fail-rate statistics until resolved.
267
+
268
+ ### Improve aborts on legacy pending proposals
269
+
270
+ Proposals created before 0.9 can lack metadata the 0.9 lifecycle requires —
271
+ most often the proposed target and per-change paths. Symptoms:
272
+
273
+ - `akm improve` exits with code 70 on every cycle while processing a
274
+ specific proposal.
275
+ - `akm proposal reject` fails on the same row because archival cannot
276
+ serialize the missing metadata.
277
+
278
+ Inspect the queue read-only before changing anything:
279
+
280
+ ```sh
281
+ akm proposal list --status pending --format json
282
+ sqlite3 -readonly "$DATA/state.db" \
283
+ "SELECT COUNT(*) FROM proposals WHERE status='pending' \
284
+ AND json_extract(metadata_json,'$.proposedTarget') IS NULL;"
285
+ ```
286
+
287
+ Reject duplicates and stale drafts through the normal proposal commands
288
+ wherever they still work; that preserves the audit trail. If rejection
289
+ itself fails on a malformed row, stop all writers, take a fresh
290
+ `sqlite3 ".backup"` copy of `state.db`, add only the missing metadata
291
+ fields to the affected rows, verify `PRAGMA quick_check` returns `ok`, and
292
+ then retry the CLI rejection. Never delete proposal rows directly.
293
+
294
+ The 0.9 pre-publish lint gate keeps structurally valid but lint-invalid
295
+ legacy drafts pending instead of publishing them. They are harmless, but
296
+ each is re-evaluated every cycle; reject drafts that can never promote so
297
+ they stop consuming the promotion budget.
298
+
299
+ ### Stale transaction journals under `$DATA/txn`
300
+
301
+ An interrupted run can leave a journal directory under
302
+ `$DATA/txn/<installation>/<transaction-id>/`. Read its `journal.json`
303
+ before acting:
304
+
305
+ - A journal in an applying phase with zero completed operations recorded
306
+ no file changes. After stopping all writers, move the whole transaction
307
+ directory into a dated backup location. Do not delete it.
308
+ - A journal whose operations already published files needs per-proposal
309
+ reconciliation. If a published file matches the proposal content,
310
+ finalize the acceptance through the proposal commands. If the file has
311
+ since diverged (for example because you fixed lint defects in it), keep
312
+ the newer file, quarantine the journal, and reject the superseded
313
+ proposal.
314
+
315
+ A leftover journal can also block `akm proposal reject` for the proposal
316
+ it references. Resolve the journal first, then retry the rejection.
317
+
318
+ A journal whose `kind` no longer exists in 0.9 — notably `"mv"`, left by an
319
+ rc-era `akm mv` run — needs no action. It records no recoverable work, and any
320
+ recovery scan that meets it removes it once it is older than five minutes
321
+ rather than failing.
322
+
323
+ ### Index or search results look incomplete
324
+
325
+ The index is regenerable. First verify the bundle and configuration, then
326
+ rebuild and inspect lint findings:
327
+
328
+ ```sh
329
+ akm index
330
+ akm health
331
+ akm lint --type knowledge
332
+ akm search "a known document title"
333
+ ```
334
+
335
+ Do not restore an old index database over a current one unless you have a
336
+ separate, verified recovery procedure. Rebuilding the index preserves the
337
+ source assets and avoids mixing database generations.
338
+
339
+ ### `source "<name>" was not scanned completely`
340
+
341
+ Indexing prints this warning and preserves the source's last-known-good
342
+ rows when a file listed by the source cannot be read back during the walk.
343
+ On a Git-backed bundle the usual cause is benign: a tracked file was deleted
344
+ in the working tree and the deletion is not yet committed. The final 0.9.0
345
+ runtime handles that state; if you still see the warning, commit or restore
346
+ the deletion in the bundle repository and re-index:
347
+
348
+ ```sh
349
+ git -C <bundle-dir> status --short
350
+ akm index
351
+ ```
352
+
353
+ Because last-known-good rows are preserved, search keeps working while the
354
+ warning is active — but deleted assets do not disappear from the index
355
+ until a complete scan succeeds.
356
+
357
+ ### Local LLM features fail after upgrade
358
+
359
+ Check the configured engine and endpoint without exposing credentials:
360
+
361
+ ```sh
362
+ akm config get engines
363
+ akm health
364
+ ```
365
+
366
+ Confirm that the local model server is running, reachable from the host, and
367
+ serves the configured model. Keep the endpoint and model under the named
368
+ `engines` configuration; the retired top-level `llm` configuration is not a
369
+ 0.9 setting.
370
+
371
+ Verify the endpoint directly before changing AKM configuration:
372
+
373
+ ```sh
374
+ curl -sS -o /dev/null -w '%{http_code}\n' http://HOST:PORT/v1/models
375
+ ```
376
+
377
+ A 200 without an `Authorization` header means no token is needed — do not
378
+ wire one in. Old 401 entries in task logs can be stale evidence of a
379
+ transient server state, not a configuration rule; trust the live probe.
380
+ If a chat or classification feature fails while embeddings work, confirm
381
+ the exact configured model is loaded on the host you are pointing at: a
382
+ reachable server without the model loaded fails in ways that resemble
383
+ authentication or endpoint errors, and the fix may simply be pointing the
384
+ configuration at the host that actually serves the model.
385
+
386
+ ### Derived memories contain placeholder text
387
+
388
+ A small local model can echo a prompt's example structure instead of
389
+ producing real content. Affected derived memories contain literal template
390
+ text — a description like "one sentence summary", tags like `tag1`, a
391
+ generic template body — and often omit the `updated` field. The final
392
+ 0.9.0 runtime rejects this output pattern and uses a new inference cache
393
+ namespace, so upgrade first; regeneration under an old binary can
394
+ reproduce the same placeholders from cache.
395
+
396
+ Then clean up in this order:
397
+
398
+ 1. Search the bundle for the literal template phrases and remove only the
399
+ placeholder derived assets. Do not edit dates onto them; that conceals
400
+ the bad automation without fixing it.
401
+ 2. Re-run indexing and the improvement task with the upgraded runtime.
402
+ 3. Confirm the regenerated memories contain real content and an `updated`
403
+ date before re-enabling any schedule that consumes them.
404
+
405
+ ### Improve does less than it did on 0.8
406
+
407
+ 0.9 gates autonomous maintenance lanes (memory inference, memory cleanup,
408
+ automatic triage promotion) behind an explicit opt-in. While
409
+ `experimental.improveAutonomy` is false, those lanes are skipped or queue
410
+ their work for review instead of applying it. That is configuration, not
411
+ damage. Check the current value and enable the opt-in only after reviewing
412
+ what the lanes may write:
413
+
414
+ ```sh
415
+ akm config get experimental
416
+ ```
417
+
418
+ Read health fail-rate advisories with the same care: the aggregate combines
419
+ improve results with every scheduled task, so one misconfigured legacy task
420
+ failing on a tight schedule can dominate the percentage while improve
421
+ itself is healthy. Distinguish deterministic check failures (integrity,
422
+ index, scheduler) from historical-rate advisories before treating health
423
+ as degraded.
424
+
425
+ ### State databases are very large after migration
426
+
427
+ Improve telemetry accumulates in `state.db` and can dominate its size;
428
+ multi-gigabyte stored improve-run results are the usual cause. Set a
429
+ retention window, let the next quick improve run purge expired rows, then
430
+ compact offline:
431
+
432
+ ```sh
433
+ akm config set improve.eventRetentionDays 30
434
+ akm task run <quick-improve-task-id>
435
+ ```
436
+
437
+ Check the run log for the purge counts, stop all writers, then compact and
438
+ verify each database:
439
+
440
+ ```sh
441
+ sqlite3 "$DATA/state.db" "VACUUM; PRAGMA quick_check;"
442
+ sqlite3 "$DATA/logs.db" "VACUUM; PRAGMA quick_check;"
443
+ ```
444
+
445
+ Also review `$DATA/backups`: migration backups are large by design. Keep at
446
+ least the most recent verified pre-cutover backup, and do not prune backup
447
+ directories while any migration or recovery question is open.
448
+
449
+ ### Proposal promotion is rejected by lint
450
+
451
+ 0.9 rejects proposal promotion when a proposal has critical `unquoted-colon`,
452
+ `missing-ref`, or `stale-path` findings. Inspect the proposal, fix the content
453
+ or add an intentional lint suppression, then retry:
454
+
455
+ ```sh
456
+ akm proposal show <proposal-id>
457
+ akm proposal diff <proposal-id>
458
+ akm proposal accept <proposal-id>
459
+ ```
460
+
461
+ Rejected promotion leaves the proposal pending and does not publish the bad
462
+ asset. Do not force-copy the proposal into the bundle; fix the proposal through
463
+ the proposal command so its audit trail remains intact.
464
+
465
+ ### Read-only bundles still contain v1 tasks
466
+
467
+ The migration deliberately never rewrites a read-only bundle. Affected
468
+ bundles are reported per bundle (a `readOnlyLegacyTasks` warning naming the
469
+ bundle and files), and those tasks remain non-executable warnings until the
470
+ upstream source ships 0.9-format tasks. Do not mark a lock-materialized
471
+ cache `writable: true` to silence the warning — the next source update
472
+ overwrites the cache and your edit with it. Update the upstream source, or
473
+ replace it with a writable local source if you must run those tasks now.
474
+
475
+ ## Migrations Performed With a Pre-Release Build
476
+
477
+ If the migration originally ran under a 0.9.0 release candidate, re-verify
478
+ it with the final binary before trusting the environment:
479
+
480
+ 1. Run `akm migrate status` with the final 0.9.0 binary.
481
+ 2. Read
482
+ `$DATA/backups/migrations/<installation-id>/content-migration-report.json`
483
+ and confirm every installed bundle you expected was imported. Early
484
+ builds could skip an installed tree whose lock still used a prefixed
485
+ locator (for example `github:owner/repo`), leaving its legacy metadata
486
+ and filesystem proposals unimported.
487
+ 3. Check whether quarantined legacy rows were preserved in full. The final
488
+ migration stores them in a `legacy_state_rows` table inside `state.db`;
489
+ some early builds recorded only per-surface summary counts (a
490
+ `legacy_state` table with counts but no `legacy_state_rows`). In that
491
+ case the full data exists only in the pre-cutover backup — preserve that
492
+ backup indefinitely, or restore and re-migrate with the final binary if
493
+ the quarantined history matters to you.
494
+
495
+ ```sh
496
+ sqlite3 -readonly "$DATA/state.db" \
497
+ "SELECT name FROM sqlite_master \
498
+ WHERE name IN ('legacy_state','legacy_state_rows');"
499
+ ```
500
+
501
+ ## Credential Hygiene After Failures
502
+
503
+ Runs under pre-final builds could write full webhook URLs into task logs
504
+ when an unhandled network error printed the failing request. Before
505
+ archiving or sharing logs, scan for embedded credentials and rotate
506
+ anything you find — deleting the log copy does not un-expose a credential:
507
+
508
+ ```sh
509
+ grep -rl 'discord.com/api/webhooks/' "$CACHE/tasks/logs" || true
510
+ ```
511
+
512
+ Keep scheduler environment files (`env/*.env` in the bundle) at mode `600`
513
+ and out of version control. Scheduled task environments frequently hold
514
+ plaintext credentials; never paste their contents into logs, reports, or
515
+ issue trackers while diagnosing a failure.
516
+
517
+ ## Recovery and Downgrade
518
+
519
+ Migration recovery runs are stored below:
520
+
521
+ ```text
522
+ $DATA/backups/migrations/<installation-id>/<run-id>/
523
+ ```
524
+
525
+ If you must restore, stop all writers first and use a verified recovery run:
526
+
527
+ ```sh
528
+ akm-migrate restore --for 0.9.0 --run <run-id> --confirm
529
+ ```
530
+
531
+ Only install an older AKM binary after restore completes. A 0.8 binary must
532
+ not run against a 0.9 configuration or migrated databases. If no verified
533
+ pre-cutover backup exists, preserve the current installation and reconstruct a
534
+ separate older-version data root instead of downgrading in place.
535
+
536
+ ## Final Verification
537
+
538
+ After recovery, run these checks with the same binary used for migration:
539
+
540
+ ```sh
541
+ akm --version
542
+ akm migrate status
543
+ akm task doctor
544
+ akm index
545
+ akm health
546
+ akm lint --type knowledge
547
+ akm proposal list --status pending
548
+ ```
549
+
550
+ Before restarting schedules, also confirm the environment is quiescent:
551
+
552
+ - `$DATA/txn` contains no leftover transaction journals.
553
+ - No pending proposal is missing its target metadata (see the legacy
554
+ pending proposals section above).
555
+ - `akm task history` shows no rows stuck in an active state.
556
+ - Task logs contain no embedded credentials.
557
+
558
+ Restart scheduled jobs only after status is committed, the scheduler is bound
559
+ to the current launcher, and the index and lint checks are clean. Then watch
560
+ the first full scheduled cycle: one completed run of each task family under
561
+ cron is the real proof of recovery, not a successful manual invocation.
@@ -0,0 +1,12 @@
1
+ # Reference
2
+
3
+ Authoritative reference documentation for the akm CLI and its data.
4
+
5
+ - [CLI](cli.md) -- All `akm` commands and flags
6
+ - [Configuration](configuration.md) -- Engines, strategies, bundles, and settings
7
+ - [Workflows](workflows.md) -- Unified Markdown workflow schema, run state, and native orchestration engine
8
+ - [Registry](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md) -- Registries, search, hosting, and managing sources
9
+ - [Wiki Snapshot Fetchers](https://github.com/itlackey/akm/blob/main/docs/reference/wiki-snapshot-fetchers.md) -- The pluggable fetcher API for URL-based knowledge reads
10
+ - [Data & Telemetry](data-and-telemetry.md) -- Exactly what akm reads and writes on your machine (no remote telemetry)
11
+ - [akm-eval](https://github.com/itlackey/akm/blob/main/docs/reference/akm-eval.md) -- Standalone toolkit for measuring whether `akm improve` is working
12
+ - [Roadmap](https://github.com/itlackey/akm/blob/main/docs/reference/roadmap.md) -- High-level focus for the 0.9 and 1.0 releases