akm-cli 0.9.0-rc.0 → 0.9.0-rc.13

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 (598) hide show
  1. package/CHANGELOG.md +1283 -22
  2. package/README.md +62 -37
  3. package/SECURITY.md +46 -31
  4. package/dist/akm +162 -38
  5. package/dist/akm-migrate +44 -0
  6. package/dist/assets/backends/schtasks-template.xml +2 -1
  7. package/dist/assets/hints/cli-hints-full.md +268 -118
  8. package/dist/assets/hints/cli-hints-short.md +87 -24
  9. package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
  10. package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
  11. package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
  12. package/dist/assets/improve-strategies/frequent.json +15 -0
  13. package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
  14. package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
  15. package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
  16. package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
  17. package/dist/assets/improve-strategies/reflect-distill.json +30 -0
  18. package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
  19. package/dist/assets/prompts/consolidate-system.md +5 -5
  20. package/dist/assets/prompts/extract-session.md +2 -6
  21. package/dist/assets/prompts/memory-infer-user.md +2 -3
  22. package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
  23. package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
  24. package/dist/assets/prompts/reflect-output-repair.md +3 -0
  25. package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
  26. package/dist/assets/stash-skeleton/README.md +38 -10
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  38. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  39. package/dist/assets/tasks/core/extract.yml +3 -2
  40. package/dist/assets/tasks/core/improve.yml +2 -1
  41. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  42. package/dist/assets/tasks/core/sync.yml +1 -0
  43. package/dist/assets/tasks/core/version-check.yml +2 -1
  44. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  45. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  46. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  48. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  49. package/dist/assets/templates/html/health.html +5 -4
  50. package/dist/assets/workflows/workflow-template.md +31 -15
  51. package/dist/cli/invocation.js +279 -0
  52. package/dist/cli/parse-args.js +5 -90
  53. package/dist/cli/retired-commands.js +78 -0
  54. package/dist/cli/shared.js +158 -48
  55. package/dist/cli-node.mjs +2 -1
  56. package/dist/cli.js +747 -293
  57. package/dist/commands/agent/agent-dispatch.js +19 -18
  58. package/dist/commands/agent/agent-support.js +0 -24
  59. package/dist/commands/agent/contribute-cli.js +43 -97
  60. package/dist/commands/completions.js +80 -23
  61. package/dist/commands/config-cli.js +44 -281
  62. package/dist/commands/env/env-binding.js +99 -0
  63. package/dist/commands/env/env-cli.js +84 -224
  64. package/dist/commands/env/env.js +12 -163
  65. package/dist/commands/env/marker-path.js +6 -0
  66. package/dist/commands/env/secret-cli.js +45 -61
  67. package/dist/commands/env/secret.js +32 -62
  68. package/dist/commands/feedback-cli.js +179 -85
  69. package/dist/commands/health/accept-rate.js +58 -0
  70. package/dist/commands/health/advisories.js +7 -8
  71. package/dist/commands/health/checks.js +279 -94
  72. package/dist/commands/health/html-report.js +197 -578
  73. package/dist/commands/health/improve-metrics.js +277 -246
  74. package/dist/commands/health/llm-usage.js +19 -19
  75. package/dist/commands/health/md-report.js +16 -7
  76. package/dist/commands/health/metrics.js +67 -32
  77. package/dist/commands/health/renderers.js +47 -0
  78. package/dist/commands/health/report-view-model.js +508 -0
  79. package/dist/commands/health/stash-exposure.js +1 -1
  80. package/dist/commands/health/surfaces.js +16 -56
  81. package/dist/commands/health/task-runs.js +3 -67
  82. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  83. package/dist/commands/health/types-improve.js +29 -0
  84. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  85. package/dist/commands/health/types-result.js +7 -0
  86. package/dist/commands/health/types-runs.js +4 -0
  87. package/dist/commands/health/types-session-log.js +4 -0
  88. package/dist/commands/health/types-windows.js +4 -0
  89. package/dist/commands/health/types.js +26 -21
  90. package/dist/commands/health/windows.js +2 -3
  91. package/dist/commands/health.js +296 -167
  92. package/dist/commands/improve/anti-collapse.js +5 -5
  93. package/dist/commands/improve/autonomy-gate.js +68 -0
  94. package/dist/commands/improve/collapse-detector.js +65 -52
  95. package/dist/commands/improve/consolidate/chunking.js +9 -7
  96. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  97. package/dist/commands/improve/consolidate/merge.js +4 -0
  98. package/dist/commands/improve/consolidate.js +454 -1354
  99. package/dist/commands/improve/content-hash.js +39 -0
  100. package/dist/commands/improve/distill/content-repair.js +4 -10
  101. package/dist/commands/improve/distill/promote-memory.js +89 -64
  102. package/dist/commands/improve/distill/quality-gate.js +118 -42
  103. package/dist/commands/improve/distill-guards.js +1 -1
  104. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  105. package/dist/commands/improve/distill.js +607 -363
  106. package/dist/commands/improve/eligibility.js +165 -79
  107. package/dist/commands/improve/extract-cli.js +35 -126
  108. package/dist/commands/improve/extract-prompt.js +6 -35
  109. package/dist/commands/improve/extract.js +640 -391
  110. package/dist/commands/improve/feedback-valence.js +2 -12
  111. package/dist/commands/improve/improve-cli.js +134 -135
  112. package/dist/commands/improve/improve-result-file.js +30 -50
  113. package/dist/commands/improve/improve-run-types.js +4 -0
  114. package/dist/commands/improve/improve-strategies.js +135 -0
  115. package/dist/commands/improve/improve.js +904 -701
  116. package/dist/commands/improve/locks.js +64 -111
  117. package/dist/commands/improve/loop-stages.js +1110 -923
  118. package/dist/commands/improve/memory/derived-ref.js +124 -0
  119. package/dist/commands/improve/memory/memory-belief.js +79 -7
  120. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  121. package/dist/commands/improve/memory/memory-improve.js +25 -37
  122. package/dist/commands/improve/outcome-loop.js +25 -88
  123. package/dist/commands/improve/preparation.js +1034 -813
  124. package/dist/commands/improve/proactive-maintenance.js +34 -9
  125. package/dist/commands/improve/proposal-envelope.js +31 -0
  126. package/dist/commands/improve/reflect.js +983 -794
  127. package/dist/commands/improve/run-context.js +119 -0
  128. package/dist/commands/improve/salience.js +24 -127
  129. package/dist/commands/improve/session-asset.js +7 -3
  130. package/dist/commands/improve/shared.js +14 -34
  131. package/dist/commands/improve/source-identity.js +28 -0
  132. package/dist/commands/improve/triage.js +20 -17
  133. package/dist/commands/lint/base-linter.js +340 -313
  134. package/dist/commands/lint/env-key-rules.js +31 -47
  135. package/dist/commands/lint/index.js +185 -30
  136. package/dist/commands/{events.js → log.js} +28 -38
  137. package/dist/commands/migrate-cli.js +54 -0
  138. package/dist/commands/migration-tool.js +55 -0
  139. package/dist/commands/observability-cli.js +70 -208
  140. package/dist/commands/proposal/diff-format.js +50 -0
  141. package/dist/commands/proposal/drain-policies.js +0 -6
  142. package/dist/commands/proposal/drain.js +91 -40
  143. package/dist/commands/proposal/proposal-cli.js +134 -132
  144. package/dist/commands/proposal/proposal-types.js +56 -0
  145. package/dist/commands/proposal/proposal.js +83 -65
  146. package/dist/commands/proposal/propose-cli.js +88 -0
  147. package/dist/commands/proposal/propose.js +105 -88
  148. package/dist/commands/proposal/repository.js +1303 -278
  149. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  150. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  151. package/dist/commands/proposal/validators/proposals.js +6 -8
  152. package/dist/commands/read/curate.js +78 -73
  153. package/dist/commands/read/knowledge.js +510 -13
  154. package/dist/commands/read/registry-search.js +2 -2
  155. package/dist/commands/read/remember-cli.js +84 -15
  156. package/dist/commands/read/search-cli.js +203 -96
  157. package/dist/commands/read/search.js +126 -94
  158. package/dist/commands/read/show.js +226 -250
  159. package/dist/commands/registry-cli.js +34 -60
  160. package/dist/commands/remember.js +18 -57
  161. package/dist/commands/sources/add-cli.js +104 -49
  162. package/dist/commands/sources/bundle-cli.js +166 -0
  163. package/dist/commands/sources/bundle-config-ops.js +63 -0
  164. package/dist/commands/sources/info.js +27 -15
  165. package/dist/commands/sources/init.js +30 -40
  166. package/dist/commands/sources/installed-stashes.js +469 -172
  167. package/dist/commands/sources/migration-help.js +7 -4
  168. package/dist/commands/sources/schema-repair.js +10 -9
  169. package/dist/commands/sources/self-update.js +182 -121
  170. package/dist/commands/sources/source-add.js +169 -178
  171. package/dist/commands/sources/source-clone.js +144 -41
  172. package/dist/commands/sources/source-manage.js +94 -59
  173. package/dist/commands/sources/sources-cli.js +64 -205
  174. package/dist/commands/sources/stash-cli.js +91 -54
  175. package/dist/commands/sources/stash-skeleton.js +1 -1
  176. package/dist/commands/tasks/tasks-cli.js +106 -104
  177. package/dist/commands/tasks/tasks.js +445 -262
  178. package/dist/commands/workflow-cli.js +232 -121
  179. package/dist/core/action-contributors.js +1 -1
  180. package/dist/core/activation-policy.js +49 -0
  181. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  182. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  183. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  184. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  185. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  186. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  187. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  188. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  189. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  190. package/dist/core/adapter/adapters/index.js +80 -0
  191. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  192. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  193. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  194. package/dist/core/adapter/adapters/shared.js +286 -0
  195. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  196. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  197. package/dist/core/adapter/bundle-adapter.js +4 -0
  198. package/dist/core/adapter/detect-adapter.js +17 -0
  199. package/dist/core/adapter/recognize-match.js +44 -0
  200. package/dist/core/adapter/registry.js +56 -0
  201. package/dist/core/adapter/types.js +4 -0
  202. package/dist/core/asset/akm-markdown.js +30 -0
  203. package/dist/core/asset/asset-placement.js +243 -0
  204. package/dist/core/asset/asset-ref.js +110 -79
  205. package/dist/core/asset/asset-serialize.js +20 -0
  206. package/dist/core/asset/frontmatter.js +28 -12
  207. package/dist/core/asset/markdown.js +40 -51
  208. package/dist/core/asset/resolve-ref.js +274 -0
  209. package/dist/core/asset/stash-meta.js +2 -2
  210. package/dist/core/bundle-id.js +51 -0
  211. package/dist/core/common.js +281 -86
  212. package/dist/core/config/config-io.js +42 -128
  213. package/dist/core/config/config-schema.js +233 -834
  214. package/dist/core/config/config-sources.js +162 -39
  215. package/dist/core/config/config-types.js +16 -11
  216. package/dist/core/config/config-version.js +29 -0
  217. package/dist/core/config/config-walker.js +126 -37
  218. package/dist/core/config/config.js +154 -331
  219. package/dist/core/config/deep-merge.js +41 -0
  220. package/dist/core/config/engine-semantics.js +28 -0
  221. package/dist/core/config/experimental.js +21 -0
  222. package/dist/core/config/schema/embedding.js +38 -0
  223. package/dist/core/config/schema/engines.js +116 -0
  224. package/dist/core/config/schema/experimental.js +47 -0
  225. package/dist/core/config/schema/feedback.js +31 -0
  226. package/dist/core/config/schema/improve-processes.js +389 -0
  227. package/dist/core/config/schema/improve.js +94 -0
  228. package/dist/core/config/schema/index-config.js +176 -0
  229. package/dist/core/config/schema/output.js +18 -0
  230. package/dist/core/config/schema/primitives.js +94 -0
  231. package/dist/core/config/schema/search.js +30 -0
  232. package/dist/core/config/schema/setup.js +18 -0
  233. package/dist/core/config/schema/sources-bundles.js +169 -0
  234. package/dist/core/config/schema/workflow.js +29 -0
  235. package/dist/core/env-secret-ref.js +155 -20
  236. package/dist/core/errors.js +17 -15
  237. package/dist/core/events-types.js +4 -0
  238. package/dist/core/events.js +46 -128
  239. package/dist/core/extra-params.js +62 -0
  240. package/dist/core/file-change.js +17 -0
  241. package/dist/core/file-lock.js +202 -57
  242. package/dist/core/fs-txn.js +392 -0
  243. package/dist/core/git-message.js +59 -0
  244. package/dist/core/improve-result.js +167 -0
  245. package/dist/core/json-schema.js +142 -0
  246. package/dist/core/lesson-lint.js +1 -17
  247. package/dist/core/logs-db.js +1 -1
  248. package/dist/core/maintenance-barrier.js +135 -0
  249. package/dist/core/migration-operation.js +44 -0
  250. package/dist/core/mutation-target.js +78 -0
  251. package/dist/core/paths.js +22 -25
  252. package/dist/core/platform.js +10 -0
  253. package/dist/core/recognition-util.js +128 -0
  254. package/dist/core/redaction.js +392 -0
  255. package/dist/core/standards/resolve-standards-context.js +36 -65
  256. package/dist/core/standards/resolve-stash-standards.js +2 -2
  257. package/dist/core/standards/resolve-type-conventions.js +5 -5
  258. package/dist/core/state/migrations.js +242 -11
  259. package/dist/core/state-db.js +98 -10
  260. package/dist/core/structured.js +1 -1
  261. package/dist/core/subprocess.js +303 -0
  262. package/dist/core/text-truncation.js +9 -5
  263. package/dist/core/time.js +20 -0
  264. package/dist/core/type-presentation.js +130 -0
  265. package/dist/core/warn.js +0 -3
  266. package/dist/core/write-source.js +834 -118
  267. package/dist/indexer/bundle-identity-guard.js +92 -0
  268. package/dist/indexer/db/graph-db.js +1 -25
  269. package/dist/indexer/db/llm-cache.js +1 -1
  270. package/dist/indexer/ensure-index.js +30 -9
  271. package/dist/indexer/graph/graph-boost.js +9 -30
  272. package/dist/indexer/graph/graph-extraction.js +41 -27
  273. package/dist/indexer/graph/graph-types.js +4 -0
  274. package/dist/indexer/index-writer-lock.js +93 -49
  275. package/dist/indexer/index-written-assets.js +100 -53
  276. package/dist/indexer/indexer.js +746 -329
  277. package/dist/indexer/init.js +18 -25
  278. package/dist/indexer/installations.js +142 -0
  279. package/dist/indexer/passes/dir-staleness.js +18 -10
  280. package/dist/indexer/passes/memory-inference.js +25 -15
  281. package/dist/indexer/passes/metadata.js +412 -243
  282. package/dist/indexer/scan/doc-to-entry.js +160 -0
  283. package/dist/indexer/scan/drain-dir.js +134 -0
  284. package/dist/indexer/search/db-search.js +292 -108
  285. package/dist/indexer/search/fts-query.js +64 -0
  286. package/dist/indexer/search/ranking-contributors.js +145 -25
  287. package/dist/indexer/search/ranking-types.js +4 -0
  288. package/dist/indexer/search/ranking.js +28 -71
  289. package/dist/indexer/search/search-attribution.js +67 -0
  290. package/dist/indexer/search/search-fields.js +18 -3
  291. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  292. package/dist/indexer/search/search-source.js +157 -111
  293. package/dist/indexer/search/semantic-status.js +4 -1
  294. package/dist/indexer/usage/usage-events.js +10 -30
  295. package/dist/indexer/walk/file-context.js +3 -45
  296. package/dist/indexer/walk/matchers.js +42 -34
  297. package/dist/indexer/walk/path-resolver.js +11 -5
  298. package/dist/indexer/walk/walker.js +42 -14
  299. package/dist/integrations/agent/builder-shared.js +7 -0
  300. package/dist/integrations/agent/builders.js +5 -56
  301. package/dist/integrations/agent/config.js +3 -143
  302. package/dist/integrations/agent/detect.js +17 -2
  303. package/dist/integrations/agent/engine-resolution.js +231 -0
  304. package/dist/integrations/agent/index.js +1 -2
  305. package/dist/integrations/agent/model-aliases.js +16 -2
  306. package/dist/integrations/agent/profiles.js +36 -62
  307. package/dist/integrations/agent/prompts.js +46 -18
  308. package/dist/integrations/agent/runner-dispatch.js +93 -4
  309. package/dist/integrations/agent/runner.js +76 -208
  310. package/dist/integrations/agent/spawn.js +88 -196
  311. package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
  312. package/dist/integrations/harnesses/aider/index.js +48 -0
  313. package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
  314. package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
  315. package/dist/integrations/harnesses/amazonq/index.js +45 -0
  316. package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
  317. package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
  318. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  319. package/dist/integrations/harnesses/claude/index.js +24 -35
  320. package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
  321. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  322. package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
  323. package/dist/integrations/harnesses/codex/index.js +52 -0
  324. package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
  325. package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
  326. package/dist/integrations/harnesses/copilot/index.js +48 -0
  327. package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
  328. package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
  329. package/dist/integrations/harnesses/gemini/index.js +48 -0
  330. package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
  331. package/dist/integrations/harnesses/ids.js +24 -0
  332. package/dist/integrations/harnesses/index.js +54 -34
  333. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  334. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  335. package/dist/integrations/harnesses/opencode/index.js +14 -32
  336. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  337. package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
  338. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
  339. package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
  340. package/dist/integrations/harnesses/openhands/index.js +48 -0
  341. package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
  342. package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
  343. package/dist/integrations/harnesses/pi/index.js +45 -0
  344. package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
  345. package/dist/integrations/harnesses/shared.js +17 -0
  346. package/dist/integrations/harnesses/types.js +43 -32
  347. package/dist/integrations/lockfile.js +211 -24
  348. package/dist/integrations/session-logs/index.js +36 -39
  349. package/dist/integrations/session-logs/provider-base.js +113 -0
  350. package/dist/llm/client.js +182 -110
  351. package/dist/llm/embedders/deterministic.js +2 -2
  352. package/dist/llm/embedders/remote.js +21 -9
  353. package/dist/llm/feature-gate.js +17 -57
  354. package/dist/llm/graph-extract.js +12 -13
  355. package/dist/llm/index-passes.js +8 -42
  356. package/dist/llm/memory-infer.js +144 -1
  357. package/dist/llm/metadata-enhance.js +45 -30
  358. package/dist/llm/structured-call.js +16 -8
  359. package/dist/llm/usage-persist.js +30 -5
  360. package/dist/llm/usage-telemetry.js +59 -6
  361. package/dist/output/cli-hints.js +1 -2
  362. package/dist/output/command-registry.js +27 -0
  363. package/dist/output/context.js +22 -7
  364. package/dist/output/format-exempt.js +80 -0
  365. package/dist/output/generic-render.js +251 -0
  366. package/dist/output/html-render.js +11 -16
  367. package/dist/output/render-registry.js +57 -0
  368. package/dist/output/renderers.js +14 -279
  369. package/dist/output/shapes/curate.js +10 -1
  370. package/dist/output/shapes/events.js +12 -7
  371. package/dist/output/shapes/helpers.js +58 -84
  372. package/dist/output/shapes/passthrough.js +11 -39
  373. package/dist/output/shapes/proposal/producer.js +15 -7
  374. package/dist/output/shapes/registry.js +12 -6
  375. package/dist/output/shapes.js +0 -9
  376. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  377. package/dist/output/text/bundle-show.js +7 -0
  378. package/dist/output/text/command-format.js +562 -0
  379. package/dist/output/text/env.js +1 -3
  380. package/dist/output/text/events.js +8 -7
  381. package/dist/output/text/helpers.js +15 -1164
  382. package/dist/output/text/proposal/producer.js +4 -2
  383. package/dist/output/text/proposal-format.js +202 -0
  384. package/dist/output/text/registry-commands.js +1 -2
  385. package/dist/output/text/registry.js +12 -6
  386. package/dist/output/text/show-directives.js +117 -0
  387. package/dist/output/text/show-format.js +103 -0
  388. package/dist/output/text/sync.js +5 -0
  389. package/dist/output/text/workflow-format.js +332 -0
  390. package/dist/output/text/workflow.js +3 -2
  391. package/dist/output/text.js +10 -19
  392. package/dist/registry/factory.js +4 -6
  393. package/dist/registry/origin-resolve.js +16 -27
  394. package/dist/registry/providers/skills-sh.js +3 -3
  395. package/dist/registry/providers/static-index.js +15 -25
  396. package/dist/registry/resolve.js +43 -94
  397. package/dist/registry/semver.js +43 -0
  398. package/dist/runtime.js +81 -12
  399. package/dist/scripts/akm-migrate.js +35529 -0
  400. package/dist/setup/detect.js +5 -7
  401. package/dist/setup/detected-engines.js +136 -0
  402. package/dist/setup/engine-config.js +100 -0
  403. package/dist/setup/registry-stash-loader.js +3 -3
  404. package/dist/setup/semantic-assets.js +12 -9
  405. package/dist/setup/setup.js +444 -208
  406. package/dist/setup/steps/connection-shared.js +120 -0
  407. package/dist/setup/steps/connection.js +108 -305
  408. package/dist/setup/steps/platforms.js +13 -12
  409. package/dist/setup/steps/semantic.js +15 -3
  410. package/dist/setup/steps/sources.js +21 -15
  411. package/dist/setup/steps/stashdir.js +6 -4
  412. package/dist/setup/steps/tasks.js +236 -119
  413. package/dist/setup/steps.js +3 -2
  414. package/dist/sources/freshness.js +39 -0
  415. package/dist/sources/provider-factory.js +11 -17
  416. package/dist/sources/providers/filesystem.js +2 -3
  417. package/dist/sources/providers/git-install.js +278 -34
  418. package/dist/sources/providers/git-provider.js +54 -56
  419. package/dist/sources/providers/git-stash.js +420 -91
  420. package/dist/sources/providers/git.js +2 -2
  421. package/dist/sources/providers/npm.js +16 -19
  422. package/dist/sources/providers/provider-utils.js +47 -22
  423. package/dist/sources/providers/sync-from-ref.js +3 -9
  424. package/dist/sources/providers/website.js +2 -2
  425. package/dist/sources/resolve.js +11 -10
  426. package/dist/sources/snapshot-fetchers/types.js +4 -0
  427. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  428. package/dist/storage/database.js +60 -4
  429. package/dist/storage/engines/sqlite-migrations.js +156 -5
  430. package/dist/storage/locations.js +1 -2
  431. package/dist/storage/repositories/canaries-repository.js +1 -1
  432. package/dist/storage/repositories/events-repository.js +51 -11
  433. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  434. package/dist/storage/repositories/index-connection.js +79 -0
  435. package/dist/storage/repositories/index-db.js +4 -3
  436. package/dist/storage/repositories/index-entries-repository.js +863 -0
  437. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  438. package/dist/storage/repositories/index-entry-types.js +4 -0
  439. package/dist/storage/repositories/index-fts-repository.js +167 -0
  440. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  441. package/dist/storage/repositories/index-meta-repository.js +49 -0
  442. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  443. package/dist/storage/repositories/index-sql.js +12 -0
  444. package/dist/storage/repositories/index-utility-repository.js +356 -0
  445. package/dist/storage/repositories/index-vec-repository.js +250 -0
  446. package/dist/storage/repositories/outcome-repository.js +119 -0
  447. package/dist/storage/repositories/proposals-repository.js +317 -75
  448. package/dist/storage/repositories/registry-cache.js +1 -1
  449. package/dist/storage/repositories/salience-repository.js +172 -0
  450. package/dist/storage/repositories/task-history-repository.js +110 -3
  451. package/dist/storage/repositories/workflow-runs-repository.js +240 -19
  452. package/dist/tasks/backends/cron.js +169 -46
  453. package/dist/tasks/backends/exec-utils.js +76 -3
  454. package/dist/tasks/backends/index.js +6 -9
  455. package/dist/tasks/backends/launchd.js +292 -55
  456. package/dist/tasks/backends/schtasks.js +557 -70
  457. package/dist/tasks/backends/types.js +4 -0
  458. package/dist/tasks/command-executable.js +93 -0
  459. package/dist/tasks/embedded.js +56 -38
  460. package/dist/tasks/parser.js +156 -64
  461. package/dist/tasks/resolve-akm-bin.js +144 -51
  462. package/dist/tasks/runner.js +377 -209
  463. package/dist/tasks/schedule.js +108 -19
  464. package/dist/tasks/scheduler-invocation.js +296 -0
  465. package/dist/tasks/schema.js +1 -1
  466. package/dist/tasks/task-id.js +35 -0
  467. package/dist/tasks/validator.js +30 -16
  468. package/dist/text-import-hook.mjs +1 -1
  469. package/dist/workflows/authoring/authoring.js +104 -43
  470. package/dist/workflows/authoring/scope-key.js +1 -1
  471. package/dist/workflows/cli.js +0 -16
  472. package/dist/workflows/concurrency-policy.js +15 -0
  473. package/dist/workflows/exec/brief.js +450 -0
  474. package/dist/workflows/exec/frozen-judge.js +47 -0
  475. package/dist/workflows/exec/native-executor.js +1038 -0
  476. package/dist/workflows/exec/param-secrets.js +115 -0
  477. package/dist/workflows/exec/report.js +1460 -0
  478. package/dist/workflows/exec/run-workflow.js +602 -0
  479. package/dist/workflows/exec/scheduler.js +71 -0
  480. package/dist/workflows/exec/step-work.js +1190 -0
  481. package/dist/workflows/exec/unit-writer.js +23 -0
  482. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  483. package/dist/workflows/exec/worktree.js +171 -0
  484. package/dist/workflows/ir/compile.js +246 -0
  485. package/dist/workflows/ir/freeze.js +233 -0
  486. package/dist/workflows/ir/params.js +54 -0
  487. package/dist/workflows/ir/plan-hash.js +68 -0
  488. package/dist/workflows/ir/schema.js +540 -0
  489. package/dist/workflows/parser.js +878 -304
  490. package/dist/workflows/program/expressions.js +181 -0
  491. package/dist/workflows/program/schema.js +51 -0
  492. package/dist/workflows/renderer.js +100 -45
  493. package/dist/workflows/resource-limits.js +22 -0
  494. package/dist/workflows/runtime/agent-identity.js +59 -14
  495. package/dist/workflows/runtime/checkin.js +1 -1
  496. package/dist/workflows/runtime/plan-classifier.js +131 -0
  497. package/dist/workflows/runtime/runs.js +376 -119
  498. package/dist/workflows/runtime/unit-checkin.js +45 -0
  499. package/dist/workflows/runtime/unit-phases.js +20 -0
  500. package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
  501. package/dist/workflows/schema.js +1 -11
  502. package/dist/workflows/validate-summary.js +2 -3
  503. package/dist/workflows/validator.js +52 -30
  504. package/docs/README.md +42 -78
  505. package/docs/migration/README.md +8 -0
  506. package/docs/migration/release-notes/0.6.0.md +1 -1
  507. package/docs/migration/release-notes/0.7.0.md +9 -8
  508. package/docs/migration/release-notes/0.9.0.md +158 -14
  509. package/docs/migration/v0.7-to-v0.8.md +46 -47
  510. package/docs/migration/v0.8-to-v0.9.md +844 -0
  511. package/docs/reference/README.md +12 -0
  512. package/docs/reference/data-and-telemetry.md +333 -0
  513. package/package.json +21 -17
  514. package/schemas/akm-asset-envelope.json +93 -0
  515. package/schemas/akm-config.json +4636 -0
  516. package/schemas/akm-task.json +87 -0
  517. package/schemas/akm-workflow.json +373 -0
  518. package/dist/akm-migrate-storage +0 -38
  519. package/dist/assets/help/help-accept.md +0 -12
  520. package/dist/assets/help/help-improve.md +0 -84
  521. package/dist/assets/help/help-proposals.md +0 -17
  522. package/dist/assets/help/help-propose.md +0 -17
  523. package/dist/assets/help/help-reject.md +0 -11
  524. package/dist/assets/profiles/frequent.json +0 -13
  525. package/dist/assets/profiles/recombine-only.json +0 -21
  526. package/dist/assets/profiles/reflect-distill.json +0 -30
  527. package/dist/assets/profiles/synthesize.json +0 -15
  528. package/dist/assets/prompts/procedural-system.md +0 -44
  529. package/dist/assets/prompts/recombine-system.md +0 -40
  530. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  531. package/dist/assets/tasks/core/backup.yml +0 -4
  532. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  533. package/dist/assets/templates/html/default.html +0 -78
  534. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  535. package/dist/assets/wiki/index-template.md +0 -12
  536. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  537. package/dist/assets/wiki/log-template.md +0 -8
  538. package/dist/assets/wiki/schema-template.md +0 -61
  539. package/dist/cli/config-migrate.js +0 -150
  540. package/dist/cli/config-validate.js +0 -39
  541. package/dist/commands/graph/graph-cli.js +0 -124
  542. package/dist/commands/graph/graph.js +0 -487
  543. package/dist/commands/improve/calibration.js +0 -161
  544. package/dist/commands/improve/dedup.js +0 -482
  545. package/dist/commands/improve/extract-watch.js +0 -140
  546. package/dist/commands/improve/hot-probation.js +0 -45
  547. package/dist/commands/improve/improve-auto-accept.js +0 -276
  548. package/dist/commands/improve/improve-profiles.js +0 -168
  549. package/dist/commands/improve/procedural.js +0 -398
  550. package/dist/commands/improve/recombine.js +0 -818
  551. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  552. package/dist/commands/lint/agent-linter.js +0 -44
  553. package/dist/commands/lint/command-linter.js +0 -44
  554. package/dist/commands/lint/default-linter.js +0 -16
  555. package/dist/commands/lint/fact-linter.js +0 -39
  556. package/dist/commands/lint/knowledge-linter.js +0 -16
  557. package/dist/commands/lint/memory-linter.js +0 -61
  558. package/dist/commands/lint/registry.js +0 -41
  559. package/dist/commands/lint/skill-linter.js +0 -45
  560. package/dist/commands/lint/task-linter.js +0 -50
  561. package/dist/commands/lint/workflow-linter.js +0 -81
  562. package/dist/commands/proposal/legacy-import.js +0 -115
  563. package/dist/commands/sources/history.js +0 -196
  564. package/dist/commands/tasks/default-tasks.js +0 -186
  565. package/dist/commands/wiki-cli.js +0 -292
  566. package/dist/core/asset/asset-registry.js +0 -76
  567. package/dist/core/asset/asset-spec.js +0 -259
  568. package/dist/core/config/config-migration.js +0 -602
  569. package/dist/core/deep-merge.js +0 -38
  570. package/dist/core/eval/rank-metrics.js +0 -113
  571. package/dist/core/ripgrep/install.js +0 -163
  572. package/dist/core/ripgrep/resolve.js +0 -81
  573. package/dist/indexer/db/db.js +0 -1413
  574. package/dist/indexer/manifest.js +0 -170
  575. package/dist/indexer/passes/metadata-contributors.js +0 -31
  576. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  577. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
  578. package/dist/llm/call-ai.js +0 -62
  579. package/dist/llm/memory-infer-impl.js +0 -138
  580. package/dist/output/shapes/distill.js +0 -14
  581. package/dist/output/shapes/history.js +0 -11
  582. package/dist/output/text/distill.js +0 -6
  583. package/dist/output/text/enable-disable.js +0 -8
  584. package/dist/output/text/history.js +0 -6
  585. package/dist/output/text/wiki.js +0 -16
  586. package/dist/registry/build-index.js +0 -386
  587. package/dist/scripts/migrate-storage.js +0 -19108
  588. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
  589. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  590. package/dist/setup/legacy-config.js +0 -106
  591. package/dist/storage/repositories/consolidation-repository.js +0 -38
  592. package/dist/storage/repositories/recombine-repository.js +0 -213
  593. package/dist/wiki/wiki-templates.js +0 -15
  594. package/dist/wiki/wiki.js +0 -1012
  595. package/dist/workflows/db.js +0 -215
  596. package/docs/data-and-telemetry.md +0 -226
  597. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  598. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -1,9 +1,9 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- import { parseAssetRef } from "../../core/asset/asset-ref.js";
