@cleocode/core 2026.10.18 → 2026.10.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 (259) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/check/pr-gate.js +1 -1
  3. package/dist/check/pr-gate.js.map +1 -1
  4. package/dist/cloud/nexus-vault.d.ts +4 -3
  5. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  6. package/dist/cloud/nexus-vault.js +62 -22
  7. package/dist/cloud/nexus-vault.js.map +1 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +11 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/docs/conduit-history-backfill.d.ts +210 -0
  12. package/dist/docs/conduit-history-backfill.d.ts.map +1 -0
  13. package/dist/docs/conduit-history-backfill.js +451 -0
  14. package/dist/docs/conduit-history-backfill.js.map +1 -0
  15. package/dist/docs/docs-ops.d.ts +33 -0
  16. package/dist/docs/docs-ops.d.ts.map +1 -1
  17. package/dist/docs/docs-ops.js +72 -0
  18. package/dist/docs/docs-ops.js.map +1 -1
  19. package/dist/docs/docs-update.d.ts.map +1 -1
  20. package/dist/docs/docs-update.js +71 -0
  21. package/dist/docs/docs-update.js.map +1 -1
  22. package/dist/docs/doctor.d.ts +18 -4
  23. package/dist/docs/doctor.d.ts.map +1 -1
  24. package/dist/docs/doctor.js +124 -3
  25. package/dist/docs/doctor.js.map +1 -1
  26. package/dist/docs/section-merge.d.ts +70 -9
  27. package/dist/docs/section-merge.d.ts.map +1 -1
  28. package/dist/docs/section-merge.js +167 -10
  29. package/dist/docs/section-merge.js.map +1 -1
  30. package/dist/docs/section-write-path.d.ts.map +1 -1
  31. package/dist/docs/section-write-path.js +23 -8
  32. package/dist/docs/section-write-path.js.map +1 -1
  33. package/dist/gateway-client/generated/types.gen.d.ts +4 -0
  34. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
  35. package/dist/go/driver.d.ts +29 -145
  36. package/dist/go/driver.d.ts.map +1 -1
  37. package/dist/go/driver.js +75 -168
  38. package/dist/go/driver.js.map +1 -1
  39. package/dist/go/index.d.ts +1 -1
  40. package/dist/go/index.d.ts.map +1 -1
  41. package/dist/go/index.js +1 -1
  42. package/dist/go/index.js.map +1 -1
  43. package/dist/goal/close.d.ts +1 -1
  44. package/dist/goal/close.js +2 -2
  45. package/dist/goal/close.js.map +1 -1
  46. package/dist/goal/draft.d.ts +10 -3
  47. package/dist/goal/draft.d.ts.map +1 -1
  48. package/dist/goal/draft.js +14 -9
  49. package/dist/goal/draft.js.map +1 -1
  50. package/dist/goal/index.d.ts +9 -12
  51. package/dist/goal/index.d.ts.map +1 -1
  52. package/dist/goal/index.js +9 -12
  53. package/dist/goal/index.js.map +1 -1
  54. package/dist/goal/runtime.d.ts +126 -0
  55. package/dist/goal/runtime.d.ts.map +1 -0
  56. package/dist/goal/runtime.js +289 -0
  57. package/dist/goal/runtime.js.map +1 -0
  58. package/dist/goal/status.d.ts +39 -0
  59. package/dist/goal/status.d.ts.map +1 -0
  60. package/dist/goal/status.js +101 -0
  61. package/dist/goal/status.js.map +1 -0
  62. package/dist/hooks/project-runner.d.ts +8 -3
  63. package/dist/hooks/project-runner.d.ts.map +1 -1
  64. package/dist/hooks/project-runner.js +104 -14
  65. package/dist/hooks/project-runner.js.map +1 -1
  66. package/dist/hooks/project-state.js +1 -1
  67. package/dist/hooks/project-state.js.map +1 -1
  68. package/dist/internal.d.ts +7 -3
  69. package/dist/internal.d.ts.map +1 -1
  70. package/dist/internal.js +5 -3
  71. package/dist/internal.js.map +1 -1
  72. package/dist/lifecycle/engine-ops.d.ts.map +1 -1
  73. package/dist/lifecycle/engine-ops.js +9 -6
  74. package/dist/lifecycle/engine-ops.js.map +1 -1
  75. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  76. package/dist/memory/retrieval/observe.js +4 -8
  77. package/dist/memory/retrieval/observe.js.map +1 -1
  78. package/dist/paths.d.ts.map +1 -1
  79. package/dist/paths.js +4 -1
  80. package/dist/paths.js.map +1 -1
  81. package/dist/playbooks/cantbook-profile.d.ts +3 -3
  82. package/dist/playbooks/cantbook-profile.js +3 -3
  83. package/dist/playbooks/pi-runner-wiring.d.ts +3 -3
  84. package/dist/playbooks/pi-runner-wiring.js +3 -3
  85. package/dist/release/ci-evidence.d.ts +28 -0
  86. package/dist/release/ci-evidence.d.ts.map +1 -1
  87. package/dist/release/ci-evidence.js +76 -20
  88. package/dist/release/ci-evidence.js.map +1 -1
  89. package/dist/release/open.d.ts +11 -0
  90. package/dist/release/open.d.ts.map +1 -1
  91. package/dist/release/open.js +49 -10
  92. package/dist/release/open.js.map +1 -1
  93. package/dist/release/preflight-skip.d.ts +50 -0
  94. package/dist/release/preflight-skip.d.ts.map +1 -1
  95. package/dist/release/preflight-skip.js +151 -34
  96. package/dist/release/preflight-skip.js.map +1 -1
  97. package/dist/release/reconcile.d.ts.map +1 -1
  98. package/dist/release/reconcile.js +6 -3
  99. package/dist/release/reconcile.js.map +1 -1
  100. package/dist/scaffold/ensure-config.d.ts +1 -1
  101. package/dist/scaffold/ensure-config.d.ts.map +1 -1
  102. package/dist/scaffold/ensure-config.js +2 -0
  103. package/dist/scaffold/ensure-config.js.map +1 -1
  104. package/dist/security/index.d.ts +1 -1
  105. package/dist/security/index.d.ts.map +1 -1
  106. package/dist/security/index.js +1 -1
  107. package/dist/security/index.js.map +1 -1
  108. package/dist/security/override-cap-setting.d.ts +180 -0
  109. package/dist/security/override-cap-setting.d.ts.map +1 -0
  110. package/dist/security/override-cap-setting.js +657 -0
  111. package/dist/security/override-cap-setting.js.map +1 -0
  112. package/dist/security/override-cap.d.ts +20 -29
  113. package/dist/security/override-cap.d.ts.map +1 -1
  114. package/dist/security/override-cap.js +47 -71
  115. package/dist/security/override-cap.js.map +1 -1
  116. package/dist/security/owner-override-auth.d.ts +58 -0
  117. package/dist/security/owner-override-auth.d.ts.map +1 -1
  118. package/dist/security/owner-override-auth.js +82 -1
  119. package/dist/security/owner-override-auth.js.map +1 -1
  120. package/dist/security/owner-override-authority.d.ts +67 -0
  121. package/dist/security/owner-override-authority.d.ts.map +1 -0
  122. package/dist/security/owner-override-authority.js +100 -0
  123. package/dist/security/owner-override-authority.js.map +1 -0
  124. package/dist/sessions/handoff.d.ts.map +1 -1
  125. package/dist/sessions/handoff.js +4 -5
  126. package/dist/sessions/handoff.js.map +1 -1
  127. package/dist/sessions/index.d.ts.map +1 -1
  128. package/dist/sessions/index.js +22 -25
  129. package/dist/sessions/index.js.map +1 -1
  130. package/dist/store/conduit-doc-history.d.ts +39 -7
  131. package/dist/store/conduit-doc-history.d.ts.map +1 -1
  132. package/dist/store/conduit-doc-history.js +62 -12
  133. package/dist/store/conduit-doc-history.js.map +1 -1
  134. package/dist/store/data-safety-central.d.ts.map +1 -1
  135. package/dist/store/data-safety-central.js +3 -2
  136. package/dist/store/data-safety-central.js.map +1 -1
  137. package/dist/store/json.d.ts.map +1 -1
  138. package/dist/store/json.js +7 -7
  139. package/dist/store/json.js.map +1 -1
  140. package/dist/store/portable-bundle-scan.d.ts +23 -1
  141. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  142. package/dist/store/portable-bundle-scan.js +85 -3
  143. package/dist/store/portable-bundle-scan.js.map +1 -1
  144. package/dist/store/portable-bundle.d.ts.map +1 -1
  145. package/dist/store/portable-bundle.js +6 -1
  146. package/dist/store/portable-bundle.js.map +1 -1
  147. package/dist/store/row-identity-registry.d.ts +5 -3
  148. package/dist/store/row-identity-registry.d.ts.map +1 -1
  149. package/dist/store/row-identity-registry.js +54 -38
  150. package/dist/store/row-identity-registry.js.map +1 -1
  151. package/dist/store/schema/cleo-project/conduit.d.ts.map +1 -1
  152. package/dist/store/schema/cleo-project/conduit.js +4 -3
  153. package/dist/store/schema/cleo-project/conduit.js.map +1 -1
  154. package/dist/store/schema/cleo-project/runtime.d.ts +32 -0
  155. package/dist/store/schema/cleo-project/runtime.d.ts.map +1 -1
  156. package/dist/store/schema/cleo-project/runtime.js +7 -3
  157. package/dist/store/schema/cleo-project/runtime.js.map +1 -1
  158. package/dist/store/session-store.d.ts +45 -0
  159. package/dist/store/session-store.d.ts.map +1 -1
  160. package/dist/store/session-store.js +96 -1
  161. package/dist/store/session-store.js.map +1 -1
  162. package/dist/store/sqlite.d.ts +2 -0
  163. package/dist/store/sqlite.d.ts.map +1 -1
  164. package/dist/store/sqlite.js +12 -0
  165. package/dist/store/sqlite.js.map +1 -1
  166. package/dist/store/sync/merge/rules.d.ts.map +1 -1
  167. package/dist/store/sync/merge/rules.js +0 -16
  168. package/dist/store/sync/merge/rules.js.map +1 -1
  169. package/dist/store/sync/sealer.d.ts.map +1 -1
  170. package/dist/store/sync/sealer.js +27 -1
  171. package/dist/store/sync/sealer.js.map +1 -1
  172. package/dist/store/sync/sequencing.d.ts +3 -1
  173. package/dist/store/sync/sequencing.d.ts.map +1 -1
  174. package/dist/store/sync/sequencing.js +5 -3
  175. package/dist/store/sync/sequencing.js.map +1 -1
  176. package/dist/store/sync/timestamp-canon.d.ts.map +1 -1
  177. package/dist/store/sync/timestamp-canon.js +4 -0
  178. package/dist/store/sync/timestamp-canon.js.map +1 -1
  179. package/dist/store/table-classification.d.ts.map +1 -1
  180. package/dist/store/table-classification.js +12 -8
  181. package/dist/store/table-classification.js.map +1 -1
  182. package/dist/store/twin-collapse.d.ts +21 -0
  183. package/dist/store/twin-collapse.d.ts.map +1 -1
  184. package/dist/store/twin-collapse.js +235 -18
  185. package/dist/store/twin-collapse.js.map +1 -1
  186. package/dist/system/health.d.ts +17 -0
  187. package/dist/system/health.d.ts.map +1 -1
  188. package/dist/system/health.js +96 -0
  189. package/dist/system/health.js.map +1 -1
  190. package/dist/tasks/affected-packages.d.ts +67 -2
  191. package/dist/tasks/affected-packages.d.ts.map +1 -1
  192. package/dist/tasks/affected-packages.js +149 -21
  193. package/dist/tasks/affected-packages.js.map +1 -1
  194. package/dist/tasks/affected-scope.d.ts.map +1 -1
  195. package/dist/tasks/affected-scope.js +91 -5
  196. package/dist/tasks/affected-scope.js.map +1 -1
  197. package/dist/tasks/changeset-plan.d.ts +33 -0
  198. package/dist/tasks/changeset-plan.d.ts.map +1 -0
  199. package/dist/tasks/changeset-plan.js +152 -0
  200. package/dist/tasks/changeset-plan.js.map +1 -0
  201. package/dist/tasks/complete.d.ts.map +1 -1
  202. package/dist/tasks/complete.js +9 -1
  203. package/dist/tasks/complete.js.map +1 -1
  204. package/dist/tasks/done-plan.d.ts.map +1 -1
  205. package/dist/tasks/done-plan.js +28 -14
  206. package/dist/tasks/done-plan.js.map +1 -1
  207. package/dist/tasks/done-record.d.ts.map +1 -1
  208. package/dist/tasks/done-record.js +5 -1
  209. package/dist/tasks/done-record.js.map +1 -1
  210. package/dist/tasks/evidence.d.ts.map +1 -1
  211. package/dist/tasks/evidence.js +149 -18
  212. package/dist/tasks/evidence.js.map +1 -1
  213. package/dist/tasks/gate-runner.d.ts.map +1 -1
  214. package/dist/tasks/gate-runner.js +76 -4
  215. package/dist/tasks/gate-runner.js.map +1 -1
  216. package/dist/tasks/qa-run-binding.d.ts +18 -0
  217. package/dist/tasks/qa-run-binding.d.ts.map +1 -1
  218. package/dist/tasks/qa-run-binding.js +41 -1
  219. package/dist/tasks/qa-run-binding.js.map +1 -1
  220. package/dist/tasks/test-run-binding.d.ts +62 -0
  221. package/dist/tasks/test-run-binding.d.ts.map +1 -1
  222. package/dist/tasks/test-run-binding.js +126 -21
  223. package/dist/tasks/test-run-binding.js.map +1 -1
  224. package/dist/tasks/tool-resolver.d.ts +7 -0
  225. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  226. package/dist/tasks/tool-resolver.js +3 -1
  227. package/dist/tasks/tool-resolver.js.map +1 -1
  228. package/dist/validation/engine-ops.d.ts.map +1 -1
  229. package/dist/validation/engine-ops.js +24 -29
  230. package/dist/validation/engine-ops.js.map +1 -1
  231. package/migrations/drizzle-cleo-project/20261016120000_t12535-playbook-row-uids/migration.sql +24 -0
  232. package/package.json +13 -13
  233. package/schemas/project-context.schema.json +5 -0
  234. package/templates/CLEO-INJECTION.md +1 -1
  235. package/templates/CLEO-REFERENCE.md +42 -1
  236. package/templates/cleo-gitignore +3 -0
  237. package/templates/git-hooks/legacy-hashes.json +1 -0
  238. package/templates/git-hooks/pre-push +35 -7
  239. package/templates/workflows/release-prepare.yml.tmpl +82 -4
  240. package/dist/goal/advance-with-persist.d.ts +0 -80
  241. package/dist/goal/advance-with-persist.d.ts.map +0 -1
  242. package/dist/goal/advance-with-persist.js +0 -105
  243. package/dist/goal/advance-with-persist.js.map +0 -1
  244. package/dist/goal/arm.d.ts +0 -61
  245. package/dist/goal/arm.d.ts.map +0 -1
  246. package/dist/goal/arm.js +0 -65
  247. package/dist/goal/arm.js.map +0 -1
  248. package/dist/goal/continuation.d.ts +0 -66
  249. package/dist/goal/continuation.d.ts.map +0 -1
  250. package/dist/goal/continuation.js +0 -111
  251. package/dist/goal/continuation.js.map +0 -1
  252. package/dist/goal/judge.d.ts +0 -113
  253. package/dist/goal/judge.d.ts.map +0 -1
  254. package/dist/goal/judge.js +0 -193
  255. package/dist/goal/judge.js.map +0 -1
  256. package/dist/goal/loop.d.ts +0 -75
  257. package/dist/goal/loop.d.ts.map +0 -1
  258. package/dist/goal/loop.js +0 -132
  259. package/dist/goal/loop.js.map +0 -1
