hikoutei 0.5.2 → 0.5.4
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.
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +2 -2
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +2 -2
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +26 -7
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js +26 -7
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js +19 -13
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts +17 -10
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js +41 -15
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js +6 -2
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerDeletion.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerDeletion.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerReceipt.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerReceipt.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerReceipt.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerReceipt.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerWorkingRow.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerWorkingRow.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerWorkingRow.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/plannerWorkingRow.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js +3 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts +9 -6
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js +8 -5
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightContext.d.ts +7 -7
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightContext.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightContext.js +10 -5
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightContext.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightFields.d.ts +7 -7
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightFields.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightFields.js +7 -10
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightFields.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightHeaders.d.ts +12 -3
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightHeaders.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightHeaders.js +41 -10
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightHeaders.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js +1 -39
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightRows.d.ts +26 -11
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightRows.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightRows.js +77 -31
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightRows.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts +6 -3
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js +9 -4
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/anchors.d.ts +13 -10
- package/dist/adapter/sheets/providers/google-sheets-api/operations/anchors.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/anchors.js +23 -15
- package/dist/adapter/sheets/providers/google-sheets-api/operations/anchors.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/applyEffects.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/applyEffects.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/applyEffects.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/applyEffects.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/fastAppend.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/fastAppend.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/fastAppend.js +3 -3
- package/dist/adapter/sheets/providers/google-sheets-api/operations/fastAppend.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/preflightOp.d.ts +2 -2
- package/dist/adapter/sheets/providers/google-sheets-api/operations/preflightOp.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/preflightOp.js +6 -3
- package/dist/adapter/sheets/providers/google-sheets-api/operations/preflightOp.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/provisioning.d.ts +7 -5
- package/dist/adapter/sheets/providers/google-sheets-api/operations/provisioning.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/provisioning.js +61 -19
- package/dist/adapter/sheets/providers/google-sheets-api/operations/provisioning.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/readRows.d.ts +2 -2
- package/dist/adapter/sheets/providers/google-sheets-api/operations/readRows.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/readRows.js +15 -8
- package/dist/adapter/sheets/providers/google-sheets-api/operations/readRows.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js +2 -2
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +0 -7
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +0 -21
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -1
- package/dist/application/orm/mapping/contracts.d.ts +1 -1
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.js +1 -1
- package/dist/application/orm/mapping/definition.js.map +1 -1
- package/dist/application/orm/mapping/projection.js +1 -1
- package/dist/application/orm/mapping/projection.js.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.js +2 -2
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -1
- package/dist/application/orm/persistence/support/contracts.d.ts +1 -1
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -1
- package/dist/application/sync/inbound/autoSystemConflictResolution.js +3 -3
- package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +2 -2
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -1
- package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts +1 -1
- package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -1
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js +3 -3
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +2 -2
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +2 -2
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +7 -3
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +12 -414
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/diff.d.ts +35 -0
- package/dist/application/sync/outbound/reconciliation/diff.d.ts.map +1 -0
- package/dist/application/sync/outbound/reconciliation/diff.js +199 -0
- package/dist/application/sync/outbound/reconciliation/diff.js.map +1 -0
- package/dist/application/sync/outbound/reconciliation/repair.d.ts +30 -0
- package/dist/application/sync/outbound/reconciliation/repair.d.ts.map +1 -0
- package/dist/application/sync/outbound/reconciliation/repair.js +142 -0
- package/dist/application/sync/outbound/reconciliation/repair.js.map +1 -0
- package/dist/application/sync/outbound/reconciliation/shared.d.ts +69 -0
- package/dist/application/sync/outbound/reconciliation/shared.d.ts.map +1 -0
- package/dist/application/sync/outbound/reconciliation/shared.js +111 -0
- package/dist/application/sync/outbound/reconciliation/shared.js.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +3 -3
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js +3 -3
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
- package/dist/application/sync/service/syncAutoStart.d.ts +4 -3
- package/dist/application/sync/service/syncAutoStart.d.ts.map +1 -1
- package/dist/application/sync/service/syncAutoStart.js +8 -6
- package/dist/application/sync/service/syncAutoStart.js.map +1 -1
- package/dist/application/sync/sheetsContract/conflictProjection.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/conflictProjection.js.map +1 -0
- package/dist/application/sync/sheetsContract/conflictProjectionRegistration.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/conflictProjectionRegistration.js.map +1 -0
- package/dist/application/sync/sheetsContract/constants.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/constants.js.map +1 -0
- package/dist/application/sync/sheetsContract/errors.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/errors.js.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/asyncMutex.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/asyncMutex.js.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/laneTelemetry.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/laneTelemetry.js.map +1 -0
- package/dist/application/sync/sheetsContract/sheetsProvisioning.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/sheetsProvisioning.js.map +1 -0
- package/dist/application/sync/sheetsContract/syncSheets.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/syncSheets.js.map +1 -0
- package/dist/application/sync/sheetsContract/transportOutcome.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/transportOutcome.js.map +1 -0
- package/dist/application/sync/sheetsContract/validation.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/validation.js.map +1 -0
- package/package.json +1 -1
- package/dist/application/sync/sheets/conflictProjection.d.ts.map +0 -1
- package/dist/application/sync/sheets/conflictProjection.js.map +0 -1
- package/dist/application/sync/sheets/conflictProjectionRegistration.d.ts.map +0 -1
- package/dist/application/sync/sheets/conflictProjectionRegistration.js.map +0 -1
- package/dist/application/sync/sheets/constants.d.ts.map +0 -1
- package/dist/application/sync/sheets/constants.js.map +0 -1
- package/dist/application/sync/sheets/errors.d.ts.map +0 -1
- package/dist/application/sync/sheets/errors.js.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.js.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.d.ts.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.js.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.d.ts.map +0 -1
- package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.js.map +0 -1
- package/dist/application/sync/sheets/sheetsProvisioning.d.ts.map +0 -1
- package/dist/application/sync/sheets/sheetsProvisioning.js.map +0 -1
- package/dist/application/sync/sheets/syncSheets.d.ts.map +0 -1
- package/dist/application/sync/sheets/syncSheets.js.map +0 -1
- package/dist/application/sync/sheets/transportOutcome.d.ts.map +0 -1
- package/dist/application/sync/sheets/transportOutcome.js.map +0 -1
- package/dist/application/sync/sheets/validation.d.ts.map +0 -1
- package/dist/application/sync/sheets/validation.js.map +0 -1
- /package/dist/application/sync/{sheets → sheetsContract}/conflictProjection.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/conflictProjection.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/conflictProjectionRegistration.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/conflictProjectionRegistration.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/constants.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/constants.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/errors.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/errors.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/CoordinatedSheetsProvider.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/CoordinatedSheetsProvider.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/asyncMutex.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/asyncMutex.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/laneTelemetry.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/mutationCoordinator/laneTelemetry.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/sheetsProvisioning.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/sheetsProvisioning.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/syncSheets.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/syncSheets.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/transportOutcome.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/transportOutcome.js +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/validation.d.ts +0 -0
- /package/dist/application/sync/{sheets → sheetsContract}/validation.js +0 -0
|
@@ -13,52 +13,20 @@
|
|
|
13
13
|
* protected and hidden, so the canonical state is always authoritative and a
|
|
14
14
|
* drift is always a repair target. User_Input reconciliation remains the
|
|
15
15
|
* responsibility of the candidate/conflict pipeline.
|
|
16
|
+
*
|
|
17
|
+
* This module owns the scan lifecycle and orchestration only. Drift detection
|
|
18
|
+
* lives in diff.ts, correction effect generation in repair.ts, and the shared
|
|
19
|
+
* contracts/SQL helpers in shared.ts.
|
|
16
20
|
*/
|
|
17
21
|
import { randomUUID } from "node:crypto";
|
|
18
|
-
import {
|
|
19
|
-
import { APPLICABILITY_KINDS, PRESENCE_KINDS, } from "../../../../shared/state/index.js";
|
|
20
|
-
import { NORMALIZED_CELL_KINDS } from "../../../../shared/encoding/constants.js";
|
|
21
|
-
import { isNormalizedCell } from "../../../../shared/encoding/normalizedCell.js";
|
|
22
|
-
import { isRecord } from "../../../../shared/encoding/typeGuards.js";
|
|
22
|
+
import { POSITIVE_SAFE_INTEGER_MINIMUM } from "../../../../domain/index.js";
|
|
23
23
|
import { appendPendingEffectsWithAdapter, claimWriterLeaseWithAdapter, requireRegisteredSyncSheetWithAdapter, WRITER_LEASE_CLAIM_RESULT_KINDS, } from "../../../../infrastructure/storage/index.js";
|
|
24
24
|
import { STORAGE_ERROR_CODES, StorageError } from "../../../../infrastructure/storage/errors.js";
|
|
25
|
-
import {
|
|
26
|
-
import { SYNC_PROJECTIONS, SYNC_SNAPSHOT_READ_MODES, } from "../../
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const DEFAULT_SYSTEM_TOMBSTONE_FIELD = "_deleted";
|
|
31
|
-
const READ_DESIRED_SYSTEM_STATE_SQL = `
|
|
32
|
-
SELECT
|
|
33
|
-
entity.entity_id AS entity_id,
|
|
34
|
-
binding.row_binding_id AS row_binding_id,
|
|
35
|
-
binding.anchor_reference AS anchor_reference,
|
|
36
|
-
entity.entity_revision AS entity_revision,
|
|
37
|
-
field.field_name AS field_name,
|
|
38
|
-
field.normalized_value AS normalized_value,
|
|
39
|
-
field.ownership AS ownership
|
|
40
|
-
FROM entity_state AS entity
|
|
41
|
-
JOIN row_binding AS binding
|
|
42
|
-
ON binding.entity_id = entity.entity_id
|
|
43
|
-
AND binding.logical_sheet_id = ?
|
|
44
|
-
AND binding.state = 'active'
|
|
45
|
-
JOIN entity_field_state AS field
|
|
46
|
-
ON field.entity_id = entity.entity_id
|
|
47
|
-
WHERE entity.status = 'active'
|
|
48
|
-
ORDER BY entity.entity_id, field.field_name
|
|
49
|
-
`;
|
|
50
|
-
const READ_LATEST_VISIBLE_STATE_SQL = `
|
|
51
|
-
SELECT confirmed_visible_revision, confirmed_snapshot_hash
|
|
52
|
-
FROM sheet_visible_state
|
|
53
|
-
WHERE physical_sheet_id = ? AND projection = 'system_state' AND row_binding_id = ?
|
|
54
|
-
`;
|
|
55
|
-
const READ_LATEST_EFFECT_SQL = `
|
|
56
|
-
SELECT stream_sequence, expected_visible_revision, expected_visible_hash, status, payload_json
|
|
57
|
-
FROM sheet_effect_outbox
|
|
58
|
-
WHERE logical_sheet_id = ? AND target_kind = 'entity' AND target_id = ?
|
|
59
|
-
ORDER BY stream_sequence DESC
|
|
60
|
-
LIMIT 1
|
|
61
|
-
`;
|
|
25
|
+
import { observeSyncSnapshot, } from "../../sheetsContract/syncSheets.js";
|
|
26
|
+
import { SYNC_PROJECTIONS, SYNC_SNAPSHOT_READ_MODES, } from "../../sheetsContract/constants.js";
|
|
27
|
+
import { DEFAULT_RECONCILIATION_LEASE_MS, DEFAULT_RECONCILIATION_ROLE, DEFAULT_SYSTEM_TOMBSTONE_FIELD, readDesiredSystemState, } from "./shared.js";
|
|
28
|
+
import { computeDrifts, countExtraRows, countMatchedRows, } from "./diff.js";
|
|
29
|
+
import { buildCorrectionEffects } from "./repair.js";
|
|
62
30
|
/**
|
|
63
31
|
* Runs one reconciliation scan and enqueues correction effects for drift.
|
|
64
32
|
*
|
|
@@ -110,7 +78,8 @@ async function scanAndEnqueue(context) {
|
|
|
110
78
|
readMode: SYNC_SNAPSHOT_READ_MODES.FULL,
|
|
111
79
|
};
|
|
112
80
|
// Fast append intentionally skips metadata. Reconciliation is the lazy
|
|
113
|
-
// repair point
|
|
81
|
+
// repair point; system_state rows are identity-located and never receive
|
|
82
|
+
// anchors (only user_input tabs carry the row-id system column).
|
|
114
83
|
const observed = await observeSyncSnapshot(context.provider, snapshotRequest);
|
|
115
84
|
const snapshot = observed.snapshot;
|
|
116
85
|
const desired = await readDesiredSystemState(context);
|
|
@@ -172,278 +141,6 @@ async function scanAndEnqueue(context) {
|
|
|
172
141
|
fenceClaimed: true,
|
|
173
142
|
});
|
|
174
143
|
}
|
|
175
|
-
function computeDrifts(args) {
|
|
176
|
-
const rowsByAnchor = new Map();
|
|
177
|
-
const ambiguousAnchors = new Set();
|
|
178
|
-
const rowsByIdentity = new Map();
|
|
179
|
-
const ambiguousIdentities = new Set();
|
|
180
|
-
for (const row of args.snapshot.rows) {
|
|
181
|
-
if (row.physicalAnchor.kind === PRESENCE_KINDS.PRESENT) {
|
|
182
|
-
// A duplicated physical anchor is an anomaly, never a row choice: drop
|
|
183
|
-
// the anchor index entry instead of letting the last row win silently.
|
|
184
|
-
if (ambiguousAnchors.has(row.physicalAnchor.value))
|
|
185
|
-
continue;
|
|
186
|
-
if (rowsByAnchor.has(row.physicalAnchor.value)) {
|
|
187
|
-
rowsByAnchor.delete(row.physicalAnchor.value);
|
|
188
|
-
ambiguousAnchors.add(row.physicalAnchor.value);
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
rowsByAnchor.set(row.physicalAnchor.value, row);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const identity = snapshotIdentity(row, args.sheet.businessKeyField);
|
|
195
|
-
if (identity === undefined || ambiguousIdentities.has(identity))
|
|
196
|
-
continue;
|
|
197
|
-
if (rowsByIdentity.has(identity)) {
|
|
198
|
-
rowsByIdentity.delete(identity);
|
|
199
|
-
ambiguousIdentities.add(identity);
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
rowsByIdentity.set(identity, row);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
const drifts = [];
|
|
206
|
-
for (const desiredRow of args.desired) {
|
|
207
|
-
const identity = desiredRowIdentity(desiredRow, args.sheet.businessKeyField);
|
|
208
|
-
// The primary locator's ambiguity is fatal: when the desired anchor is
|
|
209
|
-
// duplicated, identity fallback would silently pick one of the rows that
|
|
210
|
-
// the corrupted anchor cannot distinguish, so the binding is unmatched.
|
|
211
|
-
// The same quarantine applies to a desired identity that appears in the
|
|
212
|
-
// snapshot's duplicate set: the duplicated business key cannot prove that
|
|
213
|
-
// this binding owns even its unique anchor, so neither locator may match.
|
|
214
|
-
const identityAmbiguous = identity !== undefined && ambiguousIdentities.has(identity);
|
|
215
|
-
const observed = ambiguousAnchors.has(desiredRow.anchorReference) || identityAmbiguous
|
|
216
|
-
? undefined
|
|
217
|
-
: rowsByAnchor.get(desiredRow.anchorReference) ??
|
|
218
|
-
(identity === undefined ? undefined : rowsByIdentity.get(identity));
|
|
219
|
-
if (observed === undefined) {
|
|
220
|
-
drifts.push({ kind: "missing", desired: desiredRow });
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
const observedHash = computeObservedHash(observed, args.systemFields);
|
|
224
|
-
const desiredHash = computeSyncVisibleHash(desiredRow.fields);
|
|
225
|
-
if (observedHash !== desiredHash) {
|
|
226
|
-
drifts.push({ kind: "drifted", desired: desiredRow });
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return drifts;
|
|
230
|
-
}
|
|
231
|
-
/** Reads a business-key value from a snapshot row for unanchored fast appends. */
|
|
232
|
-
function snapshotIdentity(row, identityField) {
|
|
233
|
-
return normalizedCellIdentity(row.cells[identityField]?.normalizedCell);
|
|
234
|
-
}
|
|
235
|
-
/** Reads the same visible business-key value from canonical desired state. */
|
|
236
|
-
function desiredRowIdentity(row, identityField) {
|
|
237
|
-
return normalizedCellIdentity(row.fields[identityField]) ?? row.entityId;
|
|
238
|
-
}
|
|
239
|
-
function normalizedCellIdentity(cell) {
|
|
240
|
-
if (cell === undefined || cell === null)
|
|
241
|
-
return undefined;
|
|
242
|
-
switch (cell.kind) {
|
|
243
|
-
case NORMALIZED_CELL_KINDS.STRING:
|
|
244
|
-
return cell.value.length === EMPTY_STRING_LENGTH_ZERO ? undefined : cell.value;
|
|
245
|
-
case NORMALIZED_CELL_KINDS.NUMBER:
|
|
246
|
-
return Number.isFinite(cell.value) ? String(cell.value) : undefined;
|
|
247
|
-
case NORMALIZED_CELL_KINDS.BOOLEAN:
|
|
248
|
-
return String(cell.value);
|
|
249
|
-
case NORMALIZED_CELL_KINDS.DATE:
|
|
250
|
-
return cell.value;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
function computeObservedHash(row, systemFields) {
|
|
254
|
-
const values = {};
|
|
255
|
-
for (const fieldName of systemFields) {
|
|
256
|
-
const cell = row.cells[fieldName];
|
|
257
|
-
values[fieldName] = cell === undefined ? null : cell.normalizedCell;
|
|
258
|
-
}
|
|
259
|
-
return computeSyncVisibleHash(values);
|
|
260
|
-
}
|
|
261
|
-
async function readDesiredSystemState(context) {
|
|
262
|
-
return context.storage.read(({ sql }) => readDesiredSystemStateWithSql(sql, context));
|
|
263
|
-
}
|
|
264
|
-
async function readDesiredSystemStateWithSql(sql, context) {
|
|
265
|
-
const rows = await sql.all(READ_DESIRED_SYSTEM_STATE_SQL, [
|
|
266
|
-
context.logicalSheetId,
|
|
267
|
-
]);
|
|
268
|
-
const byEntity = new Map();
|
|
269
|
-
for (const row of rows) {
|
|
270
|
-
const existing = byEntity.get(row.entity_id);
|
|
271
|
-
const cell = decodeNormalizedCell(row.normalized_value);
|
|
272
|
-
if (existing === undefined) {
|
|
273
|
-
const fields = {};
|
|
274
|
-
fields[row.field_name] = cell;
|
|
275
|
-
byEntity.set(row.entity_id, {
|
|
276
|
-
entityId: row.entity_id,
|
|
277
|
-
rowBindingId: row.row_binding_id,
|
|
278
|
-
anchorReference: row.anchor_reference,
|
|
279
|
-
entityRevision: row.entity_revision,
|
|
280
|
-
fields,
|
|
281
|
-
fieldRevisionHash: "",
|
|
282
|
-
});
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
existing.fields[row.field_name] = cell;
|
|
286
|
-
}
|
|
287
|
-
const desired = [];
|
|
288
|
-
for (const row of byEntity.values()) {
|
|
289
|
-
ensureTombstoneField(row, context.tombstoneField);
|
|
290
|
-
const hash = computeFieldRevisionHash(row.fields);
|
|
291
|
-
desired.push({ ...row, fieldRevisionHash: hash });
|
|
292
|
-
}
|
|
293
|
-
return desired;
|
|
294
|
-
}
|
|
295
|
-
function ensureTombstoneField(row, tombstoneField) {
|
|
296
|
-
if (tombstoneField === undefined)
|
|
297
|
-
return;
|
|
298
|
-
const fields = row.fields;
|
|
299
|
-
if (fields[tombstoneField] === undefined) {
|
|
300
|
-
fields[tombstoneField] = { kind: NORMALIZED_CELL_KINDS.BOOLEAN, value: false };
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
function computeFieldRevisionHash(fields) {
|
|
304
|
-
const entries = Object.entries(fields)
|
|
305
|
-
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
306
|
-
.map(([fieldName, value]) => ({ fieldName, value }));
|
|
307
|
-
return stableHash({ fields: entries });
|
|
308
|
-
}
|
|
309
|
-
function decodeNormalizedCell(value) {
|
|
310
|
-
try {
|
|
311
|
-
const parsed = JSON.parse(value);
|
|
312
|
-
if (!isNormalizedCell(parsed)) {
|
|
313
|
-
throw new StorageError(STORAGE_ERROR_CODES.OBSERVATION_STORAGE_INCONSISTENT, "entity_field_state.normalized_value is not a normalized cell");
|
|
314
|
-
}
|
|
315
|
-
return parsed;
|
|
316
|
-
}
|
|
317
|
-
catch (error) {
|
|
318
|
-
if (error instanceof StorageError)
|
|
319
|
-
throw error;
|
|
320
|
-
throw new StorageError(STORAGE_ERROR_CODES.OBSERVATION_STORAGE_INCONSISTENT, "entity_field_state.normalized_value is not valid JSON");
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
async function buildCorrectionEffects(context, sheet, drifts) {
|
|
324
|
-
const effects = [];
|
|
325
|
-
const commitId = "reconciliation:" + context.createId();
|
|
326
|
-
for (const drift of drifts) {
|
|
327
|
-
const baseline = await resolveCorrectionBaseline(context, drift.desired);
|
|
328
|
-
if (baseline.skip)
|
|
329
|
-
continue;
|
|
330
|
-
const effect = createSystemProjectionEffect({
|
|
331
|
-
effectId: "effect:" + context.createId(),
|
|
332
|
-
commitId,
|
|
333
|
-
logicalSheetId: context.logicalSheetId,
|
|
334
|
-
physicalSheetId: context.physicalSheetId,
|
|
335
|
-
sheetName: sheet.tabName,
|
|
336
|
-
registeredRange: sheet.registeredRange,
|
|
337
|
-
projection: SYNC_PROJECTIONS.SYSTEM_STATE,
|
|
338
|
-
schemaVersion: context.schemaVersion,
|
|
339
|
-
targetKind: "entity",
|
|
340
|
-
targetId: drift.desired.entityId,
|
|
341
|
-
rowBindingId: { kind: PRESENCE_KINDS.PRESENT, value: drift.desired.rowBindingId },
|
|
342
|
-
conflictId: { kind: PRESENCE_KINDS.ABSENT },
|
|
343
|
-
targetAnchor: drift.desired.anchorReference,
|
|
344
|
-
fields: drift.desired.fields,
|
|
345
|
-
createIfMissing: baseline.createIfMissing,
|
|
346
|
-
expectedVisibleRevision: baseline.expectedVisibleRevision,
|
|
347
|
-
expectedVisibleHash: baseline.expectedVisibleHash,
|
|
348
|
-
targetEntityRevision: {
|
|
349
|
-
kind: APPLICABILITY_KINDS.APPLICABLE,
|
|
350
|
-
value: drift.desired.entityRevision,
|
|
351
|
-
},
|
|
352
|
-
targetFieldRevisionHash: {
|
|
353
|
-
kind: APPLICABILITY_KINDS.APPLICABLE,
|
|
354
|
-
value: drift.desired.fieldRevisionHash,
|
|
355
|
-
},
|
|
356
|
-
targetCanonicalCommitId: { kind: APPLICABILITY_KINDS.APPLICABLE, value: commitId },
|
|
357
|
-
streamSequence: baseline.streamSequence,
|
|
358
|
-
});
|
|
359
|
-
effects.push(effect);
|
|
360
|
-
}
|
|
361
|
-
return effects;
|
|
362
|
-
}
|
|
363
|
-
async function resolveCorrectionBaseline(context, desired) {
|
|
364
|
-
return context.storage.read(({ sql }) => resolveCorrectionBaselineWithSql(sql, context, desired));
|
|
365
|
-
}
|
|
366
|
-
async function resolveCorrectionBaselineWithSql(sql, context, desired) {
|
|
367
|
-
const latestEffect = await sql.get(READ_LATEST_EFFECT_SQL, [
|
|
368
|
-
context.logicalSheetId,
|
|
369
|
-
desired.entityId,
|
|
370
|
-
]);
|
|
371
|
-
if (latestEffect !== undefined && latestEffect.stream_sequence !== null) {
|
|
372
|
-
const streamSequence = latestEffect.stream_sequence + 1;
|
|
373
|
-
// delivery_uncertain counts as in-flight: the predecessor may still commit
|
|
374
|
-
// remotely after a lost response, and the outbox claim ordering keeps any
|
|
375
|
-
// successor pending until that effect is probe-settled. Planning a
|
|
376
|
-
// correction against the uncertain target (rather than stale visible
|
|
377
|
-
// state) is what makes the eventual guard match the committed write.
|
|
378
|
-
if (latestEffect.status === "pending" ||
|
|
379
|
-
latestEffect.status === "processing" ||
|
|
380
|
-
latestEffect.status === "delivery_uncertain") {
|
|
381
|
-
const payload = latestEffect.payload_json;
|
|
382
|
-
const expectedHash = payload === null ? "" : extractTargetVisibleHash(payload);
|
|
383
|
-
if (expectedHash === computeSyncVisibleHash(desired.fields)) {
|
|
384
|
-
// A canonical write already has an equivalent correction in flight.
|
|
385
|
-
// Do not append another stream item on every periodic scan while the
|
|
386
|
-
// first item is waiting for the provider or its recovery read-back.
|
|
387
|
-
return {
|
|
388
|
-
skip: true,
|
|
389
|
-
expectedVisibleRevision: (latestEffect.expected_visible_revision ?? 0) + 1,
|
|
390
|
-
expectedVisibleHash: expectedHash,
|
|
391
|
-
createIfMissing: false,
|
|
392
|
-
streamSequence,
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
return {
|
|
396
|
-
skip: false,
|
|
397
|
-
expectedVisibleRevision: (latestEffect.expected_visible_revision ?? 0) + 1,
|
|
398
|
-
expectedVisibleHash: expectedHash,
|
|
399
|
-
createIfMissing: false,
|
|
400
|
-
streamSequence,
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
const visible = await sql.get(READ_LATEST_VISIBLE_STATE_SQL, [
|
|
404
|
-
context.physicalSheetId,
|
|
405
|
-
desired.rowBindingId,
|
|
406
|
-
]);
|
|
407
|
-
return baselineFromVisible(visible, streamSequence);
|
|
408
|
-
}
|
|
409
|
-
const visible = await sql.get(READ_LATEST_VISIBLE_STATE_SQL, [
|
|
410
|
-
context.physicalSheetId,
|
|
411
|
-
desired.rowBindingId,
|
|
412
|
-
]);
|
|
413
|
-
return baselineFromVisible(visible, POSITIVE_SAFE_INTEGER_MINIMUM);
|
|
414
|
-
}
|
|
415
|
-
function baselineFromVisible(visible, streamSequence) {
|
|
416
|
-
if (visible === undefined ||
|
|
417
|
-
visible.confirmed_visible_revision === null ||
|
|
418
|
-
visible.confirmed_snapshot_hash === null ||
|
|
419
|
-
visible.confirmed_snapshot_hash.length === 0) {
|
|
420
|
-
return {
|
|
421
|
-
skip: false,
|
|
422
|
-
expectedVisibleRevision: 0,
|
|
423
|
-
expectedVisibleHash: "",
|
|
424
|
-
createIfMissing: true,
|
|
425
|
-
streamSequence,
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
return {
|
|
429
|
-
skip: false,
|
|
430
|
-
expectedVisibleRevision: visible.confirmed_visible_revision,
|
|
431
|
-
expectedVisibleHash: visible.confirmed_snapshot_hash,
|
|
432
|
-
createIfMissing: false,
|
|
433
|
-
streamSequence,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
function extractTargetVisibleHash(payloadJson) {
|
|
437
|
-
try {
|
|
438
|
-
const parsed = JSON.parse(payloadJson);
|
|
439
|
-
if (!isRecord(parsed))
|
|
440
|
-
return "";
|
|
441
|
-
return typeof parsed.targetVisibleHash === "string" ? parsed.targetVisibleHash : "";
|
|
442
|
-
}
|
|
443
|
-
catch {
|
|
444
|
-
return "";
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
144
|
async function claimReconcilerFence(context) {
|
|
448
145
|
const claim = await claimWriterLeaseWithAdapter(context.storage, {
|
|
449
146
|
role: context.role,
|
|
@@ -461,105 +158,6 @@ async function claimReconcilerFence(context) {
|
|
|
461
158
|
now: context.now(),
|
|
462
159
|
};
|
|
463
160
|
}
|
|
464
|
-
function countMatchedRows(snapshot, desired, identityField) {
|
|
465
|
-
const anchors = new Set();
|
|
466
|
-
const ambiguousAnchors = new Set();
|
|
467
|
-
const identities = new Set();
|
|
468
|
-
const duplicateIdentities = new Set();
|
|
469
|
-
for (const row of snapshot.rows) {
|
|
470
|
-
if (row.physicalAnchor.kind === PRESENCE_KINDS.PRESENT) {
|
|
471
|
-
if (ambiguousAnchors.has(row.physicalAnchor.value))
|
|
472
|
-
continue;
|
|
473
|
-
if (anchors.has(row.physicalAnchor.value)) {
|
|
474
|
-
anchors.delete(row.physicalAnchor.value);
|
|
475
|
-
ambiguousAnchors.add(row.physicalAnchor.value);
|
|
476
|
-
}
|
|
477
|
-
else {
|
|
478
|
-
anchors.add(row.physicalAnchor.value);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
const identity = snapshotIdentity(row, identityField);
|
|
482
|
-
if (identity === undefined || duplicateIdentities.has(identity))
|
|
483
|
-
continue;
|
|
484
|
-
if (identities.has(identity)) {
|
|
485
|
-
identities.delete(identity);
|
|
486
|
-
duplicateIdentities.add(identity);
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
489
|
-
identities.add(identity);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
let matched = 0;
|
|
493
|
-
for (const row of desired) {
|
|
494
|
-
const identity = desiredRowIdentity(row, identityField);
|
|
495
|
-
const anchorAmbiguous = ambiguousAnchors.has(row.anchorReference);
|
|
496
|
-
// A desired identity duplicated in the sheet quarantines the binding:
|
|
497
|
-
// neither its unique anchor nor its identity may count as matched.
|
|
498
|
-
const identityAmbiguous = identity !== undefined && duplicateIdentities.has(identity);
|
|
499
|
-
if ((!anchorAmbiguous && !identityAmbiguous && anchors.has(row.anchorReference)) ||
|
|
500
|
-
(!anchorAmbiguous && !identityAmbiguous && identity !== undefined && identities.has(identity))) {
|
|
501
|
-
matched += 1;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
return matched;
|
|
505
|
-
}
|
|
506
|
-
function countExtraRows(snapshot, desired, identityField) {
|
|
507
|
-
// Identities that appear more than once in the snapshot cannot prove
|
|
508
|
-
// ownership. A desired row carrying one of these identities is quarantined:
|
|
509
|
-
// its anchor never suppresses the extra count, and the duplicated identity
|
|
510
|
-
// itself never suppresses it either.
|
|
511
|
-
const duplicateIdentities = new Set();
|
|
512
|
-
{
|
|
513
|
-
const seen = new Set();
|
|
514
|
-
for (const row of snapshot.rows) {
|
|
515
|
-
const identity = snapshotIdentity(row, identityField);
|
|
516
|
-
if (identity === undefined)
|
|
517
|
-
continue;
|
|
518
|
-
if (seen.has(identity))
|
|
519
|
-
duplicateIdentities.add(identity);
|
|
520
|
-
seen.add(identity);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
const desiredByAnchor = new Map();
|
|
524
|
-
const desiredIdentities = new Set();
|
|
525
|
-
for (const row of desired) {
|
|
526
|
-
if (!desiredByAnchor.has(row.anchorReference))
|
|
527
|
-
desiredByAnchor.set(row.anchorReference, row);
|
|
528
|
-
const identity = desiredRowIdentity(row, identityField);
|
|
529
|
-
if (identity !== undefined)
|
|
530
|
-
desiredIdentities.add(identity);
|
|
531
|
-
}
|
|
532
|
-
const anchorCounts = new Map();
|
|
533
|
-
for (const row of snapshot.rows) {
|
|
534
|
-
if (row.physicalAnchor.kind !== PRESENCE_KINDS.PRESENT)
|
|
535
|
-
continue;
|
|
536
|
-
anchorCounts.set(row.physicalAnchor.value, (anchorCounts.get(row.physicalAnchor.value) ?? 0) + 1);
|
|
537
|
-
}
|
|
538
|
-
let extra = 0;
|
|
539
|
-
for (const row of snapshot.rows) {
|
|
540
|
-
// A duplicated anchor cannot prove which row the desired binding owns, so
|
|
541
|
-
// it never suppresses the extra count; the business key decides instead.
|
|
542
|
-
// A quarantined desired identity (duplicated in the sheet) blocks the
|
|
543
|
-
// anchor suppression too, because the anchor cannot prove ownership of a
|
|
544
|
-
// business key that appears elsewhere.
|
|
545
|
-
if (row.physicalAnchor.kind === PRESENCE_KINDS.PRESENT &&
|
|
546
|
-
(anchorCounts.get(row.physicalAnchor.value) ?? 0) === 1) {
|
|
547
|
-
const desiredRow = desiredByAnchor.get(row.physicalAnchor.value);
|
|
548
|
-
const desiredIdentity = desiredRow === undefined
|
|
549
|
-
? undefined
|
|
550
|
-
: desiredRowIdentity(desiredRow, identityField);
|
|
551
|
-
if (desiredRow !== undefined &&
|
|
552
|
-
(desiredIdentity === undefined || !duplicateIdentities.has(desiredIdentity))) {
|
|
553
|
-
continue;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
const identity = snapshotIdentity(row, identityField);
|
|
557
|
-
if (identity !== undefined && !duplicateIdentities.has(identity) && desiredIdentities.has(identity))
|
|
558
|
-
continue;
|
|
559
|
-
extra += 1;
|
|
560
|
-
}
|
|
561
|
-
return extra;
|
|
562
|
-
}
|
|
563
161
|
function freezeReport(physicalSheetId, snapshot, desired, delta) {
|
|
564
162
|
return {
|
|
565
163
|
physicalSheetId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReconciliationScanner.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/reconciliation/ReconciliationScanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReconciliationScanner.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/reconciliation/ReconciliationScanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drift detection for the System_State reconciliation scan.
|
|
3
|
+
*
|
|
4
|
+
* Compares one provider snapshot against the durable desired state and
|
|
5
|
+
* classifies every desired row as matched, drifted, or missing. Anchor and
|
|
6
|
+
* identity duplicates quarantine the affected locators instead of letting the
|
|
7
|
+
* last row win silently, so a corrupted anchor or duplicated business key can
|
|
8
|
+
* never prove ownership of a row.
|
|
9
|
+
*/
|
|
10
|
+
import { type NormalizedCell } from "../../../../domain/index.js";
|
|
11
|
+
import { type SyncSheetsSnapshot } from "../../sheetsContract/syncSheets.js";
|
|
12
|
+
import type { DesiredRow } from "./shared.js";
|
|
13
|
+
export type DriftKind = "drifted" | "missing";
|
|
14
|
+
export interface DriftTarget {
|
|
15
|
+
readonly kind: DriftKind;
|
|
16
|
+
readonly desired: DesiredRow;
|
|
17
|
+
}
|
|
18
|
+
export declare function computeDrifts(args: {
|
|
19
|
+
readonly snapshot: SyncSheetsSnapshot;
|
|
20
|
+
readonly desired: readonly DesiredRow[];
|
|
21
|
+
readonly systemFields: readonly string[];
|
|
22
|
+
readonly sheet: {
|
|
23
|
+
readonly registeredRange: string;
|
|
24
|
+
readonly businessKeyField: string;
|
|
25
|
+
};
|
|
26
|
+
}): readonly DriftTarget[];
|
|
27
|
+
/** Reads a business-key value from a snapshot row for unanchored fast appends. */
|
|
28
|
+
export declare function snapshotIdentity(row: SyncSheetsSnapshot["rows"][number], identityField: string): string | undefined;
|
|
29
|
+
/** Reads the same visible business-key value from canonical desired state. */
|
|
30
|
+
export declare function desiredRowIdentity(row: DesiredRow, identityField: string): string | undefined;
|
|
31
|
+
export declare function normalizedCellIdentity(cell: NormalizedCell | undefined): string | undefined;
|
|
32
|
+
export declare function computeObservedHash(row: SyncSheetsSnapshot["rows"][number], systemFields: readonly string[]): string;
|
|
33
|
+
export declare function countMatchedRows(snapshot: SyncSheetsSnapshot, desired: readonly DesiredRow[], identityField: string): number;
|
|
34
|
+
export declare function countExtraRows(snapshot: SyncSheetsSnapshot, desired: readonly DesiredRow[], identityField: string): number;
|
|
35
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/reconciliation/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF,GAAG,SAAS,WAAW,EAAE,CAoDzB;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACvC,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS,CAEpB;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7F;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY3F;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,CAOR;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,aAAa,EAAE,MAAM,GACpB,MAAM,CAqCR;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,aAAa,EAAE,MAAM,GACpB,MAAM,CAkDR"}
|