@cleocode/core 2026.10.27 → 2026.11.1-canary.3

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 (520) hide show
  1. package/README.md +2 -0
  2. package/binaries/README.md +30 -10
  3. package/dist/.source-stamp.json +4 -0
  4. package/dist/audit/reconstruct.d.ts.map +1 -1
  5. package/dist/audit/reconstruct.js +3 -13
  6. package/dist/audit/reconstruct.js.map +1 -1
  7. package/dist/build-provenance.json +2 -2
  8. package/dist/cloud/nexus-cloud.d.ts.map +1 -1
  9. package/dist/cloud/nexus-cloud.js +3 -3
  10. package/dist/cloud/nexus-cloud.js.map +1 -1
  11. package/dist/cloud/nexus-device.d.ts +1 -1
  12. package/dist/cloud/nexus-link.d.ts +18 -2
  13. package/dist/cloud/nexus-link.d.ts.map +1 -1
  14. package/dist/cloud/nexus-link.js +26 -6
  15. package/dist/cloud/nexus-link.js.map +1 -1
  16. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  17. package/dist/cloud/nexus-vault.js +3 -9
  18. package/dist/cloud/nexus-vault.js.map +1 -1
  19. package/dist/decide/sites/registry.d.ts +40 -0
  20. package/dist/decide/sites/registry.d.ts.map +1 -1
  21. package/dist/decide/sites/registry.js +38 -0
  22. package/dist/decide/sites/registry.js.map +1 -1
  23. package/dist/docs/adr-allocator.d.ts +3 -3
  24. package/dist/docs/adr-allocator.d.ts.map +1 -1
  25. package/dist/docs/adr-allocator.js +8 -5
  26. package/dist/docs/adr-allocator.js.map +1 -1
  27. package/dist/docs/blob-consolidation.d.ts.map +1 -1
  28. package/dist/docs/blob-consolidation.js +3 -2
  29. package/dist/docs/blob-consolidation.js.map +1 -1
  30. package/dist/docs/derive-links.d.ts +12 -0
  31. package/dist/docs/derive-links.d.ts.map +1 -1
  32. package/dist/docs/derive-links.js +19 -0
  33. package/dist/docs/derive-links.js.map +1 -1
  34. package/dist/docs/doc-name-rule.d.ts +105 -0
  35. package/dist/docs/doc-name-rule.d.ts.map +1 -0
  36. package/dist/docs/doc-name-rule.js +212 -0
  37. package/dist/docs/doc-name-rule.js.map +1 -0
  38. package/dist/docs/docs-inconsistency-detector.d.ts.map +1 -1
  39. package/dist/docs/docs-inconsistency-detector.js +4 -3
  40. package/dist/docs/docs-inconsistency-detector.js.map +1 -1
  41. package/dist/docs/docs-ops.d.ts +27 -5
  42. package/dist/docs/docs-ops.d.ts.map +1 -1
  43. package/dist/docs/docs-ops.js +149 -17
  44. package/dist/docs/docs-ops.js.map +1 -1
  45. package/dist/docs/docs-read-model.d.ts +45 -15
  46. package/dist/docs/docs-read-model.d.ts.map +1 -1
  47. package/dist/docs/docs-read-model.js +22 -102
  48. package/dist/docs/docs-read-model.js.map +1 -1
  49. package/dist/docs/docs-update.d.ts.map +1 -1
  50. package/dist/docs/docs-update.js +8 -2
  51. package/dist/docs/docs-update.js.map +1 -1
  52. package/dist/docs/doctor.d.ts +71 -4
  53. package/dist/docs/doctor.d.ts.map +1 -1
  54. package/dist/docs/doctor.js +324 -23
  55. package/dist/docs/doctor.js.map +1 -1
  56. package/dist/docs/duplicate-check.d.ts +138 -0
  57. package/dist/docs/duplicate-check.d.ts.map +1 -0
  58. package/dist/docs/duplicate-check.js +286 -0
  59. package/dist/docs/duplicate-check.js.map +1 -0
  60. package/dist/docs/fetch-result.d.ts.map +1 -1
  61. package/dist/docs/fetch-result.js +27 -0
  62. package/dist/docs/fetch-result.js.map +1 -1
  63. package/dist/docs/import/scanner.d.ts +2 -0
  64. package/dist/docs/import/scanner.d.ts.map +1 -1
  65. package/dist/docs/import/scanner.js +3 -1
  66. package/dist/docs/import/scanner.js.map +1 -1
  67. package/dist/docs/lineage.d.ts +66 -0
  68. package/dist/docs/lineage.d.ts.map +1 -0
  69. package/dist/docs/lineage.js +190 -0
  70. package/dist/docs/lineage.js.map +1 -0
  71. package/dist/docs/modernize/apply.d.ts +139 -0
  72. package/dist/docs/modernize/apply.d.ts.map +1 -0
  73. package/dist/docs/modernize/apply.js +760 -0
  74. package/dist/docs/modernize/apply.js.map +1 -0
  75. package/dist/docs/modernize/guard.d.ts +92 -0
  76. package/dist/docs/modernize/guard.d.ts.map +1 -0
  77. package/dist/docs/modernize/guard.js +214 -0
  78. package/dist/docs/modernize/guard.js.map +1 -0
  79. package/dist/docs/modernize/index.d.ts +68 -0
  80. package/dist/docs/modernize/index.d.ts.map +1 -0
  81. package/dist/docs/modernize/index.js +97 -0
  82. package/dist/docs/modernize/index.js.map +1 -0
  83. package/dist/docs/modernize/judge.d.ts +85 -0
  84. package/dist/docs/modernize/judge.d.ts.map +1 -0
  85. package/dist/docs/modernize/judge.js +186 -0
  86. package/dist/docs/modernize/judge.js.map +1 -0
  87. package/dist/docs/modernize/plan.d.ts +77 -0
  88. package/dist/docs/modernize/plan.d.ts.map +1 -0
  89. package/dist/docs/modernize/plan.js +510 -0
  90. package/dist/docs/modernize/plan.js.map +1 -0
  91. package/dist/docs/modernize/restore.d.ts +41 -0
  92. package/dist/docs/modernize/restore.d.ts.map +1 -0
  93. package/dist/docs/modernize/restore.js +103 -0
  94. package/dist/docs/modernize/restore.js.map +1 -0
  95. package/dist/docs/modernize/rules.d.ts +197 -0
  96. package/dist/docs/modernize/rules.d.ts.map +1 -0
  97. package/dist/docs/modernize/rules.js +510 -0
  98. package/dist/docs/modernize/rules.js.map +1 -0
  99. package/dist/docs/modernize/store.d.ts +64 -0
  100. package/dist/docs/modernize/store.d.ts.map +1 -0
  101. package/dist/docs/modernize/store.js +390 -0
  102. package/dist/docs/modernize/store.js.map +1 -0
  103. package/dist/docs/publications-store.d.ts +16 -2
  104. package/dist/docs/publications-store.d.ts.map +1 -1
  105. package/dist/docs/publications-store.js +23 -2
  106. package/dist/docs/publications-store.js.map +1 -1
  107. package/dist/docs/publish-pr.d.ts.map +1 -1
  108. package/dist/docs/publish-pr.js +12 -1
  109. package/dist/docs/publish-pr.js.map +1 -1
  110. package/dist/docs/rot.d.ts +94 -0
  111. package/dist/docs/rot.d.ts.map +1 -0
  112. package/dist/docs/rot.js +298 -0
  113. package/dist/docs/rot.js.map +1 -0
  114. package/dist/docs/similarity-check.d.ts +2 -0
  115. package/dist/docs/similarity-check.d.ts.map +1 -1
  116. package/dist/docs/similarity-check.js +6 -49
  117. package/dist/docs/similarity-check.js.map +1 -1
  118. package/dist/docs/slug-rename.d.ts +84 -0
  119. package/dist/docs/slug-rename.d.ts.map +1 -0
  120. package/dist/docs/slug-rename.js +166 -0
  121. package/dist/docs/slug-rename.js.map +1 -0
  122. package/dist/docs/slug-similarity.d.ts +24 -0
  123. package/dist/docs/slug-similarity.d.ts.map +1 -0
  124. package/dist/docs/slug-similarity.js +63 -0
  125. package/dist/docs/slug-similarity.js.map +1 -0
  126. package/dist/docs/wikilinks.d.ts +20 -4
  127. package/dist/docs/wikilinks.d.ts.map +1 -1
  128. package/dist/docs/wikilinks.js +52 -7
  129. package/dist/docs/wikilinks.js.map +1 -1
  130. package/dist/docs/writer-registry.d.ts.map +1 -1
  131. package/dist/docs/writer-registry.js +33 -0
  132. package/dist/docs/writer-registry.js.map +1 -1
  133. package/dist/doctor/type-matrix-repair.d.ts +194 -0
  134. package/dist/doctor/type-matrix-repair.d.ts.map +1 -0
  135. package/dist/doctor/type-matrix-repair.js +662 -0
  136. package/dist/doctor/type-matrix-repair.js.map +1 -0
  137. package/dist/gateway-client/generated/index.d.ts +2 -2
  138. package/dist/gateway-client/generated/index.d.ts.map +1 -1
  139. package/dist/gateway-client/generated/index.js +1 -1
  140. package/dist/gateway-client/generated/index.js.map +1 -1
  141. package/dist/gateway-client/generated/namespaces.gen.d.ts +5 -0
  142. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -1
  143. package/dist/gateway-client/generated/namespaces.gen.js +6 -1
  144. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -1
  145. package/dist/gateway-client/generated/sdk.gen.d.ts +21 -1
  146. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -1
  147. package/dist/gateway-client/generated/sdk.gen.js +55 -0
  148. package/dist/gateway-client/generated/sdk.gen.js.map +1 -1
  149. package/dist/gateway-client/generated/types.gen.d.ts +222 -0
  150. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
  151. package/dist/gc/gc-subsystem.d.ts +4 -0
  152. package/dist/gc/gc-subsystem.d.ts.map +1 -1
  153. package/dist/gc/gc-subsystem.js +16 -0
  154. package/dist/gc/gc-subsystem.js.map +1 -1
  155. package/dist/git/work-tree.d.ts +48 -0
  156. package/dist/git/work-tree.d.ts.map +1 -1
  157. package/dist/git/work-tree.js +63 -1
  158. package/dist/git/work-tree.js.map +1 -1
  159. package/dist/hooks/handlers/session-hooks.d.ts +5 -4
  160. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  161. package/dist/hooks/handlers/session-hooks.js +5 -21
  162. package/dist/hooks/handlers/session-hooks.js.map +1 -1
  163. package/dist/internal.d.ts +5 -1
  164. package/dist/internal.d.ts.map +1 -1
  165. package/dist/internal.js +5 -1
  166. package/dist/internal.js.map +1 -1
  167. package/dist/memory/brain-doctor.d.ts.map +1 -1
  168. package/dist/memory/brain-doctor.js +6 -1
  169. package/dist/memory/brain-doctor.js.map +1 -1
  170. package/dist/memory/engine-compat.d.ts.map +1 -1
  171. package/dist/memory/engine-compat.js +6 -0
  172. package/dist/memory/engine-compat.js.map +1 -1
  173. package/dist/nexus/analyze-orchestrator.d.ts +24 -0
  174. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  175. package/dist/nexus/analyze-orchestrator.js +43 -5
  176. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  177. package/dist/nexus/user-profile.d.ts +2 -1
  178. package/dist/nexus/user-profile.d.ts.map +1 -1
  179. package/dist/nexus/user-profile.js +13 -5
  180. package/dist/nexus/user-profile.js.map +1 -1
  181. package/dist/orchestrate/admission.d.ts +8 -0
  182. package/dist/orchestrate/admission.d.ts.map +1 -1
  183. package/dist/orchestrate/admission.js +3 -1
  184. package/dist/orchestrate/admission.js.map +1 -1
  185. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  186. package/dist/orchestrate/query-ops.js +15 -4
  187. package/dist/orchestrate/query-ops.js.map +1 -1
  188. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  189. package/dist/orchestrate/spawn-ops.js +43 -2
  190. package/dist/orchestrate/spawn-ops.js.map +1 -1
  191. package/dist/orchestration/index.d.ts +6 -0
  192. package/dist/orchestration/index.d.ts.map +1 -1
  193. package/dist/orchestration/index.js +3 -0
  194. package/dist/orchestration/index.js.map +1 -1
  195. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  196. package/dist/orchestration/spawn-prompt.js +3 -1
  197. package/dist/orchestration/spawn-prompt.js.map +1 -1
  198. package/dist/paths.d.ts +43 -1
  199. package/dist/paths.d.ts.map +1 -1
  200. package/dist/paths.js +51 -1
  201. package/dist/paths.js.map +1 -1
  202. package/dist/project-lifecycle.d.ts.map +1 -1
  203. package/dist/project-lifecycle.js +31 -0
  204. package/dist/project-lifecycle.js.map +1 -1
  205. package/dist/release/authorization.d.ts +156 -0
  206. package/dist/release/authorization.d.ts.map +1 -0
  207. package/dist/release/authorization.js +460 -0
  208. package/dist/release/authorization.js.map +1 -0
  209. package/dist/release/ci-evidence.d.ts +55 -4
  210. package/dist/release/ci-evidence.d.ts.map +1 -1
  211. package/dist/release/ci-evidence.js +251 -22
  212. package/dist/release/ci-evidence.js.map +1 -1
  213. package/dist/release/ci-run-evidence.d.ts +107 -0
  214. package/dist/release/ci-run-evidence.d.ts.map +1 -0
  215. package/dist/release/ci-run-evidence.js +234 -0
  216. package/dist/release/ci-run-evidence.js.map +1 -0
  217. package/dist/release/cut.d.ts +231 -0
  218. package/dist/release/cut.d.ts.map +1 -0
  219. package/dist/release/cut.js +775 -0
  220. package/dist/release/cut.js.map +1 -0
  221. package/dist/release/deploy-evidence.d.ts +173 -0
  222. package/dist/release/deploy-evidence.d.ts.map +1 -0
  223. package/dist/release/deploy-evidence.js +381 -0
  224. package/dist/release/deploy-evidence.js.map +1 -0
  225. package/dist/release/engine-ops.d.ts.map +1 -1
  226. package/dist/release/engine-ops.js +10 -4
  227. package/dist/release/engine-ops.js.map +1 -1
  228. package/dist/release/index.d.ts +3 -0
  229. package/dist/release/index.d.ts.map +1 -1
  230. package/dist/release/index.js +2 -0
  231. package/dist/release/index.js.map +1 -1
  232. package/dist/release/invariants/archive-reason-invariant.d.ts.map +1 -1
  233. package/dist/release/invariants/archive-reason-invariant.js +4 -1
  234. package/dist/release/invariants/archive-reason-invariant.js.map +1 -1
  235. package/dist/release/open.d.ts.map +1 -1
  236. package/dist/release/open.js +2 -6
  237. package/dist/release/open.js.map +1 -1
  238. package/dist/release/plan.d.ts +34 -2
  239. package/dist/release/plan.d.ts.map +1 -1
  240. package/dist/release/plan.js +30 -6
  241. package/dist/release/plan.js.map +1 -1
  242. package/dist/release/preflight-skip.d.ts +4 -19
  243. package/dist/release/preflight-skip.d.ts.map +1 -1
  244. package/dist/release/preflight-skip.js +5 -110
  245. package/dist/release/preflight-skip.js.map +1 -1
  246. package/dist/release/reconcile-latest.d.ts +29 -0
  247. package/dist/release/reconcile-latest.d.ts.map +1 -0
  248. package/dist/release/reconcile-latest.js +71 -0
  249. package/dist/release/reconcile-latest.js.map +1 -0
  250. package/dist/release/reconcile.d.ts +3 -1
  251. package/dist/release/reconcile.d.ts.map +1 -1
  252. package/dist/release/reconcile.js +18 -6
  253. package/dist/release/reconcile.js.map +1 -1
  254. package/dist/release/release-published.d.ts +27 -0
  255. package/dist/release/release-published.d.ts.map +1 -0
  256. package/dist/release/release-published.js +35 -0
  257. package/dist/release/release-published.js.map +1 -0
  258. package/dist/release/tty-confirm.d.ts +23 -0
  259. package/dist/release/tty-confirm.d.ts.map +1 -0
  260. package/dist/release/tty-confirm.js +50 -0
  261. package/dist/release/tty-confirm.js.map +1 -0
  262. package/dist/remote/index.js +1 -1
  263. package/dist/remote/index.js.map +1 -1
  264. package/dist/resources/admission-ledger.d.ts +103 -1
  265. package/dist/resources/admission-ledger.d.ts.map +1 -1
  266. package/dist/resources/admission-ledger.js +200 -17
  267. package/dist/resources/admission-ledger.js.map +1 -1
  268. package/dist/resources/agent-lease.d.ts +82 -0
  269. package/dist/resources/agent-lease.d.ts.map +1 -0
  270. package/dist/resources/agent-lease.js +167 -0
  271. package/dist/resources/agent-lease.js.map +1 -0
  272. package/dist/resources/governor.d.ts +27 -1
  273. package/dist/resources/governor.d.ts.map +1 -1
  274. package/dist/resources/governor.js +88 -4
  275. package/dist/resources/governor.js.map +1 -1
  276. package/dist/resources/hook-footprint.d.ts +13 -1
  277. package/dist/resources/hook-footprint.d.ts.map +1 -1
  278. package/dist/resources/hook-footprint.js +33 -7
  279. package/dist/resources/hook-footprint.js.map +1 -1
  280. package/dist/resources/run-governed.d.ts +25 -0
  281. package/dist/resources/run-governed.d.ts.map +1 -1
  282. package/dist/resources/run-governed.js +44 -3
  283. package/dist/resources/run-governed.js.map +1 -1
  284. package/dist/sagas/reconcile.d.ts.map +1 -1
  285. package/dist/sagas/reconcile.js +11 -0
  286. package/dist/sagas/reconcile.js.map +1 -1
  287. package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
  288. package/dist/scaffold/ensure-dirs.js +8 -6
  289. package/dist/scaffold/ensure-dirs.js.map +1 -1
  290. package/dist/security/override-cap-setting.d.ts +132 -0
  291. package/dist/security/override-cap-setting.d.ts.map +1 -1
  292. package/dist/security/override-cap-setting.js +88 -10
  293. package/dist/security/override-cap-setting.js.map +1 -1
  294. package/dist/security/owner-override-authority.d.ts.map +1 -1
  295. package/dist/security/owner-override-authority.js +5 -1
  296. package/dist/security/owner-override-authority.js.map +1 -1
  297. package/dist/selfimprove/draft-pr.d.ts.map +1 -1
  298. package/dist/selfimprove/draft-pr.js +4 -1
  299. package/dist/selfimprove/draft-pr.js.map +1 -1
  300. package/dist/session/engine-ops.d.ts.map +1 -1
  301. package/dist/session/engine-ops.js +4 -16
  302. package/dist/session/engine-ops.js.map +1 -1
  303. package/dist/sessions/briefing.d.ts +6 -0
  304. package/dist/sessions/briefing.d.ts.map +1 -1
  305. package/dist/sessions/briefing.js +34 -0
  306. package/dist/sessions/briefing.js.map +1 -1
  307. package/dist/sessions/session-end-snapshot-entry.js +2 -2
  308. package/dist/sessions/session-end-snapshot-entry.js.map +1 -1
  309. package/dist/sessions/session-end-snapshot.js +4 -4
  310. package/dist/sessions/session-end-snapshot.js.map +1 -1
  311. package/dist/skills/injection/token.d.ts.map +1 -1
  312. package/dist/skills/injection/token.js +3 -6
  313. package/dist/skills/injection/token.js.map +1 -1
  314. package/dist/skills/orchestrator/spawn.d.ts.map +1 -1
  315. package/dist/skills/orchestrator/spawn.js +3 -4
  316. package/dist/skills/orchestrator/spawn.js.map +1 -1
  317. package/dist/skills/propose-patch.d.ts.map +1 -1
  318. package/dist/skills/propose-patch.js +4 -1
  319. package/dist/skills/propose-patch.js.map +1 -1
  320. package/dist/spawn/branch-integration.d.ts.map +1 -1
  321. package/dist/spawn/branch-integration.js +5 -2
  322. package/dist/spawn/branch-integration.js.map +1 -1
  323. package/dist/store/attachment-repair.d.ts.map +1 -1
  324. package/dist/store/attachment-repair.js +5 -4
  325. package/dist/store/attachment-repair.js.map +1 -1
  326. package/dist/store/attachment-store.d.ts +6 -0
  327. package/dist/store/attachment-store.d.ts.map +1 -1
  328. package/dist/store/attachment-store.js +19 -2
  329. package/dist/store/attachment-store.js.map +1 -1
  330. package/dist/store/blob-ops.d.ts +1 -1
  331. package/dist/store/blob-ops.d.ts.map +1 -1
  332. package/dist/store/blob-ops.js +7 -3
  333. package/dist/store/blob-ops.js.map +1 -1
  334. package/dist/store/conduit-doc-history.d.ts +15 -1
  335. package/dist/store/conduit-doc-history.d.ts.map +1 -1
  336. package/dist/store/conduit-doc-history.js +16 -10
  337. package/dist/store/conduit-doc-history.js.map +1 -1
  338. package/dist/store/db-helpers.d.ts +29 -0
  339. package/dist/store/db-helpers.d.ts.map +1 -1
  340. package/dist/store/db-helpers.js +89 -1
  341. package/dist/store/db-helpers.js.map +1 -1
  342. package/dist/store/decision-adr-links.d.ts.map +1 -1
  343. package/dist/store/decision-adr-links.js +5 -2
  344. package/dist/store/decision-adr-links.js.map +1 -1
  345. package/dist/store/git-checkpoint.d.ts +11 -1
  346. package/dist/store/git-checkpoint.d.ts.map +1 -1
  347. package/dist/store/git-checkpoint.js +14 -3
  348. package/dist/store/git-checkpoint.js.map +1 -1
  349. package/dist/store/llmtxt-blob-adapter.d.ts.map +1 -1
  350. package/dist/store/llmtxt-blob-adapter.js +4 -1
  351. package/dist/store/llmtxt-blob-adapter.js.map +1 -1
  352. package/dist/store/schema/attachments.d.ts +7 -5
  353. package/dist/store/schema/attachments.d.ts.map +1 -1
  354. package/dist/store/schema/attachments.js +5 -2
  355. package/dist/store/schema/attachments.js.map +1 -1
  356. package/dist/store/session-store.d.ts.map +1 -1
  357. package/dist/store/session-store.js +6 -0
  358. package/dist/store/session-store.js.map +1 -1
  359. package/dist/store/sqlite-backup.d.ts +6 -1
  360. package/dist/store/sqlite-backup.d.ts.map +1 -1
  361. package/dist/store/sqlite-backup.js +9 -5
  362. package/dist/store/sqlite-backup.js.map +1 -1
  363. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  364. package/dist/store/sqlite-data-accessor.js +63 -36
  365. package/dist/store/sqlite-data-accessor.js.map +1 -1
  366. package/dist/system/backup.d.ts +29 -0
  367. package/dist/system/backup.d.ts.map +1 -1
  368. package/dist/system/backup.js +240 -37
  369. package/dist/system/backup.js.map +1 -1
  370. package/dist/system/dependencies.d.ts +22 -0
  371. package/dist/system/dependencies.d.ts.map +1 -1
  372. package/dist/system/dependencies.js +49 -2
  373. package/dist/system/dependencies.js.map +1 -1
  374. package/dist/system/health.d.ts.map +1 -1
  375. package/dist/system/health.js +23 -1
  376. package/dist/system/health.js.map +1 -1
  377. package/dist/task-work/claims.d.ts.map +1 -1
  378. package/dist/task-work/claims.js +14 -0
  379. package/dist/task-work/claims.js.map +1 -1
  380. package/dist/task-work/index.d.ts.map +1 -1
  381. package/dist/task-work/index.js +22 -0
  382. package/dist/task-work/index.js.map +1 -1
  383. package/dist/tasks/ac-coverage-gate.d.ts +27 -0
  384. package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
  385. package/dist/tasks/ac-coverage-gate.js +63 -28
  386. package/dist/tasks/ac-coverage-gate.js.map +1 -1
  387. package/dist/tasks/affected-packages.d.ts +26 -30
  388. package/dist/tasks/affected-packages.d.ts.map +1 -1
  389. package/dist/tasks/affected-packages.js +27 -50
  390. package/dist/tasks/affected-packages.js.map +1 -1
  391. package/dist/tasks/affected-scope.d.ts +13 -3
  392. package/dist/tasks/affected-scope.d.ts.map +1 -1
  393. package/dist/tasks/affected-scope.js +29 -11
  394. package/dist/tasks/affected-scope.js.map +1 -1
  395. package/dist/tasks/change-set.d.ts.map +1 -1
  396. package/dist/tasks/change-set.js +39 -20
  397. package/dist/tasks/change-set.js.map +1 -1
  398. package/dist/tasks/command-gate-cmd.d.ts +33 -0
  399. package/dist/tasks/command-gate-cmd.d.ts.map +1 -0
  400. package/dist/tasks/command-gate-cmd.js +45 -0
  401. package/dist/tasks/command-gate-cmd.js.map +1 -0
  402. package/dist/tasks/complete-ci.d.ts +9 -0
  403. package/dist/tasks/complete-ci.d.ts.map +1 -1
  404. package/dist/tasks/complete-ci.js +21 -4
  405. package/dist/tasks/complete-ci.js.map +1 -1
  406. package/dist/tasks/complete.d.ts.map +1 -1
  407. package/dist/tasks/complete.js +14 -0
  408. package/dist/tasks/complete.js.map +1 -1
  409. package/dist/tasks/component-pr.d.ts +37 -0
  410. package/dist/tasks/component-pr.d.ts.map +1 -1
  411. package/dist/tasks/component-pr.js +106 -14
  412. package/dist/tasks/component-pr.js.map +1 -1
  413. package/dist/tasks/done-plan.d.ts +14 -1
  414. package/dist/tasks/done-plan.d.ts.map +1 -1
  415. package/dist/tasks/done-plan.js +125 -15
  416. package/dist/tasks/done-plan.js.map +1 -1
  417. package/dist/tasks/done-record.d.ts.map +1 -1
  418. package/dist/tasks/done-record.js +4 -0
  419. package/dist/tasks/done-record.js.map +1 -1
  420. package/dist/tasks/engine-converters.d.ts.map +1 -1
  421. package/dist/tasks/engine-converters.js +2 -0
  422. package/dist/tasks/engine-converters.js.map +1 -1
  423. package/dist/tasks/evidence-tree.d.ts +28 -1
  424. package/dist/tasks/evidence-tree.d.ts.map +1 -1
  425. package/dist/tasks/evidence-tree.js +66 -2
  426. package/dist/tasks/evidence-tree.js.map +1 -1
  427. package/dist/tasks/evidence.d.ts +39 -27
  428. package/dist/tasks/evidence.d.ts.map +1 -1
  429. package/dist/tasks/evidence.js +382 -188
  430. package/dist/tasks/evidence.js.map +1 -1
  431. package/dist/tasks/gate-notes.d.ts +17 -0
  432. package/dist/tasks/gate-notes.d.ts.map +1 -1
  433. package/dist/tasks/gate-notes.js.map +1 -1
  434. package/dist/tasks/gate-preview.d.ts +7 -1
  435. package/dist/tasks/gate-preview.d.ts.map +1 -1
  436. package/dist/tasks/gate-preview.js +30 -4
  437. package/dist/tasks/gate-preview.js.map +1 -1
  438. package/dist/tasks/gate-runner.d.ts +42 -0
  439. package/dist/tasks/gate-runner.d.ts.map +1 -1
  440. package/dist/tasks/gate-runner.js +234 -94
  441. package/dist/tasks/gate-runner.js.map +1 -1
  442. package/dist/tasks/manifest-scope.d.ts +115 -0
  443. package/dist/tasks/manifest-scope.d.ts.map +1 -0
  444. package/dist/tasks/manifest-scope.js +352 -0
  445. package/dist/tasks/manifest-scope.js.map +1 -0
  446. package/dist/tasks/merge-close.d.ts +376 -0
  447. package/dist/tasks/merge-close.d.ts.map +1 -0
  448. package/dist/tasks/merge-close.js +1497 -0
  449. package/dist/tasks/merge-close.js.map +1 -0
  450. package/dist/tasks/qa-run-binding.d.ts +5 -0
  451. package/dist/tasks/qa-run-binding.d.ts.map +1 -1
  452. package/dist/tasks/qa-run-binding.js +6 -1
  453. package/dist/tasks/qa-run-binding.js.map +1 -1
  454. package/dist/tasks/req.d.ts.map +1 -1
  455. package/dist/tasks/req.js +29 -1
  456. package/dist/tasks/req.js.map +1 -1
  457. package/dist/tasks/review-verdict.d.ts +159 -0
  458. package/dist/tasks/review-verdict.d.ts.map +1 -0
  459. package/dist/tasks/review-verdict.js +442 -0
  460. package/dist/tasks/review-verdict.js.map +1 -0
  461. package/dist/tasks/task-reparent.d.ts.map +1 -1
  462. package/dist/tasks/task-reparent.js +22 -3
  463. package/dist/tasks/task-reparent.js.map +1 -1
  464. package/dist/tasks/test-report-counts.d.ts +274 -0
  465. package/dist/tasks/test-report-counts.d.ts.map +1 -0
  466. package/dist/tasks/test-report-counts.js +746 -0
  467. package/dist/tasks/test-report-counts.js.map +1 -0
  468. package/dist/tasks/test-run-binding.d.ts +20 -45
  469. package/dist/tasks/test-run-binding.d.ts.map +1 -1
  470. package/dist/tasks/test-run-binding.js +34 -119
  471. package/dist/tasks/test-run-binding.js.map +1 -1
  472. package/dist/tasks/update.d.ts.map +1 -1
  473. package/dist/tasks/update.js +42 -0
  474. package/dist/tasks/update.js.map +1 -1
  475. package/dist/tasks/verification-policy.d.ts +12 -0
  476. package/dist/tasks/verification-policy.d.ts.map +1 -1
  477. package/dist/tasks/verification-policy.js +13 -0
  478. package/dist/tasks/verification-policy.js.map +1 -1
  479. package/dist/tasks/workspace-resolution.d.ts +225 -0
  480. package/dist/tasks/workspace-resolution.d.ts.map +1 -0
  481. package/dist/tasks/workspace-resolution.js +497 -0
  482. package/dist/tasks/workspace-resolution.js.map +1 -0
  483. package/dist/validation/doctor/checks.d.ts +20 -0
  484. package/dist/validation/doctor/checks.d.ts.map +1 -1
  485. package/dist/validation/doctor/checks.js +112 -0
  486. package/dist/validation/doctor/checks.js.map +1 -1
  487. package/dist/validation/engine-ops.d.ts.map +1 -1
  488. package/dist/validation/engine-ops.js +37 -3
  489. package/dist/validation/engine-ops.js.map +1 -1
  490. package/dist/validation/validate-ops.d.ts +4 -0
  491. package/dist/validation/validate-ops.d.ts.map +1 -1
  492. package/dist/validation/validate-ops.js +79 -2
  493. package/dist/validation/validate-ops.js.map +1 -1
  494. package/dist/worktree/list.d.ts +4 -21
  495. package/dist/worktree/list.d.ts.map +1 -1
  496. package/dist/worktree/list.js +14 -44
  497. package/dist/worktree/list.js.map +1 -1
  498. package/dist/worktree/merged-cleanup.d.ts +63 -0
  499. package/dist/worktree/merged-cleanup.d.ts.map +1 -0
  500. package/dist/worktree/merged-cleanup.js +571 -0
  501. package/dist/worktree/merged-cleanup.js.map +1 -0
  502. package/dist/worktree/prune.d.ts +64 -2
  503. package/dist/worktree/prune.d.ts.map +1 -1
  504. package/dist/worktree/prune.js +151 -6
  505. package/dist/worktree/prune.js.map +1 -1
  506. package/dist/worktree/sentinel-index.d.ts +14 -0
  507. package/dist/worktree/sentinel-index.d.ts.map +1 -1
  508. package/dist/worktree/sentinel-index.js +17 -0
  509. package/dist/worktree/sentinel-index.js.map +1 -1
  510. package/dist/worktree/worktree-adopt.d.ts +1 -13
  511. package/dist/worktree/worktree-adopt.d.ts.map +1 -1
  512. package/dist/worktree/worktree-adopt.js +2 -17
  513. package/dist/worktree/worktree-adopt.js.map +1 -1
  514. package/package.json +12 -12
  515. package/schemas/project-context.schema.json +33 -0
  516. package/templates/CLEO-INJECTION.md +6 -16
  517. package/templates/CLEO-REFERENCE.md +27 -4
  518. package/templates/git-hooks/legacy-hashes.json +2 -1
  519. package/templates/git-hooks/pre-commit +43 -11
  520. package/templates/workflows/release-prepare.yml.tmpl +9 -88
