hikoutei 0.3.2 → 0.3.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.
Files changed (212) hide show
  1. package/README.md +12 -2
  2. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +2 -0
  3. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
  4. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +5 -0
  5. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
  6. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +52 -0
  7. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
  8. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +195 -13
  9. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
  10. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +24 -0
  11. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -0
  12. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +124 -0
  13. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -0
  14. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +1 -1
  15. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
  16. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +15 -2
  17. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -1
  18. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +27 -3
  19. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
  20. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +1 -0
  21. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -1
  22. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +1 -0
  23. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -1
  24. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +2 -0
  25. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -1
  26. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +1 -0
  27. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -1
  28. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +3 -1
  29. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
  30. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +9 -0
  31. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
  32. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
  33. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +137 -20
  34. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
  35. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +82 -34
  36. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
  37. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +31 -0
  38. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +1 -0
  39. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +567 -0
  40. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +1 -0
  41. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +12 -17
  42. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
  43. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +27 -213
  44. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
  45. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
  46. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +81 -8
  47. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
  48. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +1 -6
  49. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
  50. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +15 -9
  51. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
  52. package/dist/application/orm/mapping/projection.js +1 -1
  53. package/dist/application/orm/mapping/projection.js.map +1 -1
  54. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
  55. package/dist/application/orm/persistence/flush/flushCoordinator.js +1 -0
  56. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
  57. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +1 -1
  58. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
  59. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +3 -1
  60. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -1
  61. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +3 -1
  62. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -1
  63. package/dist/application/sync/gateway/conflictProjection.d.ts +13 -0
  64. package/dist/application/sync/gateway/conflictProjection.d.ts.map +1 -0
  65. package/dist/application/sync/gateway/conflictProjection.js +58 -0
  66. package/dist/application/sync/gateway/conflictProjection.js.map +1 -0
  67. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts +11 -0
  68. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +1 -0
  69. package/dist/application/sync/gateway/conflictProjectionRegistration.js +70 -0
  70. package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +1 -0
  71. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts +102 -0
  72. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +1 -0
  73. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js +221 -0
  74. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +1 -0
  75. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts +51 -0
  76. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +1 -0
  77. package/dist/application/sync/gateway/coordinator/asyncMutex.js +65 -0
  78. package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +1 -0
  79. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts +31 -0
  80. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +1 -0
  81. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js +13 -0
  82. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +1 -0
  83. package/dist/application/sync/gateway/syncGateway.d.ts +26 -6
  84. package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
  85. package/dist/application/sync/gateway/syncGateway.js +10 -2
  86. package/dist/application/sync/gateway/syncGateway.js.map +1 -1
  87. package/dist/application/sync/gateway/transportClassification.d.ts +62 -0
  88. package/dist/application/sync/gateway/transportClassification.d.ts.map +1 -0
  89. package/dist/application/sync/gateway/transportClassification.js +133 -0
  90. package/dist/application/sync/gateway/transportClassification.js.map +1 -0
  91. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts +26 -0
  92. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts.map +1 -0
  93. package/dist/application/sync/inbound/autoSystemConflictResolution.js +335 -0
  94. package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -0
  95. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +50 -0
  96. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -0
  97. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +97 -0
  98. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -0
  99. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +4 -1
  100. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
  101. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +35 -1
  102. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
  103. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +14 -2
  104. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
  105. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +190 -31
  106. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
  107. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +25 -2
  108. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
  109. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +25 -2
  110. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
  111. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +14 -7
  112. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
  113. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +118 -14
  114. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
  115. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -9
  116. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
  117. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +102 -18
  118. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
  119. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
  120. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +49 -14
  121. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
  122. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  123. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +97 -17
  124. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  125. package/dist/application/sync/service/SyncServiceBootstrap.d.ts +17 -0
  126. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  127. package/dist/application/sync/service/SyncServiceBootstrap.js +125 -10
  128. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  129. package/dist/application/sync/service/contracts.d.ts +2 -0
  130. package/dist/application/sync/service/contracts.d.ts.map +1 -1
  131. package/dist/application/sync/telemetry/syncTiming.d.ts +6 -0
  132. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
  133. package/dist/application/sync/telemetry/syncTiming.js +2 -0
  134. package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
  135. package/dist/domain/conflict/index.d.ts +1 -1
  136. package/dist/domain/conflict/index.d.ts.map +1 -1
  137. package/dist/domain/conflict/index.js +1 -1
  138. package/dist/domain/conflict/index.js.map +1 -1
  139. package/dist/domain/conflict/transitions.d.ts +3 -0
  140. package/dist/domain/conflict/transitions.d.ts.map +1 -1
  141. package/dist/domain/conflict/transitions.js +3 -2
  142. package/dist/domain/conflict/transitions.js.map +1 -1
  143. package/dist/domain/model/constants.d.ts +1 -0
  144. package/dist/domain/model/constants.d.ts.map +1 -1
  145. package/dist/domain/model/constants.js +1 -0
  146. package/dist/domain/model/constants.js.map +1 -1
  147. package/dist/infrastructure/storage/index.d.ts +4 -2
  148. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  149. package/dist/infrastructure/storage/index.js +2 -1
  150. package/dist/infrastructure/storage/index.js.map +1 -1
  151. package/dist/infrastructure/storage/sqlite/migrateSchema.d.ts.map +1 -1
  152. package/dist/infrastructure/storage/sqlite/migrateSchema.js +59 -1
  153. package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
  154. package/dist/infrastructure/storage/sqlite/schema.d.ts +12 -1
  155. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
  156. package/dist/infrastructure/storage/sqlite/schema.js +47 -3
  157. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
  158. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +2 -2
  159. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -1
  160. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +1 -1
  161. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
  162. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +1 -0
  163. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
  164. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +1 -1
  165. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
  166. package/dist/infrastructure/storage/state/observation/observationAudit.js +5 -1
  167. package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
  168. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +10 -0
  169. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
  170. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +106 -20
  171. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
  172. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +9 -1
  173. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -1
  174. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +3 -0
  175. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -1
  176. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +11 -0
  177. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
  178. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +35 -0
  179. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
  180. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +12 -4
  181. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
  182. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +46 -15
  183. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
  184. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +24 -0
  185. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
  186. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +1 -0
  187. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
  188. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +9 -7
  189. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
  190. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -8
  191. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
  192. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +3 -1
  193. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
  194. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +35 -2
  195. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
  196. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +1 -0
  197. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
  198. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts +31 -0
  199. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts.map +1 -0
  200. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js +92 -0
  201. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js.map +1 -0
  202. package/dist/infrastructure/storage/sync/shared/writerLease.js +3 -1
  203. package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
  204. package/docs/advanced-sheets-gateway-concurrency-problem.md +434 -0
  205. package/docs/architecture.md +53 -11
  206. package/docs/ci.md +31 -14
  207. package/docs/google-sheets-sync-scaling-strategy.md +459 -0
  208. package/docs/quick-start.md +15 -1
  209. package/docs/sync-bulk-write-benchmark.md +520 -0
  210. package/docs/sync-observability.md +39 -3
  211. package/docs/write-and-synchronization-flow.md +76 -17
  212. package/package.json +1 -1