@@ -0,0 +1,451 @@
1
+ /**
2
+ * T13727 — backfill `conduit_attachment_versions` for docs whose history
3
+ * predates the conduit adoption.
4
+ *
5
+ * The section write path (`section-write-path.ts`) has projected every docs
6
+ * update through the conduit history family since the adoption release, but
7
+ * updates from BEFORE the adoption wrote no conduit rows — the T13360
8
+ * migration projected only then-current content. A doc at `docVersion` 3 can
9
+ * therefore hold a single conduit version row (the first post-adoption
10
+ * update, minted as local display ordinal 1), with versions 1..N−1 known
11
+ * only to the legacy surfaces. This module is the historical complement to
12
+ * that projection: it reconstructs the missing rows from the honest
13
+ * pre-adoption sources and inserts them through the canonical accessor.
14
+ *
15
+ * Honest-metadata contract (Council condition for migrated history):
16
+ *
17
+ * - The version CHAIN comes from the docs-versioning audit log
18
+ * (`.cleo/audit/docs-versioning.jsonl`): each changed revision records
19
+ * the real timestamp (`ts`), the real author (`attachedBy`) and the real
20
+ * content address (`sha256`). Version 1 anchors at the first revision's
21
+ * `previousSha256`; its creation instant is read from the matching
22
+ * `docs_attachments` row (historical rows keep their `created_at` after
23
+ * an update re-homes the slug), and its author is unknown — recorded as
24
+ * {@link CONDUIT_BACKFILL_AUTHOR}, never invented.
25
+ * - `changeType` is the schema's honest `'migrated'` (via
26
+ * {@link importMigratedConduitVersion}); `origin` is `'backfill-t13727'`
27
+ * so repair-synthesized rows never pose as T13360 imports.
28
+ * - `contentHash` addresses the REAL historical bytes. When the bytes are
29
+ * unrecoverable (neither the blob store nor the legacy attachment tree
30
+ * holds them), the position is recorded as a GAP and skipped — content
31
+ * is never fabricated. The parent chain links across a gap to the
32
+ * nearest present ancestor and the report counts the gap.
33
+ * - Existing conduit rows are NEVER updated or renumbered (append-only).
34
+ * Matching is by CONTENT HASH, never by ordinal or tail position
35
+ * (review-2253): a chain position whose hash already has a row is done;
36
+ * an existing row whose hash is not in the chain refuses the doc
37
+ * (reported for manual review); complete means every recoverable
38
+ * position is present, and unrecoverable positions stay reported as
39
+ * gaps rather than being silently dropped.
40
+ *
41
+ * Idempotency: a doc whose chain positions all have rows (by content hash)
42
+ * is skipped; per-row natural uids (doc uid, content hash, createdAt) make a
43
+ * partial re-run a verified no-op via `ON CONFLICT DO NOTHING`.
44
+ *
45
+ * The parent link from the last backfilled row to the first EXISTING row is
46
+ * implicit (content alignment + display ordinals); existing rows'
47
+ * `parent_version_uid` is history and stays untouched.
48
+ *
49
+ * @module
50
+ * @task T13727
51
+ * @epic T13340
52
+ * @saga T13339
53
+ */
54
+ import { createHash } from 'node:crypto';
55
+ import { readFileSync } from 'node:fs';
56
+ import { readFile } from 'node:fs/promises';
57
+ import { join } from 'node:path';
58
+ import { and, asc, eq, isNotNull } from 'drizzle-orm';
59
+ import { resolveCleoDir } from '../paths.js';
60
+ import { resolveLegacyByteSource } from '../store/blob-keep.js';
61
+ import { importMigratedConduitVersion, listConduitAttachmentVersions, withConduitDocWriteTransaction, } from '../store/conduit-doc-history.js';
62
+ import { naturalRowUid } from '../store/row-identity.js';
63
+ import { conduitAttachments } from '../store/schema/cleo-project/conduit.js';
64
+ import { getDb } from '../store/sqlite.js';
65
+ import { docsAttachments } from '../store/tasks-schema.js';
66
+ import { DOCS_VERSIONING_AUDIT_FILE } from './docs-update.js';
67
+ /**
68
+ * Honest author label for backfilled rows whose real author is unrecoverable
69
+ * (the original creation predates the docs-versioning audit trail's author
70
+ * tracking on revisions, and `docs_attachments` records no author).
71
+ *
72
+ * @task T13727
73
+ */
74
+ export const CONDUIT_BACKFILL_AUTHOR = 'cleo:backfill-t13727';
75
+ /**
76
+ * Import provenance written to `conduit_attachment_versions.origin` — keeps
77
+ * repair-synthesized rows distinguishable from T13360 `'migrated'` imports
78
+ * and from native (`NULL`) rows.
79
+ *
80
+ * @task T13727
81
+ */
82
+ export const CONDUIT_BACKFILL_ORIGIN = 'backfill-t13727';
83
+ /** MIME used to probe the legacy attachment tree for historical doc bytes. */
84
+ const DOC_PROBE_MIME = 'text/markdown';
85
+ /**
86
+ * Measure a token count the way the docs write path does
87
+ * (`section-write-path.ts`) — whitespace-split, empty tokens dropped.
88
+ *
89
+ * @internal
90
+ */
91
+ function countTokens(text) {
92
+ return text.split(/\s+/).filter((w) => w.length > 0).length;
93
+ }
94
+ /**
95
+ * True when `value` is a non-empty string (the audit parser's field guard).
96
+ * @internal
97
+ */
98
+ function isNonEmptyString(value) {
99
+ return typeof value === 'string' && value.length > 0;
100
+ }
101
+ /**
102
+ * Read the docs-versioning audit log once, flattening every squash window's
103
+ * revisions into a per-slug chronological list. Malformed lines and entries
104
+ * are skipped — the file is an audit aid, and a corrupt line must not fail
105
+ * the repair planning pass.
106
+ *
107
+ * @internal
108
+ */
109
+ function readAuditRevisionsBySlug(projectRoot) {
110
+ let raw;
111
+ try {
112
+ raw = readFileSync(join(projectRoot, DOCS_VERSIONING_AUDIT_FILE), 'utf-8');
113
+ }
114
+ catch {
115
+ return new Map();
116
+ }
117
+ const bySlug = new Map();
118
+ for (const line of raw.split('\n')) {
119
+ if (line.trim().length === 0)
120
+ continue;
121
+ let entry;
122
+ try {
123
+ entry = JSON.parse(line);
124
+ }
125
+ catch {
126
+ continue;
127
+ }
128
+ if (entry.op !== 'docs.update' || !isNonEmptyString(entry.slug))
129
+ continue;
130
+ if (!Array.isArray(entry.revisions))
131
+ continue;
132
+ const list = bySlug.get(entry.slug) ?? [];
133
+ for (const revision of entry.revisions) {
134
+ if (revision !== null && typeof revision === 'object') {
135
+ list.push(revision);
136
+ }
137
+ }
138
+ bySlug.set(entry.slug, list);
139
+ }
140
+ return bySlug;
141
+ }
142
+ /**
143
+ * Read the bytes for `sha256` from the blob store or the legacy attachment
144
+ * tree, verifying the SHA-256 before returning. Read-only: unlike
145
+ * `blobReadBySha` this never heals/mirrors — planning and dry runs must stay
146
+ * side-effect free. A candidate whose hash does not verify is skipped (a
147
+ * corrupt file at the address is a gap, not content).
148
+ *
149
+ * @internal
150
+ */
151
+ async function readVerifiedVersionBytes(cleoDir, sha256) {
152
+ const candidates = [
153
+ join(cleoDir, 'blobs', 'blobs', sha256),
154
+ resolveLegacyByteSource(cleoDir, sha256, DOC_PROBE_MIME),
155
+ ];
156
+ for (const candidate of candidates) {
157
+ if (candidate === null)
158
+ continue;
159
+ let bytes;
160
+ try {
161
+ bytes = await readFile(candidate);
162
+ }
163
+ catch {
164
+ continue;
165
+ }
166
+ if (createHash('sha256').update(bytes).digest('hex') === sha256)
167
+ return bytes;
168
+ }
169
+ return null;
170
+ }
171
+ /**
172
+ * Reconstruct one doc's pre-adoption version chain from the honest sources.
173
+ *
174
+ * Chain shape: position 1 anchors at the first audit revision's
175
+ * `previousSha256` (the content the slug pointed at before any recorded
176
+ * update); every CHANGED revision appends its `sha256` as the next state.
177
+ * Noop revisions (a lifecycle-only update writes `changed: false`) create no
178
+ * new content state and are skipped. A doc the audit log never saw yields a
179
+ * single-state chain from its current `docs_attachments` row.
180
+ *
181
+ * Returns null when the chain cannot be anchored honestly (the first
182
+ * revision carries no usable `previousSha256` but changed revisions exist) —
183
+ * the caller reports the doc as unrecoverable rather than mislabeling a
184
+ * later state as the root.
185
+ *
186
+ * @internal
187
+ */
188
+ async function deriveChainStates(db, slug, revisions) {
189
+ const changed = revisions.filter((r) => r.changed === true && isNonEmptyString(r.ts) && isNonEmptyString(r.sha256));
190
+ if (revisions.length === 0) {
191
+ const row = await db
192
+ .select({ sha256: docsAttachments.sha256, createdAt: docsAttachments.createdAt })
193
+ .from(docsAttachments)
194
+ .where(eq(docsAttachments.slug, slug))
195
+ .get();
196
+ if (!row)
197
+ return [];
198
+ // Honest labeling (review-2253 LOW-2): the audit log records NOTHING for
199
+ // this doc, so the single state is the version that SURVIVED, not a
200
+ // recorded "original version" — chain length 1 by survival, and any
201
+ // earlier history is unrecoverable rather than absent-by-proof.
202
+ return [
203
+ {
204
+ position: 1,
205
+ sha256: row.sha256,
206
+ createdAt: row.createdAt,
207
+ authorAgentId: CONDUIT_BACKFILL_AUTHOR,
208
+ changeSummary: 'only surviving version — doc predates the docs-versioning audit log; ' +
209
+ 'earlier history is unrecoverable (backfilled by T13727)',
210
+ },
211
+ ];
212
+ }
213
+ const anchor = revisions[0]?.previousSha256;
214
+ if (!isNonEmptyString(anchor))
215
+ return null;
216
+ const firstTs = revisions[0]?.ts;
217
+ // The anchor row must be the ORIGINAL creation row (doc_version = 1), not
218
+ // just any row carrying the sha: content-address dedupe reuses one
219
+ // docs_attachments row across slugs, and a reused row's created_at belongs
220
+ // to another doc's timeline (review-2253 LOW-1).
221
+ const anchorRow = await db
222
+ .select({ createdAt: docsAttachments.createdAt })
223
+ .from(docsAttachments)
224
+ .where(and(eq(docsAttachments.sha256, anchor), eq(docsAttachments.docVersion, 1)))
225
+ .get();
226
+ if (!anchorRow && !isNonEmptyString(firstTs))
227
+ return null;
228
+ const states = [
229
+ {
230
+ position: 1,
231
+ sha256: anchor,
232
+ createdAt: anchorRow?.createdAt ?? firstTs,
233
+ authorAgentId: CONDUIT_BACKFILL_AUTHOR,
234
+ changeSummary: anchorRow
235
+ ? 'original version (pre-adoption history backfilled by T13727)'
236
+ : 'original version — timestamp is the first recorded update; the creation instant ' +
237
+ 'is unrecoverable (pre-adoption history backfilled by T13727)',
238
+ },
239
+ ];
240
+ for (const revision of changed) {
241
+ const message = isNonEmptyString(revision.message) ? `: ${revision.message}` : '';
242
+ states.push({
243
+ position: states.length + 1,
244
+ sha256: revision.sha256,
245
+ createdAt: revision.ts,
246
+ authorAgentId: isNonEmptyString(revision.attachedBy)
247
+ ? revision.attachedBy
248
+ : CONDUIT_BACKFILL_AUTHOR,
249
+ changeSummary: `pre-adoption history backfilled by T13727${message}`,
250
+ });
251
+ }
252
+ return states;
253
+ }
254
+ /**
255
+ * Plan the conduit-history backfill for every adopted doc.
256
+ *
257
+ * A doc is in scope when the docs registry (`docs_attachments`) knows its
258
+ * slug AND a `conduit_attachments` row exists for it — the doc was adopted
259
+ * (or migrated) but its pre-adoption updates wrote no conduit rows. Pure
260
+ * with respect to the database and the blob store: safe in dry-run planning.
261
+ *
262
+ * Matching model (review-2253): matching is by CONTENT HASH, never by
263
+ * ordinal or tail position — after a gapped apply the existing set mixes
264
+ * backfilled low positions with minted rows, so a positional tail check
265
+ * would false-conflict forever. The rules:
266
+ *
267
+ * - a chain position whose content_hash already has a row is done;
268
+ * - a position with no row and no verified bytes is a gap (counted);
269
+ * - an existing row whose content_hash is not in the chain is a conflict
270
+ * (the doc is refused and reported, never overwritten);
271
+ * - complete means every recoverable position is present — a doc with
272
+ * permanent gaps can be complete AND still report them.
273
+ *
274
+ * Existing rows keep their minted local display ordinals (rows are
275
+ * append-only); backfilled rows carry their chain position as
276
+ * `version_number`, so ordinals may repeat across the seam — the schema
277
+ * defines `version_number` as a local display ordinal that is never a key,
278
+ * and `docs versions` assigns read-time display ordinals instead.
279
+ *
280
+ * @param projectRoot - Absolute path to the CLEO project root.
281
+ * @returns One plan per in-scope doc (complete, backfill, gap or conflict).
282
+ * @task T13727
283
+ */
284
+ export async function planConduitHistoryBackfill(projectRoot) {
285
+ const db = await getDb(projectRoot);
286
+ const registrySlugs = new Set((await db
287
+ .select({ slug: docsAttachments.slug })
288
+ .from(docsAttachments)
289
+ .where(isNotNull(docsAttachments.slug))
290
+ .all()).map((r) => r.slug));
291
+ const conduitDocs = await db
292
+ .select({ uid: conduitAttachments.uid, slug: conduitAttachments.slug })
293
+ .from(conduitAttachments)
294
+ .where(isNotNull(conduitAttachments.slug))
295
+ .orderBy(asc(conduitAttachments.slug))
296
+ .all();
297
+ const revisionsBySlug = readAuditRevisionsBySlug(projectRoot);
298
+ const cleoDir = resolveCleoDir(projectRoot);
299
+ const plans = [];
300
+ for (const doc of conduitDocs) {
301
+ if (doc.slug === null || doc.uid === null)
302
+ continue;
303
+ if (!registrySlugs.has(doc.slug))
304
+ continue;
305
+ const slug = doc.slug;
306
+ const registryRow = await db
307
+ .select({ docVersion: docsAttachments.docVersion })
308
+ .from(docsAttachments)
309
+ .where(eq(docsAttachments.slug, slug))
310
+ .get();
311
+ const existing = (await listConduitAttachmentVersions(projectRoot, doc.uid)).sort((a, b) => a.versionNumber - b.versionNumber);
312
+ const base = {
313
+ slug,
314
+ docUid: doc.uid,
315
+ existingVersions: existing.length,
316
+ auditGapVersions: 0,
317
+ };
318
+ const states = await deriveChainStates(db, slug, revisionsBySlug.get(slug) ?? []);
319
+ if (states === null) {
320
+ plans.push({
321
+ ...base,
322
+ expectedVersions: 0,
323
+ presentVersions: 0,
324
+ toBackfill: [],
325
+ gaps: [],
326
+ complete: false,
327
+ conflict: true,
328
+ });
329
+ continue;
330
+ }
331
+ const auditGapVersions = Math.max(0, (registryRow?.docVersion ?? states.length) - states.length);
332
+ // An existing row whose content_hash is not in the chain contradicts
333
+ // the honest sources — refuse the doc and report it, never overwrite.
334
+ const chainHashes = new Set(states.map((s) => s.sha256));
335
+ if (existing.some((row) => !chainHashes.has(row.contentHash))) {
336
+ plans.push({
337
+ ...base,
338
+ expectedVersions: states.length,
339
+ auditGapVersions,
340
+ presentVersions: 0,
341
+ toBackfill: [],
342
+ gaps: [],
343
+ complete: false,
344
+ conflict: true,
345
+ });
346
+ continue;
347
+ }
348
+ // Content-hash matching (review-2253): no ordinal or tail-position
349
+ // assumptions — a position is done when its hash already has a row.
350
+ const hashPresent = new Set(existing.map((r) => r.contentHash));
351
+ // Earliest-created row per hash is the DAG parent candidate when several
352
+ // rows share a content hash (a revert, a recorded conflict).
353
+ const uidByHash = new Map();
354
+ for (const row of [...existing].sort((a, b) => a.createdAt.localeCompare(b.createdAt) || (a.uid ?? '').localeCompare(b.uid ?? ''))) {
355
+ if (typeof row.uid === 'string' && row.uid.length > 0 && !uidByHash.has(row.contentHash)) {
356
+ uidByHash.set(row.contentHash, row.uid);
357
+ }
358
+ }
359
+ const toBackfill = [];
360
+ const gaps = [];
361
+ let presentVersions = 0;
362
+ // The DAG parent of the next backfilled row: the uid of the nearest
363
+ // lower chain position that has (or will have, via this plan) a row.
364
+ let lastRowUid = null;
365
+ for (const state of states) {
366
+ if (hashPresent.has(state.sha256)) {
367
+ presentVersions += 1;
368
+ const uid = uidByHash.get(state.sha256);
369
+ if (uid !== undefined)
370
+ lastRowUid = uid;
371
+ continue;
372
+ }
373
+ const bytes = await readVerifiedVersionBytes(cleoDir, state.sha256);
374
+ if (bytes === null) {
375
+ gaps.push({ position: state.position, sha256: state.sha256 });
376
+ continue;
377
+ }
378
+ toBackfill.push({
379
+ ...state,
380
+ sizeBytes: bytes.length,
381
+ tokens: countTokens(bytes.toString('utf-8')),
382
+ parentVersionUid: lastRowUid,
383
+ });
384
+ // The uid this row WILL have — importMigratedConduitVersion derives the
385
+ // same natural uid, so the link is stable across a re-run.
386
+ lastRowUid = naturalRowUid('project', 'conduit_attachment_versions', [
387
+ doc.uid,
388
+ state.sha256,
389
+ state.createdAt,
390
+ ]);
391
+ }
392
+ plans.push({
393
+ ...base,
394
+ expectedVersions: states.length,
395
+ auditGapVersions,
396
+ presentVersions,
397
+ toBackfill,
398
+ gaps,
399
+ // Complete = every recoverable position is present; permanent gaps
400
+ // stay reported in `gaps` rather than being silently dropped.
401
+ complete: toBackfill.length === 0,
402
+ conflict: false,
403
+ });
404
+ }
405
+ return plans;
406
+ }
407
+ /**
408
+ * Execute one {@link ConduitDocBackfillPlan}: insert the synthesized history
409
+ * rows through the canonical accessor, one transaction per doc.
410
+ *
411
+ * Every statement inside the transaction resolves without a real I/O yield
412
+ * (bytes were read and measured during planning; {@link withConduitDocWriteTransaction}
413
+ * brackets the inserts), so a partial backfill cannot leave a forked chain.
414
+ * Per-row natural uids make a re-run a verified no-op; a doc whose count
415
+ * already equals the chain length was filtered by the planner
416
+ * (`complete: true`) and inserts nothing here.
417
+ *
418
+ * @param projectRoot - Absolute path to the CLEO project root.
419
+ * @param plan - One doc's plan from {@link planConduitHistoryBackfill}.
420
+ * @returns Inserted row count and unrecoverable gap count for the doc.
421
+ * @task T13727
422
+ */
423
+ // @sync-invariant docs.versions.append-only history rows are synthesized from the real audit chain and inserted with natural uids; nothing is updated or deleted, and a conflicting doc is refused by the planner before any write
424
+ export async function applyConduitHistoryBackfill(projectRoot, plan) {
425
+ if (plan.complete || plan.conflict) {
426
+ return { slug: plan.slug, docUid: plan.docUid, inserted: 0, gaps: plan.gaps.length };
427
+ }
428
+ let inserted = 0;
429
+ await withConduitDocWriteTransaction(projectRoot, async () => {
430
+ for (const version of plan.toBackfill) {
431
+ const { inserted: didInsert } = await importMigratedConduitVersion(projectRoot, {
432
+ attachmentUid: plan.docUid,
433
+ parentVersionUid: version.parentVersionUid,
434
+ authorAgentId: version.authorAgentId,
435
+ storageKey: `sha256:${version.sha256}`,
436
+ contentHash: version.sha256,
437
+ sizeBytes: version.sizeBytes,
438
+ tokens: version.tokens,
439
+ versionNumber: version.position,
440
+ createdAt: version.createdAt,
441
+ changeSummary: version.changeSummary,
442
+ slug: plan.slug,
443
+ origin: CONDUIT_BACKFILL_ORIGIN,
444
+ });
445
+ if (didInsert)
446
+ inserted += 1;
447
+ }
448
+ });
449
+ return { slug: plan.slug, docUid: plan.docUid, inserted, gaps: plan.gaps.length };
450
+ }
451
+ //# sourceMappingURL=conduit-history-backfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conduit-history-backfill.js","sourceRoot":"","sources":["../../src/docs/conduit-history-backfill.ts"],"names":[],"mappings":"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"}
@@ -123,6 +123,25 @@ export interface DocsVersionEntry {
123
123
  readonly ownerVersion?: string;
124
124
  /** Sequential doc version counter (T11181). */
125
125
  readonly docVersion?: number;
126
+ /**
127
+ * Display ordinal 1..N over the doc's version history, assigned at READ
128
+ * time (T13727 display-ordinal ruling): rows are ordered by `created_at`
129
+ * ascending (uid tiebreak) and the oldest row gets 1, the newest N. This
130
+ * never repeats across the pre-/post-adoption seam the way stored
131
+ * ordinals can. Present only on conduit-history entries (T13727 routing);
132
+ * manifest-fallback entries carry no version sequence and omit the field.
133
+ */
134
+ readonly version?: number;
135
+ /**
136
+ * The row's stored `conduit_attachment_versions.version_number` — the
137
+ * honest local display ordinal, which MAY repeat across the
138
+ * pre-/post-adoption seam (backfilled head rows carry their chain
139
+ * position while post-adoption rows keep their minted ordinals; rows are
140
+ * append-only and never renumbered). Diagnostics only — user-facing
141
+ * ordering uses {@link DocsVersionEntry.version}. Present only on
142
+ * conduit-history entries.
143
+ */
144
+ readonly storedVersionNumber?: number;
126
145
  }
