hikoutei 0.10.16-dev → 0.10.18-dev

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 (58) hide show
  1. package/dist/contracts/api/entity.d.ts +10 -5
  2. package/dist/contracts/api/entity.d.ts.map +1 -1
  3. package/dist/contracts/api/entity.js +18 -10
  4. package/dist/contracts/api/entity.js.map +1 -1
  5. package/dist/contracts/sync-orm/mapping/identity.d.ts +10 -5
  6. package/dist/contracts/sync-orm/mapping/identity.d.ts.map +1 -1
  7. package/dist/contracts/sync-orm/mapping/identity.js +25 -11
  8. package/dist/contracts/sync-orm/mapping/identity.js.map +1 -1
  9. package/dist/orm/mapping/observationMapping.d.ts +4 -4
  10. package/dist/orm/mapping/observationMapping.d.ts.map +1 -1
  11. package/dist/orm/mapping/observationMapping.js +2 -1
  12. package/dist/orm/mapping/observationMapping.js.map +1 -1
  13. package/dist/orm/persistence/support/helpers.d.ts +5 -1
  14. package/dist/orm/persistence/support/helpers.d.ts.map +1 -1
  15. package/dist/orm/persistence/support/helpers.js +16 -6
  16. package/dist/orm/persistence/support/helpers.js.map +1 -1
  17. package/dist/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js +36 -4
  18. package/dist/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js.map +1 -1
  19. package/dist/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js +5 -0
  20. package/dist/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js.map +1 -1
  21. package/dist/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +18 -4
  22. package/dist/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
  23. package/dist/storage/sqlite/migrateSchema.d.ts.map +1 -1
  24. package/dist/storage/sqlite/migrateSchema.js +16 -1
  25. package/dist/storage/sqlite/migrateSchema.js.map +1 -1
  26. package/dist/storage/sqlite/schema.d.ts +21 -0
  27. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  28. package/dist/storage/sqlite/schema.js +27 -0
  29. package/dist/storage/sqlite/schema.js.map +1 -1
  30. package/dist/storage/sync/outbound/reconciliationSql.d.ts +81 -0
  31. package/dist/storage/sync/outbound/reconciliationSql.d.ts.map +1 -1
  32. package/dist/storage/sync/outbound/reconciliationSql.js +139 -1
  33. package/dist/storage/sync/outbound/reconciliationSql.js.map +1 -1
  34. package/dist/sync-engine/api/internalEntityManager.d.ts.map +1 -1
  35. package/dist/sync-engine/api/internalEntityManager.js +3 -1
  36. package/dist/sync-engine/api/internalEntityManager.js.map +1 -1
  37. package/dist/sync-engine/orm/persistence/scalar/unitOfWork.d.ts.map +1 -1
  38. package/dist/sync-engine/orm/persistence/scalar/unitOfWork.js +102 -9
  39. package/dist/sync-engine/orm/persistence/scalar/unitOfWork.js.map +1 -1
  40. package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.d.ts.map +1 -1
  41. package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.js +8 -3
  42. package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.js.map +1 -1
  43. package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  44. package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.js +103 -53
  45. package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  46. package/dist/sync-engine/sync/outbound/reconciliation/cleanup.d.ts +110 -0
  47. package/dist/sync-engine/sync/outbound/reconciliation/cleanup.d.ts.map +1 -1
  48. package/dist/sync-engine/sync/outbound/reconciliation/cleanup.js +307 -1
  49. package/dist/sync-engine/sync/outbound/reconciliation/cleanup.js.map +1 -1
  50. package/dist/sync-engine/sync/outbound/reconciliation/diff.d.ts +51 -7
  51. package/dist/sync-engine/sync/outbound/reconciliation/diff.d.ts.map +1 -1
  52. package/dist/sync-engine/sync/outbound/reconciliation/diff.js +53 -43
  53. package/dist/sync-engine/sync/outbound/reconciliation/diff.js.map +1 -1
  54. package/dist/sync-engine/sync/outbound/reconciliation/shared.d.ts +33 -11
  55. package/dist/sync-engine/sync/outbound/reconciliation/shared.d.ts.map +1 -1
  56. package/dist/sync-engine/sync/outbound/reconciliation/shared.js +93 -58
  57. package/dist/sync-engine/sync/outbound/reconciliation/shared.js.map +1 -1
  58. package/package.json +1 -1
