@cleocode/core 2026.6.5 → 2026.6.7

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 (156) hide show
  1. package/dist/dispatch/contracts/output-contracts.d.ts +36 -0
  2. package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -0
  3. package/dist/dispatch/contracts/output-contracts.js +38 -0
  4. package/dist/dispatch/contracts/output-contracts.js.map +1 -0
  5. package/dist/dispatch/describe-operation.d.ts +98 -0
  6. package/dist/dispatch/describe-operation.d.ts.map +1 -0
  7. package/dist/dispatch/describe-operation.js +101 -0
  8. package/dist/dispatch/describe-operation.js.map +1 -0
  9. package/dist/docs/export-document.js +933 -489
  10. package/dist/docs/export-document.js.map +3 -3
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +5 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/internal.d.ts +2 -0
  16. package/dist/internal.d.ts.map +1 -1
  17. package/dist/internal.js +6 -0
  18. package/dist/internal.js.map +1 -1
  19. package/dist/llm/api-mode.d.ts +64 -0
  20. package/dist/llm/api-mode.d.ts.map +1 -0
  21. package/dist/llm/api-mode.js +72 -0
  22. package/dist/llm/api-mode.js.map +1 -0
  23. package/dist/llm/api.d.ts.map +1 -1
  24. package/dist/llm/api.js +6 -37
  25. package/dist/llm/api.js.map +1 -1
  26. package/dist/llm/auxiliary-fallback.d.ts.map +1 -1
  27. package/dist/llm/auxiliary-fallback.js +24 -38
  28. package/dist/llm/auxiliary-fallback.js.map +1 -1
  29. package/dist/llm/index.d.ts +1 -3
  30. package/dist/llm/index.d.ts.map +1 -1
  31. package/dist/llm/index.js +1 -2
  32. package/dist/llm/index.js.map +1 -1
  33. package/dist/llm/model-metadata.d.ts +14 -0
  34. package/dist/llm/model-metadata.d.ts.map +1 -1
  35. package/dist/llm/model-metadata.js +23 -0
  36. package/dist/llm/model-metadata.js.map +1 -1
  37. package/dist/llm/model-runner.d.ts +127 -0
  38. package/dist/llm/model-runner.d.ts.map +1 -0
  39. package/dist/llm/model-runner.js +312 -0
  40. package/dist/llm/model-runner.js.map +1 -0
  41. package/dist/llm/plugin-facade.js +30084 -1748
  42. package/dist/llm/plugin-facade.js.map +3 -3
  43. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  44. package/dist/llm/provider-registry/builtin/anthropic.js +4 -0
  45. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  46. package/dist/llm/provider-registry/builtin/gemini.d.ts.map +1 -1
  47. package/dist/llm/provider-registry/builtin/gemini.js +4 -0
  48. package/dist/llm/provider-registry/builtin/gemini.js.map +1 -1
  49. package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
  50. package/dist/llm/provider-registry/builtin/ollama.js +4 -0
  51. package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
  52. package/dist/llm/provider-registry/builtin/openai.d.ts.map +1 -1
  53. package/dist/llm/provider-registry/builtin/openai.js +6 -0
  54. package/dist/llm/provider-registry/builtin/openai.js.map +1 -1
  55. package/dist/llm/role-executor.d.ts +6 -5
  56. package/dist/llm/role-executor.d.ts.map +1 -1
  57. package/dist/llm/role-executor.js +40 -86
  58. package/dist/llm/role-executor.js.map +1 -1
  59. package/dist/llm/role-resolver.d.ts +28 -1
  60. package/dist/llm/role-resolver.d.ts.map +1 -1
  61. package/dist/llm/role-resolver.js +10 -0
  62. package/dist/llm/role-resolver.js.map +1 -1
  63. package/dist/llm/session-factory.d.ts +4 -6
  64. package/dist/llm/session-factory.d.ts.map +1 -1
  65. package/dist/llm/session-factory.js +6 -72
  66. package/dist/llm/session-factory.js.map +1 -1
  67. package/dist/llm/system-resolver.d.ts.map +1 -1
  68. package/dist/llm/system-resolver.js +6 -0
  69. package/dist/llm/system-resolver.js.map +1 -1
  70. package/dist/llm/tool-loop.d.ts.map +1 -1
  71. package/dist/llm/tool-loop.js +9 -32
  72. package/dist/llm/tool-loop.js.map +1 -1
  73. package/dist/llm/transports/index.d.ts +5 -3
  74. package/dist/llm/transports/index.d.ts.map +1 -1
  75. package/dist/llm/transports/index.js +5 -2
  76. package/dist/llm/transports/index.js.map +1 -1
  77. package/dist/reconciliation/reconciliation-engine.d.ts.map +1 -1
  78. package/dist/reconciliation/reconciliation-engine.js +3 -0
  79. package/dist/reconciliation/reconciliation-engine.js.map +1 -1
  80. package/dist/release/plan.d.ts +27 -0
  81. package/dist/release/plan.d.ts.map +1 -1
  82. package/dist/release/plan.js +36 -2
  83. package/dist/release/plan.js.map +1 -1
  84. package/dist/release/provenance-fk.d.ts +74 -0
  85. package/dist/release/provenance-fk.d.ts.map +1 -0
  86. package/dist/release/provenance-fk.js +122 -0
  87. package/dist/release/provenance-fk.js.map +1 -0
  88. package/dist/release/reconcile.d.ts +10 -0
  89. package/dist/release/reconcile.d.ts.map +1 -1
  90. package/dist/release/reconcile.js +107 -2
  91. package/dist/release/reconcile.js.map +1 -1
  92. package/dist/sticky/convert.d.ts.map +1 -1
  93. package/dist/sticky/convert.js +3 -0
  94. package/dist/sticky/convert.js.map +1 -1
  95. package/dist/store/exodus/column-transforms.d.ts +275 -0
  96. package/dist/store/exodus/column-transforms.d.ts.map +1 -0
  97. package/dist/store/exodus/column-transforms.js +478 -0
  98. package/dist/store/exodus/column-transforms.js.map +1 -0
  99. package/dist/store/exodus/count-parity.d.ts +71 -0
  100. package/dist/store/exodus/count-parity.d.ts.map +1 -0
  101. package/dist/store/exodus/count-parity.js +124 -0
  102. package/dist/store/exodus/count-parity.js.map +1 -0
  103. package/dist/store/exodus/health.d.ts +70 -0
  104. package/dist/store/exodus/health.d.ts.map +1 -0
  105. package/dist/store/exodus/health.js +130 -0
  106. package/dist/store/exodus/health.js.map +1 -0
  107. package/dist/store/exodus/index.d.ts +3 -0
  108. package/dist/store/exodus/index.d.ts.map +1 -1
  109. package/dist/store/exodus/index.js +3 -0
  110. package/dist/store/exodus/index.js.map +1 -1
  111. package/dist/store/exodus/migrate.d.ts.map +1 -1
  112. package/dist/store/exodus/migrate.js +103 -298
  113. package/dist/store/exodus/migrate.js.map +1 -1
  114. package/dist/store/exodus/plan.d.ts +48 -4
  115. package/dist/store/exodus/plan.d.ts.map +1 -1
  116. package/dist/store/exodus/plan.js +67 -9
  117. package/dist/store/exodus/plan.js.map +1 -1
  118. package/dist/store/exodus/seal.d.ts +69 -0
  119. package/dist/store/exodus/seal.d.ts.map +1 -0
  120. package/dist/store/exodus/seal.js +73 -0
  121. package/dist/store/exodus/seal.js.map +1 -0
  122. package/dist/store/exodus/types.d.ts +24 -1
  123. package/dist/store/exodus/types.d.ts.map +1 -1
  124. package/dist/store/exodus/types.js.map +1 -1
  125. package/dist/store/exodus/verify-migration.d.ts.map +1 -1
  126. package/dist/store/exodus/verify-migration.js +109 -24
  127. package/dist/store/exodus/verify-migration.js.map +1 -1
  128. package/dist/tasks/add.d.ts +13 -0
  129. package/dist/tasks/add.d.ts.map +1 -1
  130. package/dist/tasks/add.js +50 -18
  131. package/dist/tasks/add.js.map +1 -1
  132. package/dist/tasks/archive.d.ts.map +1 -1
  133. package/dist/tasks/archive.js +12 -7
  134. package/dist/tasks/archive.js.map +1 -1
  135. package/dist/tasks/child-disposition.d.ts +66 -0
  136. package/dist/tasks/child-disposition.d.ts.map +1 -0
  137. package/dist/tasks/child-disposition.js +80 -0
  138. package/dist/tasks/child-disposition.js.map +1 -0
  139. package/dist/tasks/delete-preview.js +1 -1
  140. package/dist/tasks/delete-preview.js.map +1 -1
  141. package/dist/tasks/deletion-strategy.d.ts +21 -3
  142. package/dist/tasks/deletion-strategy.d.ts.map +1 -1
  143. package/dist/tasks/deletion-strategy.js +61 -15
  144. package/dist/tasks/deletion-strategy.js.map +1 -1
  145. package/dist/tasks/engine-wrap.d.ts +8 -0
  146. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  147. package/dist/tasks/engine-wrap.js +22 -9
  148. package/dist/tasks/engine-wrap.js.map +1 -1
  149. package/dist/tasks/update.d.ts.map +1 -1
  150. package/dist/tasks/update.js +12 -0
  151. package/dist/tasks/update.js.map +1 -1
  152. package/package.json +12 -12
  153. package/dist/llm/transports/openai.d.ts +0 -181
  154. package/dist/llm/transports/openai.d.ts.map +0 -1
  155. package/dist/llm/transports/openai.js +0 -645
  156. package/dist/llm/transports/openai.js.map +0 -1
