@cleocode/core 2026.6.7 → 2026.6.9

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 (67) hide show
  1. package/dist/db/index.d.ts +5 -1
  2. package/dist/db/index.d.ts.map +1 -1
  3. package/dist/db/index.js +5 -1
  4. package/dist/db/index.js.map +1 -1
  5. package/dist/docs/build-provenance-graph.d.ts +12 -0
  6. package/dist/docs/build-provenance-graph.d.ts.map +1 -1
  7. package/dist/docs/build-provenance-graph.js +52 -0
  8. package/dist/docs/build-provenance-graph.js.map +1 -1
  9. package/dist/docs/display-alias.d.ts +97 -0
  10. package/dist/docs/display-alias.d.ts.map +1 -0
  11. package/dist/docs/display-alias.js +136 -0
  12. package/dist/docs/display-alias.js.map +1 -0
  13. package/dist/docs/docs-read-model.d.ts +47 -0
  14. package/dist/docs/docs-read-model.d.ts.map +1 -1
  15. package/dist/docs/docs-read-model.js +40 -2
  16. package/dist/docs/docs-read-model.js.map +1 -1
  17. package/dist/docs/export-document.js +929 -732
  18. package/dist/docs/export-document.js.map +3 -3
  19. package/dist/docs/index.d.ts +6 -0
  20. package/dist/docs/index.d.ts.map +1 -1
  21. package/dist/docs/index.js +3 -0
  22. package/dist/docs/index.js.map +1 -1
  23. package/dist/docs/numbering.d.ts +29 -0
  24. package/dist/docs/numbering.d.ts.map +1 -1
  25. package/dist/docs/numbering.js +41 -0
  26. package/dist/docs/numbering.js.map +1 -1
  27. package/dist/docs/read-doc.d.ts +60 -0
  28. package/dist/docs/read-doc.d.ts.map +1 -0
  29. package/dist/docs/read-doc.js +188 -0
  30. package/dist/docs/read-doc.js.map +1 -0
  31. package/dist/docs/wikilinks.d.ts +119 -0
  32. package/dist/docs/wikilinks.d.ts.map +1 -0
  33. package/dist/docs/wikilinks.js +217 -0
  34. package/dist/docs/wikilinks.js.map +1 -0
  35. package/dist/internal.d.ts +3 -1
  36. package/dist/internal.d.ts.map +1 -1
  37. package/dist/internal.js +2 -1
  38. package/dist/internal.js.map +1 -1
  39. package/dist/llm/plugin-facade.js +973 -778
  40. package/dist/llm/plugin-facade.js.map +3 -3
  41. package/dist/store/attachment-store.d.ts +5 -0
  42. package/dist/store/attachment-store.d.ts.map +1 -1
  43. package/dist/store/attachment-store.js +7 -1
  44. package/dist/store/attachment-store.js.map +1 -1
  45. package/dist/store/dual-scope-db.d.ts +83 -0
  46. package/dist/store/dual-scope-db.d.ts.map +1 -1
  47. package/dist/store/dual-scope-db.js +135 -6
  48. package/dist/store/dual-scope-db.js.map +1 -1
  49. package/dist/store/exodus/abort-events.d.ts +116 -0
  50. package/dist/store/exodus/abort-events.d.ts.map +1 -0
  51. package/dist/store/exodus/abort-events.js +130 -0
  52. package/dist/store/exodus/abort-events.js.map +1 -0
  53. package/dist/store/exodus/index.d.ts +1 -0
  54. package/dist/store/exodus/index.d.ts.map +1 -1
  55. package/dist/store/exodus/index.js +1 -0
  56. package/dist/store/exodus/index.js.map +1 -1
  57. package/dist/store/repair-malformed-dbs.d.ts +87 -0
  58. package/dist/store/repair-malformed-dbs.d.ts.map +1 -0
  59. package/dist/store/repair-malformed-dbs.js +188 -0
  60. package/dist/store/repair-malformed-dbs.js.map +1 -0
  61. package/dist/store/schema/attachments.d.ts +149 -0
  62. package/dist/store/schema/attachments.d.ts.map +1 -1
  63. package/dist/store/schema/attachments.js +93 -0
  64. package/dist/store/schema/attachments.js.map +1 -1
  65. package/migrations/drizzle-tasks/20260605000001_t11826-docs-wikilinks/migration.sql +110 -0
  66. package/migrations/drizzle-tasks/20260606000001_t11875-attachments-display-alias/migration.sql +46 -0
  67. package/package.json +12 -12