@@ -0,0 +1,510 @@
1
+ /**
2
+ * `cleo docs modernize <path> --dry-run` — propose, per file, a kind, a
3
+ * stable slug and a disposition (T14113).
4
+ *
5
+ * Steps:
6
+ *
7
+ * 1. Scan `.md` / `.txt` files under the root (the `docs import` scanner),
8
+ * skipping build, generated and image folders.
9
+ * 2. Classify each file by rules (front matter, folder, filename, headings);
10
+ * a rule below {@link MODERNIZE_CLASSIFY_FLOOR} is judged by System One
11
+ * (`docs.modernize.classify`).
12
+ * 3. Derive the stable slug: no task, session or date tokens.
13
+ * 4. Group files by slug. Byte-identical members are deleted in favour of the
14
+ * survivor; other members merge when their line similarity is high, stay
15
+ * apart (with a numbered slug) when it is low, and are judged by System
16
+ * One (`docs.modernize.merge`) in between.
17
+ * 5. Survivors keep or move to `<kind folder>/<slug><ext>`.
18
+ *
19
+ * Read-only: nothing is written except the decision-audit line each System
20
+ * One question gets. The plan is the input to `applyDocsModernize`.
21
+ *
22
+ * @task T14113
23
+ * @epic T14106
24
+ */
25
+ import { execFileSync } from 'node:child_process';
26
+ import { extname, relative, sep } from 'node:path';
27
+ import { DocKindRegistry } from '@cleocode/contracts/docs-taxonomy.js';
28
+ import { createAttachmentStore } from '../../store/attachment-store.js';
29
+ import { docNameViolation } from '../doc-name-rule.js';
30
+ import { DEFAULT_EXCLUDE_DIRS, scanDirectory } from '../import/scanner.js';
31
+ import { judgeDocKind, judgeDocMerge, resolveModernizeJudgeSettings } from './judge.js';
32
+ import { classifyDocByRules, docSimilarity, finalPaths, folderKind, MODERNIZE_CLASSIFY_FLOOR, MODERNIZE_MERGE_APART, MODERNIZE_MERGE_SURE, markdownLinkFixes, readTitle, stableSlugFor, versionOf, } from './rules.js';
33
+ /** Folders modernize never descends into, beyond the scanner's defaults. */
34
+ export const MODERNIZE_EXCLUDE_DIRS = new Set([
35
+ ...DEFAULT_EXCLUDE_DIRS,
36
+ 'generated',
37
+ 'images',
38
+ 'assets',
39
+ ]);
40
+ /** File extensions modernize reads. */
41
+ export const MODERNIZE_EXTENSIONS = ['.md', '.txt'];
42
+ /**
43
+ * Task and decision ids an old path names (`T1234`, `D11180`), upper-cased,
44
+ * in order of appearance.
45
+ *
46
+ * @param relPath - Path relative to the root.
47
+ * @returns Unique ids.
48
+ */
49
+ export function ownerIdsFromPath(relPath) {
50
+ const ids = new Set();
51
+ for (const m of relPath.matchAll(/(?:^|[^a-z0-9])([td]\d{3,})(?=[^0-9]|$)/gi)) {
52
+ if (m[1])
53
+ ids.add(m[1].toUpperCase());
54
+ }
55
+ return [...ids];
56
+ }
57
+ /**
58
+ * Tracked files outside `root` that cite any of `paths` (one `git grep`).
59
+ *
60
+ * @param repoRoot - Repository root.
61
+ * @param root - Absolute modernize root.
62
+ * @param paths - Root-relative paths to look for.
63
+ * @returns Root-relative path → citing repo-relative files.
64
+ */
65
+ function findRefs(repoRoot, root, paths) {
66
+ const out = new Map();
67
+ if (paths.length === 0)
68
+ return out;
69
+ const prefix = relative(repoRoot, root).split(sep).join('/');
70
+ if (prefix.startsWith('..'))
71
+ return out;
72
+ const needles = paths.map((p) => (prefix ? `${prefix}/${p}` : p));
73
+ const byNeedle = new Map(needles.map((n, i) => [n, paths[i] ?? n]));
74
+ let stdout = '';
75
+ try {
76
+ stdout = execFileSync('git', [
77
+ 'grep',
78
+ '-o',
79
+ '-F',
80
+ '-I',
81
+ ...needles.flatMap((n) => ['-e', n]),
82
+ '--',
83
+ '.',
84
+ ...(prefix ? [`:!${prefix}/**`] : []),
85
+ ], {
86
+ cwd: repoRoot,
87
+ encoding: 'utf-8',
88
+ maxBuffer: 64 * 1024 * 1024,
89
+ stdio: ['ignore', 'pipe', 'ignore'],
90
+ });
91
+ }
92
+ catch {
93
+ return out; // exit 1 = no match; not a repo = nothing to report
94
+ }
95
+ for (const line of stdout.split('\n')) {
96
+ const at = line.indexOf(':');
97
+ if (at <= 0)
98
+ continue;
99
+ const file = line.slice(0, at);
100
+ const path = byNeedle.get(line.slice(at + 1));
101
+ if (!path)
102
+ continue;
103
+ const list = out.get(path) ?? [];
104
+ if (!list.includes(file))
105
+ list.push(file);
106
+ out.set(path, list);
107
+ }
108
+ return out;
109
+ }
110
+ /** The folder, relative to the root, that a kind's docs live in. */
111
+ export function kindFolder(kind, kinds) {
112
+ const publishDir = kinds.find((k) => k.kind === kind)?.publishDir ?? kind;
113
+ if (publishDir === '.' || publishDir === '')
114
+ return '';
115
+ return publishDir.split('/').filter(Boolean).pop() ?? kind;
116
+ }
117
+ /** The canonical path of a survivor, relative to the root. */
118
+ function canonicalPath(relPath, kind, slug, kinds) {
119
+ const folder = kindFolder(kind, kinds);
120
+ const ext = extname(relPath).toLowerCase() === '.txt' ? '.txt' : '.md';
121
+ return folder ? `${folder}/${slug}${ext}` : `${slug}${ext}`;
122
+ }
123
+ /**
124
+ * Order survivors first: highest claimed version, then a file already at its
125
+ * canonical path, then the most content, then path order.
126
+ */
127
+ function survivorOrder(kinds) {
128
+ const settled = (c) => canonicalPath(c.file.relPath, c.kind, c.slug, kinds) === c.file.relPath ? 1 : 0;
129
+ return (a, b) => versionOf(b.file.relPath) - versionOf(a.file.relPath) ||
130
+ settled(b) - settled(a) ||
131
+ b.file.content.length - a.file.content.length ||
132
+ a.file.relPath.localeCompare(b.file.relPath);
133
+ }
134
+ /** Classify one file, asking System One when the rule is unsure. */
135
+ async function classify(file, kinds, settings, forced) {
136
+ const rule = forced.kind
137
+ ? { kind: forced.kind, confidence: 1, reason: 'kind given by the caller' }
138
+ : classifyDocByRules(file.relPath, file.content, kinds);
139
+ const reasons = [`kind ${rule.kind}: ${rule.reason}`];
140
+ const judgments = [];
141
+ let kind = rule.kind;
142
+ const title = readTitle(file.content) ?? '';
143
+ if (rule.confidence < MODERNIZE_CLASSIFY_FLOOR && !forced.overridden) {
144
+ const judgment = await judgeDocKind({
145
+ path: file.relPath,
146
+ title,
147
+ content: file.content,
148
+ ruleKind: rule.kind,
149
+ ruleConfidence: rule.confidence,
150
+ kinds,
151
+ }, settings);
152
+ judgments.push(judgment);
153
+ kind = judgment.acted;
154
+ if (kind !== rule.kind)
155
+ reasons.push(`kind ${kind}: System One overrode the rule`);
156
+ }
157
+ const slug = stableSlugFor(file.relPath, file.content, kind);
158
+ if (slug !==
159
+ file.relPath
160
+ .split('/')
161
+ .pop()
162
+ ?.replace(/\.[^.]+$/, '')) {
163
+ reasons.push(`slug ${slug}: task, session and date tokens dropped from the name`);
164
+ }
165
+ return { file, kind, slug, title: title || slug, reasons, judgments };
166
+ }
167
+ /**
168
+ * Whether two files live in the same home: the same folder, or folders that
169
+ * name the same kind under one parent (`docs/specs` and `docs/spec`).
170
+ */
171
+ function sameHome(a, b, kinds) {
172
+ const dirA = a.split('/').slice(0, -1);
173
+ const dirB = b.split('/').slice(0, -1);
174
+ if (dirA.join('/') === dirB.join('/'))
175
+ return true;
176
+ if (dirA.slice(0, -1).join('/') !== dirB.slice(0, -1).join('/'))
177
+ return false;
178
+ const kindA = folderKind(dirA.at(-1) ?? '', kinds);
179
+ return kindA !== null && kindA === folderKind(dirB.at(-1) ?? '', kinds);
180
+ }
181
+ /** Next free numbered slug (`<slug>-2`, `-3` …). */
182
+ function numberedSlug(slug, taken) {
183
+ let n = 2;
184
+ while (taken.has(`${slug}-${n}`))
185
+ n += 1;
186
+ return `${slug}-${n}`;
187
+ }
188
+ /**
189
+ * Plan a modernize run over `options.root`.
190
+ *
191
+ * @param options - Root, project root and System One overrides.
192
+ * @returns The plan: one row per scanned file, sorted by path.
193
+ */
194
+ export async function planDocsModernize(options) {
195
+ const kinds = DocKindRegistry.load(options.projectRoot).list();
196
+ const settings = await resolveModernizeJudgeSettings(options.projectRoot, options.decide, options.mode);
197
+ const files = await scanDirectory({
198
+ root: options.root,
199
+ extensions: MODERNIZE_EXTENSIONS,
200
+ excludeDirs: new Set([...MODERNIZE_EXCLUDE_DIRS, ...(options.exclude ?? [])]),
201
+ });
202
+ const candidates = [];
203
+ const overrides = options.overrides ?? {};
204
+ for (const file of files) {
205
+ const override = overrides[file.relPath];
206
+ candidates.push(await classify(file, kinds, settings, {
207
+ kind: override?.kind ?? options.kind,
208
+ overridden: override !== undefined,
209
+ }));
210
+ }
211
+ if (options.storeOnly)
212
+ return finishPlan(options, kinds, candidates.map(storeOnlyRow), files);
213
+ const groups = new Map();
214
+ for (const c of candidates) {
215
+ const group = groups.get(c.slug) ?? [];
216
+ group.push(c);
217
+ groups.set(c.slug, group);
218
+ }
219
+ const taken = new Set(groups.keys());
220
+ const rows = [];
221
+ const survivorRow = (c, slug) => {
222
+ const target = canonicalPath(c.file.relPath, c.kind, slug, kinds);
223
+ const disposition = target === c.file.relPath ? 'keep' : 'rename';
224
+ return {
225
+ path: c.file.relPath,
226
+ sha256: c.file.contentSha,
227
+ kind: c.kind,
228
+ slug,
229
+ title: c.title,
230
+ disposition,
231
+ target,
232
+ reasons: disposition === 'rename' ? [...c.reasons, `moves to ${target}`] : c.reasons,
233
+ judgments: c.judgments,
234
+ };
235
+ };
236
+ for (const [slug, group] of groups) {
237
+ const [survivor, ...rest] = [...group].sort(survivorOrder(kinds));
238
+ if (!survivor)
239
+ continue;
240
+ rows.push(survivorRow(survivor, slug));
241
+ for (const other of rest) {
242
+ const reasons = [...other.reasons];
243
+ const judgments = [...other.judgments];
244
+ const reviewed = overrides[other.file.relPath] ?? overrides[survivor.file.relPath];
245
+ const home = sameHome(survivor.file.relPath, other.file.relPath, kinds);
246
+ if (other.file.contentSha === survivor.file.contentSha && home) {
247
+ rows.push({
248
+ path: other.file.relPath,
249
+ sha256: other.file.contentSha,
250
+ kind: survivor.kind,
251
+ slug,
252
+ title: other.title,
253
+ disposition: 'delete',
254
+ target: slug,
255
+ reasons: [...reasons, `byte-identical to ${survivor.file.relPath}`],
256
+ judgments,
257
+ });
258
+ continue;
259
+ }
260
+ const similarity = docSimilarity(survivor.file.content, other.file.content);
261
+ const pct = Math.round(similarity * 100);
262
+ let verdict = home && similarity >= MODERNIZE_MERGE_SURE ? 'merge' : 'separate';
263
+ // Different homes (two packages' api-design.md) never merge by rule:
264
+ // System One or an override decides, and the rule says keep apart.
265
+ const ambiguous = home
266
+ ? similarity >= MODERNIZE_MERGE_APART && similarity < MODERNIZE_MERGE_SURE
267
+ : similarity >= MODERNIZE_MERGE_APART;
268
+ if (ambiguous && !reviewed) {
269
+ const rule = home && similarity >= (MODERNIZE_MERGE_APART + MODERNIZE_MERGE_SURE) / 2
270
+ ? 'merge'
271
+ : 'separate';
272
+ const judgment = await judgeDocMerge({
273
+ left: { path: survivor.file.relPath, content: survivor.file.content },
274
+ right: { path: other.file.relPath, content: other.file.content },
275
+ similarity,
276
+ rule,
277
+ }, settings);
278
+ judgments.push(judgment);
279
+ verdict = judgment.acted === 'merge' ? 'merge' : 'separate';
280
+ }
281
+ if (verdict === 'merge') {
282
+ rows.push({
283
+ path: other.file.relPath,
284
+ sha256: other.file.contentSha,
285
+ kind: survivor.kind,
286
+ slug,
287
+ title: other.title,
288
+ disposition: 'merge-into',
289
+ target: slug,
290
+ reasons: [
291
+ ...reasons,
292
+ `${pct}% of lines shared with ${survivor.file.relPath}; folds into it`,
293
+ ],
294
+ judgments,
295
+ });
296
+ }
297
+ else {
298
+ const own = numberedSlug(slug, taken);
299
+ taken.add(own);
300
+ const row = survivorRow({ ...other, judgments }, own);
301
+ rows.push({
302
+ ...row,
303
+ reasons: [
304
+ ...row.reasons,
305
+ `shares the name ${slug} with ${survivor.file.relPath} but only ${pct}% of lines; kept apart as ${own}`,
306
+ ],
307
+ });
308
+ }
309
+ }
310
+ }
311
+ // Update before create: a survivor whose slug the store already holds
312
+ // updates that doc when they are alike, and takes a numbered slug when not.
313
+ const store = createAttachmentStore();
314
+ const texts = new Map(files.map((f) => [f.relPath, f.content]));
315
+ for (let i = 0; i < rows.length; i += 1) {
316
+ const row = rows[i];
317
+ if (!row || (row.disposition !== 'keep' && row.disposition !== 'rename'))
318
+ continue;
319
+ const existing = await store.findBySlug(row.slug, options.projectRoot);
320
+ if (existing?.metadata.sha256 === row.sha256)
321
+ continue;
322
+ const sameBytes = await store.getMetadata(row.sha256, options.projectRoot);
323
+ if (sameBytes) {
324
+ const extras = await store.getExtras(sameBytes.id, options.projectRoot);
325
+ rows[i] = {
326
+ ...row,
327
+ reasons: [
328
+ ...row.reasons,
329
+ `already stored in CleoDocs${extras?.slug ? ` as ${extras.slug}` : ''}; the file moves, the stored doc is left as is`,
330
+ ],
331
+ };
332
+ continue;
333
+ }
334
+ if (!existing)
335
+ continue;
336
+ const stored = await store.get(existing.metadata.sha256, options.projectRoot);
337
+ const similarity = stored
338
+ ? docSimilarity(stored.bytes.toString('utf-8'), texts.get(row.path) ?? '')
339
+ : 0;
340
+ const pct = Math.round(similarity * 100);
341
+ if (similarity >= MODERNIZE_MERGE_APART) {
342
+ rows[i] = {
343
+ ...row,
344
+ reasons: [
345
+ ...row.reasons,
346
+ `merges into the existing CleoDocs doc ${row.slug} (${pct}% of lines shared; nothing of either is dropped)`,
347
+ ],
348
+ };
349
+ continue;
350
+ }
351
+ let own = numberedSlug(row.slug, taken);
352
+ while ((await store.findBySlug(own, options.projectRoot)) !== null) {
353
+ taken.add(own);
354
+ own = numberedSlug(row.slug, taken);
355
+ }
356
+ taken.add(own);
357
+ const moved = canonicalPath(row.path, row.kind, own, kinds);
358
+ for (let j = 0; j < rows.length; j += 1) {
359
+ const dup = rows[j];
360
+ if (dup &&
361
+ dup.target === row.slug &&
362
+ (dup.disposition === 'merge-into' || dup.disposition === 'delete')) {
363
+ rows[j] = { ...dup, slug: own, target: own };
364
+ }
365
+ }
366
+ rows[i] = {
367
+ ...row,
368
+ slug: own,
369
+ target: moved,
370
+ disposition: moved === row.path ? 'keep' : 'rename',
371
+ reasons: [
372
+ ...row.reasons,
373
+ `the store's ${row.slug} is a different doc (${pct}% of lines shared); stored as ${own}`,
374
+ ],
375
+ };
376
+ }
377
+ return finishPlan(options, kinds, rows, files);
378
+ }
379
+ /** A store-only row: ingest the file as is, owned by its task, without a slug. */
380
+ function storeOnlyRow(c) {
381
+ const owner = ownerIdsFromPath(c.file.relPath).find((id) => id.startsWith('T'));
382
+ return {
383
+ path: c.file.relPath,
384
+ sha256: c.file.contentSha,
385
+ kind: c.kind,
386
+ slug: c.slug,
387
+ title: c.title,
388
+ disposition: 'keep',
389
+ target: null,
390
+ reasons: [
391
+ ...c.reasons,
392
+ `stored without a slug, owned by ${owner ?? 'the project'}; the file stays where it is`,
393
+ ],
394
+ judgments: c.judgments,
395
+ };
396
+ }
397
+ /** Apply overrides, add links, category and refs, sort and count. */
398
+ function finishPlan(options, kinds, coreRows, files) {
399
+ const overrides = options.overrides ?? {};
400
+ const moved = options.storeOnly
401
+ ? []
402
+ : coreRows.filter((r) => r.disposition !== 'keep' || overrides[r.path]).map((r) => r.path);
403
+ const refs = findRefs(options.repoRoot ?? options.projectRoot, options.root, moved);
404
+ const scanned = new Set(files.map((f) => f.relPath));
405
+ const rows = coreRows.map((row) => {
406
+ const override = overrides[row.path];
407
+ const kind = override?.kind ?? row.kind;
408
+ const base = {
409
+ ...row,
410
+ kind,
411
+ ownerTasks: ownerIdsFromPath(row.path),
412
+ category: kindFolder(kind, kinds),
413
+ refs: refs.get(row.path) ?? [],
414
+ overridden: override !== undefined,
415
+ covers: override?.covers ?? [],
416
+ baselineRemove: false,
417
+ };
418
+ const settled = override ? applyOverride(base, override, kinds) : base;
419
+ return { ...settled, baselineRemove: !options.storeOnly && clearsSlugRule(settled) };
420
+ });
421
+ const survivors = new Set(rows.filter((r) => r.disposition === 'keep' || r.disposition === 'rename').map((r) => r.slug));
422
+ for (const row of rows) {
423
+ if (!row.overridden)
424
+ continue;
425
+ if ((row.disposition === 'merge-into' || row.disposition === 'delete') &&
426
+ !survivors.has(row.target ?? '')) {
427
+ // @sync-invariant none:input-shape an override that folds a file into no survivor is refused before any write
428
+ throw new DocsModernizeOverrideError(`override for ${row.path}: ${row.disposition} must name a survivor's slug (got ${row.target ?? 'none'})`);
429
+ }
430
+ }
431
+ for (const path of Object.keys(overrides)) {
432
+ if (!scanned.has(path)) {
433
+ // @sync-invariant none:input-shape an override for a file the scan did not find is refused before any write
434
+ throw new DocsModernizeOverrideError(`override names ${path}, which is not a scanned file under the root`);
435
+ }
436
+ }
437
+ rows.sort((a, b) => a.path.localeCompare(b.path));
438
+ const counts = {
439
+ keep: 0,
440
+ rename: 0,
441
+ 'merge-into': 0,
442
+ delete: 0,
443
+ };
444
+ for (const row of rows)
445
+ counts[row.disposition] += 1;
446
+ // A kept file stays byte-identical except for hrefs whose targets move;
447
+ // each such edit is a plan row, so --apply never does more than the dry
448
+ // run showed (T14185).
449
+ const linkFixes = [];
450
+ if (!options.storeOnly) {
451
+ const finalPathOf = finalPaths(rows);
452
+ const contentOf = new Map(files.map((f) => [f.relPath, f.content]));
453
+ for (const row of rows) {
454
+ if (row.disposition !== 'keep')
455
+ continue;
456
+ for (const fix of markdownLinkFixes(contentOf.get(row.path) ?? '', row.path, finalPathOf)) {
457
+ linkFixes.push({ kind: 'link-fix', path: row.path, ...fix });
458
+ }
459
+ }
460
+ }
461
+ return {
462
+ root: options.root,
463
+ generatedAt: (options.now?.() ?? new Date()).toISOString(),
464
+ rows,
465
+ counts,
466
+ mode: options.storeOnly ? 'store-only' : 'tree',
467
+ ...(linkFixes.length > 0 ? { linkFixes } : {}),
468
+ };
469
+ }
470
+ /**
471
+ * Apply one reviewer override to a row. `keep` stays at the file's own path;
472
+ * `rename` uses the override's target or the canonical path; `merge-into` and
473
+ * `delete` use the override's target or the row's own survivor slug.
474
+ */
475
+ function applyOverride(row, override, kinds) {
476
+ const slug = override.slug ?? row.slug;
477
+ const wasSurvivor = row.disposition === 'keep' || row.disposition === 'rename';
478
+ let target;
479
+ if (override.disposition === 'keep')
480
+ target = row.path;
481
+ else if (override.disposition === 'rename') {
482
+ target =
483
+ override.target ??
484
+ (wasSurvivor && !override.slug && !override.kind
485
+ ? row.target
486
+ : canonicalPath(row.path, row.kind, slug, kinds));
487
+ }
488
+ else
489
+ target = override.target ?? (wasSurvivor ? null : row.target);
490
+ return {
491
+ ...row,
492
+ slug,
493
+ disposition: override.disposition,
494
+ target,
495
+ reasons: [...row.reasons, `override: ${override.reason}`],
496
+ };
497
+ }
498
+ /** Whether the old name broke the T14107 slug rule and the row's outcome no longer does. */
499
+ function clearsSlugRule(row) {
500
+ if (row.disposition === 'keep')
501
+ return false;
502
+ const base = (row.path.split('/').pop() ?? '').replace(/\.[^.]+$/, '');
503
+ return docNameViolation(base, row.kind) !== null && docNameViolation(row.slug, row.kind) === null;
504
+ }
505
+ /** Raised when an override names a path the scan did not find. */
506
+ export class DocsModernizeOverrideError extends Error {
507
+ /** Stable code for the envelope. */
508
+ code = 'E_MODERNIZE_OVERRIDE';
509
+ }
510
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/docs/modernize/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Exact store restores for `cleo docs modernize --rollback` (T14113).
3
+ *
4
+ * Apply records the values a step replaced (`DocsModernizeOpPrior`); these
5
+ * helpers read those values before a step and put them back afterwards, so a
6
+ * rollback restores the registry rows as they were rather than writing a new
7
+ * version on top.
8
+ *
9
+ * @task T14113
10
+ * @epic T14106
11
+ */
12
+ import type { DocsModernizeOpPrior } from '@cleocode/contracts';
13
+ /**
14
+ * The supersession pointers a `supersedeDoc(old, new)` will replace.
15
+ *
16
+ * @param projectRoot - Project root.
17
+ * @param oldSlug - Doc about to be superseded.
18
+ * @param newSlug - Doc about to supersede it.
19
+ * @returns The prior values, or null when either slug is unknown.
20
+ */
21
+ export declare function readSupersessionPrior(projectRoot: string, oldSlug: string, newSlug: string): Promise<DocsModernizeOpPrior | null>;
22
+ /**
23
+ * Put back the pointers and status a supersede replaced.
24
+ *
25
+ * @param projectRoot - Project root.
26
+ * @param oldSlug - The superseded doc.
27
+ * @param newSlug - The superseding doc.
28
+ * @param prior - Values recorded by {@link readSupersessionPrior}.
29
+ */
30
+ export declare function restoreSupersession(projectRoot: string, oldSlug: string, newSlug: string, prior: DocsModernizeOpPrior): Promise<void>;
31
+ /**
32
+ * Undo a `docs update` of `slug`: give the slug back to the row that held it
33
+ * and drop the refs the update copied onto the new row (the new row is purged
34
+ * when none remain). The new row must have been created by that update.
35
+ *
36
+ * @param projectRoot - Project root.
37
+ * @param slug - The updated slug.
38
+ * @param prior - `previousAttachmentId` and `newAttachmentId` from the merge op.
39
+ */
40
+ export declare function revertDocUpdate(projectRoot: string, slug: string, prior: DocsModernizeOpPrior): Promise<void>;
41
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../src/docs/modernize/restore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAehE;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAUtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf"}