@@ -18,7 +18,7 @@ import { computeSyncVisibleHash, } from "../../../../contracts/sheets/syncSheets
18
18
  * choice: the affected locators are dropped from the index so neither the
19
19
  * drift classifier nor the failed-head matcher can silently pick one row.
20
20
  */
21
- function buildObservedRowIndex(snapshot, businessKeyField) {
21
+ export function buildObservedRowIndex(snapshot, businessKeyField) {
22
22
  const rowsByAnchor = new Map();
23
23
  const ambiguousAnchors = new Set();
24
24
  const rowsByIdentity = new Map();
@@ -60,7 +60,7 @@ function buildObservedRowIndex(snapshot, businessKeyField) {
60
60
  * duplicate set. Returns undefined when no row can prove ownership of this
61
61
  * binding.
62
62
  */
63
- function resolveObservedRow(index, desiredRow, businessKeyField) {
63
+ export function resolveObservedRow(index, desiredRow, businessKeyField) {
64
64
  const identity = desiredRowIdentity(desiredRow, businessKeyField);
65
65
  // The primary locator's ambiguity is fatal: when the desired anchor is
66
66
  // duplicated, identity fallback would silently pick one of the rows that
@@ -76,39 +76,38 @@ function resolveObservedRow(index, desiredRow, businessKeyField) {
76
76
  }
77
77
  export function computeDrifts(args) {
78
78
  const index = buildObservedRowIndex(args.snapshot, args.sheet.businessKeyField);
79
- const drifts = [];
80
- for (const desiredRow of args.desired) {
81
- const observed = resolveObservedRow(index, desiredRow, args.sheet.businessKeyField);
82
- if (observed === undefined) {
83
- drifts.push({ kind: "missing", desired: desiredRow, observed: undefined });
84
- continue;
85
- }
86
- const observedHash = computeObservedHash(observed, args.systemFields);
87
- const desiredHash = computeSyncVisibleHash(desiredRow.fields);
88
- if (observedHash !== desiredHash) {
89
- drifts.push({ kind: "drifted", desired: desiredRow, observed });
90
- }
91
- }
92
- return drifts;
79
+ return classifyDesiredChunk(index, args.desired, args.systemFields, args.sheet.businessKeyField);
93
80
  }
94
81
  /**
95
- * Returns the observed snapshot row owned by each desired row.
82
+ * Classifies one chunk of desired rows against a prebuilt snapshot index.
96
83
  *
97
- * Honors the same duplication quarantine as drift detection: an ambiguous
98
- * anchor or duplicated business key never resolves to a row. The failed-head
99
- * repair path uses this to pass FRESH verified snapshot evidence into a
100
- * repair baseline for a clean (already matching) row, so a repair never
101
- * falls back to an unguarded insert for an existing Sheet row.
84
+ * The chunked scan calls this per completed entity batch with the scan-wide
85
+ * index; results concatenate in chunk order, which is the global
86
+ * `(entity_id, field_name)` order, so chunked classification is identical to
87
+ * one full-load `computeDrifts` call. Returns only drift targets; matched
88
+ * rows are simply absent (the scan counts them as scanned-minus-missing).
102
89
  */
103
- export function findObservedRows(snapshot, desired, businessKeyField) {
104
- const index = buildObservedRowIndex(snapshot, businessKeyField);
105
- const matched = new Map();
90
+ export function classifyDesiredChunk(index, desired, systemFields, businessKeyField) {
91
+ const drifts = [];
106
92
  for (const desiredRow of desired) {
107
- const observed = resolveObservedRow(index, desiredRow, businessKeyField);
108
- if (observed !== undefined)
109
- matched.set(desiredRow.entityId, observed);
93
+ const drift = classifyDesiredRow(index, desiredRow, systemFields, businessKeyField);
94
+ if (drift !== undefined)
95
+ drifts.push(drift);
110
96
  }
111
- return matched;
97
+ return drifts;
98
+ }
99
+ /** Classifies one desired row: missing, drifted, or matched (undefined). */
100
+ export function classifyDesiredRow(index, desiredRow, systemFields, businessKeyField) {
101
+ const observed = resolveObservedRow(index, desiredRow, businessKeyField);
102
+ if (observed === undefined) {
103
+ return { kind: "missing", desired: desiredRow, observed: undefined };
104
+ }
105
+ const observedHash = computeObservedHash(observed, systemFields);
106
+ const desiredHash = computeSyncVisibleHash(desiredRow.fields);
107
+ if (observedHash !== desiredHash) {
108
+ return { kind: "drifted", desired: desiredRow, observed };
109
+ }
110
+ return undefined;
112
111
  }
113
112
  /** Reads a business-key value from a snapshot row for unanchored fast appends. */
114
113
  export function snapshotIdentity(row, identityField) {
@@ -183,6 +182,29 @@ export function countMatchedRows(snapshot, desired, identityField) {
183
182
  return matched;
184
183
  }
185
184
  export function countExtraRows(snapshot, desired, identityField) {
185
+ // First-wins anchor ownership plus every desired identity, as lightweight
186
+ // keys: the chunked scan accumulates the same keys without retaining rows.
187
+ const desiredAnchors = new Map();
188
+ const desiredIdentities = new Set();
189
+ for (const row of desired) {
190
+ if (!desiredAnchors.has(row.anchorReference)) {
191
+ desiredAnchors.set(row.anchorReference, desiredRowIdentity(row, identityField));
192
+ }
193
+ const identity = desiredRowIdentity(row, identityField);
194
+ if (identity !== undefined)
195
+ desiredIdentities.add(identity);
196
+ }
197
+ return countExtraRowsForKeys(snapshot, identityField, desiredAnchors, desiredIdentities);
198
+ }
199
+ /**
200
+ * Counts surplus snapshot rows from pre-accumulated desired keys.
201
+ *
202
+ * The chunked scan feeds one chunk at a time into `desiredAnchors` (first
203
+ * row wins per anchor) and `desiredIdentities`, then calls this once: the
204
+ * count is identical to `countExtraRows` while only small key strings are
205
+ * retained instead of full desired rows.
206
+ */
207
+ export function countExtraRowsForKeys(snapshot, identityField, desiredAnchors, desiredIdentities) {
186
208
  // Identities that appear more than once in the snapshot cannot prove
187
209
  // ownership. A desired row carrying one of these identities is quarantined:
188
210
  // its anchor never suppresses the extra count, and the duplicated identity
@@ -199,15 +221,6 @@ export function countExtraRows(snapshot, desired, identityField) {
199
221
  seen.add(identity);
200
222
  }
201
223
  }
202
- const desiredByAnchor = new Map();
203
- const desiredIdentities = new Set();
204
- for (const row of desired) {
205
- if (!desiredByAnchor.has(row.anchorReference))
206
- desiredByAnchor.set(row.anchorReference, row);
207
- const identity = desiredRowIdentity(row, identityField);
208
- if (identity !== undefined)
209
- desiredIdentities.add(identity);
210
- }
211
224
  const anchorCounts = new Map();
212
225
  for (const row of snapshot.rows) {
213
226
  if (row.physicalAnchor.kind !== PRESENCE_KINDS.PRESENT)
@@ -223,11 +236,8 @@ export function countExtraRows(snapshot, desired, identityField) {
223
236
  // business key that appears elsewhere.
224
237
  if (row.physicalAnchor.kind === PRESENCE_KINDS.PRESENT &&
225
238
  (anchorCounts.get(row.physicalAnchor.value) ?? 0) === 1) {
226
- const desiredRow = desiredByAnchor.get(row.physicalAnchor.value);
227
- const desiredIdentity = desiredRow === undefined
228
- ? undefined
229
- : desiredRowIdentity(desiredRow, identityField);
230
- if (desiredRow !== undefined &&
239
+ const desiredIdentity = desiredAnchors.get(row.physicalAnchor.value);
240
+ if (desiredAnchors.has(row.physicalAnchor.value) &&
231
241
  (desiredIdentity === undefined || !duplicateIdentities.has(desiredIdentity))) {
232
242
  continue;
233
243
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/diff.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,11 @@
9
9
  * modules can import from one place without importing each other.
10
10
  */
11
11
  import type { NormalizedCell } from "../../../../contracts/encoding/types.js";
12
+ import { READ_DESIRED_SYSTEM_STATE_SQL, RECONCILIATION_SCAN_CHUNK_SIZE, RECONCILIATION_SCAN_ENTITY_PAGE_SIZE, readActiveEntityPageWithSql, readEntityBindingsWithSql, readEntityFieldsWithSql, readReconciliationDesiredSystemStateChunkWithSql, type ReconciliationDesiredChunkCursor, type ReconciliationDesiredEntityChunk, type ReconciliationDesiredSystemStateRow } from "../../../../storage/sync/outbound/reconciliationSql.js";
12
13
  import type { SqlExecutor, SqlStorageAdapter } from "../../../../contracts/storage/sql.js";
13
14
  import type { SyncSheetsProvider } from "../../../../contracts/sheets/syncSheets.js";
15
+ export { READ_DESIRED_SYSTEM_STATE_SQL, RECONCILIATION_SCAN_CHUNK_SIZE, RECONCILIATION_SCAN_ENTITY_PAGE_SIZE, readActiveEntityPageWithSql, readEntityBindingsWithSql, readEntityFieldsWithSql, readReconciliationDesiredSystemStateChunkWithSql, };
16
+ export type { ReconciliationDesiredChunkCursor, ReconciliationDesiredEntityChunk, ReconciliationDesiredSystemStateRow, };
14
17
  export declare const DEFAULT_RECONCILIATION_ROLE = "typed-sheets-reconciler";
15
18
  export declare const DEFAULT_RECONCILIATION_LEASE_MS = 60000;
16
19
  export declare const DEFAULT_SYSTEM_TOMBSTONE_FIELD = "_deleted";
@@ -24,15 +27,6 @@ export interface DesiredRow {
24
27
  readonly fields: Record<string, NormalizedCell>;
25
28
  readonly fieldRevisionHash: string;
26
29
  }
27
- export interface DesiredRowSqlShape {
28
- readonly entity_id: string;
29
- readonly row_binding_id: string;
30
- readonly anchor_reference: string;
31
- readonly entity_revision: number;
32
- readonly field_name: string;
33
- readonly normalized_value: string;
34
- readonly ownership: string;
35
- }
36
30
  export interface LatestVisibleSqlShape {
37
31
  readonly confirmed_visible_revision: number | null;
38
32
  readonly confirmed_snapshot_hash: string | null;
@@ -46,7 +40,6 @@ export interface LatestEffectSqlShape {
46
40
  readonly last_error_code: string | null;
47
41
  readonly payload_json: string | null;
48
42
  }
49
- export declare const READ_DESIRED_SYSTEM_STATE_SQL = "\n SELECT\n entity.entity_id AS entity_id,\n binding.row_binding_id AS row_binding_id,\n binding.anchor_reference AS anchor_reference,\n entity.entity_revision AS entity_revision,\n field.field_name AS field_name,\n field.normalized_value AS normalized_value,\n field.ownership AS ownership\n FROM entity_state AS entity\n JOIN row_binding AS binding\n ON binding.entity_id = entity.entity_id\n AND binding.logical_sheet_id = ?\n AND binding.state = 'active'\n JOIN entity_field_state AS field\n ON field.entity_id = entity.entity_id\n WHERE entity.status = 'active'\n ORDER BY entity.entity_id, field.field_name\n";
50
43
  export declare const READ_LATEST_VISIBLE_STATE_SQL = "\n SELECT confirmed_visible_revision, confirmed_snapshot_hash\n FROM sheet_visible_state\n WHERE physical_sheet_id = ? AND projection = 'system_state' AND row_binding_id = ?\n";
51
44
  export declare const READ_LATEST_EFFECT_SQL = "\n SELECT effect_id, stream_sequence, expected_visible_revision, expected_visible_hash, status, last_error_code, payload_json\n FROM sheet_effect_outbox\n WHERE logical_sheet_id = ? AND target_kind = 'entity' AND target_id = ?\n ORDER BY stream_sequence DESC\n LIMIT 1\n";
52
45
  /**
@@ -82,6 +75,11 @@ export interface FailedHeadsSqlShape {
82
75
  * superseded by reconciliation, mirroring `readTerminalFailedHeadWithSql`.
83
76
  */
84
77
  export declare function readTerminalFailedHeads(context: ScanContext): Promise<ReadonlyMap<string, string>>;
78
+ /**
79
+ * Reads terminal failed heads inside the caller's SQL context so the chunked
80
+ * scan can share one read with its pages instead of opening a second one.
81
+ */
82
+ export declare function readTerminalFailedHeadsWithSql(sql: SqlExecutor, logicalSheetId: string): Promise<ReadonlyMap<string, string>>;
85
83
  export interface ScanContext {
86
84
  readonly storage: SqlStorageAdapter;
87
85
  readonly provider: SyncSheetsProvider;
@@ -97,7 +95,31 @@ export interface ScanContext {
97
95
  readonly leaseDurationMs: number;
98
96
  }
99
97
  export declare function readDesiredSystemState(context: ScanContext): Promise<readonly DesiredRow[]>;
100
- export declare function readDesiredSystemStateWithSql(sql: SqlExecutor, context: ScanContext): Promise<readonly DesiredRow[]>;
98
+ export declare function readDesiredSystemStateWithSql(sql: SqlExecutor, context: Pick<ScanContext, "logicalSheetId" | "tombstoneField">): Promise<readonly DesiredRow[]>;
99
+ /** One entity's fields accumulated across chunk boundaries. */
100
+ export interface PartialDesiredRow {
101
+ readonly entityId: string;
102
+ readonly rowBindingId: string;
103
+ readonly anchorReference: string;
104
+ readonly entityRevision: number;
105
+ readonly fields: Record<string, NormalizedCell>;
106
+ }
107
+ /** Completed desired rows plus the trailing entity still missing fields. */
108
+ export interface DesiredChunkResult {
109
+ readonly completed: readonly DesiredRow[];
110
+ readonly carry: PartialDesiredRow | undefined;
111
+ }
112
+ /**
113
+ * Groups one ordered page of flat canonical rows into completed desired
114
+ * rows. A page may split an entity's fields across the boundary, so the
115
+ * trailing entity is returned as `carry` and must seed the next call; only
116
+ * `flushDesiredCarry` after the last page finalizes it. Completed rows are
117
+ * finalized (tombstone default + revision hash) exactly like the full-load
118
+ * reader, in global `(entity_id, field_name)` order.
119
+ */
120
+ export declare function assembleDesiredChunk(rows: readonly ReconciliationDesiredSystemStateRow[], carry: PartialDesiredRow | undefined, tombstoneField: string | undefined): DesiredChunkResult;
121
+ /** Finalizes the trailing entity after the last page. */
122
+ export declare function flushDesiredCarry(carry: PartialDesiredRow | undefined, tombstoneField: string | undefined): DesiredRow | undefined;
101
123
  export declare function ensureTombstoneField(row: DesiredRow, tombstoneField: string | undefined): void;
102
124
  export declare function computeFieldRevisionHash(fields: Readonly<Record<string, NormalizedCell>>): string;
103
125
  export declare function decodeNormalizedCell(value: string): NormalizedCell;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/shared.ts"],"names":[],"mappings":"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"}
@@ -13,28 +13,13 @@ import { isRecoverableEffectErrorCode, } from "@hikoutei/ikisaki";
13
13
  import { NORMALIZED_CELL_KINDS } from "../../../../contracts/encoding/constants.js";
14
14
  import { isNormalizedCell } from "../../../../contracts/encoding/normalizedCell.js";
15
15
  import { STORAGE_ERROR_CODES, StorageError } from "../../../../storage/errors.js";
16
+ import { READ_DESIRED_SYSTEM_STATE_SQL, RECONCILIATION_SCAN_CHUNK_SIZE, RECONCILIATION_SCAN_ENTITY_PAGE_SIZE, readActiveEntityPageWithSql, readEntityBindingsWithSql, readEntityFieldsWithSql, readReconciliationDesiredSystemStateChunkWithSql, readReconciliationDesiredSystemStateWithSql as readFlatDesiredSystemStateWithSql, } from "../../../../storage/sync/outbound/reconciliationSql.js";
17
+ // The desired-state query lives in storage; this module re-exports the
18
+ // shared pieces so scanner role modules keep importing from one place.
19
+ export { READ_DESIRED_SYSTEM_STATE_SQL, RECONCILIATION_SCAN_CHUNK_SIZE, RECONCILIATION_SCAN_ENTITY_PAGE_SIZE, readActiveEntityPageWithSql, readEntityBindingsWithSql, readEntityFieldsWithSql, readReconciliationDesiredSystemStateChunkWithSql, };
16
20
  export const DEFAULT_RECONCILIATION_ROLE = "typed-sheets-reconciler";
17
21
  export const DEFAULT_RECONCILIATION_LEASE_MS = 60_000;
18
22
  export const DEFAULT_SYSTEM_TOMBSTONE_FIELD = "_deleted";
19
- export const READ_DESIRED_SYSTEM_STATE_SQL = `
20
- SELECT
21
- entity.entity_id AS entity_id,
22
- binding.row_binding_id AS row_binding_id,
23
- binding.anchor_reference AS anchor_reference,
24
- entity.entity_revision AS entity_revision,
25
- field.field_name AS field_name,
26
- field.normalized_value AS normalized_value,
27
- field.ownership AS ownership
28
- FROM entity_state AS entity
29
- JOIN row_binding AS binding
30
- ON binding.entity_id = entity.entity_id
31
- AND binding.logical_sheet_id = ?
32
- AND binding.state = 'active'
33
- JOIN entity_field_state AS field
34
- ON field.entity_id = entity.entity_id
35
- WHERE entity.status = 'active'
36
- ORDER BY entity.entity_id, field.field_name
37
- `;
38
23
  export const READ_LATEST_VISIBLE_STATE_SQL = `
39
24
  SELECT confirmed_visible_revision, confirmed_snapshot_hash
40
25
  FROM sheet_visible_state
@@ -82,53 +67,103 @@ export const READ_FAILED_HEADS_SQL = `
82
67
  * superseded by reconciliation, mirroring `readTerminalFailedHeadWithSql`.
83
68
  */
84
69
  export async function readTerminalFailedHeads(context) {
85
- return context.storage.read(async ({ sql }) => {
86
- const rows = await sql.all(READ_FAILED_HEADS_SQL, [
87
- context.logicalSheetId,
88
- ]);
89
- const byTarget = new Map();
90
- for (const row of rows) {
91
- if (isRecoverableEffectErrorCode(row.last_error_code))
92
- continue;
93
- if (!byTarget.has(row.target_id))
94
- byTarget.set(row.target_id, row.effect_id);
95
- }
96
- return byTarget;
97
- });
70
+ return context.storage.read(({ sql }) => readTerminalFailedHeadsWithSql(sql, context.logicalSheetId));
71
+ }
72
+ /**
73
+ * Reads terminal failed heads inside the caller's SQL context so the chunked
74
+ * scan can share one read with its pages instead of opening a second one.
75
+ */
76
+ export async function readTerminalFailedHeadsWithSql(sql, logicalSheetId) {
77
+ const rows = await sql.all(READ_FAILED_HEADS_SQL, [
78
+ logicalSheetId,
79
+ ]);
80
+ const byTarget = new Map();
81
+ for (const row of rows) {
82
+ if (isRecoverableEffectErrorCode(row.last_error_code))
83
+ continue;
84
+ if (!byTarget.has(row.target_id))
85
+ byTarget.set(row.target_id, row.effect_id);
86
+ }
87
+ return byTarget;
98
88
  }
99
89
  export async function readDesiredSystemState(context) {
100
90
  return context.storage.read(({ sql }) => readDesiredSystemStateWithSql(sql, context));
101
91
  }
102
92
  export async function readDesiredSystemStateWithSql(sql, context) {
103
- const rows = await sql.all(READ_DESIRED_SYSTEM_STATE_SQL, [
104
- context.logicalSheetId,
105
- ]);
106
- const byEntity = new Map();
93
+ // The flat rows come from the storage-owned reader; grouping stays here
94
+ // because DesiredRow (decoded cells, tombstone default, revision hash) is
95
+ // the scanner's internal contract, not a storage shape.
96
+ const rows = await readFlatDesiredSystemStateWithSql(sql, context.logicalSheetId);
97
+ const { completed, carry } = assembleDesiredChunk(rows, undefined, context.tombstoneField);
98
+ const flushed = flushDesiredCarry(carry, context.tombstoneField);
99
+ return flushed === undefined ? completed : [...completed, flushed];
100
+ }
101
+ /**
102
+ * Groups one ordered page of flat canonical rows into completed desired
103
+ * rows. A page may split an entity's fields across the boundary, so the
104
+ * trailing entity is returned as `carry` and must seed the next call; only
105
+ * `flushDesiredCarry` after the last page finalizes it. Completed rows are
106
+ * finalized (tombstone default + revision hash) exactly like the full-load
107
+ * reader, in global `(entity_id, field_name)` order.
108
+ */
109
+ export function assembleDesiredChunk(rows, carry, tombstoneField) {
110
+ const completed = [];
111
+ let current = carry === undefined ? undefined : {
112
+ entityId: carry.entityId,
113
+ rowBindingId: carry.rowBindingId,
114
+ anchorReference: carry.anchorReference,
115
+ entityRevision: carry.entityRevision,
116
+ fields: { ...carry.fields },
117
+ };
118
+ const finalizeCurrent = () => {
119
+ if (current === undefined)
120
+ return undefined;
121
+ completed.push(finalizeDesiredRow(current, tombstoneField));
122
+ return undefined;
123
+ };
107
124
  for (const row of rows) {
108
- const existing = byEntity.get(row.entity_id);
109
- const cell = decodeNormalizedCell(row.normalized_value);
110
- if (existing === undefined) {
111
- const fields = {};
112
- fields[row.field_name] = cell;
113
- byEntity.set(row.entity_id, {
114
- entityId: row.entity_id,
115
- rowBindingId: row.row_binding_id,
116
- anchorReference: row.anchor_reference,
117
- entityRevision: row.entity_revision,
118
- fields,
119
- fieldRevisionHash: "",
120
- });
121
- continue;
125
+ if (current !== undefined && current.entityId !== row.entityId) {
126
+ current = finalizeCurrent();
122
127
  }
123
- existing.fields[row.field_name] = cell;
124
- }
125
- const desired = [];
126
- for (const row of byEntity.values()) {
127
- ensureTombstoneField(row, context.tombstoneField);
128
- const hash = computeFieldRevisionHash(row.fields);
129
- desired.push({ ...row, fieldRevisionHash: hash });
128
+ if (current === undefined) {
129
+ current = {
130
+ entityId: row.entityId,
131
+ rowBindingId: row.rowBindingId,
132
+ anchorReference: row.anchorReference,
133
+ entityRevision: row.entityRevision,
134
+ fields: {},
135
+ };
136
+ }
137
+ current.fields[row.fieldName] = decodeNormalizedCell(row.normalizedValue);
130
138
  }
131
- return desired;
139
+ return {
140
+ completed,
141
+ carry: current === undefined ? undefined : {
142
+ entityId: current.entityId,
143
+ rowBindingId: current.rowBindingId,
144
+ anchorReference: current.anchorReference,
145
+ entityRevision: current.entityRevision,
146
+ fields: current.fields,
147
+ },
148
+ };
149
+ }
150
+ /** Finalizes the trailing entity after the last page. */
151
+ export function flushDesiredCarry(carry, tombstoneField) {
152
+ if (carry === undefined)
153
+ return undefined;
154
+ return finalizeDesiredRow(carry, tombstoneField);
155
+ }
156
+ function finalizeDesiredRow(row, tombstoneField) {
157
+ const desired = {
158
+ entityId: row.entityId,
159
+ rowBindingId: row.rowBindingId,
160
+ anchorReference: row.anchorReference,
161
+ entityRevision: row.entityRevision,
162
+ fields: row.fields,
163
+ fieldRevisionHash: "",
164
+ };
165
+ ensureTombstoneField(desired, tombstoneField);
166
+ return { ...desired, fieldRevisionHash: computeFieldRevisionHash(desired.fields) };
132
167
  }
133
168
  export function ensureTombstoneField(row, tombstoneField) {
134
169
  if (tombstoneField === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hikoutei",
3
- "version": "0.10.16-dev",
3
+ "version": "0.10.18-dev",
4
4
  "description": "Typed repository and safe write layer for Google Sheets-backed MVPs. SQLite-authoritative entity lifecycle with asynchronous Google Sheets projection.",
5
5
  "repository": {
6
6
  "type": "git",