@@ -16,6 +16,9 @@
16
16
  * - {@link resolveDualScopeDbPath} — resolve the absolute DB file path.
17
17
  * - {@link insertIdempotent} — retry-safe insert (ON CONFLICT DO NOTHING).
18
18
  * - {@link upsertIdempotent} — retry-safe upsert (ON CONFLICT DO UPDATE).
19
+ * - {@link assertWriteDurable} — guard a mutation path against an aborted
20
+ * exodus-on-open (T11828 · DHQ-059).
21
+ * - {@link ExodusAbortWriteUnsafeError} — thrown by `assertWriteDurable`.
19
22
  * - {@link _resetDualScopeDbCache} — test helper: clear singleton cache.
20
23
  *
21
24
  * ## Usage
@@ -32,5 +35,6 @@
32
35
  * @epic T11247 (E4)
33
36
  * @saga T11242 (SG-DB-SUBSTRATE-V2)
34
37
  */
35
- export { _resetDualScopeDbCache, type CleoGlobalDb, type CleoProjectDb, type DualScope, type DualScopeDbHandle, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
38
+ export { _resetDualScopeDbCache, assertWriteDurable, type CleoGlobalDb, type CleoProjectDb, type DualScope, type DualScopeDbHandle, ExodusAbortWriteUnsafeError, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
39
+ export { type ExodusAbortDetail, exodusAbortEvents } from '../store/exodus/abort-events.js';
36
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EACL,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/db/index.js CHANGED
@@ -16,6 +16,9 @@
16
16
  * - {@link resolveDualScopeDbPath} — resolve the absolute DB file path.
17
17
  * - {@link insertIdempotent} — retry-safe insert (ON CONFLICT DO NOTHING).
18
18
  * - {@link upsertIdempotent} — retry-safe upsert (ON CONFLICT DO UPDATE).
19
+ * - {@link assertWriteDurable} — guard a mutation path against an aborted
20
+ * exodus-on-open (T11828 · DHQ-059).
21
+ * - {@link ExodusAbortWriteUnsafeError} — thrown by `assertWriteDurable`.
19
22
  * - {@link _resetDualScopeDbCache} — test helper: clear singleton cache.
20
23
  *
21
24
  * ## Usage
@@ -32,5 +35,6 @@
32
35
  * @epic T11247 (E4)
33
36
  * @saga T11242 (SG-DB-SUBSTRATE-V2)
34
37
  */
35
- export { _resetDualScopeDbCache, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
38
+ export { _resetDualScopeDbCache, assertWriteDurable, ExodusAbortWriteUnsafeError, insertIdempotent, openDualScopeDb, resolveDualScopeDbPath, upsertIdempotent, } from '../store/dual-scope-db.js';
39
+ export { exodusAbortEvents } from '../store/exodus/abort-events.js';
36
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EACL,sBAAsB,EAKtB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAKlB,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAA0B,iBAAiB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -45,6 +45,18 @@ export interface BuildDocProvenanceGraphOptions {
45
45
  * Project root for DB resolution. Defaults to {@link getProjectRoot}().
46
46
  */
47
47
  readonly projectRoot?: string;
48
+ /**
49
+ * When `true`, hydrate the BFS result with the persisted `docs_wikilinks`
50
+ * backlink edges (T11826) incident to the visited doc nodes — adding
51
+ * `shares-topic` doc↔doc edges (which the on-the-fly BFS does not compute)
52
+ * plus any persisted supersedes / related-task backlinks not already present.
53
+ * The persisted edge table is the Obsidian-grade graph; this folds it into
54
+ * the same envelope without a second query path.
55
+ *
56
+ * @default false
57
+ * @task T11826
58
+ */
59
+ readonly hydrateWikilinks?: boolean;
48
60
  }
49
61
  /**
50
62
  * Error raised when {@link buildDocProvenanceGraph}'s root identifier cannot
@@ -1 +1 @@
1
- {"version":3,"file":"build-provenance-graph.d.ts","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAOtB,MAAM,qBAAqB,CAAC;AAM7B;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,IAAI,EAAE,MAAM;CAMzB;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,qBAAqB,CAAC,CA0IhC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAa/E"}
1
+ {"version":3,"file":"build-provenance-graph.d.ts","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAOtB,MAAM,qBAAqB,CAAC;AAO7B;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;GAKG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,IAAI,EAAE,MAAM;CAMzB;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,qBAAqB,CAAC,CA8IhC;AA8DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAa/E"}
@@ -24,6 +24,7 @@
24
24
  */
25
25
  import { and, eq, inArray, or, sql } from 'drizzle-orm';
26
26
  import { getProjectRoot } from '../paths.js';
27
+ import { docsWikilinks } from '../store/schema/attachments.js';
27
28
  import { getDb } from '../store/sqlite.js';
28
29
  import { attachmentRefs, attachments } from '../store/tasks-schema.js';
29
30
  /**
@@ -174,6 +175,9 @@ export async function buildDocProvenanceGraph(options) {
174
175
  }
175
176
  frontier = nextFrontier;
176
177
  }
178
+ if (options.hydrateWikilinks) {
179
+ await hydrateFromWikilinks(db, nodes, edges);
180
+ }
177
181
  return {
178
182
  nodes,
179
183
  edges,
@@ -181,6 +185,54 @@ export async function buildDocProvenanceGraph(options) {
181
185
  totalEdges: edges.length,
182
186
  };
183
187
  }
188
+ /**
189
+ * Fold the persisted `docs_wikilinks` backlink edges (T11826) into an
190
+ * already-built provenance graph.
191
+ *
192
+ * For every doc node currently in the graph, pull its incident wikilink edges
193
+ * (both directions) and append any that connect to another doc node already in
194
+ * the graph and are not already present. This surfaces `shares-topic` doc↔doc
195
+ * edges — which the on-the-fly BFS does not compute — without re-deriving the
196
+ * graph. Edges to nodes outside the visited set are skipped so the BFS depth
197
+ * bound is respected.
198
+ *
199
+ * @internal
200
+ * @task T11826
201
+ */
202
+ async function hydrateFromWikilinks(db, nodes, edges) {
203
+ const docSlugs = new Set(nodes.filter((n) => n.kind === 'doc').map((n) => n.id));
204
+ if (docSlugs.size === 0)
205
+ return;
206
+ const rows = await db
207
+ .select()
208
+ .from(docsWikilinks)
209
+ .where(or(inArray(docsWikilinks.fromSlug, [...docSlugs]), inArray(docsWikilinks.toSlug, [...docSlugs])))
210
+ .all();
211
+ // Dedupe against existing edges by (relation, from, to).
212
+ const existing = new Set(edges.map((e) => `${e.relation}|${e.from}|${e.to}`));
213
+ for (const row of rows) {
214
+ // Only fold edges whose endpoints are both already visited doc nodes —
215
+ // related-task edges are already emitted by the BFS, and topic links to
216
+ // unvisited docs would breach the depth bound.
217
+ if (row.relation === 'related-task')
218
+ continue;
219
+ if (!docSlugs.has(row.fromSlug) || !docSlugs.has(row.toSlug))
220
+ continue;
221
+ const relation = row.relation === 'topic' ? 'shares-topic' : row.relation;
222
+ const key = `${relation}|${row.fromSlug}|${row.toSlug}`;
223
+ if (existing.has(key))
224
+ continue;
225
+ existing.add(key);
226
+ edges.push({
227
+ relation,
228
+ from: row.fromSlug,
229
+ fromKind: 'doc',
230
+ to: row.toSlug,
231
+ toKind: 'doc',
232
+ addedAt: row.derivedAt,
233
+ });
234
+ }
235
+ }
184
236
  /**
185
237
  * Render a {@link DocProvenanceResponse} as a Graphviz DOT graph.
186
238
  *
@@ -1 +1 @@
1
- {"version":3,"file":"build-provenance-graph.js","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-provenance-graph.js","sourceRoot":"","sources":["../../src/docs/build-provenance-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Set / clear a doc's explicit DISPLAY ALIAS number — decoupled from the slug.
3
+ *
4
+ * ## Why this module exists
5
+ *
6
+ * Under the ratified slug-primary model (saga T11778, ADR reconcile T11676) the
7
+ * kebab `slug` is the canonical handle and the rendered number (e.g. ADR "051")
8
+ * is a DISPLAY ALIAS only. Until T11875 that number was DERIVED by parsing the
9
+ * digits out of the slug string (`adr-051-*` → 051) — so three DISTINCT ADRs
10
+ * that all slug as `adr-051-*` rendered the same "051" with no way to
11
+ * disambiguate. The collision is unresolvable in a slug-primary world because
12
+ * renumbering a slug would break the canonical handle.
13
+ *
14
+ * T11875 adds a real `attachments.display_alias` INTEGER column. This module is
15
+ * the SDK chokepoint that sets it (and validates uniqueness among `type='adr'`
16
+ * docs). {@link import('./numbering.js').resolveDisplayNumber} prefers the
17
+ * stored alias when present and falls back to the slug-derived number when null.
18
+ *
19
+ * The transaction lives in CORE (not the CLI / dispatch layer) because:
20
+ * 1. The CLI boundary gate forbids business logic > 30 LOC in CLI commands.
21
+ * 2. The DB-open chokepoint (`openCleoDb` / `getNativeTasksDb`) is core-owned
22
+ * per ADR-068; raw `DatabaseSync` opens outside `store/` are rejected.
23
+ * 3. Future callers (HTTP dispatch, MCP, BRAIN bridges) re-use the same
24
+ * entry point without re-implementing the all-or-nothing uniqueness check.
25
+ *
26
+ * @task T11875 (Epic T11781 / Saga T11778)
27
+ * @adr ADR-078 — Docs Provenance Graph (display-alias half of T11676 reconcile)
28
+ */
29
+ /** Stable error code surfaced when the target slug does not resolve to a row. */
30
+ export declare const SET_ALIAS_NOT_FOUND_CODE = "E_NOT_FOUND";
31
+ /** Stable error code surfaced when the requested number is already taken. */
32
+ export declare const SET_ALIAS_TAKEN_CODE = "E_ALIAS_TAKEN";
33
+ /** Stable error code surfaced when the requested number is not a positive int. */
34
+ export declare const SET_ALIAS_INVALID_CODE = "E_VALIDATION";
35
+ /**
36
+ * Input to {@link setDisplayAlias} (ADR-057 uniform params shape).
37
+ */
38
+ export interface SetDisplayAliasParams {
39
+ /** Slug of the doc to alias (must resolve to an existing `attachments` row). */
40
+ slug: string;
41
+ /**
42
+ * The display-alias number to assign. Must be a positive integer. Pass
43
+ * `null` to CLEAR an existing alias (revert to slug-derived rendering).
44
+ */
45
+ displayAlias: number | null;
46
+ }
47
+ /**
48
+ * Result returned by {@link setDisplayAlias}.
49
+ */
50
+ export interface SetDisplayAliasResult {
51
+ /** Echoed slug of the doc that was aliased. */
52
+ slug: string;
53
+ /** Resolved `attachments.id` of the aliased doc. */
54
+ attachmentId: string;
55
+ /** Doc kind (`type` column) of the aliased doc, echoed for the envelope. */
56
+ type: string | null;
57
+ /** The previous alias value (or `null` if none was set). */
58
+ previousAlias: number | null;
59
+ /** The newly-assigned alias value (or `null` when cleared). */
60
+ displayAlias: number | null;
61
+ /** ISO-8601 timestamp the transaction committed. */
62
+ updatedAt: string;
63
+ }
64
+ /**
65
+ * Assign (or clear) the explicit display-alias number for the doc identified by
66
+ * `slug`, decoupled from the slug string.
67
+ *
68
+ * Effects (inside a single SQLite `BEGIN IMMEDIATE` transaction — all-or-none):
69
+ *
70
+ * 1. Resolve the row whose `slug` matches `params.slug`. `E_NOT_FOUND` when
71
+ * no such row exists.
72
+ * 2. When assigning (non-null) AND the target doc is `type='adr'`, scan every
73
+ * OTHER `type='adr'` row for the same `display_alias`. Any conflict throws
74
+ * `E_ALIAS_TAKEN` and the transaction rolls back — numbers are unique among
75
+ * ADRs. Non-adr kinds skip the uniqueness check (they may reuse numbers).
76
+ * 3. `UPDATE attachments SET display_alias = ? WHERE id = ?`.
77
+ *
78
+ * Uniqueness is enforced HERE (dispatch/SDK layer) rather than via a SQL UNIQUE
79
+ * constraint because the constraint is scoped to a single `type` value — the
80
+ * same discipline already used for `lifecycle_status` validation — so future
81
+ * taxonomy changes never require a schema migration.
82
+ *
83
+ * Signature follows ADR-057 — `(projectRoot, params)` is the canonical shape for
84
+ * core operations consumed by typed dispatch handlers and thin CLI verbs.
85
+ *
86
+ * @param projectRoot - Absolute project-root path. Production callers resolve it
87
+ * via `getProjectRoot()`; tests pass a temp dir.
88
+ * @param params - {@link SetDisplayAliasParams}.
89
+ * @returns {@link SetDisplayAliasResult} describing the before/after alias state.
90
+ *
91
+ * @throws {CleoError} `E_VALIDATION` when `displayAlias` is a non-positive /
92
+ * non-integer number.
93
+ * @throws {CleoError} `E_NOT_FOUND` when `slug` resolves to no row.
94
+ * @throws {CleoError} `E_ALIAS_TAKEN` when an ADR already owns the number.
95
+ */
96
+ export declare function setDisplayAlias(projectRoot: string, params: SetDisplayAliasParams): Promise<SetDisplayAliasResult>;
97
+ //# sourceMappingURL=display-alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-alias.d.ts","sourceRoot":"","sources":["../../src/docs/display-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAkBH,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AACtD,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AACpD,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Set / clear a doc's explicit DISPLAY ALIAS number — decoupled from the slug.
3
+ *
4
+ * ## Why this module exists
5
+ *
6
+ * Under the ratified slug-primary model (saga T11778, ADR reconcile T11676) the
7
+ * kebab `slug` is the canonical handle and the rendered number (e.g. ADR "051")
8
+ * is a DISPLAY ALIAS only. Until T11875 that number was DERIVED by parsing the
9
+ * digits out of the slug string (`adr-051-*` → 051) — so three DISTINCT ADRs
10
+ * that all slug as `adr-051-*` rendered the same "051" with no way to
11
+ * disambiguate. The collision is unresolvable in a slug-primary world because
12
+ * renumbering a slug would break the canonical handle.
13
+ *
14
+ * T11875 adds a real `attachments.display_alias` INTEGER column. This module is
15
+ * the SDK chokepoint that sets it (and validates uniqueness among `type='adr'`
16
+ * docs). {@link import('./numbering.js').resolveDisplayNumber} prefers the
17
+ * stored alias when present and falls back to the slug-derived number when null.
18
+ *
19
+ * The transaction lives in CORE (not the CLI / dispatch layer) because:
20
+ * 1. The CLI boundary gate forbids business logic > 30 LOC in CLI commands.
21
+ * 2. The DB-open chokepoint (`openCleoDb` / `getNativeTasksDb`) is core-owned
22
+ * per ADR-068; raw `DatabaseSync` opens outside `store/` are rejected.
23
+ * 3. Future callers (HTTP dispatch, MCP, BRAIN bridges) re-use the same
24
+ * entry point without re-implementing the all-or-nothing uniqueness check.
25
+ *
26
+ * @task T11875 (Epic T11781 / Saga T11778)
27
+ * @adr ADR-078 — Docs Provenance Graph (display-alias half of T11676 reconcile)
28
+ */
29
+ import { ExitCode } from '@cleocode/contracts';
30
+ import { CleoError } from '../errors.js';
31
+ /** Stable error code surfaced when the target slug does not resolve to a row. */
32
+ export const SET_ALIAS_NOT_FOUND_CODE = 'E_NOT_FOUND';
33
+ /** Stable error code surfaced when the requested number is already taken. */
34
+ export const SET_ALIAS_TAKEN_CODE = 'E_ALIAS_TAKEN';
35
+ /** Stable error code surfaced when the requested number is not a positive int. */
36
+ export const SET_ALIAS_INVALID_CODE = 'E_VALIDATION';
37
+ /**
38
+ * Assign (or clear) the explicit display-alias number for the doc identified by
39
+ * `slug`, decoupled from the slug string.
40
+ *
41
+ * Effects (inside a single SQLite `BEGIN IMMEDIATE` transaction — all-or-none):
42
+ *
43
+ * 1. Resolve the row whose `slug` matches `params.slug`. `E_NOT_FOUND` when
44
+ * no such row exists.
45
+ * 2. When assigning (non-null) AND the target doc is `type='adr'`, scan every
46
+ * OTHER `type='adr'` row for the same `display_alias`. Any conflict throws
47
+ * `E_ALIAS_TAKEN` and the transaction rolls back — numbers are unique among
48
+ * ADRs. Non-adr kinds skip the uniqueness check (they may reuse numbers).
49
+ * 3. `UPDATE attachments SET display_alias = ? WHERE id = ?`.
50
+ *
51
+ * Uniqueness is enforced HERE (dispatch/SDK layer) rather than via a SQL UNIQUE
52
+ * constraint because the constraint is scoped to a single `type` value — the
53
+ * same discipline already used for `lifecycle_status` validation — so future
54
+ * taxonomy changes never require a schema migration.
55
+ *
56
+ * Signature follows ADR-057 — `(projectRoot, params)` is the canonical shape for
57
+ * core operations consumed by typed dispatch handlers and thin CLI verbs.
58
+ *
59
+ * @param projectRoot - Absolute project-root path. Production callers resolve it
60
+ * via `getProjectRoot()`; tests pass a temp dir.
61
+ * @param params - {@link SetDisplayAliasParams}.
62
+ * @returns {@link SetDisplayAliasResult} describing the before/after alias state.
63
+ *
64
+ * @throws {CleoError} `E_VALIDATION` when `displayAlias` is a non-positive /
65
+ * non-integer number.
66
+ * @throws {CleoError} `E_NOT_FOUND` when `slug` resolves to no row.
67
+ * @throws {CleoError} `E_ALIAS_TAKEN` when an ADR already owns the number.
68
+ */
69
+ export async function setDisplayAlias(projectRoot, params) {
70
+ const { slug, displayAlias } = params;
71
+ if (displayAlias !== null && (!Number.isInteger(displayAlias) || displayAlias < 1)) {
72
+ throw new CleoError(ExitCode.VALIDATION_ERROR, `display alias must be a positive integer — got '${String(displayAlias)}'`);
73
+ }
74
+ // E6-L6 (T11526): `attachments` is part of the legacy drizzle-tasks family,
75
+ // created inside the project `cleo.db` by getDb()'s migrations. Route through
76
+ // getDb()/getNativeTasksDb() (rather than openCleoDb('project'), which only
77
+ // runs the consolidated schema) so the table is guaranteed present. The native
78
+ // handle is a shared singleton — do NOT close it here.
79
+ const { getDb, getNativeTasksDb } = await import('../store/sqlite.js');
80
+ await getDb(projectRoot);
81
+ const db = getNativeTasksDb();
82
+ if (!db) {
83
+ throw new CleoError(ExitCode.GENERAL_ERROR, 'docs set-alias: project cleo.db could not be opened (no native handle)');
84
+ }
85
+ const now = new Date().toISOString();
86
+ // BEGIN IMMEDIATE — acquire the write lock up front so two concurrent
87
+ // set-alias calls contend at lock-acquisition time rather than after the
88
+ // uniqueness scan (which would let both writers pass the check and collide).
89
+ db.exec('BEGIN IMMEDIATE');
90
+ let row;
91
+ try {
92
+ row = db
93
+ .prepare('SELECT id, slug, type, display_alias FROM attachments WHERE slug = ?')
94
+ .get(slug);
95
+ if (!row) {
96
+ throw new CleoError(ExitCode.NOT_FOUND, `slug '${slug}' does not match any attachment row`);
97
+ }
98
+ // Uniqueness scan — only for ADRs, only when assigning a non-null number.
99
+ if (displayAlias !== null && row.type === 'adr') {
100
+ const conflict = db
101
+ .prepare("SELECT slug FROM attachments WHERE type = 'adr' AND display_alias = ? AND id <> ?")
102
+ .get(displayAlias, row.id);
103
+ if (conflict) {
104
+ throw new CleoError(ExitCode.VALIDATION_ERROR, `display alias ${displayAlias} is already assigned to ADR '${conflict.slug ?? '(unknown)'}' — ` +
105
+ 'pick a different number (aliases are unique among type=adr docs)', {
106
+ details: {
107
+ field: 'displayAlias',
108
+ code: SET_ALIAS_TAKEN_CODE,
109
+ actual: displayAlias,
110
+ conflictingSlug: conflict.slug,
111
+ },
112
+ });
113
+ }
114
+ }
115
+ db.prepare('UPDATE attachments SET display_alias = ? WHERE id = ?').run(displayAlias, row.id);
116
+ db.exec('COMMIT');
117
+ }
118
+ catch (txErr) {
119
+ try {
120
+ db.exec('ROLLBACK');
121
+ }
122
+ catch {
123
+ // Rollback is best-effort — propagating the original error matters more.
124
+ }
125
+ throw txErr;
126
+ }
127
+ return {
128
+ slug,
129
+ attachmentId: row.id,
130
+ type: row.type,
131
+ previousAlias: row.display_alias,
132
+ displayAlias,
133
+ updatedAt: now,
134
+ };
135
+ }
136
+ //# sourceMappingURL=display-alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-alias.js","sourceRoot":"","sources":["../../src/docs/display-alias.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ export interface ResolvedDoc {
18
18
  readonly title: string | null;
19
19
  /** Stable human-readable slug from attachments.slug. Null for slug-less blobs. */
20
20
  readonly slug: string | null;
21
+ /**
22
+ * The DISPLAY number to render for this doc (e.g. ADR "051"), decoupled from
23
+ * the slug (T11875). Resolved via {@link resolveDisplayNumber}: the stored
24
+ * `attachments.display_alias` wins when set, else the slug-derived number, else
25
+ * `null` for non-numbered / slug-less docs.
26
+ */
27
+ readonly displayNumber: number | null;
21
28
  /** Owner entity ID (task/session/observation ID). */
22
29
  readonly ownerId: string;
23
30
  /** Owner entity type. */
@@ -52,6 +59,25 @@ export interface ResolvedDoc {
52
59
  /** Which backing store this doc was resolved from. */
53
60
  readonly source: 'tasks-db' | 'manifest-db' | 'merged';
54
61
  }
62
+ /**
63
+ * Discriminated result of {@link DocsReadModel.fetchDecoded}.
64
+ *
65
+ * The success arm carries both the resolved doc record and its decoded
66
+ * UTF-8 body; the failure arms distinguish a missing reference from a
67
+ * resolvable doc whose blob could not be read.
68
+ */
69
+ export type DecodedDocResult = {
70
+ readonly ok: true;
71
+ readonly doc: ResolvedDoc;
72
+ readonly content: string;
73
+ } | {
74
+ readonly ok: false;
75
+ readonly reason: 'not-found';
76
+ } | {
77
+ readonly ok: false;
78
+ readonly reason: 'no-content';
79
+ readonly doc: ResolvedDoc;
80
+ };
55
81
  /**
56
82
  * Filters for {@link DocsReadModel.listProjectDocs}.
57
83
  */
@@ -185,6 +211,27 @@ export declare class DocsReadModel {
185
211
  * cannot be read.
186
212
  */
187
213
  fetchContent(doc: ResolvedDoc): Promise<string | null>;
214
+ /**
215
+ * Resolve a reference (slug, attachment ID, or SHA-256) and return its
216
+ * decoded UTF-8 body in a single call.
217
+ *
218
+ * Convenience wrapper around the resolve → {@link fetchContent} two-step
219
+ * used by agent-facing surfaces (e.g. `cleo docs fetch --content`) that
220
+ * want the raw document text without first hand-decoding the base64
221
+ * `bytesBase64` field from the LAFS fetch envelope (T10970).
222
+ *
223
+ * Resolution order mirrors the canonical fetch path: slug first (the
224
+ * common agent ergonomic), then attachment ID / SHA-256 content address.
225
+ *
226
+ * @param ref - Slug, attachment UUID, or 64-char hex SHA-256.
227
+ * @returns A discriminated result:
228
+ * - `{ ok: true, doc, content }` when the ref resolved AND content was
229
+ * retrievable.
230
+ * - `{ ok: false, reason: 'not-found' }` when no doc carries the ref.
231
+ * - `{ ok: false, reason: 'no-content', doc }` when the doc metadata
232
+ * exists but its blob could not be read (e.g. purged or unpublished).
233
+ */
234
+ fetchDecoded(ref: string): Promise<DecodedDocResult>;
188
235
  /**
189
236
  * Fetch content for multiple docs in parallel.
190
237
  *
@@ -1 +1 @@
1
- {"version":3,"file":"docs-read-model.d.ts","sourceRoot":"","sources":["../../src/docs/docs-read-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs-read-model.d.ts","sourceRoot":"","sources":["../../src/docs/docs-read-model.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,7 @@ import { createHash } from 'node:crypto';
29
29
  import { getProjectRoot } from '../paths.js';
30
30
  import { createAttachmentStore } from '../store/attachment-store.js';
31
31
  import { blobList, blobRead } from '../store/blob-ops.js';
32
+ import { resolveDisplayNumber } from './numbering.js';
32
33
  // ---------------------------------------------------------------------------
33
34
  // DocsReadModel implementation
34
35
  // ---------------------------------------------------------------------------
@@ -86,6 +87,7 @@ export class DocsReadModel {
86
87
  type: row.type,
87
88
  summary: row.summary,
88
89
  lifecycleStatus: row.lifecycleStatus,
90
+ displayAlias: row.displayAlias,
89
91
  });
90
92
  }
91
93
  /**
@@ -135,13 +137,14 @@ export class DocsReadModel {
135
137
  const store = createAttachmentStore();
136
138
  const meta = await store.getMetadata(id, this.projectRoot);
137
139
  if (meta) {
138
- // Fetch extras (slug, type) from the row
140
+ // Fetch extras (slug, type, displayAlias) from the row
139
141
  const extras = await store.getExtras(id, this.projectRoot);
140
142
  return this.enrichFromTasksDb(meta, {
141
143
  slug: extras?.slug ?? null,
142
144
  type: extras?.type ?? null,
143
145
  summary: null,
144
146
  lifecycleStatus: 'active',
147
+ displayAlias: extras?.displayAlias ?? null,
145
148
  });
146
149
  }
147
150
  // Fall back to blob-store lookup by SHA-256
@@ -271,6 +274,35 @@ export class DocsReadModel {
271
274
  }
272
275
  return null;
273
276
  }
277
+ /**
278
+ * Resolve a reference (slug, attachment ID, or SHA-256) and return its
279
+ * decoded UTF-8 body in a single call.
280
+ *
281
+ * Convenience wrapper around the resolve → {@link fetchContent} two-step
282
+ * used by agent-facing surfaces (e.g. `cleo docs fetch --content`) that
283
+ * want the raw document text without first hand-decoding the base64
284
+ * `bytesBase64` field from the LAFS fetch envelope (T10970).
285
+ *
286
+ * Resolution order mirrors the canonical fetch path: slug first (the
287
+ * common agent ergonomic), then attachment ID / SHA-256 content address.
288
+ *
289
+ * @param ref - Slug, attachment UUID, or 64-char hex SHA-256.
290
+ * @returns A discriminated result:
291
+ * - `{ ok: true, doc, content }` when the ref resolved AND content was
292
+ * retrievable.
293
+ * - `{ ok: false, reason: 'not-found' }` when no doc carries the ref.
294
+ * - `{ ok: false, reason: 'no-content', doc }` when the doc metadata
295
+ * exists but its blob could not be read (e.g. purged or unpublished).
296
+ */
297
+ async fetchDecoded(ref) {
298
+ const doc = (await this.resolveBySlug(ref)) ?? (await this.resolveByAttachmentId(ref));
299
+ if (!doc)
300
+ return { ok: false, reason: 'not-found' };
301
+ const content = await this.fetchContent(doc);
302
+ if (content === null)
303
+ return { ok: false, reason: 'no-content', doc };
304
+ return { ok: true, doc, content };
305
+ }
274
306
  /**
275
307
  * Fetch content for multiple docs in parallel.
276
308
  *
@@ -393,6 +425,7 @@ export class DocsReadModel {
393
425
  type: extras?.type ?? null,
394
426
  summary: null,
395
427
  lifecycleStatus: 'active',
428
+ displayAlias: extras?.displayAlias ?? null,
396
429
  });
397
430
  results.push(doc);
398
431
  }
@@ -414,6 +447,7 @@ export class DocsReadModel {
414
447
  kind: row.type ?? null,
415
448
  title: row.slug ?? name ?? null,
416
449
  slug: row.slug,
450
+ displayNumber: resolveDisplayNumber(row.slug, row.displayAlias),
417
451
  ownerId: row.ownerId,
418
452
  ownerType: row.ownerType,
419
453
  blobName: name ?? row.slug ?? row.metadata.id,
@@ -491,12 +525,15 @@ export class DocsReadModel {
491
525
  buildResolvedDocFromBlob(ownerId, entry) {
492
526
  // Derive kind from known taxonomy types
493
527
  const kind = inferDocKind(entry.name);
528
+ const blobSlug = kind ? entry.name.replace(/\.md$/, '') : null;
494
529
  return {
495
530
  id: entry.sha256,
496
531
  sha256: entry.sha256,
497
532
  kind,
498
533
  title: entry.name,
499
- slug: kind ? entry.name.replace(/\.md$/, '') : null,
534
+ slug: blobSlug,
535
+ // manifest.db blobs carry no display_alias column — derive from slug only.
536
+ displayNumber: resolveDisplayNumber(blobSlug, null),
500
537
  ownerId,
501
538
  ownerType: detectOwnerType(ownerId),
502
539
  blobName: entry.name,
@@ -542,6 +579,7 @@ export class DocsReadModel {
542
579
  kind: extras.type ?? null,
543
580
  title: extras.slug ?? blobName ?? null,
544
581
  slug: extras.slug,
582
+ displayNumber: resolveDisplayNumber(extras.slug, extras.displayAlias),
545
583
  ownerId,
546
584
  ownerType: detectOwnerType(ownerId),
547
585
  blobName: blobName ?? extras.slug ?? meta.id,