@askdkc/kiokuko 0.1.16 → 0.1.19

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 (549) hide show
  1. package/README.ja.md +91 -112
  2. package/README.ko.md +90 -102
  3. package/README.md +103 -260
  4. package/README.zh-CN.md +88 -102
  5. package/dist/agent-file/atomic-write.d.ts +90 -3
  6. package/dist/agent-file/atomic-write.d.ts.map +1 -1
  7. package/dist/agent-file/atomic-write.js +990 -14
  8. package/dist/agent-file/atomic-write.js.map +1 -1
  9. package/dist/agent-file/managed-block.d.ts +12 -1
  10. package/dist/agent-file/managed-block.d.ts.map +1 -1
  11. package/dist/agent-file/managed-block.js +49 -4
  12. package/dist/agent-file/managed-block.js.map +1 -1
  13. package/dist/agent-file/render.d.ts +1 -1
  14. package/dist/agent-file/render.d.ts.map +1 -1
  15. package/dist/agent-file/render.js +10 -7
  16. package/dist/agent-file/render.js.map +1 -1
  17. package/dist/akinator/agent-task.d.ts +14 -24
  18. package/dist/akinator/agent-task.d.ts.map +1 -1
  19. package/dist/akinator/agent-task.js +460 -103
  20. package/dist/akinator/agent-task.js.map +1 -1
  21. package/dist/akinator/capabilities.d.ts +52 -7
  22. package/dist/akinator/capabilities.d.ts.map +1 -1
  23. package/dist/akinator/capabilities.js +226 -28
  24. package/dist/akinator/capabilities.js.map +1 -1
  25. package/dist/akinator/capability-binding.d.ts +11 -0
  26. package/dist/akinator/capability-binding.d.ts.map +1 -0
  27. package/dist/akinator/capability-binding.js +56 -0
  28. package/dist/akinator/capability-binding.js.map +1 -0
  29. package/dist/akinator/domain.js +2 -2
  30. package/dist/akinator/domain.js.map +1 -1
  31. package/dist/akinator/knowledge-path.d.ts.map +1 -1
  32. package/dist/akinator/knowledge-path.js +409 -39
  33. package/dist/akinator/knowledge-path.js.map +1 -1
  34. package/dist/akinator/orchestrator.d.ts +3 -4
  35. package/dist/akinator/orchestrator.d.ts.map +1 -1
  36. package/dist/akinator/orchestrator.js +1 -4
  37. package/dist/akinator/orchestrator.js.map +1 -1
  38. package/dist/akinator/service.d.ts +0 -4
  39. package/dist/akinator/service.d.ts.map +1 -1
  40. package/dist/akinator/service.js +19 -35
  41. package/dist/akinator/service.js.map +1 -1
  42. package/dist/akinator/skill-discovery-attempt.d.ts +20 -0
  43. package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -0
  44. package/dist/akinator/skill-discovery-attempt.js +390 -0
  45. package/dist/akinator/skill-discovery-attempt.js.map +1 -0
  46. package/dist/akinator/store.d.ts.map +1 -1
  47. package/dist/akinator/store.js +107 -52
  48. package/dist/akinator/store.js.map +1 -1
  49. package/dist/akinator/types.d.ts +0 -12
  50. package/dist/akinator/types.d.ts.map +1 -1
  51. package/dist/bin/kiokuko.js +0 -0
  52. package/dist/cli.d.ts +2 -0
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +561 -144
  55. package/dist/cli.js.map +1 -1
  56. package/dist/client/server-client.d.ts +5 -3
  57. package/dist/client/server-client.d.ts.map +1 -1
  58. package/dist/client/server-client.js +486 -181
  59. package/dist/client/server-client.js.map +1 -1
  60. package/dist/commands/agent.d.ts +2 -0
  61. package/dist/commands/agent.d.ts.map +1 -1
  62. package/dist/commands/agent.js +861 -86
  63. package/dist/commands/agent.js.map +1 -1
  64. package/dist/commands/backup.d.ts +2 -1
  65. package/dist/commands/backup.d.ts.map +1 -1
  66. package/dist/commands/backup.js +64 -8
  67. package/dist/commands/backup.js.map +1 -1
  68. package/dist/commands/doctor.d.ts +5 -1
  69. package/dist/commands/doctor.d.ts.map +1 -1
  70. package/dist/commands/doctor.js +70 -26
  71. package/dist/commands/doctor.js.map +1 -1
  72. package/dist/commands/export.d.ts +0 -4
  73. package/dist/commands/export.d.ts.map +1 -1
  74. package/dist/commands/export.js +191 -32
  75. package/dist/commands/export.js.map +1 -1
  76. package/dist/commands/import.d.ts +10 -1
  77. package/dist/commands/import.d.ts.map +1 -1
  78. package/dist/commands/import.js +592 -113
  79. package/dist/commands/import.js.map +1 -1
  80. package/dist/commands/init.d.ts +19 -1
  81. package/dist/commands/init.d.ts.map +1 -1
  82. package/dist/commands/init.js +569 -22
  83. package/dist/commands/init.js.map +1 -1
  84. package/dist/commands/purge.d.ts.map +1 -1
  85. package/dist/commands/purge.js +3 -0
  86. package/dist/commands/purge.js.map +1 -1
  87. package/dist/commands/setup.d.ts +34 -8
  88. package/dist/commands/setup.d.ts.map +1 -1
  89. package/dist/commands/setup.js +418 -86
  90. package/dist/commands/setup.js.map +1 -1
  91. package/dist/commands/skills.d.ts +9 -0
  92. package/dist/commands/skills.d.ts.map +1 -0
  93. package/dist/commands/skills.js +317 -0
  94. package/dist/commands/skills.js.map +1 -0
  95. package/dist/commands/use.d.ts +10 -2
  96. package/dist/commands/use.d.ts.map +1 -1
  97. package/dist/commands/use.js +851 -73
  98. package/dist/commands/use.js.map +1 -1
  99. package/dist/config/paths.d.ts +11 -1
  100. package/dist/config/paths.d.ts.map +1 -1
  101. package/dist/config/paths.js +64 -29
  102. package/dist/config/paths.js.map +1 -1
  103. package/dist/config/project-config.d.ts +1 -0
  104. package/dist/config/project-config.d.ts.map +1 -1
  105. package/dist/config/project-config.js +70 -32
  106. package/dist/config/project-config.js.map +1 -1
  107. package/dist/context/broker.d.ts +30 -14
  108. package/dist/context/broker.d.ts.map +1 -1
  109. package/dist/context/broker.js +628 -150
  110. package/dist/context/broker.js.map +1 -1
  111. package/dist/context/delivery.d.ts +8 -22
  112. package/dist/context/delivery.d.ts.map +1 -1
  113. package/dist/context/delivery.js +204 -152
  114. package/dist/context/delivery.js.map +1 -1
  115. package/dist/context/feedback.d.ts +11 -12
  116. package/dist/context/feedback.d.ts.map +1 -1
  117. package/dist/context/feedback.js +250 -268
  118. package/dist/context/feedback.js.map +1 -1
  119. package/dist/context/origin.d.ts +9 -0
  120. package/dist/context/origin.d.ts.map +1 -0
  121. package/dist/context/origin.js +15 -0
  122. package/dist/context/origin.js.map +1 -0
  123. package/dist/context/ranking.d.ts +4 -13
  124. package/dist/context/ranking.d.ts.map +1 -1
  125. package/dist/context/ranking.js +21 -5
  126. package/dist/context/ranking.js.map +1 -1
  127. package/dist/context/recommendations.d.ts +0 -5
  128. package/dist/context/recommendations.d.ts.map +1 -1
  129. package/dist/context/recommendations.js +0 -1
  130. package/dist/context/recommendations.js.map +1 -1
  131. package/dist/context/run-state.d.ts +26 -0
  132. package/dist/context/run-state.d.ts.map +1 -0
  133. package/dist/context/run-state.js +399 -0
  134. package/dist/context/run-state.js.map +1 -0
  135. package/dist/context/scoped-broker.d.ts +19 -6
  136. package/dist/context/scoped-broker.d.ts.map +1 -1
  137. package/dist/context/scoped-broker.js +530 -131
  138. package/dist/context/scoped-broker.js.map +1 -1
  139. package/dist/context/selection-state.d.ts +19 -0
  140. package/dist/context/selection-state.d.ts.map +1 -0
  141. package/dist/context/selection-state.js +250 -0
  142. package/dist/context/selection-state.js.map +1 -0
  143. package/dist/db/adapter.d.ts +5 -3
  144. package/dist/db/adapter.d.ts.map +1 -1
  145. package/dist/db/adapter.js +6 -3
  146. package/dist/db/adapter.js.map +1 -1
  147. package/dist/db/capabilities.d.ts.map +1 -1
  148. package/dist/db/capabilities.js +34 -16
  149. package/dist/db/capabilities.js.map +1 -1
  150. package/dist/db/connection.d.ts +8 -0
  151. package/dist/db/connection.d.ts.map +1 -1
  152. package/dist/db/connection.js +55 -26
  153. package/dist/db/connection.js.map +1 -1
  154. package/dist/db/migrate.d.ts +28 -7
  155. package/dist/db/migrate.d.ts.map +1 -1
  156. package/dist/db/migrate.js +106 -78
  157. package/dist/db/migrate.js.map +1 -1
  158. package/dist/db/sqlite-retry.d.ts +11 -0
  159. package/dist/db/sqlite-retry.d.ts.map +1 -0
  160. package/dist/db/sqlite-retry.js +66 -0
  161. package/dist/db/sqlite-retry.js.map +1 -0
  162. package/dist/db/transaction.d.ts +13 -0
  163. package/dist/db/transaction.d.ts.map +1 -1
  164. package/dist/db/transaction.js +53 -24
  165. package/dist/db/transaction.js.map +1 -1
  166. package/dist/db/upgrade-backup.d.ts +58 -2
  167. package/dist/db/upgrade-backup.d.ts.map +1 -1
  168. package/dist/db/upgrade-backup.js +757 -28
  169. package/dist/db/upgrade-backup.js.map +1 -1
  170. package/dist/errors.js +1 -1
  171. package/dist/errors.js.map +1 -1
  172. package/dist/gateway/agent-service.d.ts +4 -1
  173. package/dist/gateway/agent-service.d.ts.map +1 -1
  174. package/dist/gateway/agent-service.js +71 -58
  175. package/dist/gateway/agent-service.js.map +1 -1
  176. package/dist/gateway/checkpoint-service.d.ts +1 -0
  177. package/dist/gateway/checkpoint-service.d.ts.map +1 -1
  178. package/dist/gateway/checkpoint-service.js +47 -24
  179. package/dist/gateway/checkpoint-service.js.map +1 -1
  180. package/dist/ledger/archive.d.ts +1 -4
  181. package/dist/ledger/archive.d.ts.map +1 -1
  182. package/dist/ledger/archive.js +134 -54
  183. package/dist/ledger/archive.js.map +1 -1
  184. package/dist/ledger/maintenance.d.ts +0 -11
  185. package/dist/ledger/maintenance.d.ts.map +1 -1
  186. package/dist/ledger/maintenance.js +41 -44
  187. package/dist/ledger/maintenance.js.map +1 -1
  188. package/dist/ledger/projection.d.ts +0 -1
  189. package/dist/ledger/projection.d.ts.map +1 -1
  190. package/dist/ledger/projection.js.map +1 -1
  191. package/dist/ledger/promotion.d.ts +0 -9
  192. package/dist/ledger/promotion.d.ts.map +1 -1
  193. package/dist/ledger/promotion.js.map +1 -1
  194. package/dist/ledger/query.d.ts +1 -15
  195. package/dist/ledger/query.d.ts.map +1 -1
  196. package/dist/ledger/query.js.map +1 -1
  197. package/dist/ledger/store.d.ts +0 -1
  198. package/dist/ledger/store.d.ts.map +1 -1
  199. package/dist/ledger/store.js +11 -8
  200. package/dist/ledger/store.js.map +1 -1
  201. package/dist/ledger/types.d.ts +0 -4
  202. package/dist/ledger/types.d.ts.map +1 -1
  203. package/dist/ledger/types.js.map +1 -1
  204. package/dist/ledger/validate.d.ts.map +1 -1
  205. package/dist/ledger/validate.js +0 -5
  206. package/dist/ledger/validate.js.map +1 -1
  207. package/dist/mcp/bounded-stdio-transport.d.ts +23 -0
  208. package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -0
  209. package/dist/mcp/bounded-stdio-transport.js +109 -0
  210. package/dist/mcp/bounded-stdio-transport.js.map +1 -0
  211. package/dist/mcp/server.d.ts +4 -0
  212. package/dist/mcp/server.d.ts.map +1 -1
  213. package/dist/mcp/server.js +111 -75
  214. package/dist/mcp/server.js.map +1 -1
  215. package/dist/memory/audit.d.ts +0 -1
  216. package/dist/memory/audit.d.ts.map +1 -1
  217. package/dist/memory/audit.js +0 -1
  218. package/dist/memory/audit.js.map +1 -1
  219. package/dist/memory/curator.d.ts +45 -1
  220. package/dist/memory/curator.d.ts.map +1 -1
  221. package/dist/memory/curator.js +290 -68
  222. package/dist/memory/curator.js.map +1 -1
  223. package/dist/memory/entries.d.ts +12 -2
  224. package/dist/memory/entries.d.ts.map +1 -1
  225. package/dist/memory/entries.js +198 -114
  226. package/dist/memory/entries.js.map +1 -1
  227. package/dist/memory/federated-retrieval.d.ts +78 -0
  228. package/dist/memory/federated-retrieval.d.ts.map +1 -0
  229. package/dist/memory/federated-retrieval.js +441 -0
  230. package/dist/memory/federated-retrieval.js.map +1 -0
  231. package/dist/memory/hybrid-retrieval.d.ts +5 -11
  232. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  233. package/dist/memory/hybrid-retrieval.js +78 -58
  234. package/dist/memory/hybrid-retrieval.js.map +1 -1
  235. package/dist/memory/lifecycle.d.ts.map +1 -1
  236. package/dist/memory/lifecycle.js +17 -13
  237. package/dist/memory/lifecycle.js.map +1 -1
  238. package/dist/memory/portability.d.ts +10 -0
  239. package/dist/memory/portability.d.ts.map +1 -0
  240. package/dist/memory/portability.js +44 -0
  241. package/dist/memory/portability.js.map +1 -0
  242. package/dist/memory/rebuild-search.d.ts +5 -0
  243. package/dist/memory/rebuild-search.d.ts.map +1 -1
  244. package/dist/memory/rebuild-search.js +101 -76
  245. package/dist/memory/rebuild-search.js.map +1 -1
  246. package/dist/memory/retrieval-query.d.ts +0 -5
  247. package/dist/memory/retrieval-query.d.ts.map +1 -1
  248. package/dist/memory/retrieval-query.js +0 -5
  249. package/dist/memory/retrieval-query.js.map +1 -1
  250. package/dist/memory/retrieval.d.ts +11 -0
  251. package/dist/memory/retrieval.d.ts.map +1 -1
  252. package/dist/memory/retrieval.js +34 -120
  253. package/dist/memory/retrieval.js.map +1 -1
  254. package/dist/memory/revisions.d.ts +76 -1
  255. package/dist/memory/revisions.d.ts.map +1 -1
  256. package/dist/memory/revisions.js +539 -35
  257. package/dist/memory/revisions.js.map +1 -1
  258. package/dist/memory/scoped-memory.d.ts +22 -13
  259. package/dist/memory/scoped-memory.d.ts.map +1 -1
  260. package/dist/memory/scoped-memory.js +248 -139
  261. package/dist/memory/scoped-memory.js.map +1 -1
  262. package/dist/memory/secrets.d.ts +2 -0
  263. package/dist/memory/secrets.d.ts.map +1 -1
  264. package/dist/memory/secrets.js +36 -0
  265. package/dist/memory/secrets.js.map +1 -1
  266. package/dist/memory/structured-memory.d.ts +8 -1
  267. package/dist/memory/structured-memory.d.ts.map +1 -1
  268. package/dist/memory/structured-memory.js +74 -20
  269. package/dist/memory/structured-memory.js.map +1 -1
  270. package/dist/memory/workspaces.d.ts +9 -0
  271. package/dist/memory/workspaces.d.ts.map +1 -1
  272. package/dist/memory/workspaces.js +67 -0
  273. package/dist/memory/workspaces.js.map +1 -1
  274. package/dist/package-version.d.ts +2 -0
  275. package/dist/package-version.d.ts.map +1 -0
  276. package/dist/package-version.js +7 -0
  277. package/dist/package-version.js.map +1 -0
  278. package/dist/repository/binding.d.ts +5 -0
  279. package/dist/repository/binding.d.ts.map +1 -1
  280. package/dist/repository/binding.js +117 -17
  281. package/dist/repository/binding.js.map +1 -1
  282. package/dist/repository/framework-version.d.ts +8 -0
  283. package/dist/repository/framework-version.d.ts.map +1 -0
  284. package/dist/repository/framework-version.js +29 -0
  285. package/dist/repository/framework-version.js.map +1 -0
  286. package/dist/repository/identity-value.d.ts +4 -0
  287. package/dist/repository/identity-value.d.ts.map +1 -0
  288. package/dist/repository/identity-value.js +24 -0
  289. package/dist/repository/identity-value.js.map +1 -0
  290. package/dist/repository/identity.d.ts.map +1 -1
  291. package/dist/repository/identity.js +2 -0
  292. package/dist/repository/identity.js.map +1 -1
  293. package/dist/repository/project-fingerprint.d.ts +33 -0
  294. package/dist/repository/project-fingerprint.d.ts.map +1 -0
  295. package/dist/repository/project-fingerprint.js +429 -0
  296. package/dist/repository/project-fingerprint.js.map +1 -0
  297. package/dist/repository/remote-url.d.ts +0 -1
  298. package/dist/repository/remote-url.d.ts.map +1 -1
  299. package/dist/repository/remote-url.js +0 -1
  300. package/dist/repository/remote-url.js.map +1 -1
  301. package/dist/runtime-version.d.ts +2 -1
  302. package/dist/runtime-version.d.ts.map +1 -1
  303. package/dist/runtime-version.js +21 -4
  304. package/dist/runtime-version.js.map +1 -1
  305. package/dist/serialization/boundary-json.d.ts +20 -0
  306. package/dist/serialization/boundary-json.d.ts.map +1 -0
  307. package/dist/serialization/boundary-json.js +129 -0
  308. package/dist/serialization/boundary-json.js.map +1 -0
  309. package/dist/serialization/envelope.js +1 -1
  310. package/dist/serialization/envelope.js.map +1 -1
  311. package/dist/serialization/validate.d.ts +7 -0
  312. package/dist/serialization/validate.d.ts.map +1 -1
  313. package/dist/serialization/validate.js +53 -13
  314. package/dist/serialization/validate.js.map +1 -1
  315. package/dist/server/app.js +1 -1
  316. package/dist/server/app.js.map +1 -1
  317. package/dist/server/http.d.ts +4 -3
  318. package/dist/server/http.d.ts.map +1 -1
  319. package/dist/server/http.js +90 -50
  320. package/dist/server/http.js.map +1 -1
  321. package/dist/server/idempotency.d.ts +0 -6
  322. package/dist/server/idempotency.d.ts.map +1 -1
  323. package/dist/server/idempotency.js.map +1 -1
  324. package/dist/server/router.d.ts.map +1 -1
  325. package/dist/server/router.js +21 -4
  326. package/dist/server/router.js.map +1 -1
  327. package/dist/server/routes/agent-capability-gate.d.ts +40 -0
  328. package/dist/server/routes/agent-capability-gate.d.ts.map +1 -0
  329. package/dist/server/routes/agent-capability-gate.js +182 -0
  330. package/dist/server/routes/agent-capability-gate.js.map +1 -0
  331. package/dist/server/routes/agent-events.d.ts.map +1 -1
  332. package/dist/server/routes/agent-events.js +8 -1
  333. package/dist/server/routes/agent-events.js.map +1 -1
  334. package/dist/server/routes/agent-intake.d.ts.map +1 -1
  335. package/dist/server/routes/agent-intake.js +10 -2
  336. package/dist/server/routes/agent-intake.js.map +1 -1
  337. package/dist/server/routes/agent-promotions.d.ts.map +1 -1
  338. package/dist/server/routes/agent-promotions.js +5 -2
  339. package/dist/server/routes/agent-promotions.js.map +1 -1
  340. package/dist/server/routes/agent-runs.d.ts.map +1 -1
  341. package/dist/server/routes/agent-runs.js +18 -4
  342. package/dist/server/routes/agent-runs.js.map +1 -1
  343. package/dist/server/routes/request-binding.d.ts +5 -0
  344. package/dist/server/routes/request-binding.d.ts.map +1 -0
  345. package/dist/server/routes/request-binding.js +49 -0
  346. package/dist/server/routes/request-binding.js.map +1 -0
  347. package/dist/server/routes/task5-support.d.ts +1 -8
  348. package/dist/server/routes/task5-support.d.ts.map +1 -1
  349. package/dist/server/routes/task5-support.js +1 -17
  350. package/dist/server/routes/task5-support.js.map +1 -1
  351. package/dist/server/routes/task5.d.ts.map +1 -1
  352. package/dist/server/routes/task5.js +106 -36
  353. package/dist/server/routes/task5.js.map +1 -1
  354. package/dist/server/write-queue.js +2 -2
  355. package/dist/server/write-queue.js.map +1 -1
  356. package/dist/setup/claude-config.d.ts +2 -1
  357. package/dist/setup/claude-config.d.ts.map +1 -1
  358. package/dist/setup/claude-config.js +54 -4
  359. package/dist/setup/claude-config.js.map +1 -1
  360. package/dist/setup/client-detection.d.ts +7 -2
  361. package/dist/setup/client-detection.d.ts.map +1 -1
  362. package/dist/setup/client-detection.js +27 -9
  363. package/dist/setup/client-detection.js.map +1 -1
  364. package/dist/setup/hermes-config.d.ts +2 -1
  365. package/dist/setup/hermes-config.d.ts.map +1 -1
  366. package/dist/setup/hermes-config.js +53 -12
  367. package/dist/setup/hermes-config.js.map +1 -1
  368. package/dist/setup/legacy-client-cleanup.d.ts +6 -0
  369. package/dist/setup/legacy-client-cleanup.d.ts.map +1 -0
  370. package/dist/setup/legacy-client-cleanup.js +152 -0
  371. package/dist/setup/legacy-client-cleanup.js.map +1 -0
  372. package/dist/setup/managed-text.d.ts.map +1 -1
  373. package/dist/setup/managed-text.js +11 -1
  374. package/dist/setup/managed-text.js.map +1 -1
  375. package/dist/setup/opencode-config.d.ts +2 -1
  376. package/dist/setup/opencode-config.d.ts.map +1 -1
  377. package/dist/setup/opencode-config.js +57 -5
  378. package/dist/setup/opencode-config.js.map +1 -1
  379. package/dist/setup/render.d.ts +2 -1
  380. package/dist/setup/render.d.ts.map +1 -1
  381. package/dist/setup/render.js +91 -17
  382. package/dist/setup/render.js.map +1 -1
  383. package/dist/setup/standard-skills.d.ts +16 -2
  384. package/dist/setup/standard-skills.d.ts.map +1 -1
  385. package/dist/setup/standard-skills.js +37 -13
  386. package/dist/setup/standard-skills.js.map +1 -1
  387. package/dist/setup/strict-json.d.ts +7 -0
  388. package/dist/setup/strict-json.d.ts.map +1 -0
  389. package/dist/setup/strict-json.js +98 -0
  390. package/dist/setup/strict-json.js.map +1 -0
  391. package/dist/setup/strict-toml.d.ts +7 -0
  392. package/dist/setup/strict-toml.d.ts.map +1 -0
  393. package/dist/setup/strict-toml.js +470 -0
  394. package/dist/setup/strict-toml.js.map +1 -0
  395. package/dist/skills/cache.d.ts +15 -0
  396. package/dist/skills/cache.d.ts.map +1 -0
  397. package/dist/skills/cache.js +19 -0
  398. package/dist/skills/cache.js.map +1 -0
  399. package/dist/skills/candidate-ranking.d.ts +15 -0
  400. package/dist/skills/candidate-ranking.d.ts.map +1 -0
  401. package/dist/skills/candidate-ranking.js +52 -0
  402. package/dist/skills/candidate-ranking.js.map +1 -0
  403. package/dist/skills/chunking.d.ts +11 -0
  404. package/dist/skills/chunking.d.ts.map +1 -0
  405. package/dist/skills/chunking.js +291 -0
  406. package/dist/skills/chunking.js.map +1 -0
  407. package/dist/skills/config.d.ts +19 -0
  408. package/dist/skills/config.d.ts.map +1 -0
  409. package/dist/skills/config.js +103 -0
  410. package/dist/skills/config.js.map +1 -0
  411. package/dist/skills/discovery-service.d.ts +26 -0
  412. package/dist/skills/discovery-service.d.ts.map +1 -0
  413. package/dist/skills/discovery-service.js +921 -0
  414. package/dist/skills/discovery-service.js.map +1 -0
  415. package/dist/skills/external-transport.d.ts +2 -0
  416. package/dist/skills/external-transport.d.ts.map +1 -0
  417. package/dist/skills/external-transport.js +30 -0
  418. package/dist/skills/external-transport.js.map +1 -0
  419. package/dist/skills/find.d.ts +16 -0
  420. package/dist/skills/find.d.ts.map +1 -0
  421. package/dist/skills/find.js +58 -0
  422. package/dist/skills/find.js.map +1 -0
  423. package/dist/skills/gap-detection.d.ts +23 -0
  424. package/dist/skills/gap-detection.d.ts.map +1 -0
  425. package/dist/skills/gap-detection.js +62 -0
  426. package/dist/skills/gap-detection.js.map +1 -0
  427. package/dist/skills/import-preparation.d.ts +4 -0
  428. package/dist/skills/import-preparation.d.ts.map +1 -0
  429. package/dist/skills/import-preparation.js +20 -0
  430. package/dist/skills/import-preparation.js.map +1 -0
  431. package/dist/skills/materialization-authority.d.ts +11 -0
  432. package/dist/skills/materialization-authority.d.ts.map +1 -0
  433. package/dist/skills/materialization-authority.js +92 -0
  434. package/dist/skills/materialization-authority.js.map +1 -0
  435. package/dist/skills/materialization-service.d.ts +22 -0
  436. package/dist/skills/materialization-service.d.ts.map +1 -0
  437. package/dist/skills/materialization-service.js +101 -0
  438. package/dist/skills/materialization-service.js.map +1 -0
  439. package/dist/skills/official-catalog.d.ts +31 -0
  440. package/dist/skills/official-catalog.d.ts.map +1 -0
  441. package/dist/skills/official-catalog.js +110 -0
  442. package/dist/skills/official-catalog.js.map +1 -0
  443. package/dist/skills/providers/schema.d.ts +30 -0
  444. package/dist/skills/providers/schema.d.ts.map +1 -0
  445. package/dist/skills/providers/schema.js +354 -0
  446. package/dist/skills/providers/schema.js.map +1 -0
  447. package/dist/skills/providers/skills-sh-compat.d.ts +17 -0
  448. package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -0
  449. package/dist/skills/providers/skills-sh-compat.js +71 -0
  450. package/dist/skills/providers/skills-sh-compat.js.map +1 -0
  451. package/dist/skills/providers/skills-sh-v1.d.ts +23 -0
  452. package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -0
  453. package/dist/skills/providers/skills-sh-v1.js +134 -0
  454. package/dist/skills/providers/skills-sh-v1.js.map +1 -0
  455. package/dist/skills/query-builder.d.ts +18 -0
  456. package/dist/skills/query-builder.d.ts.map +1 -0
  457. package/dist/skills/query-builder.js +93 -0
  458. package/dist/skills/query-builder.js.map +1 -0
  459. package/dist/skills/source/errors.d.ts +9 -0
  460. package/dist/skills/source/errors.d.ts.map +1 -0
  461. package/dist/skills/source/errors.js +15 -0
  462. package/dist/skills/source/errors.js.map +1 -0
  463. package/dist/skills/source/frontmatter.d.ts +9 -0
  464. package/dist/skills/source/frontmatter.d.ts.map +1 -0
  465. package/dist/skills/source/frontmatter.js +77 -0
  466. package/dist/skills/source/frontmatter.js.map +1 -0
  467. package/dist/skills/source/github-fetcher.d.ts +20 -0
  468. package/dist/skills/source/github-fetcher.d.ts.map +1 -0
  469. package/dist/skills/source/github-fetcher.js +292 -0
  470. package/dist/skills/source/github-fetcher.js.map +1 -0
  471. package/dist/skills/source/snapshot-validator.d.ts +28 -0
  472. package/dist/skills/source/snapshot-validator.d.ts.map +1 -0
  473. package/dist/skills/source/snapshot-validator.js +186 -0
  474. package/dist/skills/source/snapshot-validator.js.map +1 -0
  475. package/dist/skills/store.d.ts +181 -0
  476. package/dist/skills/store.d.ts.map +1 -0
  477. package/dist/skills/store.js +1710 -0
  478. package/dist/skills/store.js.map +1 -0
  479. package/dist/skills/types.d.ts +169 -0
  480. package/dist/skills/types.d.ts.map +1 -0
  481. package/dist/skills/types.js +2 -0
  482. package/dist/skills/types.js.map +1 -0
  483. package/dist/web/i18n.d.ts +56 -8
  484. package/dist/web/i18n.d.ts.map +1 -1
  485. package/dist/web/i18n.js +224 -32
  486. package/dist/web/i18n.js.map +1 -1
  487. package/dist/web/server.d.ts.map +1 -1
  488. package/dist/web/server.js +458 -42
  489. package/dist/web/server.js.map +1 -1
  490. package/dist/web/ui.d.ts +4 -0
  491. package/dist/web/ui.d.ts.map +1 -1
  492. package/dist/web/ui.js +697 -61
  493. package/dist/web/ui.js.map +1 -1
  494. package/migrations/008_federated_memory.sql +46 -0
  495. package/migrations/009_external_skill_discovery.sql +126 -0
  496. package/package.json +6 -3
  497. package/skills/kiokuko-single-purpose-functions/SKILL.md +288 -0
  498. package/skills/kiokuko-single-purpose-functions/references/kiokuko-patterns.md +344 -0
  499. package/skills/kiokuko-single-purpose-functions/references/review-checklist.md +97 -0
  500. package/skills/kiokuko-ui-design-soul/SKILL.md +1186 -28
  501. package/templates/AGENTS.md +8 -7
  502. package/dist/client/runtime-discovery.d.ts +0 -15
  503. package/dist/client/runtime-discovery.d.ts.map +0 -1
  504. package/dist/client/runtime-discovery.js +0 -45
  505. package/dist/client/runtime-discovery.js.map +0 -1
  506. package/dist/commands/call.d.ts +0 -7
  507. package/dist/commands/call.d.ts.map +0 -1
  508. package/dist/commands/call.js +0 -10
  509. package/dist/commands/call.js.map +0 -1
  510. package/dist/commands/link.d.ts +0 -6
  511. package/dist/commands/link.d.ts.map +0 -1
  512. package/dist/commands/link.js +0 -6
  513. package/dist/commands/link.js.map +0 -1
  514. package/dist/commands/promote.d.ts +0 -6
  515. package/dist/commands/promote.d.ts.map +0 -1
  516. package/dist/commands/promote.js +0 -6
  517. package/dist/commands/promote.js.map +0 -1
  518. package/dist/commands/read.d.ts +0 -6
  519. package/dist/commands/read.d.ts.map +0 -1
  520. package/dist/commands/read.js +0 -4
  521. package/dist/commands/read.js.map +0 -1
  522. package/dist/commands/recall.d.ts +0 -6
  523. package/dist/commands/recall.d.ts.map +0 -1
  524. package/dist/commands/recall.js +0 -4
  525. package/dist/commands/recall.js.map +0 -1
  526. package/dist/commands/record.d.ts +0 -6
  527. package/dist/commands/record.d.ts.map +0 -1
  528. package/dist/commands/record.js +0 -4
  529. package/dist/commands/record.js.map +0 -1
  530. package/dist/commands/search.d.ts +0 -6
  531. package/dist/commands/search.d.ts.map +0 -1
  532. package/dist/commands/search.js +0 -4
  533. package/dist/commands/search.js.map +0 -1
  534. package/dist/commands/supersede.d.ts +0 -6
  535. package/dist/commands/supersede.d.ts.map +0 -1
  536. package/dist/commands/supersede.js +0 -6
  537. package/dist/commands/supersede.js.map +0 -1
  538. package/dist/knowledge/sources.d.ts +0 -72
  539. package/dist/knowledge/sources.d.ts.map +0 -1
  540. package/dist/knowledge/sources.js +0 -388
  541. package/dist/knowledge/sources.js.map +0 -1
  542. package/dist/setup/opencode-evidence.d.ts +0 -37
  543. package/dist/setup/opencode-evidence.d.ts.map +0 -1
  544. package/dist/setup/opencode-evidence.js +0 -58
  545. package/dist/setup/opencode-evidence.js.map +0 -1
  546. package/dist/setup/opencode-loop-guard.d.ts +0 -9
  547. package/dist/setup/opencode-loop-guard.d.ts.map +0 -1
  548. package/dist/setup/opencode-loop-guard.js +0 -248
  549. package/dist/setup/opencode-loop-guard.js.map +0 -1