@@ -10,12 +10,13 @@ import { applyResolution } from "../../../../domain/index.js";
10
10
  import { CONFLICT_TRANSITION_KINDS } from "../../../../domain/conflict/transitions.js";
11
11
  import { LOOKUP_RESULT_KINDS, PRESENCE_KINDS, } from "../../../../shared/state/constants.js";
12
12
  import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
13
- import { appendPendingEffectsWithSql, } from "../../sync/outbound/effectOutbox.js";
13
+ import { appendPendingEffectsWithSql, supersedeAndReplanWithSql, } from "../../sync/outbound/effectOutbox.js";
14
+ import { readMappedLatestProjectionEffectWithSql } from "../mapped/mappedPersistenceSql.js";
14
15
  import { fromSqlNullable } from "../../sqlite/sqlState.js";
15
16
  import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
16
17
  import { fenceParameters, isFencingValidWithSql, } from "../../sync/shared/writerLease.js";
17
18
  import { PERSIST_RESOLUTION_RESULT_KINDS, RESOLUTION_COMMAND_STATUSES, } from "./resolutionWriterContracts.js";
18
- import { ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL, CLEAR_ACTIVE_CANDIDATE_POINTER_SQL, FIND_EXISTING_COMMAND_SQL, INSERT_PROCESSING_COMMAND_SQL, MARK_COMMAND_APPLIED_SQL, MARK_COMMAND_REJECTED_SQL, MARK_COMMAND_STALE_SQL, MARK_CONFLICT_RESOLVED_SQL, MARK_CONFLICT_STALE_SQL, READ_ACTIVE_CANDIDATE_POINTER_SQL, READ_CONFLICT_SQL, READ_EFFECT_DEDUPE_SQL, READ_REGISTERED_PROJECTION_SQL, } from "./resolutionWriterSql.js";
19
+ import { ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL, CLEAR_ACTIVE_CANDIDATE_POINTER_SQL, FIND_EXISTING_COMMAND_SQL, INSERT_PROCESSING_COMMAND_SQL, INSERT_PENDING_COMMAND_SQL, MARK_PENDING_COMMAND_PROCESSING_SQL, MARK_COMMAND_APPLIED_SQL, MARK_COMMAND_REJECTED_SQL, MARK_COMMAND_STALE_SQL, MARK_CONFLICT_RESOLVED_SQL, MARK_CONFLICT_STALE_SQL, READ_ACTIVE_CANDIDATE_POINTER_SQL, READ_CONFLICT_SQL, READ_EFFECT_DEDUPE_SQL, READ_REGISTERED_PROJECTION_SQL, READ_PROCESSING_PREDECESSOR_SQL, } from "./resolutionWriterSql.js";
19
20
  import { assertCurrentFenceWithSql, FenceLostError, parseNormalizedCell, requireConflictStatus, } from "./resolutionWriterHelpers.js";
20
21
  export { PERSIST_RESOLUTION_RESULT_KINDS, RESOLUTION_COMMAND_STATUSES, } from "./resolutionWriterContracts.js";