5
4
  import { assembleAsset } from "../../core/asset/asset-serialize.js";
6
5
  import { parseFrontmatter } from "../../core/asset/frontmatter.js";
6
+ import { parseRefInput } from "../../core/asset/resolve-ref.js";
7
7
  function hasNonEmptyList(value) {
8
8
  return Array.isArray(value) && value.some((item) => typeof item === "string" && item.trim().length > 0);
9
9
  }
@@ -43,11 +43,17 @@ function deriveDescription(body, description) {
43
43
  ?.slice(0, 160);
44
44
  }
45
45
  export function deriveKnowledgeRef(inputRef) {
46
- const parsed = parseAssetRef(inputRef);
47
- return `knowledge:${parsed.name}`;
46
+ const parsed = parseRefInput(inputRef);
47
+ const leaf = parsed.name.split("/").filter(Boolean).at(-1) ?? parsed.name;
48
+ const safe = leaf
49
+ .toLowerCase()
50
+ .replace(/[^a-z0-9-]+/g, "-")
51
+ .replace(/-+/g, "-")
52
+ .replace(/^-|-$/g, "");
53
+ return `knowledge/${safe}`;
48
54
  }
49
55
  function collectPromotionFeatures(input) {
50
- const parsed = parseAssetRef(input.inputRef);
56
+ const parsed = parseRefInput(input.inputRef);
51
57
  const blockedBy = [];
52
58
  if (parsed.type !== "memory") {
53
59
  return { blockedBy: ["not-memory"] };
@@ -112,14 +118,14 @@ function buildKnowledgeContent(input) {
112
118
  const body = parsedContent.content.trim();
113
119
  const description = typeof fm.description === "string" ? fm.description.trim() : undefined;
114
120
  const normalizedDescription = deriveDescription(body, description);
115
- const sources = [input.inputRef];
121
+ const xrefs = [input.inputRef];
116
122
  if (typeof fm.source === "string" && fm.source.trim())
117
- sources.push(fm.source.trim());
123
+ xrefs.push(fm.source.trim());
118
124
  const knowledgeFrontmatter = {
119
125
  ...(normalizedDescription ? { description: normalizedDescription } : {}),
120
126
  ...(Array.isArray(fm.tags) ? { tags: fm.tags } : {}),
121
127
  ...(typeof fm.observed_at === "string" && fm.observed_at.trim() ? { observed_at: fm.observed_at.trim() } : {}),
122
- sources,
128
+ xrefs,
123
129
  };
124
130
  return assembleAsset(knowledgeFrontmatter, body);
125
131
  }
@@ -288,56 +294,6 @@ export function evaluateMemoryPromotionBenchmark(cases, policy = DEFAULT_PROMOTI
288
294
  })),