@@ -43,6 +43,9 @@ export async function convertStickyToTask(stickyId, taskTitle, projectRoot) {
43
43
  title,
44
44
  description,
45
45
  labels: sticky.tagsJson ? JSON.parse(sticky.tagsJson) : undefined,
46
+ // Sticky-note conversion is an ingest path that legitimately creates a
47
+ // standalone capture task; exempt it from the T11811 strict-spine guard.
48
+ skipContainmentInvariant: true,
46
49
  }, projectRoot);
47
50
  // Update sticky note status
48
51
  const convertedTo = { type: 'task', id: result.task.id };
@@ -1 +1 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/sticky/convert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/sticky/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Shared column-value transform layer for the exodus migration.
3
+ *
4
+ * The exodus copy (`migrate.ts`) does not move source values byte-for-byte into
5
+ * the consolidated `cleo.db`: a handful of columns are TRANSFORMED on the way in
6
+ * so they satisfy the consolidated schema's CHECK constraints (which the legacy
7
+ * runtime DBs did not carry). Three transform classes exist:
8
+ *
9
+ * 1. **Epoch INTEGER → ISO-8601 TEXT** ({@link buildEpochToIsoExpr}) — for any
10
+ * target column carrying an ISO-GLOB CHECK ({@link detectIsoGlobColumns}).
11
+ * A per-row magnitude heuristic ({@link EPOCH_SECONDS_THRESHOLD}) classifies
12
+ * seconds vs milliseconds.
13
+ * 2. **Legacy enum → canonical member** ({@link ENUM_NORMALIZATIONS} +
14
+ * {@link enumNormExpr}) — maps pre-tightening enum aliases (e.g.
15
+ * `tasks_commits.conventional_type` `'style'`/`'merge'` → `'chore'`).
16
+ * 3. **Non-finite REAL → finite** ({@link NUMERIC_CLAMPS} +
17
+ * {@link numericClampExpr}) — `Inf`/`-Inf`/`NaN` → a finite in-range value
18
+ * (`brain_weight_history.delta_weight`).
19
+ *
20
+ * ## Why this module exists (T11809 · AC2)
21
+ *
22
+ * Before T11809 these transforms lived ONLY in `migrate.ts`. The parity verifier
23
+ * (`verify-migration.ts`) digested RAW source values against the TRANSFORMED
24
+ * target values, so every coerced column (epoch INTEGER vs ISO TEXT, legacy enum
25
+ * vs canonical, Inf vs clamped) produced a `hashMatch === false` even on a
26
+ * perfectly lossless migration — a false-negative that aborted the cutover and
27
+ * lost the batch writes accumulated during the migrating open.
28
+ *
29
+ * Extracting the transform logic into ONE shared module lets the verifier digest
30
+ * the SOURCE side **through the same transforms migrate applied**
31
+ * ({@link buildDigestExpr}), so equal logical data digests equal. `migrate.ts`
32
+ * re-imports these primitives so its copy behaviour stays byte-identical; the
33
+ * verifier imports {@link buildDigestExpr} for the digest-oriented variant.
34
+ *
35
+ * @task T11809 (exodus verify applies source-side coercion — hashMatch on equal data)
36
+ * @task T11546 (epoch→ISO coercion — original)
37
+ * @task T11547 (enum normalization — original)
38
+ * @task T11782 (non-finite numeric clamp — original)
39
+ * @epic T11249 (E6)
40
+ * @saga T11242
41
+ */
42
+ import type { DatabaseSync } from 'node:sqlite';
43
+ /**
44
+ * Determine a safe SQL literal default for a NOT NULL column with no schema
45
+ * default, given its SQLite type affinity.
46
+ *
47
+ * Used by `migrate.ts` to coalesce NULL source values for target-only NOT NULL
48
+ * columns so that rows are not silently dropped by `INSERT OR IGNORE` when a
49
+ * source value is NULL (T11533 ROOT CAUSE 2 fix).
50
+ *
51
+ * @param colType - Raw `type` string from `PRAGMA table_info` (e.g. `"INTEGER"`,
52
+ * `"TEXT"`, `"REAL"`, `"BLOB"`, or compound forms like `"text NOT NULL"`).
53
+ * @returns A SQL literal string suitable for embedding in a `COALESCE()` call.
54
+ */
55
+ export declare function typeDefaultLiteral(colType: string): string;
56
+ /**
57
+ * Function shape for an enum-normalization rule: given the `srcRef` SQL
58
+ * expression for a column, return a SQL expression that produces the canonical
59
+ * value.
60
+ */
61
+ export type NormalizeFn = (srcRef: string) => string;
62
+ /**
63
+ * Per-(targetTable, column) normalization rules that map legacy enum values to
64
+ * the canonical enum accepted by the consolidated schema CHECK constraints.
65
+ *
66
+ * Each entry is a function that, given the `srcRef` SQL expression for the
67
+ * column, returns a SQL CASE expression that produces the canonical value.
68
+ * Rows with already-canonical values pass through unchanged (the ELSE branch).
69
+ *
70
+ * ## Brain enum normalizations REMOVED (T11647)
71
+ *
72
+ * The brain memory family no longer participates in enum normalization. Its
73
+ * consolidated exodus target now matches the LEGACY RUNTIME shape, which carries
74
+ * NO SQL CHECK constraints (the `text({ enum })` unions are enforced at the
75
+ * application layer only). With no CHECK to satisfy, coercing brain enum values
76
+ * would be data corruption, not a fix — so every brain enum value is copied
77
+ * VERBATIM. The historical brain rules (`brain_observations.{source_type,type}`,
78
+ * `brain_decisions.{confirmation_state,decision_category,confidence,outcome,
79
+ * decided_by}`) were deleted. The TASKS-domain rules below remain because those
80
+ * consolidated tables keep their CHECK constraints.
81
+ *
82
+ * ## nexus/signaldock enum-drift audit (T11809 · AC1)
83
+ *
84
+ * A real-data audit of `nexus.db` (106 MB) and `signaldock.db` (280 KB) against
85
+ * the consolidated CHECK enums found ZERO out-of-enum values for every
86
+ * CHECK-constrained column that has source data: `nexus_nodes.kind` (24,482
87
+ * rows), `nexus_relations.type` (39,163 rows), `nexus_contracts.type` (0 rows),
88
+ * `nexus_sigils.role` (8 rows), `agent_registry_agents.status` (19 rows),
89
+ * `agent_registry_users.role` (0 rows). No new normalization entry was required.
90
+ * The reported "nexus/signaldock drop rows" symptom was in fact the AC2 verify
91
+ * false-negative (epoch→ISO coercion makes the source digest differ from the
92
+ * target digest), which fixing {@link buildDigestExpr} resolves — NOT a CHECK
93
+ * drop. See the T11809 return notes for the full per-column row counts.
94
+ *
95
+ * Lookup key: `${targetTable}.${column}` (lowercase, dotted).
96
+ *
97
+ * @since T11547 (P0 data-loss fix)
98
+ * @since T11548 (P0 final enum coverage)
99
+ * @since T11647 (brain target = runtime shape — brain enum coercions removed)
100
+ */
101
+ export declare const ENUM_NORMALIZATIONS: ReadonlyMap<string, NormalizeFn>;
102
+ /**
103
+ * Return a SQL CASE expression that normalises legacy enum values for `col` in
104
+ * `targetTableName` to the canonical values accepted by the consolidated CHECK,
105
+ * or return `null` when no normalization rule exists for this (table, column).
106
+ *
107
+ * @param targetTableName - Physical consolidated target table name.
108
+ * @param col - Column name.
109
+ * @param srcRef - SQL expression referencing the source column.
110
+ * @returns A SQL CASE expression string, or `null` if no rule applies.
111
+ */
112
+ export declare function enumNormExpr(targetTableName: string, col: string, srcRef: string): string | null;
113
+ /**
114
+ * Function shape for a numeric-clamp rule: given the `srcRef` SQL expression for
115
+ * a column, return a SQL expression that maps non-finite values to finite ones.
116
+ */
117
+ export type NumericClampFn = (srcRef: string) => string;
118
+ /**
119
+ * Per-(targetTable, column) numeric-clamp rules that coerce non-finite legacy
120
+ * REAL values (`Inf` / `-Inf` / `NaN`) to a finite in-range value so the row is
121
+ * NOT silently dropped by `INSERT OR IGNORE`.
122
+ *
123
+ * ## Why this exists (T11782)
124
+ *
125
+ * 188,926 of 697,780 legacy `brain_weight_history` rows carry
126
+ * `delta_weight = Inf`/`-Inf` (the R-STDP plasticity writer saturated the delta
127
+ * before the value was clamped at write time). SQLite stores ±Inf as the IEEE-754
128
+ * float, but the consolidated `brain_weight_history.delta_weight` column is a
129
+ * plain `real NOT NULL` with NO CHECK — so a verbatim copy would land the Inf
130
+ * value. The historical deficit, however, was that those rows tripped a constraint
131
+ * elsewhere in the copy chain and `INSERT OR IGNORE` dropped them, yielding a
132
+ * deficit that fired the parity-gate abort. Clamping the non-finite value to a
133
+ * finite member of the column's domain guarantees every row lands.
134
+ *
135
+ * The clamp mirrors the {@link ENUM_NORMALIZATIONS} shape: each entry is a
136
+ * function `(srcRef) => CASE …`. Finite values pass through unchanged via the
137
+ * ELSE branch. The `col != col` self-comparison is the canonical SQL NaN guard
138
+ * (NaN is the only value not equal to itself); `9e999` is the SQLite literal that
139
+ * evaluates to `+Infinity` (and `-9e999` to `-Infinity`).
140
+ *
141
+ * Lookup key: `${targetTable}.${column}` (lowercase, dotted).
142
+ *
143
+ * @since T11782 (P0 — brain_weight_history Inf recovery)
144
+ */
145
+ export declare const NUMERIC_CLAMPS: ReadonlyMap<string, NumericClampFn>;
146
+ /**
147
+ * Return a SQL CASE expression that clamps non-finite legacy REAL values for
148
+ * `col` in `targetTableName` to a finite in-range value, or `null` when no
149
+ * clamp rule exists for this (table, column).
150
+ *
151
+ * @param targetTableName - Physical consolidated target table name.
152
+ * @param col - Column name.
153
+ * @param srcRef - SQL expression referencing the source column.
154
+ * @returns A SQL CASE expression string, or `null` if no rule applies.
155
+ */
156
+ export declare function numericClampExpr(targetTableName: string, col: string, srcRef: string): string | null;
157
+ /**
158
+ * Magnitude threshold distinguishing epoch SECONDS from epoch MILLISECONDS.
159
+ *
160
+ * A Unix epoch value for years 2020–2100 is roughly 1.6e9 – 4.1e9 seconds,
161
+ * or 1.6e12 – 4.1e12 milliseconds. The safe boundary is 1e11 (100 billion):
162
+ * any value BELOW 1e11 is in seconds (even year 2100 seconds ≈ 4.1e9 < 1e11);
163
+ * any value AT OR ABOVE 1e11 is in milliseconds (year 2020 ms ≈ 1.6e12 > 1e11).
164
+ *
165
+ * This constant is embedded directly in the generated SQL CASE expression so
166
+ * it is evaluated per-row — each row's epoch is classified independently.
167
+ */
168
+ export declare const EPOCH_SECONDS_THRESHOLD: 100000000000;
169
+ /**
170
+ * Build a SQL expression that converts an INTEGER epoch column to ISO-8601 TEXT,
171
+ * automatically detecting whether the stored value is in seconds or milliseconds
172
+ * using a magnitude heuristic (T11549 correctness fix).
173
+ *
174
+ * ## Heuristic
175
+ *
176
+ * A per-row CASE checks whether the column value is below {@link EPOCH_SECONDS_THRESHOLD}
177
+ * (100 billion). If so, the value is treated as seconds and passed directly to
178
+ * `strftime(..., 'unixepoch')`. If at or above the threshold, it is divided by
179
+ * 1000.0 first (milliseconds → seconds).
180
+ *
181
+ * This replaces the previous per-source heuristic which failed when individual
182
+ * columns within a source DB used a different epoch unit than the majority of that
183
+ * source's columns. The specific bug: `nexus.user_profile.{first_observed_at,
184
+ * last_reinforced_at}` stores SECONDS (value ≈ 1.78e9) but the nexus source was
185
+ * labeled `milliseconds`, causing these values to be divided by 1000 and converted
186
+ * to a 1970 date.
187
+ *
188
+ * ## NULL handling
189
+ *
190
+ * A NULL source value is preserved as NULL so it passes the `IS NULL` branch of
191
+ * the ISO GLOB CHECK constraint on the target column.
192
+ *
193
+ * @param srcRef - SQL expression referencing the source column value.
194
+ * @returns A SQL CASE expression producing an ISO-8601 TEXT timestamp.
195
+ */
196
+ export declare function buildEpochToIsoExpr(srcRef: string): string;
197
+ /**
198
+ * Parse the DDL for a given table from `sqlite_master` and return the set of
199
+ * column names that have an ISO GLOB CHECK constraint.
200
+ *
201
+ * Reads the raw DDL text and uses a regex to extract column names appearing in
202
+ * `CHECK ("colname" IS NULL OR "colname" GLOB '[0-9]...')` patterns. This is
203
+ * robust to Drizzle's generated CHECK format (all CHECK constraints generated
204
+ * by T11363 follow this exact pattern).
205
+ *
206
+ * @param db - Target DB with the consolidated schema.
207
+ * @param tableName - Physical table name (consolidated, e.g. `conduit_messages`).
208
+ * @param targetSchema - Schema name the target table lives in (`'main'`, or an
209
+ * ATTACH alias for cross-scope routing — ADR-090 nexus graph residency, T11539).
210
+ * @returns Set of column names that require ISO GLOB validation.
211
+ */
212
+ export declare function detectIsoGlobColumns(db: DatabaseSync, tableName: string, targetSchema?: string): Set<string>;
213
+ /**
214
+ * Target-column metadata a {@link buildDigestExpr} caller passes so the digest
215
+ * can mirror migrate's NOT-NULL `COALESCE(..., type_default)` substitution
216
+ * (T11836).
217
+ *
218
+ * Keyed by column name, this carries the consolidated target's NOT-NULL flag and
219
+ * declared schema default for every column the digest visits, sourced from the
220
+ * target `PRAGMA table_info`. A column is NOT-NULL-without-default when
221
+ * `notnull === 1 && dflt_value === null` — exactly the condition under which
222
+ * migrate's `buildSelectExpr` wraps the value in `COALESCE(expr, type_default)`.
223
+ */
224
+ export interface TargetColumnInfo {
225
+ /** `PRAGMA table_info.notnull` — `1` for a NOT NULL column, `0` otherwise. */
226
+ readonly notnull: number;
227
+ /** `PRAGMA table_info.dflt_value` — the column's schema default, or `null`. */
228
+ readonly dflt_value: string | null;
229
+ /** `PRAGMA table_info.type` — raw affinity string (drives {@link typeDefaultLiteral}). */
230
+ readonly type: string;
231
+ }
232
+ /**
233
+ * Build the SQL expression a column's SOURCE value must pass through so it
234
+ * matches the canonical value the migration STORES in the target — for use by
235
+ * the parity verifier's content digest (T11809 · AC2).
236
+ *
237
+ * This is the digest-oriented sibling of migrate's `buildSelectExpr`. It applies
238
+ * the SAME value transforms the migration actually performs — and ONLY those:
239
+ *
240
+ * 1. **Epoch→ISO-8601** ({@link buildEpochToIsoExpr}) — when the target has an
241
+ * ISO GLOB CHECK and the source column is INTEGER-typed.
242
+ * 2. **Non-finite numeric clamp** ({@link numericClampExpr}).
243
+ * 3. **Enum-value normalization** ({@link enumNormExpr}).
244
+ * 4. **Plain column reference** otherwise.
245
+ *
246
+ * ## NOT-NULL default substitution mirroring (T11836)
247
+ *
248
+ * After the value transform, the result is wrapped in the SAME
249
+ * `COALESCE(expr, type_default)` substitution migrate's `buildSelectExpr` uses
250
+ * for a TARGET column that is NOT NULL without a schema default (see
251
+ * {@link maybeCoalesceNotNull}). migrate stores the type default (`''`/`0`/
252
+ * `0.0`/`x''`) for a NULL source value in such a column; without mirroring it
253
+ * here the source digest would read NULL and diverge from the stored default — a
254
+ * false `hashMatch === false` on a faithful FRESH migration (the exact T11836
255
+ * symptom). Mirroring it makes a NULL→NOT-NULL-default substitution a NON-FATAL
256
+ * diagnostic class rather than a hash failure. The target metadata is supplied
257
+ * via the `tgtColByCol` map; when it is absent (best-effort) no COALESCE is
258
+ * applied and a genuine NULL→'' divergence remains visible as before.
259
+ *
260
+ * The returned expression is a bare SQL value expression (no `AS "col"` alias)
261
+ * suitable for embedding directly in a `SELECT <expr> ... ORDER BY ...` digest
262
+ * query. When no transform applies, a plain quoted column reference is returned.
263
+ *
264
+ * @param targetTableName - Physical consolidated target table name (transform
265
+ * lookup key).
266
+ * @param col - Column name (present in BOTH source and target).
267
+ * @param srcType - Raw `type` string from the source `PRAGMA table_info`.
268
+ * @param isoGlobCols - Set of target columns carrying an ISO GLOB CHECK.
269
+ * @param tgtCol - Target column metadata (NOT-NULL flag + default +
270
+ * affinity) for `col`, or `undefined` when unavailable.
271
+ * @returns A SQL value expression that maps the raw source value to the canonical
272
+ * value the target stores.
273
+ */
274
+ export declare function buildDigestExpr(targetTableName: string, col: string, srcType: string, isoGlobCols: ReadonlySet<string>, tgtCol?: TargetColumnInfo): string;
275
+ //# sourceMappingURL=column-transforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-transforms.d.ts","sourceRoot":"","sources":["../../../src/store/exodus/column-transforms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO1D;AAMD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CA0H/D,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhG;AAMD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAc7D,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAIf;AAaD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,EAAG,YAAwB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,SAAS,GACpB,GAAG,CAAC,MAAM,CAAC,CAmBb;AAqBD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAqBR"}