21
22
  /**
@@ -32,7 +33,9 @@ export async function persistResolutionCommandWithSql(sql, fence, input) {
32
33
  return await withSqlSavepoint(sql, "persist_resolution_command", async () => {
33
34
  await assertCurrentFenceWithSql(sql, fence);
34
35
  const duplicate = await findExistingCommandWithSql(sql, input.command);
35
- if (duplicate.kind === LOOKUP_RESULT_KINDS.FOUND) {
36
+ const pendingCommand = duplicate.kind === LOOKUP_RESULT_KINDS.FOUND &&
37
+ duplicate.value.status === RESOLUTION_COMMAND_STATUSES.PENDING;
38
+ if (duplicate.kind === LOOKUP_RESULT_KINDS.FOUND && !pendingCommand) {
36
39
  const duplicateResult = duplicate.value;
37
40
  // A durable processing receipt already owns the request. Only a terminal
38
41
  // replay may consume a still-checked control with a reset projection.
@@ -50,7 +53,27 @@ export async function persistResolutionCommandWithSql(sql, fence, input) {
50
53
  };
51
54
  }
52
55
  const conflict = conflictResult.value;
53
- await insertProcessingCommandWithSql(sql, fence, input);
56
+ const processingPredecessor = await findProcessingPredecessorWithSql(sql, input.effects);
57
+ if (processingPredecessor !== undefined) {
58
+ // Do not resolve the conflict while an older remote write is still in
59
+ // flight. The late response could materialize after the system-wins
60
+ // effect and overwrite the value that the resolution just selected.
61
+ // Keep a pending command receipt so the next polling pass can retry the
62
+ // exact CAS request after the predecessor has settled.
63
+ await insertPendingCommandWithSql(sql, fence, input);
64
+ return {
65
+ kind: PERSIST_RESOLUTION_RESULT_KINDS.DEFERRED,
66
+ commandId: input.command.commandId,
67
+ conflictId: conflict.conflictId,
68
+ reason: "processing_predecessor",
69
+ };
70
+ }
71
+ if (pendingCommand) {
72
+ await markPendingCommandProcessingWithSql(sql, fence, input.command.commandId, input.command.requestKey);
73
+ }
74
+ else {
75
+ await insertProcessingCommandWithSql(sql, fence, input);
76
+ }
54
77
  const pointerResult = await readActiveCandidatePointerWithSql(sql, conflict);
55
78
  const transition = pointerResult.kind === LOOKUP_RESULT_KINDS.FOUND &&
56
79
  pointerResult.value.candidate_epoch === input.command.expectedCandidateEpoch &&
@@ -161,8 +184,16 @@ function sameCommandIdentity(existing, command) {
161
184
  existing.expected_candidate_epoch === command.expectedCandidateEpoch &&
162
185
  existing.payload_hash === command.payloadHash;
163
186
  }
187
+ /** Reads all conflict IDs for one logical entity sheet. */
188
+ export function readConflictIdsWithSql(sql, logicalSheetId) {
189
+ return sql.all("SELECT conflict_id FROM sync_conflict WHERE logical_sheet_id = ? ORDER BY created_at, conflict_id", [logicalSheetId]).then((rows) => rows.map((row) => row.conflict_id));
190
+ }
191
+ /** Reads unresolved conflict IDs for one logical entity sheet. */
192
+ export function readOpenConflictIdsWithSql(sql, logicalSheetId) {
193
+ return sql.all("SELECT conflict_id FROM sync_conflict WHERE logical_sheet_id = ? AND status IN ('OPEN', 'NEEDS_REBASE') ORDER BY created_at, conflict_id", [logicalSheetId]).then((rows) => rows.map((row) => row.conflict_id));
194
+ }
164
195
  /** Reads and validates one conflict record through the active async SQL transaction. */