289
295
  };
290
296
  }
291
- const CANDIDATE_MODELS = [
292
- {
293
- name: "balanced-evidence",
294
- positiveWeight: 0.8,
295
- repeatedPositiveWeight: 0.65,
296
- noPositivePenalty: 0.9,
297
- singlePositivePenalty: 0.7,
298
- negativeWeight: 2.0,
299
- curatedWeight: 0.55,
300
- confidenceWeight: 0.7,
301
- sourceWeight: 0.4,
302
- observedAtWeight: 0.4,
303
- descriptionWeight: 0.2,
304
- tagWeight: 0.15,
305
- substantiveBodyWeight: 0.15,
306
- tentativePenalty: 1.1,
307
- },
308
- {
309
- name: "strict-feedback",
310
- positiveWeight: 0.75,
311
- repeatedPositiveWeight: 0.8,
312
- noPositivePenalty: 1.1,
313
- singlePositivePenalty: 0.9,
314
- negativeWeight: 2.25,
315
- curatedWeight: 0.45,
316
- confidenceWeight: 0.55,
317
- sourceWeight: 0.35,
318
- observedAtWeight: 0.35,
319
- descriptionWeight: 0.15,
320
- tagWeight: 0.1,
321
- substantiveBodyWeight: 0.1,
322
- tentativePenalty: 1.15,
323
- },
324
- {
325
- name: "metadata-friendly",
326
- positiveWeight: 0.7,
327
- repeatedPositiveWeight: 0.55,
328
- noPositivePenalty: 0.75,
329
- singlePositivePenalty: 0.55,
330
- negativeWeight: 1.85,
331
- curatedWeight: 0.75,
332
- confidenceWeight: 0.9,
333
- sourceWeight: 0.5,
334
- observedAtWeight: 0.5,
335
- descriptionWeight: 0.25,
336
- tagWeight: 0.2,
337
- substantiveBodyWeight: 0.2,
338
- tentativePenalty: 1.0,
339
- },
340
- ];
341
297
  function thresholdCandidates() {
342
298
  const values = [];
343
299
  for (let value = 2.4; value <= 4.2; value += 0.2) {
@@ -416,12 +372,12 @@ const METADATA_BASELINE = {
416
372
  };
417
373
  },
418
374
  };