@@ -0,0 +1,344 @@
1
+ <!-- KIOKUKO MANAGED STANDARD SKILL: kiokuko-single-purpose-functions -->
2
+
3
+ # Single-purpose implementation patterns
4
+
5
+ These patterns are repository- and language-agnostic contracts illustrated with TypeScript for concreteness. Translate them into the project’s language, framework, error model, persistence layer, and test tools. Reuse existing project helpers before creating substitutes.
6
+
7
+ ## 1. Hostile boundary, constrained private core
8
+
9
+ An exported operation may accept unconstrained input when it is the real trust boundary. Validate once, create an owned value, then call a constrained helper.
10
+
11
+ ```ts
12
+ interface ValidatedWindow {
13
+ readonly start: number;
14
+ readonly limit: number;
15
+ }
16
+
17
+ function isPlainRecord(value: unknown): value is Record<string, unknown> {
18
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;
19
+ const prototype = Object.getPrototypeOf(value);
20
+ return prototype === Object.prototype || prototype === null;
21
+ }
22
+
23
+ function parseWindow(value: unknown): ValidatedWindow {
24
+ if (!isPlainRecord(value)) throw new Error('window must be an object');
25
+ if (typeof value.start !== 'number' || !Number.isInteger(value.start) || value.start < 0) {
26
+ throw new Error('window start is invalid');
27
+ }
28
+ if (typeof value.limit !== 'number' || !Number.isInteger(value.limit)
29
+ || value.limit < 1 || value.limit > 100) {
30
+ throw new Error('window limit is invalid');
31
+ }
32
+ return { start: value.start, limit: value.limit };
33
+ }
34
+
35
+ function calculateEnd(window: ValidatedWindow): number {
36
+ return window.start + window.limit;
37
+ }
38
+
39
+ export function endOfWindow(value: unknown): number {
40
+ return calculateEnd(parseWindow(value));
41
+ }
42
+ ```
43
+
44
+ Use the project’s error type and validation library where available. Do not make `calculateEnd` accept `unknown` or repeat transport validation throughout the domain.
45
+
46
+ ## 2. Closed schema at a request boundary
47
+
48
+ Use bounded schemas and reject unknown fields when the protocol is closed.
49
+
50
+ ```ts
51
+ import * as z from 'zod/v4';
52
+
53
+ const requestSchema = z.object({
54
+ requestId: z.string().trim().min(1).max(256),
55
+ paths: z.array(z.string().trim().min(1).max(1_024)).max(100),
56
+ limit: z.number().int().min(1).max(100).default(20),
57
+ }).strict();
58
+ ```
59
+
60
+ A schema is the boundary. Internal helpers should consume its validated output or a narrower domain value.
61
+
62
+ ## 3. Exact optional values
63
+
64
+ Omit absent optional properties rather than assigning ambiguous placeholders.
65
+
66
+ ```ts
67
+ interface Candidate {
68
+ readonly id: string;
69
+ readonly description?: string;
70
+ }
71
+
72
+ function candidate(id: string, description: string | undefined): Candidate {
73
+ return {
74
+ id,
75
+ ...(description === undefined ? {} : { description }),
76
+ };
77
+ }
78
+ ```
79
+
80
+ Use the equivalent convention in languages that distinguish missing, null, and empty values.
81
+
82
+ ## 4. Immutable transformation and mutation test
83
+
84
+ ```ts
85
+ interface Profile {
86
+ readonly mode: 'build' | 'debug' | null;
87
+ readonly target: string | null;
88
+ }
89
+
90
+ function withTarget(profile: Profile, target: string): Profile {
91
+ return { ...profile, target: target.trim() };
92
+ }
93
+ ```
94
+
95
+ ```ts
96
+ import assert from 'node:assert/strict';
97
+ import test from 'node:test';
98
+
99
+ test('returns a new profile without mutating the input', () => {
100
+ const input = { mode: 'build' as const, target: null };
101
+ const before = structuredClone(input);
102
+
103
+ const result = withTarget(input, ' src/index.ts ');
104
+
105
+ assert.deepEqual(result, { mode: 'build', target: 'src/index.ts' });
106
+ assert.deepEqual(input, before);
107
+ assert.notEqual(result, input);
108
+ });
109
+ ```
110
+
111
+ ## 5. Explicit variable dependencies
112
+
113
+ Keep time and randomness out of pure ranking, hashing, transition, and validation functions.
114
+
115
+ ```ts
116
+ interface Dependencies {
117
+ readonly now: () => string;
118
+ readonly createId: () => string;
119
+ }
120
+
121
+ interface CreatedRecord {
122
+ readonly id: string;
123
+ readonly createdAt: string;
124
+ }
125
+
126
+ function createRecord(dependencies: Dependencies): CreatedRecord {
127
+ return {
128
+ id: dependencies.createId(),
129
+ createdAt: dependencies.now(),
130
+ };
131
+ }
132
+ ```
133
+
134
+ Production composition supplies real dependencies; tests supply deterministic ones.
135
+
136
+ ## 6. Transaction-agnostic store, transaction-owning use case
137
+
138
+ The store performs persistence. The service or use case owns the atomic operation.
139
+
140
+ ```ts
141
+ interface Transaction {
142
+ execute(sql: string, parameters: readonly unknown[]): void;
143
+ }
144
+
145
+ interface NewItem {
146
+ readonly id: string;
147
+ readonly value: string;
148
+ }
149
+
150
+ function insertItem(transaction: Transaction, item: NewItem): void {
151
+ transaction.execute(
152
+ 'INSERT INTO items (id, value) VALUES (?, ?)',
153
+ [item.id, item.value],
154
+ );
155
+ }
156
+
157
+ function createItem(
158
+ runTransaction: (operation: (transaction: Transaction) => void) => void,
159
+ item: NewItem,
160
+ ): void {
161
+ runTransaction((transaction) => {
162
+ insertItem(transaction, item);
163
+ transaction.execute(
164
+ 'INSERT INTO audit_events (event_type, target_id) VALUES (?, ?)',
165
+ ['item_created', item.id],
166
+ );
167
+ });
168
+ }
169
+ ```
170
+
171
+ Do not let `insertItem` start its own transaction if it must compose with other writes. Do not call a provider or perform unrelated slow I/O inside the transaction.
172
+
173
+ ## 7. Validate stored data before domain use
174
+
175
+ Driver types and generated models are not always runtime proof, especially across migrations or external storage.
176
+
177
+ ```ts
178
+ interface StoredItem {
179
+ readonly id: string;
180
+ readonly revision: number;
181
+ }
182
+
183
+ function parseStoredItem(row: Record<string, unknown> | undefined): StoredItem {
184
+ if (row === undefined) throw new Error('Item not found');
185
+ if (typeof row.id !== 'string'
186
+ || typeof row.revision !== 'number'
187
+ || !Number.isInteger(row.revision)
188
+ || row.revision < 1) {
189
+ throw new Error('Stored item is invalid');
190
+ }
191
+ return { id: row.id, revision: row.revision };
192
+ }
193
+ ```
194
+
195
+ Do not include malformed row contents in a public error.
196
+
197
+ ## 8. Safe public error mapping
198
+
199
+ Public messages should be stable. Keep only allowlisted bounded details.
200
+
201
+ ```ts
202
+ interface PublicFailure {
203
+ readonly code: 'busy' | 'invalid' | 'internal';
204
+ readonly message: string;
205
+ readonly retryAfterSeconds?: number;
206
+ }
207
+
208
+ function publicFailure(error: unknown): PublicFailure {
209
+ if (isBusyFailure(error)) {
210
+ return {
211
+ code: 'busy',
212
+ message: 'Service is busy',
213
+ retryAfterSeconds: clampRetryDelay(error.retryAfterSeconds),
214
+ };
215
+ }
216
+ if (isValidationFailure(error)) {
217
+ return { code: 'invalid', message: 'Request is invalid' };
218
+ }
219
+ return { code: 'internal', message: 'Internal error' };
220
+ }
221
+ ```
222
+
223
+ Do not copy unknown exception messages, submitted values, credentials, URLs with secret query parameters, or provider bodies into public output.
224
+
225
+ ## 9. Preserve operation and cleanup failures
226
+
227
+ When both fail, retain both failures without replacing the primary one.
228
+
229
+ ```ts
230
+ async function useResource<T>(
231
+ open: () => Promise<{ close: () => Promise<void> }>,
232
+ operation: (resource: { close: () => Promise<void> }) => Promise<T>,
233
+ ): Promise<T> {
234
+ const resource = await open();
235
+ let operationFailure: unknown;
236
+ let result: { value: T } | undefined;
237
+
238
+ try {
239
+ result = { value: await operation(resource) };
240
+ } catch (error) {
241
+ operationFailure = error;
242
+ }
243
+
244
+ try {
245
+ await resource.close();
246
+ } catch (cleanupFailure) {
247
+ if (operationFailure !== undefined) {
248
+ throw new AggregateError(
249
+ [operationFailure, cleanupFailure],
250
+ 'Resource operation and cleanup failed',
251
+ );
252
+ }
253
+ throw cleanupFailure;
254
+ }
255
+
256
+ if (operationFailure !== undefined) throw operationFailure;
257
+ if (result === undefined) throw new Error('Resource operation produced no result');
258
+ return result.value;
259
+ }
260
+ ```
261
+
262
+ Use the language’s structured multi-error or error-chaining mechanism where possible.
263
+
264
+ ## 10. Classify failures by structured fields
265
+
266
+ Prefer error types, codes, status values, or discriminated variants over message matching.
267
+
268
+ ```ts
269
+ interface RetryableFailure extends Error {
270
+ readonly code: 'temporarily_unavailable';
271
+ readonly retryAfterSeconds: number;
272
+ }
273
+
274
+ function isRetryableFailure(error: unknown): error is RetryableFailure {
275
+ return error instanceof Error
276
+ && 'code' in error
277
+ && error.code === 'temporarily_unavailable'
278
+ && 'retryAfterSeconds' in error
279
+ && typeof error.retryAfterSeconds === 'number';
280
+ }
281
+ ```
282
+
283
+ Do not treat an unrelated exception containing “busy” or “timeout” as retryable.
284
+
285
+ ## 11. Immutable replay identity
286
+
287
+ Bind every field that changes the meaning of an idempotent operation.
288
+
289
+ ```ts
290
+ interface BoundRequest {
291
+ readonly operation: string;
292
+ readonly subjectId: string;
293
+ readonly expectedRevision: number;
294
+ readonly mode: 'validate' | 'apply';
295
+ }
296
+
297
+ function replayMatches(left: BoundRequest, right: BoundRequest): boolean {
298
+ return left.operation === right.operation
299
+ && left.subjectId === right.subjectId
300
+ && left.expectedRevision === right.expectedRevision
301
+ && left.mode === right.mode;
302
+ }
303
+ ```
304
+
305
+ Reusing an identity with changed bound input is a conflict, not a second mutation.
306
+
307
+ ## 12. Compare-and-swap filesystem changes
308
+
309
+ For managed files, the contract may include expected content, expected file identity, expected parent-directory identity, alternate paths that must remain absent, restrictive mode, reverse-order rollback, and explicit ambiguous-cleanup failure.
310
+
311
+ Use the project’s atomic compare-and-swap helpers where available. Plain write, rename, or delete calls are insufficient when concurrent changes or independently owned files must be protected.
312
+
313
+ ## 13. Test secret non-echo
314
+
315
+ ```ts
316
+ test('rejects invalid input without echoing it', () => {
317
+ const submitted = 'secret-sentinel-value';
318
+
319
+ assert.throws(
320
+ () => parseWindow({ start: submitted, limit: 10 }),
321
+ (error: unknown) => {
322
+ assert.ok(error instanceof Error);
323
+ assert.equal(error.message.includes(submitted), false);
324
+ return true;
325
+ },
326
+ );
327
+ });
328
+ ```
329
+
330
+ ## 14. Test deterministic output
331
+
332
+ For canonical order, hashes, manifests, and rankings, construct semantically equivalent inputs with different insertion order and assert identical output.
333
+
334
+ ## 15. Verification sequence
335
+
336
+ Run commands that actually exist in the repository:
337
+
338
+ 1. the narrowest test covering the changed contract;
339
+ 2. relevant integration tests;
340
+ 3. type or static checks;
341
+ 4. the broader test suite when shared behavior changed;
342
+ 5. build and package checks when distribution changed.
343
+
344
+ Report skipped commands and failures exactly. Do not invent a lint, formatter, build, or test command that the project does not define.
@@ -0,0 +1,97 @@
1
+ <!-- KIOKUKO MANAGED STANDARD SKILL: kiokuko-single-purpose-functions -->
2
+
3
+ # Function-contract coding and review checklist
4
+
5
+ Use this checklist while implementing, debugging, refactoring, or reviewing code in any language or repository. Apply only the sections relevant to the change.
6
+
7
+ ## Scope
8
+
9
+ - [ ] The change addresses one stated behavior.
10
+ - [ ] No unrelated cleanup, public API redesign, migration rewrite, dependency replacement, or broad type churn was added.
11
+ - [ ] Relevant architecture, security, data, protocol, and feature contracts were checked.
12
+
13
+ ## Function responsibility
14
+
15
+ - [ ] Each changed function has one cohesive externally observable responsibility.
16
+ - [ ] Boundary, domain, persistence, adapter, and orchestrator roles are not mixed without a specific reason.
17
+ - [ ] Extraction created a meaningful operation rather than a one-line wrapper.
18
+ - [ ] An atomic state machine, transaction, or cleanup sequence was not fragmented into an unreadable chain.
19
+
20
+ ## Inputs and ownership
21
+
22
+ - [ ] Externally influenced values are untrusted until runtime validation.
23
+ - [ ] Strings, collections, nesting, retries, and output are bounded.
24
+ - [ ] Closed shapes reject unknown fields where required.
25
+ - [ ] Hostile input cannot trigger unsafe getters, proxies, hooks, or custom serialization during validation.
26
+ - [ ] Validated values are copied into owned data where references could escape.
27
+ - [ ] Caller-owned input is not mutated.
28
+ - [ ] Missing, null, empty, unknown, unavailable, and invalid states remain distinct where required.
29
+ - [ ] No new unchecked cast, suppressed diagnostic, or type escape hatch bypasses a boundary check.
30
+
31
+ ## Domain behavior
32
+
33
+ - [ ] Pure calculations, normalization, ranking, and state transitions have no hidden I/O.
34
+ - [ ] Time, randomness, environment, locale, and external capabilities are explicit dependencies.
35
+ - [ ] Canonical order and serialization are deterministic where identity or hashing depends on them.
36
+ - [ ] Preconditions and postconditions are represented in code or tests.
37
+
38
+ ## Errors, privacy, and security
39
+
40
+ - [ ] Expected failures use the project’s narrowest existing error or result category.
41
+ - [ ] Public messages and details are stable, bounded, and allowlisted.
42
+ - [ ] Invalid values, credentials, private data, provider bodies, and secret-like strings are not echoed.
43
+ - [ ] Unknown internal failures are not exposed as raw messages.
44
+ - [ ] Primary and cleanup failures are both preserved when both occur.
45
+ - [ ] No catch block turns corruption, conflict, partial failure, or uncertain state into success.
46
+ - [ ] Authorization, normalization, sanitization, and secret checks remain in the successful execution path.
47
+
48
+ ## Persistence, transactions, and resources
49
+
50
+ - [ ] Queries are parameterized where applicable and kept out of transport or presentation code.
51
+ - [ ] Stored data is validated before becoming domain state.
52
+ - [ ] Low-level persistence functions remain transaction-agnostic when they compose inside a use case.
53
+ - [ ] One clear owner controls the transaction or resource lifecycle.
54
+ - [ ] No network, user prompt, child process, or unrelated slow work runs while holding a write transaction or scarce lock.
55
+ - [ ] Retry classification uses structured error information instead of message text.
56
+ - [ ] Ambiguous commit and incomplete cleanup states prevent unsafe compensation.
57
+
58
+ ## Idempotency and identity
59
+
60
+ - [ ] Exact replay and changed-input conflict are distinguished.
61
+ - [ ] Every meaning-bearing input participates in replay, generation, revision, or cache identity.
62
+ - [ ] Expected-version checks happen before mutation.
63
+ - [ ] Independently owned or newer state is not silently overwritten.
64
+ - [ ] Partial or ambiguous cleanup is reported rather than presented as success.
65
+
66
+ ## External contracts
67
+
68
+ - [ ] Public APIs, command output, exit status, schemas, event order, and serialized formats remain stable unless intentionally changed.
69
+ - [ ] Protocol output is not contaminated by diagnostics or logging.
70
+ - [ ] Authentication, authorization, origin, path, and confirmation boundaries remain intact.
71
+ - [ ] Package manifests include required runtime files.
72
+ - [ ] Migration history and recorded checksums are not rewritten in place.
73
+ - [ ] Managed markers, file modes, line endings, and unrelated user content are preserved where applicable.
74
+
75
+ ## Tests
76
+
77
+ - [ ] A regression test captures the original failure or falsifying counterexample.
78
+ - [ ] Normal success behavior is covered.
79
+ - [ ] Empty, minimum, maximum, and exact-boundary values are covered where relevant.
80
+ - [ ] Wrong types, malformed shapes, unknown fields, or hostile values are covered at changed boundaries.
81
+ - [ ] Caller-owned input immutability is asserted where plausible.
82
+ - [ ] Secret and invalid-value non-echo is asserted where applicable.
83
+ - [ ] Each changed expected failure category is asserted.
84
+ - [ ] Retry bounds and non-retryable failures are covered when retry behavior changes.
85
+ - [ ] Rollback, ambiguous commit, and dual operation/cleanup failures are covered when ownership changes.
86
+ - [ ] Exact replay and changed-input conflict are covered when idempotency changes.
87
+ - [ ] Integration tests exercise the real storage, filesystem, network, process, or protocol boundary when adapter behavior changes.
88
+ - [ ] Tests assert observable contracts, not incidental private call order.
89
+
90
+ ## Verification report
91
+
92
+ - [ ] The narrow affected test was run.
93
+ - [ ] Relevant static or type checks were run.
94
+ - [ ] The broader suite was run when shared behavior changed.
95
+ - [ ] Build and package checks were run when distribution changed.
96
+ - [ ] Every skipped command, known failure, assumption, and residual risk is stated exactly.
97
+ - [ ] Completion is not described as perfect, crash-proof, or fully verified beyond the evidence.