165
- async function readConflictWithSql(sql, logicalSheetId, conflictId) {
196
+ export async function readConflictWithSql(sql, logicalSheetId, conflictId) {
166
197
  const row = await sql.get(READ_CONFLICT_SQL, [logicalSheetId, conflictId]);
167
198
  if (row === undefined)
168
199
  return { kind: LOOKUP_RESULT_KINDS.NOT_FOUND };
@@ -225,6 +256,41 @@ async function insertProcessingCommandWithSql(sql, fence, input) {
225
256
  if (result.changes !== 1)
226
257
  throw new FenceLostError();
227
258
  }
259
+ /** Stores a deferred command as durable pending work without changing conflict state. */
260
+ async function insertPendingCommandWithSql(sql, fence, input) {
261
+ const command = input.command;
262
+ const result = await sql.run(INSERT_PENDING_COMMAND_SQL, [
263
+ command.commandId,
264
+ command.requestKey,
265
+ command.action,
266
+ command.actorId,
267
+ command.role,
268
+ command.targetConflictId,
269
+ command.expectedRevision,
270
+ command.activeCandidateHash,
271
+ command.expectedCandidateEpoch,
272
+ command.payloadHash,
273
+ fence.now,
274
+ command.commandId,
275
+ command.requestKey,
276
+ ...fenceParameters(fence),
277
+ ]);
278
+ if (result.changes === 1)
279
+ return;
280
+ if (result.changes === 0 && await isFencingValidWithSql(sql, fence))
281
+ return;
282
+ throw new FenceLostError();
283
+ }
284
+ /** Claims a pending deferred command after its processing predecessor settles. */
285
+ async function markPendingCommandProcessingWithSql(sql, fence, commandId, requestKey) {
286
+ const result = await sql.run(MARK_PENDING_COMMAND_PROCESSING_SQL, [
287
+ commandId,
288
+ requestKey,
289
+ ...fenceParameters(fence),
290
+ ]);
291
+ if (result.changes !== 1)
292
+ throw new FenceLostError();
293
+ }
228
294
  /** Applies a resolved transition, pointer clear, effects, and receipt through active async SQL. */
229
295
  async function applyResolvedCommandWithSql(sql, fence, input, conflict, pointer) {
230
296
  const command = input.command;
@@ -294,33 +360,53 @@ async function markRejectedCommandWithSql(sql, fence, input) {
294
360
  await appendResolutionEffectsWithSql(sql, fence, input.rejectedEffects ?? []);
295
361
  }
296
362
  /** Registers unseen resolution effects through the active async SQL transaction. */
297
- async function appendResolutionEffectsWithSql(sql, fence, effects) {
363
+ export async function appendResolutionEffectsWithSql(sql, fence, effects) {
298
364
  if (effects.length === 0)
299
365
  return;
300
366
  await ensureResolutionEffectsRegisteredWithSql(sql, effects);
301
- const unseen = [];
302
367
  for (const effect of effects) {
303
368
  const existing = await sql.get(READ_EFFECT_DEDUPE_SQL, [
304
369
  effect.effectDedupeKey,
305
370
  ]);
306
- if (existing === undefined) {
307
- unseen.push(effect);
371
+ if (existing !== undefined) {
372
+ if (existing.effect_kind !== effect.effectKind ||
373
+ existing.commit_id !== effect.commitId ||
374
+ existing.logical_sheet_id !== effect.logicalSheetId ||
375
+ existing.physical_sheet_id !== effect.physicalSheetId ||
376
+ existing.projection !== effect.projection ||
377
+ existing.target_kind !== effect.targetKind ||
378
+ existing.target_id !== effect.targetId ||
379
+ existing.payload_hash !== effect.payloadHash) {
380
+ throw new StorageError(STORAGE_ERROR_CODES.RESOLUTION_EFFECT_CONFLICT, "resolution effect dedupe key was reused with a different payload");
381
+ }
382
+ continue;
383
+ }
384
+ const processingPredecessor = await findProcessingPredecessorWithSql(sql, [effect]);
385
+ if (processingPredecessor !== undefined) {
386
+ throw new StorageError(STORAGE_ERROR_CODES.EFFECT_REPLAN_CONFLICT, `effect ${effect.effectId} cannot replace processing predecessor ${processingPredecessor}`);
387
+ }
388
+ const predecessor = await readMappedLatestProjectionEffectWithSql(sql, effect.logicalSheetId, effect.targetKind, effect.targetId);
389
+ if (predecessor !== undefined &&
390
+ (predecessor.status === "pending" ||
391
+ predecessor.status === "blocked_candidate" ||
392
+ predecessor.status === "conflict" ||
393
+ predecessor.status === "failed")) {
394
+ await supersedeAndReplanWithSql(sql, fence, predecessor.effect_id, effect);
308
395
  continue;
309
396
  }
310
- if (existing.effect_kind !== effect.effectKind ||
311
- existing.commit_id !== effect.commitId ||
312
- existing.logical_sheet_id !== effect.logicalSheetId ||
313
- existing.physical_sheet_id !== effect.physicalSheetId ||
314
- existing.projection !== effect.projection ||
315
- existing.target_kind !== effect.targetKind ||
316
- existing.target_id !== effect.targetId ||
317
- existing.payload_hash !== effect.payloadHash) {
318
- throw new StorageError(STORAGE_ERROR_CODES.RESOLUTION_EFFECT_CONFLICT, "resolution effect dedupe key was reused with a different payload");
397
+ if (!(await appendPendingEffectsWithSql(sql, fence, [effect]))) {
398
+ throw new FenceLostError();
319
399
  }
320
400
  }
321
- if (unseen.length > 0 && !(await appendPendingEffectsWithSql(sql, fence, unseen))) {
322
- throw new FenceLostError();
401
+ }
402
+ /** Finds processing predecessors that must finish before a replacement is planned. */
403
+ async function findProcessingPredecessorWithSql(sql, effects) {
404
+ for (const effect of effects) {
405
+ const row = await sql.get(READ_PROCESSING_PREDECESSOR_SQL, [effect.logicalSheetId, effect.targetKind, effect.targetId, effect.streamSequence]);
406
+ if (row !== undefined)
407
+ return row.effect_id;
323
408
  }
409
+ return undefined;
324
410
  }
325
411
  /** Validates every resolution effect target through the active async SQL transaction. */
326
412
  async function ensureResolutionEffectsRegisteredWithSql(sql, effects) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolutionWriter.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolutionWriter.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriter.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import type { ResolutionCommand } from "../../../../domain/index.js";
3
3
  import type { NewEffect } from "../../sync/outbound/effectOutbox.js";
4
4
  /** Runtime values for the durable resolution-command lifecycle. */
5
5
  export declare const RESOLUTION_COMMAND_STATUSES: {
6
+ /** A durable command waiting for an in-flight predecessor to settle. */
7
+ readonly PENDING: "pending";
6
8
  readonly PROCESSING: "processing";
7
9
  readonly APPLIED: "applied";
8
10
  readonly STALE: "stale";
@@ -14,6 +16,7 @@ export type ResolutionCommandStatus = (typeof RESOLUTION_COMMAND_STATUSES)[keyof
14
16
  /** Runtime values for results returned by the resolution writer. */
15
17
  export declare const PERSIST_RESOLUTION_RESULT_KINDS: {
16
18
  readonly FENCED_OUT: "fenced_out";
19
+ readonly DEFERRED: "deferred";
17
20
  readonly APPLIED: "applied";
18
21
  readonly STALE: "stale";
19
22
  readonly REJECTED: "rejected";
@@ -42,9 +45,14 @@ export interface PersistResolutionCommandInput {
42
45
  */
43
46
  readonly duplicateEffects?: readonly NewEffect[];
44
47
  }
45
- /** Terminal or replay-visible result of a resolution command transaction. */
48
+ /** Result of a resolution command transaction, including safe in-flight deferral. */
46
49
  export type PersistResolutionCommandResult = {
47
50
  readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.FENCED_OUT;
51
+ } | {
52
+ readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.DEFERRED;
53
+ readonly commandId: string;
54
+ readonly conflictId: string;
55
+ readonly reason: "processing_predecessor";
48
56
  } | {
49
57
  readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.APPLIED;
50
58
  readonly commandId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resolutionWriterContracts.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolutionWriterContracts.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  /** Status, command, row, and SQL-result contracts for resolution persistence. */
2
2
  /** Runtime values for the durable resolution-command lifecycle. */
3
3
  export const RESOLUTION_COMMAND_STATUSES = {
4
+ /** A durable command waiting for an in-flight predecessor to settle. */
5
+ PENDING: "pending",
4
6
  PROCESSING: "processing",
5
7
  APPLIED: "applied",
6
8
  STALE: "stale",
@@ -10,6 +12,7 @@ export const RESOLUTION_COMMAND_STATUSES = {
10
12
  /** Runtime values for results returned by the resolution writer. */
11
13
  export const PERSIST_RESOLUTION_RESULT_KINDS = {
12
14
  FENCED_OUT: "fenced_out",
15
+ DEFERRED: "deferred",
13
16
  APPLIED: "applied",
14
17
  STALE: "stale",
15
18
  REJECTED: "rejected",
@@ -1 +1 @@
1
- {"version":3,"file":"resolutionWriterContracts.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAKjF,mEAAmE;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAMX,oEAAoE;AACpE,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAC"}
1
+ {"version":3,"file":"resolutionWriterContracts.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAKjF,mEAAmE;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,wEAAwE;IACxE,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAMX,oEAAoE;AACpE,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAC"}
@@ -4,6 +4,10 @@ export declare const FIND_EXISTING_COMMAND_SQL = "\n SELECT command_id, request
4
4
  export declare const READ_CONFLICT_SQL = "\n SELECT conflict_id, conflict_group_id, event_id, row_binding_id, entity_id, field_name,\n user_value, user_base_revision, canonical_value_at_detection,\n canonical_revision_at_detection, current_canonical_value,\n current_canonical_revision, candidate_epoch, status, resolution_command_id\n FROM sync_conflict\n WHERE logical_sheet_id = ? AND conflict_id = ?\n";
5
5
  export declare const READ_ACTIVE_CANDIDATE_POINTER_SQL = "\n SELECT physical_sheet_id, projection, candidate_epoch, active_candidate_hash\n FROM sheet_visible_field_state\n WHERE row_binding_id = ? AND field_name = ?\n AND active_candidate_conflict_id = ?\n AND active_candidate_hash IS NOT NULL\n";
6
6
  export declare const INSERT_PROCESSING_COMMAND_SQL = "\n INSERT INTO resolution_command (\n command_id, request_key, action, actor_id, role, target_conflict_id,\n expected_revision, active_candidate_hash, expected_candidate_epoch,\n payload_hash, status, issued_at\n )\n SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'processing', ?\n WHERE EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
7
+ /** Records a deferred automatic resolution without claiming it for execution. */
8
+ export declare const INSERT_PENDING_COMMAND_SQL = "\n INSERT INTO resolution_command (\n command_id, request_key, action, actor_id, role, target_conflict_id,\n expected_revision, active_candidate_hash, expected_candidate_epoch,\n payload_hash, status, issued_at\n )\n SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?\n WHERE NOT EXISTS (\n SELECT 1 FROM resolution_command\n WHERE command_id = ? OR request_key = ?\n )\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
9
+ /** Promotes a durable deferred command only after its predecessor is gone. */
10
+ export declare const MARK_PENDING_COMMAND_PROCESSING_SQL = "\n UPDATE resolution_command\n SET status = 'processing'\n WHERE command_id = ? AND request_key = ? AND status = 'pending'\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
7
11
  export declare const MARK_CONFLICT_RESOLVED_SQL = "\n UPDATE sync_conflict\n SET status = 'RESOLVED', resolution_command_id = ?, updated_at = ?\n WHERE conflict_id = ? AND status IN ('OPEN', 'NEEDS_REBASE')\n AND current_canonical_revision = ? AND candidate_epoch = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
8
12
  export declare const CLEAR_ACTIVE_CANDIDATE_POINTER_SQL = "\n UPDATE sheet_visible_field_state\n SET active_candidate_conflict_id = NULL, active_candidate_hash = NULL,\n candidate_epoch = candidate_epoch + 1\n WHERE physical_sheet_id = ? AND projection = ?\n AND row_binding_id = ? AND field_name = ?\n AND active_candidate_conflict_id = ? AND candidate_epoch = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
9
13
  export declare const ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL = "\n UPDATE row_binding\n SET candidate_epoch = CASE\n WHEN candidate_epoch <= ? THEN ?\n ELSE candidate_epoch\n END\n WHERE row_binding_id = ? AND logical_sheet_id = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
@@ -13,4 +17,11 @@ export declare const MARK_COMMAND_STALE_SQL = "\n UPDATE resolution_command\n
13
17
  export declare const MARK_COMMAND_REJECTED_SQL = "\n UPDATE resolution_command\n SET status = 'rejected'\n WHERE command_id = ? AND status = 'processing'\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
14
18
  export declare const READ_EFFECT_DEDUPE_SQL = "\n SELECT effect_kind, commit_id, logical_sheet_id, physical_sheet_id,\n projection, target_kind, target_id, payload_hash\n FROM sheet_effect_outbox\n WHERE effect_dedupe_key = ?\n";
15
19
  export declare const READ_REGISTERED_PROJECTION_SQL = "\n SELECT logical_sheet_id, projection, enabled\n FROM physical_sheet_registry\n WHERE physical_sheet_id = ?\n";
20
+ /**
21
+ * Finds an in-flight predecessor that could still materialize after a
22
+ * replacement. `delivery_uncertain` counts as in-flight because the remote
23
+ * write may still commit after a lost response; resolution successors must
24
+ * wait until that predecessor is probe-settled.
25
+ */
26
+ export declare const READ_PROCESSING_PREDECESSOR_SQL = "\n SELECT effect_id\n FROM sheet_effect_outbox\n WHERE logical_sheet_id = ? AND target_kind = ? AND target_id = ?\n AND stream_sequence < ? AND status IN ('processing', 'delivery_uncertain')\n ORDER BY stream_sequence\n LIMIT 1\n";
16
27
  //# sourceMappingURL=resolutionWriterSql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolutionWriterSql.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,yQAMrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,2YAO7B,CAAC;AAEF,eAAO,MAAM,iCAAiC,6PAM7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,oaAQzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,yWAMtC,CAAC;AAEF,eAAO,MAAM,kCAAkC,ycAQ9C,CAAC;AAEF,eAAO,MAAM,uCAAuC,2TAQnD,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAKpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,qQAKnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,kPAKlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qPAKrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,oMAKlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,sHAI1C,CAAC"}
1
+ {"version":3,"file":"resolutionWriterSql.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,yQAMrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,2YAO7B,CAAC;AAEF,eAAO,MAAM,iCAAiC,6PAM7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,oaAQzC,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,+gBAYtC,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,mCAAmC,wQAK/C,CAAC;AAEF,eAAO,MAAM,0BAA0B,yWAMtC,CAAC;AAEF,eAAO,MAAM,kCAAkC,ycAQ9C,CAAC;AAEF,eAAO,MAAM,uCAAuC,2TAQnD,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAKpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,qQAKnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,kPAKlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qPAKrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,oMAKlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,sHAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,kPAO3C,CAAC"}
@@ -32,6 +32,27 @@ export const INSERT_PROCESSING_COMMAND_SQL = `
32
32
  SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'processing', ?
33
33
  WHERE EXISTS (${FENCE_EXISTS_SQL})
34
34
  `;
35
+ /** Records a deferred automatic resolution without claiming it for execution. */
36
+ export const INSERT_PENDING_COMMAND_SQL = `
37
+ INSERT INTO resolution_command (
38
+ command_id, request_key, action, actor_id, role, target_conflict_id,
39
+ expected_revision, active_candidate_hash, expected_candidate_epoch,
40
+ payload_hash, status, issued_at
41
+ )
42
+ SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?
43
+ WHERE NOT EXISTS (
44
+ SELECT 1 FROM resolution_command
45
+ WHERE command_id = ? OR request_key = ?
46
+ )
47
+ AND EXISTS (${FENCE_EXISTS_SQL})
48
+ `;
49
+ /** Promotes a durable deferred command only after its predecessor is gone. */
50
+ export const MARK_PENDING_COMMAND_PROCESSING_SQL = `
51
+ UPDATE resolution_command
52
+ SET status = 'processing'
53
+ WHERE command_id = ? AND request_key = ? AND status = 'pending'
54
+ AND EXISTS (${FENCE_EXISTS_SQL})
55
+ `;
35
56
  export const MARK_CONFLICT_RESOLVED_SQL = `
36
57
  UPDATE sync_conflict
37
58
  SET status = 'RESOLVED', resolution_command_id = ?, updated_at = ?
@@ -92,4 +113,18 @@ export const READ_REGISTERED_PROJECTION_SQL = `
92
113
  FROM physical_sheet_registry
93
114
  WHERE physical_sheet_id = ?
94
115
  `;
116
+ /**
117
+ * Finds an in-flight predecessor that could still materialize after a
118
+ * replacement. `delivery_uncertain` counts as in-flight because the remote
119
+ * write may still commit after a lost response; resolution successors must
120
+ * wait until that predecessor is probe-settled.
121
+ */
122
+ export const READ_PROCESSING_PREDECESSOR_SQL = `
123
+ SELECT effect_id
124
+ FROM sheet_effect_outbox
125
+ WHERE logical_sheet_id = ? AND target_kind = ? AND target_id = ?
126
+ AND stream_sequence < ? AND status IN ('processing', 'delivery_uncertain')
127
+ ORDER BY stream_sequence
128
+ LIMIT 1
129
+ `;
95
130
  //# sourceMappingURL=resolutionWriterSql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolutionWriterSql.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;CAMxC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;CAOhC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;CAMhD,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;kBAO3B,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;kBAKxB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;kBAOhC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;;;;kBAOrC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;kBAItB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;kBAIrB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;kBAIpB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;kBAIvB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;CAI7C,CAAC"}
1
+ {"version":3,"file":"resolutionWriterSql.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;CAMxC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;CAOhC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;CAMhD,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;kBAO3B,gBAAgB;CACjC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;kBAWxB,gBAAgB;CACjC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mCAAmC,GAAG;;;;kBAIjC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;kBAKxB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;kBAOhC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;;;;kBAOrC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;kBAItB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;kBAIrB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;kBAIpB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;kBAIvB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;CAI7C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;CAO9C,CAAC"}
@@ -9,9 +9,9 @@
9
9
  */
10
10
  import type { FencingContext } from "../shared/writerLease.js";
11
11
  import { type SqlExecutor, type SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
12
- import type { ApplyResultOptions, ClaimEffectOptions, ClaimResult, NewEffect, PendingEffect, RetryClaimedEffectOptions } from "./effectOutboxContracts.js";
12
+ import type { ApplyResultOptions, ClaimEffectOptions, ClaimResult, MarkDeliveryUncertainOptions, NewEffect, RenewEffectLeaseOptions, PendingEffect, RetryClaimedEffectOptions } from "./effectOutboxContracts.js";
13
13
  export { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
14
- export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions, ClaimResult, NonAppliedEffectResultOptions, EffectProjectionConfirmation, NewEffect, PendingEffect, RetryClaimedEffectOptions, } from "./effectOutboxContracts.js";
14
+ export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions, ClaimResult, NonAppliedEffectResultOptions, RenewEffectLeaseOptions, EffectProjectionConfirmation, MarkDeliveryUncertainOptions, NewEffect, PendingEffect, RetryClaimedEffectOptions, } from "./effectOutboxContracts.js";
15
15
  /**
16
16
  * Claims a pending effect through an already-active async SQL context.
17
17
  *
@@ -21,6 +21,10 @@ export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions
21
21
  export declare function claimEffectWithSql(sql: SqlExecutor, options: ClaimEffectOptions): Promise<ClaimResult>;
22
22
  /** Claims one effect inside an adapter-owned transaction. */
23
23
  export declare function claimEffectWithAdapter(storage: SqlStorageAdapter, options: ClaimEffectOptions): Promise<ClaimResult>;
24
+ /** Renews a processing effect only while the current writer fence and claim still match. */
25
+ export declare function renewEffectLeaseWithSql(sql: SqlExecutor, options: RenewEffectLeaseOptions): Promise<boolean>;
26
+ /** Renews one claimed effect through an adapter-owned transaction. */
27
+ export declare function renewEffectLeaseWithAdapter(storage: SqlStorageAdapter, options: RenewEffectLeaseOptions): Promise<boolean>;
24
28
  /**
25
29
  * Appends pending effects under the supplied writer fence.
26
30
  *
@@ -73,6 +77,10 @@ export declare function supersedeAndReplanWithAdapter(storage: SqlStorageAdapter
73
77
  export declare function recoverExpiredLeasesWithSql(sql: SqlExecutor, fence: FencingContext): Promise<number>;
74
78
  /** Marks expired effect leases inside an adapter-owned transaction. */
75
79
  export declare function recoverExpiredLeasesWithAdapter(storage: SqlStorageAdapter, fence: FencingContext): Promise<number>;
80
+ /** Moves a claimed effect into durable ambiguous-delivery recovery. */
81
+ export declare function markDeliveryUncertainWithSql(sql: SqlExecutor, options: MarkDeliveryUncertainOptions): Promise<boolean>;
82
+ /** Moves one claimed effect into durable ambiguous-delivery recovery. */
83
+ export declare function markDeliveryUncertainWithAdapter(storage: SqlStorageAdapter, options: MarkDeliveryUncertainOptions): Promise<boolean>;
76
84
  /**
77
85
  * Returns an acknowledged-but-unprocessed batch suffix to pending.
78
86
  *
@@ -110,9 +118,9 @@ export declare function findPendingEffectsByTargetWithAdapter(storage: SqlStorag
110
118
  * safely race this advisory selection without processing a later stream item.
111
119
  */
112
120
  /** Reads bounded head-of-line effects through an already-active async SQL context. */
113
- export declare function listReadyEffectsWithSql(sql: SqlExecutor, limit: number): Promise<readonly PendingEffect[]>;
121
+ export declare function listReadyEffectsWithSql(sql: SqlExecutor, limit: number, now?: number): Promise<readonly PendingEffect[]>;
114
122
  /** Reads bounded head-of-line effects through a fresh adapter read context. */
115
- export declare function listReadyEffectsWithAdapter(storage: SqlStorageAdapter, limit: number): Promise<readonly PendingEffect[]>;
123
+ export declare function listReadyEffectsWithAdapter(storage: SqlStorageAdapter, limit: number, now?: number): Promise<readonly PendingEffect[]>;
116
124
  /** Returns whether normal outbox work is still pending or actively processing. */
117
125
  /** Checks whether the durable outbox still has pending or processing work. */
118
126
  export declare function hasPendingOrProcessingEffectsWithSql(sql: SqlExecutor): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"effectOutbox.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effectOutbox.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutbox.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
11
11
  import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
12
12
  import { fenceParameters, isFencingValidWithSql, } from "../shared/writerLease.js";
13
13
  import { decodeSqlRows, } from "../../../../adapter/persistence/contracts/sql.js";
14
- import { APPLY_EFFECT_RESULT_SQL, CLAIM_EFFECT_SQL, COUNT_PENDING_OR_PROCESSING_EFFECTS_SQL, INSERT_PENDING_EFFECT_SQL, INSERT_REPLANNED_EFFECT_SQL, RECOVER_EXPIRED_LEASES_SQL, REQUEUE_CLAIMED_EFFECT_SQL, RELEASE_UNPROCESSED_EFFECT_SQL, SELECT_PENDING_EFFECTS_BY_TARGET_SQL, SELECT_READY_EFFECTS_SQL, SUPERSEDE_EFFECT_SQL, } from "./effectOutboxSql.js";
15
- import { applyEffectResultParameters, assertProjectionConfirmationTargetWithSql, AsyncFenceLostError, claimEffectParameters, decodePendingEffectRow, pendingEffectParameters, replannedEffectParameters, requireCurrentFenceWithSql, validateApplyResultOptions, validateEffectLeaseDuration, validateReadyEffectLimit, writeProjectionConfirmationWithSql, } from "./effectOutboxSupport.js";
14
+ import { APPLY_EFFECT_RESULT_SQL, CLAIM_EFFECT_SQL, COUNT_PENDING_OR_PROCESSING_EFFECTS_SQL, INSERT_PENDING_EFFECT_SQL, INSERT_REPLANNED_EFFECT_SQL, MARK_DELIVERY_UNCERTAIN_SQL, RECOVER_EXPIRED_LEASES_SQL, RENEW_EFFECT_LEASE_SQL, REQUEUE_CLAIMED_EFFECT_SQL, RELEASE_UNPROCESSED_EFFECT_SQL, SELECT_PENDING_EFFECTS_BY_TARGET_SQL, SELECT_READY_EFFECTS_SQL, SUPERSEDE_EFFECT_SQL, } from "./effectOutboxSql.js";
15
+ import { applyEffectResultParameters, assertProjectionConfirmationTargetWithSql, AsyncFenceLostError, claimEffectParameters, decodePendingEffectRow, pendingEffectParameters, markDeliveryUncertainParameters, replannedEffectParameters, requireCurrentFenceWithSql, retryClaimedEffectParameters, validateApplyResultOptions, validateEffectLeaseDuration, validateReadyEffectLimit, writeProjectionConfirmationWithSql, } from "./effectOutboxSupport.js";
16
16
  export { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
17
17
  /**
18
18
  * Claims a pending effect through an already-active async SQL context.
@@ -49,6 +49,25 @@ export async function claimEffectWithSql(sql, options) {
49
49
  export async function claimEffectWithAdapter(storage, options) {
50
50
  return storage.transaction(({ sql }) => claimEffectWithSql(sql, options));
51
51
  }
52
+ /** Renews a processing effect only while the current writer fence and claim still match. */
53
+ export async function renewEffectLeaseWithSql(sql, options) {
54
+ if (!(await isFencingValidWithSql(sql, options)))
55
+ return false;
56
+ validateEffectLeaseDuration(options.leaseDurationMs);
57
+ const result = await sql.run(RENEW_EFFECT_LEASE_SQL, [
58
+ options.now + options.leaseDurationMs,
59
+ options.effectId,
60
+ options.claimToken,
61
+ options.writerEpoch,
62
+ options.now,
63
+ ...fenceParameters(options),
64
+ ]);
65
+ return result.changes === 1;
66
+ }
67
+ /** Renews one claimed effect through an adapter-owned transaction. */
68
+ export async function renewEffectLeaseWithAdapter(storage, options) {
69
+ return storage.transaction(({ sql }) => renewEffectLeaseWithSql(sql, options));
70
+ }
52
71
  /**
53
72
  * Appends pending effects under the supplied writer fence.
54
73
  *
@@ -165,6 +184,8 @@ export async function supersedeAndReplanWithAdapter(storage, fence, oldEffectId,
165
184
  export async function recoverExpiredLeasesWithSql(sql, fence) {
166
185
  await requireCurrentFenceWithSql(sql, fence);
167
186
  const result = await sql.run(RECOVER_EXPIRED_LEASES_SQL, [
187
+ fence.now,
188
+ fence.now,
168
189
  fence.now,
169
190
  ...fenceParameters(fence),
170
191
  ]);
@@ -174,6 +195,20 @@ export async function recoverExpiredLeasesWithSql(sql, fence) {
174
195
  export async function recoverExpiredLeasesWithAdapter(storage, fence) {
175
196
  return storage.transaction(({ sql }) => recoverExpiredLeasesWithSql(sql, fence));
176
197
  }
198
+ /** Moves a claimed effect into durable ambiguous-delivery recovery. */
199
+ export async function markDeliveryUncertainWithSql(sql, options) {
200
+ if (!(await isFencingValidWithSql(sql, options)))
201
+ return false;
202
+ if (options.nextProbeAt < options.uncertainSince || options.uncertainSince < 0) {
203
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "uncertain delivery timestamps must be ordered non-negative values");
204
+ }
205
+ const result = await sql.run(MARK_DELIVERY_UNCERTAIN_SQL, markDeliveryUncertainParameters(options));
206
+ return result.changes === 1;
207
+ }
208
+ /** Moves one claimed effect into durable ambiguous-delivery recovery. */
209
+ export async function markDeliveryUncertainWithAdapter(storage, options) {
210
+ return storage.transaction(({ sql }) => markDeliveryUncertainWithSql(sql, options));
211
+ }
177
212
  /**
178
213
  * Returns an acknowledged-but-unprocessed batch suffix to pending.
179
214
  *
@@ -186,6 +221,7 @@ export async function releaseUnprocessedEffectWithSql(sql, options) {
186
221
  if (!(await isFencingValidWithSql(sql, options)))
187
222
  return false;
188
223
  const result = await sql.run(RELEASE_UNPROCESSED_EFFECT_SQL, [
224
+ options.now + 1_000,
189
225
  options.effectId,
190
226
  options.claimToken,
191
227
  options.writerEpoch,
@@ -203,15 +239,7 @@ export async function releaseUnprocessedEffectWithAdapter(storage, options) {
203
239
  export async function retryClaimedEffectWithSql(sql, options) {
204
240
  if (!(await isFencingValidWithSql(sql, options)))
205
241
  return false;
206
- const result = await sql.run(REQUEUE_CLAIMED_EFFECT_SQL, [
207
- options.lastErrorCode,
208
- options.lastErrorMessage,
209
- options.effectId,
210
- options.claimToken,
211
- options.writerEpoch,
212
- options.now,
213
- ...fenceParameters(options),
214
- ]);
242
+ const result = await sql.run(REQUEUE_CLAIMED_EFFECT_SQL, retryClaimedEffectParameters(options));
215
243
  return result.changes === 1;
216
244
  }
217
245
  /** Requeues a claimed effect inside an adapter-owned transaction. */
@@ -244,14 +272,17 @@ export async function findPendingEffectsByTargetWithAdapter(storage, logicalShee
244
272
  * safely race this advisory selection without processing a later stream item.
245
273
  */
246
274
  /** Reads bounded head-of-line effects through an already-active async SQL context. */
247
- export async function listReadyEffectsWithSql(sql, limit) {
275
+ export async function listReadyEffectsWithSql(sql, limit, now = Date.now()) {
248
276
  validateReadyEffectLimit(limit);
249
- const rows = await sql.all(SELECT_READY_EFFECTS_SQL, [limit]);
277
+ if (!Number.isSafeInteger(now) || now < 0) {
278
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "ready effect time must be a non-negative safe integer");
279
+ }
280
+ const rows = await sql.all(SELECT_READY_EFFECTS_SQL, [now, now, now, limit]);
250
281
  return decodeSqlRows(rows, decodePendingEffectRow, "ready effects");
251
282
  }
252
283
  /** Reads bounded head-of-line effects through a fresh adapter read context. */
253
- export async function listReadyEffectsWithAdapter(storage, limit) {
254
- return storage.read(({ sql }) => listReadyEffectsWithSql(sql, limit));
284
+ export async function listReadyEffectsWithAdapter(storage, limit, now = Date.now()) {
285
+ return storage.read(({ sql }) => listReadyEffectsWithSql(sql, limit, now));
255
286
  }
256
287
  /** Returns whether normal outbox work is still pending or actively processing. */
257
288
  /** Checks whether the durable outbox still has pending or processing work. */