419
- export function selectPromotionPolicy(corpus) {
375
+ export function selectPromotionPolicy(corpus, candidates) {
420
376
  const trainingCases = corpus.filter((testCase) => (testCase.split ?? "train") === "train");
421
377
  const heldOutCases = corpus.filter((testCase) => (testCase.split ?? "train") === "heldout");
422
378
  let bestPolicy;
423
379
  let bestTraining;
424
- for (const model of CANDIDATE_MODELS) {
380
+ for (const model of candidates) {
425
381
  for (const threshold of thresholdCandidates()) {
426
382
  const policy = {
427
383
  name: model.name,
@@ -478,842 +434,31 @@ export function selectPromotionPolicy(corpus) {
478
434
  strictlyBeatsBaselines,
479
435
  };
480
436
  }
481
- // Frozen module-load selection. The promotion policy's selected model was
482
- // historically computed by running `selectPromotionPolicy` over a large
483
- // hardcoded benchmark corpus at import time (a full grid search on every module
484
- // load). That corpus and the grid search now live in the bench test
485
- // (tests/commands/distill/distill-promotion-policy.bench.test.ts), which
486
- // re-runs `selectPromotionPolicy(DEFAULT_PROMOTION_POLICY_CORPUS)` and asserts
487
- // deep equality with this constant so the freeze stays honest.
488
437
  export const DEFAULT_PROMOTION_POLICY_SELECTION = {
489
- corpusSize: 21,
490
- trainingSize: 14,
491
- heldOutSize: 7,
492
438
  selectedModel: {
493
439
  name: "balanced-evidence",
494
- threshold: 3.8,
495
- },
496
- training: {
497
- total: 14,
498
- correct: 13,
499
- falsePositives: 1,
500
- falseNegatives: 0,
501
- accuracy: 0.9285714285714286,
502
- precision: 0.8333333333333334,
503
- recall: 1,
504
- f1: 0.9090909090909091,
505
- truePositives: 5,
506
- trueNegatives: 8,
507
- netOutcomeScore: 11,
508
- capturedPromoteValue: 15,
509
- preventedFalsePromotionCost: 33,
510
- results: [
511
- {
512
- name: "deploy-vpn-required",
513
- expectPromote: true,
514
- assessment: {
515
- applicable: true,
516
- promote: true,
517
- score: 4.250000000000001,
518
- threshold: 3.8,
519
- knowledgeRef: "knowledge:deploy-vpn-required",
520
- content: "---\ndescription: VPN required before deploy\ntags:\n - deploy\n - ops\nobserved_at: 2026-04-20\nsources:\n - memory:deploy-vpn-required\n - skill:deploy\n---\n\nAlways connect the VPN before starting production deploys.\n",
521
- blockedBy: [],
522
- positiveSignals: [
523
- "2 positive feedback events",
524
- "repeated reinforcement",
525
- "strong confidence",
526
- "linked source",
527
- "observed_at present",
528
- "description present",
529
- "tagged memory",
530
- "substantive body",
531
- ],
532
- negativeSignals: [],
533
- modelName: "balanced-evidence",
534
- },
535
- passed: true,
536
- },
537
- {
538
- name: "release-smoke-test",
539
- expectPromote: true,
540
- assessment: {
541
- applicable: true,
542
- promote: true,
543
- score: 5.240000000000002,
544
- threshold: 3.8,
545
- knowledgeRef: "knowledge:release-smoke-test",
546
- content: "---\ndescription: Smoke test gates release\nobserved_at: 2026-04-18\nsources:\n - memory:release-smoke-test\n - skill:release\n---\n\nRun the smoke test before tagging a release candidate.\n",
547
- blockedBy: [],
548
- positiveSignals: [
549
- "3 positive feedback events",
550
- "repeated reinforcement",
551
- "curated quality",
552
- "strong confidence",
553
- "linked source",
554
- "observed_at present",
555
- "description present",
556
- "substantive body",
557
- ],
558
- negativeSignals: [],
559
- modelName: "balanced-evidence",
560
- },
561
- passed: true,
562
- },
563
- {
564
- name: "kubernetes-rollout-check",
565
- expectPromote: true,
566
- assessment: {
567
- applicable: true,
568
- promote: true,
569
- score: 4.250000000000001,
570
- threshold: 3.8,
571
- knowledgeRef: "knowledge:kubernetes-rollout-check",
572
- content: "---\ndescription: Verify rollout status after apply\ntags:\n - k8s\nobserved_at: 2026-04-15\nsources:\n - memory:kubernetes-rollout-check\n - skill:k8s\n---\n\nCheck rollout status after kubectl apply before declaring success.\n",
573
- blockedBy: [],
574
- positiveSignals: [
575
- "2 positive feedback events",
576
- "repeated reinforcement",
577
- "strong confidence",
578
- "linked source",
579
- "observed_at present",
580
- "description present",
581
- "tagged memory",
582
- "substantive body",
583
- ],
584
- negativeSignals: [],
585
- modelName: "balanced-evidence",
586
- },
587
- passed: true,
588
- },
589
- {
590
- name: "incident-channel-rule",
591
- expectPromote: true,
592
- assessment: {
593
- applicable: true,
594
- promote: true,
595
- score: 5.450000000000002,
596
- threshold: 3.8,
597
- knowledgeRef: "knowledge:incident-channel-rule",
598
- content: "---\ndescription: Incident bridge stays single-threaded\nobserved_at: 2026-04-12\nsources:\n - memory:incident-channel-rule\n - skill:incident\n---\n\nKeep one operator narrating decisions in the incident bridge to avoid conflicting instructions.\n",
599
- blockedBy: [],
600
- positiveSignals: [
601
- "3 positive feedback events",
602
- "repeated reinforcement",
603
- "curated quality",
604
- "strong confidence",
605
- "linked source",
606
- "observed_at present",
607
- "description present",
608
- "substantive body",
609
- ],
610
- negativeSignals: [],
611
- modelName: "balanced-evidence",
612
- },
613
- passed: true,
614
- },
615
- {
616
- name: "weak-single-signal",
617
- expectPromote: false,
618
- assessment: {
619
- applicable: true,
620
- promote: false,
621
- score: 2.1,
622
- threshold: 3.8,
623
- knowledgeRef: "knowledge:weak-single-signal",
624
- blockedBy: [],
625
- positiveSignals: [
626
- "1 positive feedback event",
627
- "strong confidence",
628
- "linked source",
629
- "observed_at present",
630
- "description present",
631
- "tagged memory",
632
- "substantive body",
633
- ],
634
- negativeSignals: ["only one reinforcing feedback event"],
635
- modelName: "balanced-evidence",
636
- },
637
- passed: true,
638
- },
639
- {
640
- name: "contested-fact",
641
- expectPromote: false,
642
- assessment: {
643
- applicable: true,
644
- promote: false,
645
- score: 2.65,
646
- threshold: 3.8,
647
- knowledgeRef: "knowledge:contested-fact",
648
- blockedBy: [],
649
- positiveSignals: [
650
- "2 positive feedback events",
651
- "repeated reinforcement",
652
- "curated quality",
653
- "strong confidence",
654
- "linked source",
655
- "observed_at present",
656
- "description present",
657
- "substantive body",
658
- ],
659
- negativeSignals: ["1 negative feedback event"],
660
- modelName: "balanced-evidence",
661
- },
662
- passed: true,
663
- },
664
- {
665
- name: "tentative-fact",
666
- expectPromote: false,
667
- assessment: {
668
- applicable: true,
669
- promote: false,
670
- score: 3.0000000000000004,
671
- threshold: 3.8,
672
- knowledgeRef: "knowledge:tentative-fact",
673
- blockedBy: [],
674
- positiveSignals: [
675
- "2 positive feedback events",
676
- "repeated reinforcement",
677
- "strong confidence",
678
- "linked source",
679
- "observed_at present",
680
- "description present",
681
- "substantive body",
682
- ],
683
- negativeSignals: ["tentative language"],
684
- modelName: "balanced-evidence",
685
- },
686
- passed: true,
687
- },
688
- {
689
- name: "subjective-preference",
690
- expectPromote: false,
691
- assessment: {
692
- applicable: true,
693
- promote: false,
694
- score: 0,
695
- threshold: 3.8,
696
- knowledgeRef: "knowledge:subjective-preference",
697
- blockedBy: ["subjective-memory"],
698
- positiveSignals: [],
699
- negativeSignals: [],
700
- modelName: "balanced-evidence",
701
- },
702
- passed: true,
703
- },
704
- {
705
- name: "feedback-conflict",
706
- expectPromote: false,
707
- assessment: {
708
- applicable: true,
709
- promote: true,
710
- score: 4.1000000000000005,
711
- threshold: 3.8,
712
- knowledgeRef: "knowledge:feedback-conflict",
713
- content: "---\ndescription: VPN required before deploy\nobserved_at: 2026-04-20\nsources:\n - memory:feedback-conflict\n - skill:deploy\n---\n\nAlways connect the VPN before starting production deploys.\n",
714
- blockedBy: [],
715
- positiveSignals: [
716
- "2 positive feedback events",
717
- "repeated reinforcement",
718
- "strong confidence",
719
- "linked source",
720
- "observed_at present",
721
- "description present",
722
- "substantive body",
723
- ],
724
- negativeSignals: [],
725
- modelName: "balanced-evidence",
726
- },
727
- passed: false,
728
- },
729
- {
730
- name: "derived-memory",
731
- expectPromote: false,
732
- assessment: {
733
- applicable: true,
734
- promote: false,
735
- score: 3.7,
736
- threshold: 3.8,
737
- knowledgeRef: "knowledge:derived-memory",
738
- blockedBy: [],
739
- positiveSignals: [
740
- "2 positive feedback events",
741
- "repeated reinforcement",
742
- "strong confidence",
743
- "linked source",
744
- "description present",
745
- "substantive body",
746
- ],
747
- negativeSignals: [],
748
- modelName: "balanced-evidence",
749
- },
750
- passed: true,
751
- },
752
- {
753
- name: "staging-cutover-order",
754
- expectPromote: true,
755
- assessment: {
756
- applicable: true,
757
- promote: true,
758
- score: 4.840000000000001,
759
- threshold: 3.8,
760
- knowledgeRef: "knowledge:staging-cutover-order",
761
- content: "---\ndescription: Cut over staging after migrations\ntags:\n - db\n - deploy\nobserved_at: 2026-04-10\nsources:\n - memory:staging-cutover-order\n - skill:database\n---\n\nRun database migrations before shifting staging traffic onto the new release.\n",
762
- blockedBy: [],
763
- positiveSignals: [
764
- "3 positive feedback events",
765
- "repeated reinforcement",
766
- "strong confidence",
767
- "linked source",
768
- "observed_at present",
769
- "description present",
770
- "tagged memory",
771
- "substantive body",
772
- ],
773
- negativeSignals: [],
774
- modelName: "balanced-evidence",
775
- },
776
- passed: true,
777
- },
778
- {
779
- name: "temporary-token-workaround",
780
- expectPromote: false,
781
- assessment: {
782
- applicable: true,
783
- promote: false,
784
- score: 0,
785
- threshold: 3.8,
786
- knowledgeRef: "knowledge:temporary-token-workaround",
787
- blockedBy: ["expiring-memory"],
788
- positiveSignals: [],
789
- negativeSignals: [],
790
- modelName: "balanced-evidence",
791
- },
792
- passed: true,
793
- },
794
- {
795
- name: "thin-metadata-memory",
796
- expectPromote: false,
797
- assessment: {
798
- applicable: true,
799
- promote: false,
800
- score: 3,
801
- threshold: 3.8,
802
- knowledgeRef: "knowledge:thin-metadata-memory",
803
- blockedBy: [],
804
- positiveSignals: [
805
- "2 positive feedback events",
806
- "repeated reinforcement",
807
- "linked source",
808
- "description present",
809
- "substantive body",
810
- ],
811
- negativeSignals: [],
812
- modelName: "balanced-evidence",
813
- },
814
- passed: true,
815
- },
816
- {
817
- name: "promoted-quality-memory",
818
- expectPromote: false,
819
- assessment: {
820
- applicable: true,
821
- promote: false,
822
- score: 0,
823
- threshold: 3.8,
824
- knowledgeRef: "knowledge:promoted-quality-memory",
825
- blockedBy: ["proposed-quality"],
826
- positiveSignals: [],
827
- negativeSignals: [],
828
- modelName: "balanced-evidence",
829
- },
830
- passed: true,
831
- },
832
- ],
833
- },
834
- heldOut: {
835
- total: 7,
836
- correct: 7,
837
- falsePositives: 0,
838
- falseNegatives: 0,
839
- accuracy: 1,
840
- precision: 1,
841
- recall: 1,
842
- f1: 1,
843
- truePositives: 4,
844
- trueNegatives: 3,
845
- netOutcomeScore: 14,
846
- capturedPromoteValue: 14,
847
- preventedFalsePromotionCost: 14,
848
- results: [
849
- {
850
- name: "kafka-rebalance-note",
851
- expectPromote: true,
852
- assessment: {
853
- applicable: true,
854
- promote: true,
855
- score: 5.600000000000002,
856
- threshold: 3.8,
857
- knowledgeRef: "knowledge:kafka-rebalance-note",
858
- content: "---\ndescription: Pause consumers during rebalance\ntags:\n - kafka\n - ops\nobserved_at: 2026-04-08\nsources:\n - memory:kafka-rebalance-note\n - skill:kafka\n---\n\nPause consumers during partition rebalances to avoid duplicate processing while assignments settle.\n",
859
- blockedBy: [],
860
- positiveSignals: [
861
- "3 positive feedback events",
862
- "repeated reinforcement",
863
- "curated quality",
864
- "strong confidence",
865
- "linked source",
866
- "observed_at present",
867
- "description present",
868
- "tagged memory",
869
- "substantive body",
870
- ],
871
- negativeSignals: [],
872
- modelName: "balanced-evidence",
873
- },
874
- passed: true,
875
- },
876
- {
877
- name: "gha-token-scope",
878
- expectPromote: true,
879
- assessment: {
880
- applicable: true,
881
- promote: true,
882
- score: 4.04,
883
- threshold: 3.8,
884
- knowledgeRef: "knowledge:gha-token-scope",
885
- content: "---\ndescription: Minimize GitHub token scopes\ntags:\n - gha\n - security\nobserved_at: 2026-04-07\nsources:\n - memory:gha-token-scope\n - skill:github-actions\n---\n\nUse the narrowest GitHub token scope that still allows the workflow step to succeed.\n",
886
- blockedBy: [],
887
- positiveSignals: [
888
- "2 positive feedback events",
889
- "repeated reinforcement",
890
- "strong confidence",
891
- "linked source",
892
- "observed_at present",
893
- "description present",
894
- "tagged memory",
895
- "substantive body",
896
- ],
897
- negativeSignals: [],
898
- modelName: "balanced-evidence",
899
- },
900
- passed: true,
901
- },
902
- {
903
- name: "helm-debug-guess",
904
- expectPromote: false,
905
- assessment: {
906
- applicable: true,
907
- promote: false,
908
- score: 2.7899999999999996,
909
- threshold: 3.8,
910
- knowledgeRef: "knowledge:helm-debug-guess",
911
- blockedBy: [],
912
- positiveSignals: [
913
- "2 positive feedback events",
914
- "repeated reinforcement",
915
- "strong confidence",
916
- "linked source",
917
- "observed_at present",
918
- "description present",
919
- "substantive body",
920
- ],
921
- negativeSignals: ["tentative language"],
922
- modelName: "balanced-evidence",
923
- },
924
- passed: true,
925
- },
926
- {
927
- name: "terraform-state-location",
928
- expectPromote: true,
929
- assessment: {
930
- applicable: true,
931
- promote: true,
932
- score: 5.600000000000002,
933
- threshold: 3.8,
934
- knowledgeRef: "knowledge:terraform-state-location",
935
- content: "---\ndescription: Use remote state locks\ntags:\n - terraform\nobserved_at: 2026-04-04\nsources:\n - memory:terraform-state-location\n - skill:terraform\n---\n\nUse remote state with locking enabled before applying shared Terraform stacks.\n",
936
- blockedBy: [],
937
- positiveSignals: [
938
- "3 positive feedback events",
939
- "repeated reinforcement",
940
- "curated quality",
941
- "strong confidence",
942
- "linked source",
943
- "observed_at present",
944
- "description present",
945
- "tagged memory",
946
- "substantive body",
947
- ],
948
- negativeSignals: [],
949
- modelName: "balanced-evidence",
950
- },
951
- passed: true,
952
- },
953
- {
954
- name: "mixed-signal-rollback",
955
- expectPromote: false,
956
- assessment: {
957
- applicable: true,
958
- promote: false,
959
- score: 2.65,
960
- threshold: 3.8,
961
- knowledgeRef: "knowledge:mixed-signal-rollback",
962
- blockedBy: [],
963
- positiveSignals: [
964
- "2 positive feedback events",
965
- "repeated reinforcement",
966
- "curated quality",
967
- "strong confidence",
968
- "linked source",
969
- "observed_at present",
970
- "description present",
971
- "substantive body",
972
- ],
973
- negativeSignals: ["1 negative feedback event"],
974
- modelName: "balanced-evidence",
975
- },
976
- passed: true,
977
- },
978
- {
979
- name: "cache-ttl-fact",
980
- expectPromote: true,
981
- assessment: {
982
- applicable: true,
983
- promote: true,
984
- score: 4.250000000000001,
985
- threshold: 3.8,
986
- knowledgeRef: "knowledge:cache-ttl-fact",
987
- content: "---\ndescription: Cache TTL defaults to five minutes\ntags:\n - cache\n - platform\nobserved_at: 2026-04-02\nsources:\n - memory:cache-ttl-fact\n - skill:platform\n---\n\nThe shared platform cache TTL defaults to five minutes unless the service opts out.\n",
988
- blockedBy: [],
989
- positiveSignals: [
990
- "2 positive feedback events",
991
- "repeated reinforcement",
992
- "strong confidence",
993
- "linked source",
994
- "observed_at present",
995
- "description present",
996
- "tagged memory",
997
- "substantive body",
998
- ],
999
- negativeSignals: [],
1000
- modelName: "balanced-evidence",
1001
- },
1002
- passed: true,
1003
- },
1004
- {
1005
- name: "personal-shell-alias",
1006
- expectPromote: false,
1007
- assessment: {
1008
- applicable: true,
1009
- promote: false,
1010
- score: 0,
1011
- threshold: 3.8,
1012
- knowledgeRef: "knowledge:personal-shell-alias",
1013
- blockedBy: ["subjective-memory"],
1014
- positiveSignals: [],
1015
- negativeSignals: [],
1016
- modelName: "balanced-evidence",
1017
- },
1018
- passed: true,
1019
- },
1020
- ],
440
+ positiveWeight: 0.8,
441
+ repeatedPositiveWeight: 0.65,
442
+ noPositivePenalty: 0.9,
443
+ singlePositivePenalty: 0.7,
444
+ negativeWeight: 2.0,
445
+ curatedWeight: 0.55,
446
+ confidenceWeight: 0.7,
447
+ sourceWeight: 0.4,
448
+ observedAtWeight: 0.4,
449
+ descriptionWeight: 0.2,
450
+ tagWeight: 0.15,
451
+ substantiveBodyWeight: 0.15,
452
+ tentativePenalty: 1.1,
1021
453
  },
1022
- baselines: [
1023
- {
1024
- name: "baseline-positive-feedback",
1025
- heldOut: {
1026
- total: 7,
1027
- correct: 5,
1028
- falsePositives: 2,
1029
- falseNegatives: 0,
1030
- accuracy: 0.7142857142857143,
1031
- precision: 0.6666666666666666,
1032
- recall: 1,
1033
- f1: 0.8,
1034
- truePositives: 4,
1035
- trueNegatives: 1,
1036
- netOutcomeScore: 4,
1037
- capturedPromoteValue: 14,
1038
- preventedFalsePromotionCost: 4,
1039
- results: [
1040
- {
1041
- name: "kafka-rebalance-note",
1042
- expectPromote: true,
1043
- assessment: {
1044
- applicable: true,
1045
- promote: true,
1046
- score: 3,
1047
- threshold: 2,
1048
- knowledgeRef: "knowledge:kafka-rebalance-note",
1049
- content: "---\ndescription: Pause consumers during rebalance\ntags:\n - kafka\n - ops\nobserved_at: 2026-04-08\nsources:\n - memory:kafka-rebalance-note\n - skill:kafka\n---\n\nPause consumers during partition rebalances to avoid duplicate processing while assignments settle.\n",
1050
- blockedBy: [],
1051
- positiveSignals: ["baseline positive feedback rule"],
1052
- negativeSignals: [],
1053
- modelName: "baseline-positive-feedback",
1054
- },
1055
- passed: true,
1056
- },
1057
- {
1058
- name: "gha-token-scope",
1059
- expectPromote: true,
1060
- assessment: {
1061
- applicable: true,
1062
- promote: true,
1063
- score: 2,
1064
- threshold: 2,
1065
- knowledgeRef: "knowledge:gha-token-scope",
1066
- content: "---\ndescription: Minimize GitHub token scopes\ntags:\n - gha\n - security\nobserved_at: 2026-04-07\nsources:\n - memory:gha-token-scope\n - skill:github-actions\n---\n\nUse the narrowest GitHub token scope that still allows the workflow step to succeed.\n",
1067
- blockedBy: [],
1068
- positiveSignals: ["baseline positive feedback rule"],
1069
- negativeSignals: [],
1070
- modelName: "baseline-positive-feedback",
1071
- },
1072
- passed: true,
1073
- },
1074
- {
1075
- name: "helm-debug-guess",
1076
- expectPromote: false,
1077
- assessment: {
1078
- applicable: true,
1079
- promote: true,
1080
- score: 2,
1081
- threshold: 2,
1082
- knowledgeRef: "knowledge:helm-debug-guess",
1083
- content: "---\ndescription: Helm upgrade might need --debug\nobserved_at: 2026-04-05\nsources:\n - memory:helm-debug-guess\n - skill:helm\n---\n\nIt might help to add --debug to helm upgrade output during failures.\n",
1084
- blockedBy: [],
1085
- positiveSignals: ["baseline positive feedback rule"],
1086
- negativeSignals: [],
1087
- modelName: "baseline-positive-feedback",
1088
- },
1089
- passed: false,
1090
- },
1091
- {
1092
- name: "terraform-state-location",
1093
- expectPromote: true,
1094
- assessment: {
1095
- applicable: true,
1096
- promote: true,
1097
- score: 3,
1098
- threshold: 2,
1099
- knowledgeRef: "knowledge:terraform-state-location",
1100
- content: "---\ndescription: Use remote state locks\ntags:\n - terraform\nobserved_at: 2026-04-04\nsources:\n - memory:terraform-state-location\n - skill:terraform\n---\n\nUse remote state with locking enabled before applying shared Terraform stacks.\n",
1101
- blockedBy: [],
1102
- positiveSignals: ["baseline positive feedback rule"],
1103
- negativeSignals: [],
1104
- modelName: "baseline-positive-feedback",
1105
- },
1106
- passed: true,
1107
- },
1108
- {
1109
- name: "mixed-signal-rollback",
1110
- expectPromote: false,
1111
- assessment: {
1112
- applicable: true,
1113
- promote: true,
1114
- score: 2,
1115
- threshold: 2,
1116
- knowledgeRef: "knowledge:mixed-signal-rollback",
1117
- content: "---\ndescription: Rollback the cluster immediately\nobserved_at: 2026-04-03\nsources:\n - memory:mixed-signal-rollback\n - skill:incident\n---\n\nRollback the cluster immediately after any 5xx spike.\n",
1118
- blockedBy: [],
1119
- positiveSignals: ["baseline positive feedback rule"],
1120
- negativeSignals: [],
1121
- modelName: "baseline-positive-feedback",
1122
- },
1123
- passed: false,
1124
- },
1125
- {
1126
- name: "cache-ttl-fact",
1127
- expectPromote: true,
1128
- assessment: {
1129
- applicable: true,
1130
- promote: true,
1131
- score: 2,
1132
- threshold: 2,
1133
- knowledgeRef: "knowledge:cache-ttl-fact",
1134
- content: "---\ndescription: Cache TTL defaults to five minutes\ntags:\n - cache\n - platform\nobserved_at: 2026-04-02\nsources:\n - memory:cache-ttl-fact\n - skill:platform\n---\n\nThe shared platform cache TTL defaults to five minutes unless the service opts out.\n",
1135
- blockedBy: [],
1136
- positiveSignals: ["baseline positive feedback rule"],
1137
- negativeSignals: [],
1138
- modelName: "baseline-positive-feedback",
1139
- },
1140
- passed: true,
1141
- },
1142
- {
1143
- name: "personal-shell-alias",
1144
- expectPromote: false,
1145
- assessment: {
1146
- applicable: true,
1147
- promote: false,
1148
- score: 0,
1149
- threshold: 2,
1150
- knowledgeRef: "knowledge:personal-shell-alias",
1151
- blockedBy: ["subjective-memory"],
1152
- positiveSignals: [],
1153
- negativeSignals: [],
1154
- modelName: "baseline-positive-feedback",
1155
- },
1156
- passed: true,
1157
- },
1158
- ],
1159
- },
1160
- noWorseThanSelected: true,
1161
- strictWin: true,
1162
- strictWinMetrics: ["f1", "netOutcomeScore", "accuracy"],
1163
- },
1164
- {
1165
- name: "baseline-metadata",
1166
- heldOut: {
1167
- total: 7,
1168
- correct: 5,
1169
- falsePositives: 2,
1170
- falseNegatives: 0,
1171
- accuracy: 0.7142857142857143,
1172
- precision: 0.6666666666666666,
1173
- recall: 1,
1174
- f1: 0.8,
1175
- truePositives: 4,
1176
- trueNegatives: 1,
1177
- netOutcomeScore: 4,
1178
- capturedPromoteValue: 14,
1179
- preventedFalsePromotionCost: 4,
1180
- results: [
1181
- {
1182
- name: "kafka-rebalance-note",
1183
- expectPromote: true,
1184
- assessment: {
1185
- applicable: true,
1186
- promote: true,
1187
- score: 2,
1188
- threshold: 3,
1189
- knowledgeRef: "knowledge:kafka-rebalance-note",
1190
- content: "---\ndescription: Pause consumers during rebalance\ntags:\n - kafka\n - ops\nobserved_at: 2026-04-08\nsources:\n - memory:kafka-rebalance-note\n - skill:kafka\n---\n\nPause consumers during partition rebalances to avoid duplicate processing while assignments settle.\n",
1191
- blockedBy: [],
1192
- positiveSignals: ["baseline metadata rule"],
1193
- negativeSignals: [],
1194
- modelName: "baseline-metadata",
1195
- },
1196
- passed: true,
1197
- },
1198
- {
1199
- name: "gha-token-scope",
1200
- expectPromote: true,
1201
- assessment: {
1202
- applicable: true,
1203
- promote: true,
1204
- score: 2,
1205
- threshold: 3,
1206
- knowledgeRef: "knowledge:gha-token-scope",
1207
- content: "---\ndescription: Minimize GitHub token scopes\ntags:\n - gha\n - security\nobserved_at: 2026-04-07\nsources:\n - memory:gha-token-scope\n - skill:github-actions\n---\n\nUse the narrowest GitHub token scope that still allows the workflow step to succeed.\n",
1208
- blockedBy: [],
1209
- positiveSignals: ["baseline metadata rule"],
1210
- negativeSignals: [],
1211
- modelName: "baseline-metadata",
1212
- },
1213
- passed: true,
1214
- },
1215
- {
1216
- name: "helm-debug-guess",
1217
- expectPromote: false,
1218
- assessment: {
1219
- applicable: true,
1220
- promote: true,
1221
- score: 2,
1222
- threshold: 3,
1223
- knowledgeRef: "knowledge:helm-debug-guess",
1224
- content: "---\ndescription: Helm upgrade might need --debug\nobserved_at: 2026-04-05\nsources:\n - memory:helm-debug-guess\n - skill:helm\n---\n\nIt might help to add --debug to helm upgrade output during failures.\n",
1225
- blockedBy: [],
1226
- positiveSignals: ["baseline metadata rule"],
1227
- negativeSignals: [],
1228
- modelName: "baseline-metadata",
1229
- },
1230
- passed: false,
1231
- },
1232
- {
1233
- name: "terraform-state-location",
1234
- expectPromote: true,
1235
- assessment: {
1236
- applicable: true,
1237
- promote: true,
1238
- score: 2,
1239
- threshold: 3,
1240
- knowledgeRef: "knowledge:terraform-state-location",
1241
- content: "---\ndescription: Use remote state locks\ntags:\n - terraform\nobserved_at: 2026-04-04\nsources:\n - memory:terraform-state-location\n - skill:terraform\n---\n\nUse remote state with locking enabled before applying shared Terraform stacks.\n",
1242
- blockedBy: [],
1243
- positiveSignals: ["baseline metadata rule"],
1244
- negativeSignals: [],
1245
- modelName: "baseline-metadata",
1246
- },
1247
- passed: true,
1248
- },
1249
- {
1250
- name: "mixed-signal-rollback",
1251
- expectPromote: false,
1252
- assessment: {
1253
- applicable: true,
1254
- promote: true,
1255
- score: 2,
1256
- threshold: 3,
1257
- knowledgeRef: "knowledge:mixed-signal-rollback",
1258
- content: "---\ndescription: Rollback the cluster immediately\nobserved_at: 2026-04-03\nsources:\n - memory:mixed-signal-rollback\n - skill:incident\n---\n\nRollback the cluster immediately after any 5xx spike.\n",
1259
- blockedBy: [],
1260
- positiveSignals: ["baseline metadata rule"],
1261
- negativeSignals: [],
1262
- modelName: "baseline-metadata",
1263
- },
1264
- passed: false,
1265
- },
1266
- {
1267
- name: "cache-ttl-fact",
1268
- expectPromote: true,
1269
- assessment: {
1270
- applicable: true,
1271
- promote: true,
1272
- score: 2,
1273
- threshold: 3,
1274
- knowledgeRef: "knowledge:cache-ttl-fact",
1275
- content: "---\ndescription: Cache TTL defaults to five minutes\ntags:\n - cache\n - platform\nobserved_at: 2026-04-02\nsources:\n - memory:cache-ttl-fact\n - skill:platform\n---\n\nThe shared platform cache TTL defaults to five minutes unless the service opts out.\n",
1276
- blockedBy: [],
1277
- positiveSignals: ["baseline metadata rule"],
1278
- negativeSignals: [],
1279
- modelName: "baseline-metadata",
1280
- },
1281
- passed: true,
1282
- },
1283
- {
1284
- name: "personal-shell-alias",
1285
- expectPromote: false,
1286
- assessment: {
1287
- applicable: true,
1288
- promote: false,
1289
- score: 0,
1290
- threshold: 2,
1291
- knowledgeRef: "knowledge:personal-shell-alias",
1292
- blockedBy: ["subjective-memory"],
1293
- positiveSignals: [],
1294
- negativeSignals: [],
1295
- modelName: "baseline-metadata",
1296
- },
1297
- passed: true,
1298
- },
1299
- ],
1300
- },
1301
- noWorseThanSelected: true,
1302
- strictWin: true,
1303
- strictWinMetrics: ["f1", "netOutcomeScore", "accuracy"],
1304
- },
1305
- ],
1306
- strictlyBeatsBaselines: true,
454
+ threshold: 3.8,
1307
455
  };
1308
- const SELECTED_MODEL = CANDIDATE_MODELS.find((model) => model.name === DEFAULT_PROMOTION_POLICY_SELECTION.selectedModel.name);
456
+ const SELECTED_MODEL = DEFAULT_PROMOTION_POLICY_SELECTION.selectedModel;
1309
457
  export const DEFAULT_PROMOTION_POLICY = {
1310
- name: DEFAULT_PROMOTION_POLICY_SELECTION.selectedModel.name,
1311
- threshold: DEFAULT_PROMOTION_POLICY_SELECTION.selectedModel.threshold,
1312
- assess: (input) => assessWithWeightedModel(input, SELECTED_MODEL, DEFAULT_PROMOTION_POLICY_SELECTION.selectedModel.threshold),
458
+ name: SELECTED_MODEL.name,
459
+ threshold: DEFAULT_PROMOTION_POLICY_SELECTION.threshold,
460
+ assess: (input) => assessWithWeightedModel(input, SELECTED_MODEL, DEFAULT_PROMOTION_POLICY_SELECTION.threshold),
1313
461
  };
1314
- export function getDefaultPromotionPolicySelection() {
1315
- return DEFAULT_PROMOTION_POLICY_SELECTION;
1316
- }
1317
462
  export function assessMemoryKnowledgePromotionCandidate(input) {
1318
463
  return DEFAULT_PROMOTION_POLICY.assess(input);
1319
464
  }