127
146
  /**
128
147
  * Result returned by {@link listDocVersions}.
@@ -402,6 +421,20 @@ export declare function rankDocs(opts: {
402
421
  * (sibling docs included; narrow with `name`). An
403
422
  * arg that is neither throws `E_NOT_FOUND`.
404
423
  *
424
+ * T13727 — precedence: when the arg resolves as a doc slug that has been
425
+ * adopted into the conduit family AND has at least one
426
+ * `conduit_attachment_versions` row, the listing comes from the conduit
427
+ * history ({@link listConduitAttachmentVersions}) keyed on the doc's
428
+ * immutable uid — the canonical per-doc history — instead of the LWW blob
429
+ * manifest. Entries carry the version's `content_hash`, a read-time
430
+ * display ordinal (`version`, 1..N chronological — see
431
+ * {@link DocsVersionEntry.version}) and the stored
432
+ * `version_number` (`storedVersionNumber`), ordered newest first. A doc
433
+ * with no conduit row, or none yet adopted, keeps the manifest listing as
434
+ * fallback so the command never regresses; manifest entries omit
435
+ * `version`/`storedVersionNumber` (no stored version sequence exists
436
+ * there).
437
+ *
405
438
  * @param opts - Required `ownerId` (owner id or doc slug), optional `name`
406
439
  * filter and `projectRoot`.
407
440
  * @returns Version list with SHA-256 content addresses.
@@ -1 +1 @@
1
- {"version":3,"file":"docs-ops.d.ts","sourceRoot":"","sources":["../../src/docs/docs-ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs-ops.d.ts","sourceRoot":"","sources":["../../src/docs/docs-ops.ts"],"names":[],"mappings":"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"}
@@ -576,6 +576,57 @@ export async function rankDocs(opts) {
576
576
  });
577
577
  return { ownerId: opts.ownerId, hits };
578
578
  }
579
+ /**
580
+ * Try the T13727 conduit-history listing for a doc-slug arg.
581
+ *
582
+ * Returns null (caller falls back to the manifest path) when the arg does
583
+ * not resolve to a conduit doc, when the doc has no version rows yet, or
584
+ * when the project store cannot be read — the command must never regress
585
+ * because the store was unreachable.
586
+ *
587
+ * @internal
588
+ */
589
+ async function listConduitDocVersions(root, slug, name) {
590
+ try {
591
+ const { findConduitAttachmentByUid, listConduitAttachmentVersions, resolveConduitDocUid } = await import('../store/conduit-doc-history.js');
592
+ const docUid = await resolveConduitDocUid(root, slug);
593
+ if (docUid === null)
594
+ return null;
595
+ const doc = await findConduitAttachmentByUid(root, docUid);
596
+ const rows = await listConduitAttachmentVersions(root, docUid);
597
+ if (rows.length === 0)
598
+ return null;
599
+ const entryName = doc?.slug ?? slug;
600
+ if (name !== undefined && name !== entryName) {
601
+ return { ownerId: slug, nameFilter: name, versions: [] };
602
+ }
603
+ // Display-ordinal ruling (T13727): assign 1..N in chronological order
604
+ // (created_at ascending, uid tiebreak) — rows stay append-only and are
605
+ // never renumbered, so the stored version_number can repeat across the
606
+ // pre-/post-adoption seam; the read-time ordinal cannot. Entries are
607
+ // returned newest first, so the list reads N..1.
608
+ const chronological = [...rows].sort((a, b) => {
609
+ const byTime = a.createdAt.localeCompare(b.createdAt);
610
+ return byTime !== 0 ? byTime : (a.uid ?? '').localeCompare(b.uid ?? '');
611
+ });
612
+ const versions = chronological
613
+ .map((row, index) => ({ row, display: index + 1 }))
614
+ .reverse()
615
+ .map(({ row, display }) => ({
616
+ attachmentId: row.contentHash,
617
+ name: entryName,
618
+ sha256: row.contentHash,
619
+ sizeBytes: row.originalSize,
620
+ docVersion: row.versionNumber,
621
+ version: display,
622
+ storedVersionNumber: row.versionNumber,
623
+ }));
624
+ return { ownerId: slug, nameFilter: name, versions };
625
+ }
626
+ catch {
627
+ return null;
628
+ }
629
+ }
579
630
  /**
580
631
  * List all SHA-256 content-address versions of attachments for an owner.
581
632
  *
@@ -591,6 +642,20 @@ export async function rankDocs(opts) {
591
642
  * (sibling docs included; narrow with `name`). An
592
643
  * arg that is neither throws `E_NOT_FOUND`.
593
644
  *
645
+ * T13727 — precedence: when the arg resolves as a doc slug that has been
646
+ * adopted into the conduit family AND has at least one
647
+ * `conduit_attachment_versions` row, the listing comes from the conduit
648
+ * history ({@link listConduitAttachmentVersions}) keyed on the doc's
649
+ * immutable uid — the canonical per-doc history — instead of the LWW blob
650
+ * manifest. Entries carry the version's `content_hash`, a read-time
651
+ * display ordinal (`version`, 1..N chronological — see
652
+ * {@link DocsVersionEntry.version}) and the stored
653
+ * `version_number` (`storedVersionNumber`), ordered newest first. A doc
654
+ * with no conduit row, or none yet adopted, keeps the manifest listing as
655
+ * fallback so the command never regresses; manifest entries omit
656
+ * `version`/`storedVersionNumber` (no stored version sequence exists
657
+ * there).
658
+ *
594
659
  * @param opts - Required `ownerId` (owner id or doc slug), optional `name`
595
660
  * filter and `projectRoot`.
596
661
  * @returns Version list with SHA-256 content addresses.
@@ -603,6 +668,13 @@ export async function rankDocs(opts) {
603
668
  */
604
669
  export async function listDocVersions(opts) {
605
670
  const root = opts.projectRoot ?? getProjectRoot();
671
+ // T13727 — a doc slug with conduit history lists the canonical version
672
+ // rows; any failure to reach the store degrades to the manifest path.
673
+ if (!/^(T\d+$|ses_|O-)/.test(opts.ownerId)) {
674
+ const conduit = await listConduitDocVersions(root, opts.ownerId, opts.name);
675
+ if (conduit !== null)
676
+ return conduit;
677
+ }
606
678
  let allBlobs = await blobList(opts.ownerId, root).catch(() => []);
607
679
  let listedOwnerId = opts.ownerId;
608
680
  if (allBlobs.length === 0 && !/^(T\d+$|ses_|O-)/.test(opts.ownerId)) {