hikoutei 0.4.2 → 0.4.3
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/application/sync/outbound/SheetsEffectDispatcher.d.ts +64 -0
- package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -0
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js +440 -0
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +3 -4
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js +7 -4
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
- package/dist/application/sync/telemetry/syncTiming.d.ts +20 -33
- package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
- package/dist/application/sync/telemetry/syncTiming.js +14 -12
- package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
- package/dist/infrastructure/storage/errors.d.ts +10 -5
- package/dist/infrastructure/storage/errors.d.ts.map +1 -1
- package/dist/infrastructure/storage/errors.js +10 -7
- package/dist/infrastructure/storage/errors.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +6 -4
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/index.js +3 -2
- package/dist/infrastructure/storage/index.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/schema.d.ts +12 -11
- package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
- package/dist/infrastructure/storage/sqlite/schema.js +17 -109
- package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +2 -2
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +2 -2
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceContext.d.ts +1 -2
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceContext.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceContext.js +1 -2
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceContext.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.js +1 -2
- package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +1 -2
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +1 -2
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +2 -2
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts +1 -1
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js +1 -1
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +1 -1
- package/package.json +13 -7
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +0 -66
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +0 -123
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +0 -111
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +0 -369
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +0 -127
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +0 -552
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +0 -85
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +0 -74
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +0 -31
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +0 -222
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +0 -14
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +0 -25
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +0 -61
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +0 -296
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +0 -17
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +0 -80
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +0 -13
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +0 -248
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +0 -141
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +0 -318
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +0 -143
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +0 -16
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +0 -33
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +0 -259
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +0 -27
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +0 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +0 -316
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +0 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +0 -76
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +0 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.js +0 -189
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +0 -1
- package/docs/advanced-sheets-gateway-concurrency-problem.md +0 -434
- package/docs/architecture.md +0 -224
- package/docs/ci.md +0 -293
- package/docs/code-guidelines.md +0 -248
- package/docs/development.md +0 -74
- package/docs/gateway-removal-inventory.md +0 -147
- package/docs/git-workflow.md +0 -224
- package/docs/google-sheets-sync-scaling-strategy.md +0 -459
- package/docs/mikro-orm-adapter-spike.md +0 -89
- package/docs/quick-start.md +0 -137
- package/docs/sql-layer-plan.md +0 -59
- package/docs/sync-bulk-write-benchmark.md +0 -2117
- package/docs/sync-observability.md +0 -100
- package/docs/task-queue-write-model.md +0 -640
- package/docs/typed-sheets-mvp-scope-2026-06-29.md +0 -490
- package/docs/typed-sheets-plan.md +0 -417
- package/docs/write-and-synchronization-flow.md +0 -179
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
/** Durable result transitions for provider responses and response-loss recovery. */
|
|
2
|
-
import { stableHash } from "../../../../domain/index.js";
|
|
3
|
-
import { LOOKUP_RESULT_KINDS, } from "../../../../shared/state/constants.js";
|
|
4
|
-
import { SYNC_EFFECT_RESULT_STATUSES, SYNC_POSTCONDITION_DISPOSITIONS, } from "../../sheets/constants.js";
|
|
5
|
-
import { OUTBOX_EFFECT_STATUSES, SYNC_EFFECT_KINDS, WORKER_ERROR_CODES, } from "./SyncEffectWorkerConstants.js";
|
|
6
|
-
import { absentValue, presentValue } from "../../../../shared/state/index.js";
|
|
7
|
-
import { applicabilityFromSqlNullable, isPresent, lookupResult, safeErrorMessage, } from "./SyncEffectWorkerHelpers.js";
|
|
8
|
-
import { groupByPostconditionRequest, isCandidateProtectingUserInputEffect, } from "./SyncEffectWorkerRouting.js";
|
|
9
|
-
export async function completeProviderResult(options, storage, fence, item, result, report) {
|
|
10
|
-
if (result.status === SYNC_EFFECT_RESULT_STATUSES.APPLIED ||
|
|
11
|
-
result.status === SYNC_EFFECT_RESULT_STATUSES.ALREADY_APPLIED) {
|
|
12
|
-
if (!isPresent(result.visibleRevision) || !isPresent(result.visibleHash)) {
|
|
13
|
-
await deferDeliveryUncertain(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_APPLIED_WITHOUT_VISIBLE_STATE, "Provider applied result did not include receipt-backed visible evidence.", report);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
await completeApplied(storage, fence, item, result.visibleRevision, result.visibleHash, report);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
if (result.status === SYNC_EFFECT_RESULT_STATUSES.SUPERSEDED) {
|
|
20
|
-
if (await storage.applyEffectResult({
|
|
21
|
-
...fence,
|
|
22
|
-
effectId: item.pending.effect_id,
|
|
23
|
-
claimToken: item.claimToken,
|
|
24
|
-
status: OUTBOX_EFFECT_STATUSES.SUPERSEDED,
|
|
25
|
-
lastErrorCode: presentValue(WORKER_ERROR_CODES.PROVIDER_SUPERSEDED),
|
|
26
|
-
lastErrorMessage: result.reason,
|
|
27
|
-
}))
|
|
28
|
-
report.superseded += 1;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (result.status === SYNC_EFFECT_RESULT_STATUSES.GUARD_MISMATCH) {
|
|
32
|
-
const blocked = isPresent(item.providerEffect) &&
|
|
33
|
-
isCandidateProtectingUserInputEffect(item.providerEffect.value);
|
|
34
|
-
const status = blocked
|
|
35
|
-
? OUTBOX_EFFECT_STATUSES.BLOCKED_CANDIDATE
|
|
36
|
-
: OUTBOX_EFFECT_STATUSES.CONFLICT;
|
|
37
|
-
const applied = await storage.applyEffectResult({
|
|
38
|
-
...fence,
|
|
39
|
-
effectId: item.pending.effect_id,
|
|
40
|
-
claimToken: item.claimToken,
|
|
41
|
-
status,
|
|
42
|
-
lastErrorCode: presentValue(blocked
|
|
43
|
-
? WORKER_ERROR_CODES.CANDIDATE_GUARD_MISMATCH
|
|
44
|
-
: WORKER_ERROR_CODES.VISIBLE_GUARD_MISMATCH),
|
|
45
|
-
lastErrorMessage: result.reason,
|
|
46
|
-
});
|
|
47
|
-
if (applied) {
|
|
48
|
-
if (blocked)
|
|
49
|
-
report.blockedCandidate += 1;
|
|
50
|
-
else
|
|
51
|
-
report.conflicted += 1;
|
|
52
|
-
}
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (result.status === SYNC_EFFECT_RESULT_STATUSES.REPAIR_REOBSERVE) {
|
|
56
|
-
await replanOrFail(options, storage, fence, item, {
|
|
57
|
-
effect: item.pending,
|
|
58
|
-
providerResult: presentValue(result),
|
|
59
|
-
postcondition: absentValue(),
|
|
60
|
-
}, report);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
await completeFailure(storage, fence, item, result.status === SYNC_EFFECT_RESULT_STATUSES.SCHEMA_ERROR
|
|
64
|
-
? WORKER_ERROR_CODES.PROVIDER_SCHEMA_ERROR
|
|
65
|
-
: WORKER_ERROR_CODES.PROVIDER_RETRYABLE_ERROR, result.reason, report);
|
|
66
|
-
}
|
|
67
|
-
const DURABLE_PROBE_RETRY_DELAY_MS = 1_000;
|
|
68
|
-
export async function recoverUnknownResults(options, storage, fence, items, report) {
|
|
69
|
-
const liveFence = () => ({
|
|
70
|
-
...fence,
|
|
71
|
-
now: options.clock?.() ?? fence.now,
|
|
72
|
-
});
|
|
73
|
-
const usable = [];
|
|
74
|
-
for (const item of items) {
|
|
75
|
-
if (isPresent(item.providerEffect)) {
|
|
76
|
-
usable.push(item);
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
await completeFailure(storage, liveFence(), item, WORKER_ERROR_CODES.INVALID_EFFECT_PAYLOAD, item.invalidPayloadError, report);
|
|
80
|
-
}
|
|
81
|
-
for (const group of groupByPostconditionRequest(usable)) {
|
|
82
|
-
let results;
|
|
83
|
-
try {
|
|
84
|
-
results = await options.provider.readEffectPostconditions(group.request);
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
for (const item of group.items) {
|
|
88
|
-
await deferDeliveryUncertain(storage, liveFence(), item, WORKER_ERROR_CODES.POSTCONDITION_READ_FAILED, safeErrorMessage(error), report);
|
|
89
|
-
}
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const byEffectId = new Map(results.map((result) => [result.effectId, result]));
|
|
93
|
-
for (const item of group.items) {
|
|
94
|
-
const result = lookupResult(byEffectId.get(item.pending.effect_id));
|
|
95
|
-
if (result.kind === LOOKUP_RESULT_KINDS.NOT_FOUND ||
|
|
96
|
-
result.value.payloadHash !== item.pending.payload_hash) {
|
|
97
|
-
await deferDeliveryUncertain(storage, liveFence(), item, WORKER_ERROR_CODES.POSTCONDITION_READ_FAILED, "Provider postcondition batch did not return the expected effect evidence.", report);
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
await settleUnknownPostcondition(options, storage, liveFence(), item, result.value.postcondition, report);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
export async function settleUnknownPostcondition(options, storage, fence, item, postcondition, report) {
|
|
105
|
-
if (!isPresent(item.providerEffect)) {
|
|
106
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.INVALID_EFFECT_PAYLOAD, item.invalidPayloadError, report);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.APPLIED &&
|
|
110
|
-
isPresent(postcondition.visibleRevision) &&
|
|
111
|
-
isPresent(postcondition.visibleHash)) {
|
|
112
|
-
if (await completeApplied(storage, fence, item, postcondition.visibleRevision, postcondition.visibleHash, report)) {
|
|
113
|
-
report.responseLossRecovered += 1;
|
|
114
|
-
}
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.APPLIED) {
|
|
118
|
-
await deferDeliveryUncertain(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_APPLIED_WITHOUT_VISIBLE_STATE, "Provider claimed an applied postcondition without a verified visible revision and hash.", report);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.CHANGED &&
|
|
122
|
-
item.providerEffect.value.effectKind === SYNC_EFFECT_KINDS.SYSTEM_REPAIR) {
|
|
123
|
-
await replanOrFail(options, storage, fence, item, {
|
|
124
|
-
effect: item.pending,
|
|
125
|
-
providerResult: absentValue(),
|
|
126
|
-
postcondition: presentValue(postcondition),
|
|
127
|
-
}, report);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.UNAPPLIED) {
|
|
131
|
-
const requeued = await storage.retryClaimedEffect({
|
|
132
|
-
...fence,
|
|
133
|
-
effectId: item.pending.effect_id,
|
|
134
|
-
claimToken: item.claimToken,
|
|
135
|
-
lastErrorCode: WORKER_ERROR_CODES.POSTCONDITION_UNAPPLIED_REQUIRES_REDRIVE,
|
|
136
|
-
lastErrorMessage: "Provider did not expose the effect as applied; it was returned to pending.",
|
|
137
|
-
nextAttemptAt: fence.now + DURABLE_PROBE_RETRY_DELAY_MS,
|
|
138
|
-
});
|
|
139
|
-
if (requeued) {
|
|
140
|
-
report.deferred += 1;
|
|
141
|
-
report.requeued += 1;
|
|
142
|
-
}
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.UNAVAILABLE) {
|
|
146
|
-
await deferDeliveryUncertain(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_UNAVAILABLE, "Provider response was not observed; postcondition=unavailable" +
|
|
147
|
-
(postcondition.reason === undefined ? "" : ", reason=" + postcondition.reason), report);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const code = postcondition.disposition === SYNC_POSTCONDITION_DISPOSITIONS.CHANGED
|
|
151
|
-
? WORKER_ERROR_CODES.POSTCONDITION_CHANGED
|
|
152
|
-
: WORKER_ERROR_CODES.POSTCONDITION_UNAPPLIED_REQUIRES_REDRIVE;
|
|
153
|
-
await completeFailure(storage, fence, item, code, presentValue("Provider response was not observed; postcondition=" +
|
|
154
|
-
postcondition.disposition +
|
|
155
|
-
(postcondition.reason === undefined ? "" : ", reason=" + postcondition.reason)), report);
|
|
156
|
-
}
|
|
157
|
-
async function deferDeliveryUncertain(storage, fence, item, code, message, report) {
|
|
158
|
-
const marked = await storage.markDeliveryUncertain({
|
|
159
|
-
...fence,
|
|
160
|
-
effectId: item.pending.effect_id,
|
|
161
|
-
claimToken: item.claimToken,
|
|
162
|
-
uncertainSince: item.pending.uncertain_since ?? fence.now,
|
|
163
|
-
nextProbeAt: fence.now + DURABLE_PROBE_RETRY_DELAY_MS,
|
|
164
|
-
lastErrorCode: code,
|
|
165
|
-
lastErrorMessage: message,
|
|
166
|
-
});
|
|
167
|
-
if (marked)
|
|
168
|
-
report.deferred += 1;
|
|
169
|
-
}
|
|
170
|
-
export async function completeApplied(storage, fence, item, visibleRevision, visibleHash, report) {
|
|
171
|
-
const providerEffect = item.providerEffect;
|
|
172
|
-
if (!isPresent(providerEffect)) {
|
|
173
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.INVALID_EFFECT_PAYLOAD, item.invalidPayloadError, report);
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
if (!isPresent(visibleRevision) || !isPresent(visibleHash)) {
|
|
177
|
-
await deferDeliveryUncertain(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_APPLIED_WITHOUT_VISIBLE_STATE, "Applied effect lacks receipt-backed visible revision and hash evidence.", report);
|
|
178
|
-
return false;
|
|
179
|
-
}
|
|
180
|
-
if (visibleHash.value !== providerEffect.value.payload.targetVisibleHash) {
|
|
181
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_READ_FAILED, presentValue("Provider postcondition visible hash does not match the effect target."), report);
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
const confirmation = isPresent(providerEffect) &&
|
|
185
|
-
isPresent(providerEffect.value.rowBindingId) &&
|
|
186
|
-
isPresent(visibleRevision) &&
|
|
187
|
-
isPresent(visibleHash)
|
|
188
|
-
? {
|
|
189
|
-
physicalSheetId: item.pending.physical_sheet_id,
|
|
190
|
-
projection: item.pending.projection,
|
|
191
|
-
rowBindingId: providerEffect.value.rowBindingId.value,
|
|
192
|
-
visibleRevision: visibleRevision.value,
|
|
193
|
-
visibleHash: visibleHash.value,
|
|
194
|
-
entityRevision: applicabilityFromSqlNullable(item.pending.target_entity_revision),
|
|
195
|
-
fieldHashes: Object.fromEntries(Object.entries(providerEffect.value.payload.fields)
|
|
196
|
-
.map(([fieldName, value]) => [fieldName, stableHash(value)])),
|
|
197
|
-
}
|
|
198
|
-
: undefined;
|
|
199
|
-
const applied = await storage.applyEffectResult({
|
|
200
|
-
...fence,
|
|
201
|
-
effectId: item.pending.effect_id,
|
|
202
|
-
claimToken: item.claimToken,
|
|
203
|
-
status: OUTBOX_EFFECT_STATUSES.APPLIED,
|
|
204
|
-
lastErrorCode: absentValue(),
|
|
205
|
-
lastErrorMessage: absentValue(),
|
|
206
|
-
...(confirmation === undefined ? {} : { projectionConfirmation: confirmation }),
|
|
207
|
-
});
|
|
208
|
-
if (applied)
|
|
209
|
-
report.applied += 1;
|
|
210
|
-
return applied;
|
|
211
|
-
}
|
|
212
|
-
export async function replanOrFail(options, storage, fence, item, request, report) {
|
|
213
|
-
if (options.makeRepairReplan === undefined) {
|
|
214
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REOBSERVE_REQUIRES_WRITER_REPLAN, presentValue("A system repair changed remotely and no writer replan factory was configured."), report);
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
let replacement;
|
|
218
|
-
try {
|
|
219
|
-
replacement = options.makeRepairReplan(request);
|
|
220
|
-
}
|
|
221
|
-
catch (error) {
|
|
222
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_FAILED, presentValue(safeErrorMessage(error)), report);
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
if (!isPresent(replacement)) {
|
|
226
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_DEFERRED, presentValue("Writer deferred repair replan pending a fresh observation."), report);
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
try {
|
|
230
|
-
await storage.supersedeAndReplan(fence, item.pending.effect_id, replacement.value);
|
|
231
|
-
report.replanned += 1;
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_FAILED, presentValue(safeErrorMessage(error)), report);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
export async function completeFailure(storage, fence, item, code, message, report) {
|
|
238
|
-
if (await storage.applyEffectResult({
|
|
239
|
-
...fence,
|
|
240
|
-
effectId: item.pending.effect_id,
|
|
241
|
-
claimToken: item.claimToken,
|
|
242
|
-
status: OUTBOX_EFFECT_STATUSES.FAILED,
|
|
243
|
-
lastErrorCode: presentValue(code),
|
|
244
|
-
lastErrorMessage: message,
|
|
245
|
-
}))
|
|
246
|
-
report.failed += 1;
|
|
247
|
-
}
|
|
248
|
-
//# sourceMappingURL=SyncEffectWorkerTransitions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyncEffectWorkerTransitions.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerTransitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Effect outbox claim, apply, and recovery operations.
|
|
3
|
-
*
|
|
4
|
-
* Per design concurrency/writer-rpc.md and storage-schema.md:
|
|
5
|
-
* - Effects are claimed atomically (CAS on status = 'pending').
|
|
6
|
-
* - Only one worker can claim an effect at a time.
|
|
7
|
-
* - Apply results must pass fencing validation (epoch + token).
|
|
8
|
-
* - Supersede/replan atomically closes old effect and inserts new one.
|
|
9
|
-
*/
|
|
10
|
-
import type { FencingContext } from "../shared/writerLease.js";
|
|
11
|
-
import { type SqlExecutor, type SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
|
|
12
|
-
import type { ApplyResultOptions, ClaimEffectOptions, ClaimResult, MarkDeliveryUncertainOptions, NewEffect, RenewEffectLeaseOptions, PendingEffect, RetryClaimedEffectOptions } from "./effectOutboxContracts.js";
|
|
13
|
-
export { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
|
|
14
|
-
export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions, ClaimResult, NonAppliedEffectResultOptions, RenewEffectLeaseOptions, EffectProjectionConfirmation, MarkDeliveryUncertainOptions, NewEffect, PendingEffect, RetryClaimedEffectOptions, } from "./effectOutboxContracts.js";
|
|
15
|
-
/**
|
|
16
|
-
* Claims a pending effect through an already-active async SQL context.
|
|
17
|
-
*
|
|
18
|
-
* The compare-and-set query and both fencing checks use the same connection,
|
|
19
|
-
* so a worker cannot claim through a different SQLite connection.
|
|
20
|
-
*/
|
|
21
|
-
export declare function claimEffectWithSql(sql: SqlExecutor, options: ClaimEffectOptions): Promise<ClaimResult>;
|
|
22
|
-
/** Claims one effect inside an adapter-owned transaction. */
|
|
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>;
|
|
28
|
-
/**
|
|
29
|
-
* Appends pending effects under the supplied writer fence.
|
|
30
|
-
*
|
|
31
|
-
* This is used for conflict/quarantine effects that do not accompany a
|
|
32
|
-
* canonical field commit. It owns a savepoint so a duplicate dedupe key or a
|
|
33
|
-
* lost fence cannot leave only part of an effect set behind.
|
|
34
|
-
*/
|
|
35
|
-
/**
|
|
36
|
-
* Appends pending effects inside an already-active async SQL transaction.
|
|
37
|
-
*
|
|
38
|
-
* This is the MikroORM-compatible path used when an entity mutation and its
|
|
39
|
-
* Sheets outbox records must commit or roll back together.
|
|
40
|
-
*/
|
|
41
|
-
export declare function appendPendingEffectsWithSql(sql: SqlExecutor, fence: FencingContext, effects: readonly NewEffect[]): Promise<boolean>;
|
|
42
|
-
/** Appends pending effects in one adapter-owned transaction. */
|
|
43
|
-
export declare function appendPendingEffectsWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, effects: readonly NewEffect[]): Promise<boolean>;
|
|
44
|
-
/**
|
|
45
|
-
* Applies a result to a claimed effect.
|
|
46
|
-
* Validates fencing (claim token + writer epoch) before applying.
|
|
47
|
-
* Returns true if the result was applied, false if fencing failed.
|
|
48
|
-
*/
|
|
49
|
-
/**
|
|
50
|
-
* Applies a claimed effect result through an already-active async SQL context.
|
|
51
|
-
*
|
|
52
|
-
* If projection confirmation fails, the savepoint rolls the effect transition
|
|
53
|
-
* back too; confirmed visible state can never advance without its outbox row.
|
|
54
|
-
*/
|
|
55
|
-
export declare function applyEffectResultWithSql(sql: SqlExecutor, options: ApplyResultOptions): Promise<boolean>;
|
|
56
|
-
/** Applies one effect result inside an adapter-owned transaction. */
|
|
57
|
-
export declare function applyEffectResultWithAdapter(storage: SqlStorageAdapter, options: ApplyResultOptions): Promise<boolean>;
|
|
58
|
-
/**
|
|
59
|
-
* Supersedes an old effect and inserts a new replacement effect atomically.
|
|
60
|
-
* Used for repair replan when the canonical target has advanced.
|
|
61
|
-
*
|
|
62
|
-
* Per design: the old effect is marked 'superseded', a new effect with a new
|
|
63
|
-
* effect_id and new dedupe_key is inserted, and the new effect's
|
|
64
|
-
* predecessor_effect_id links to the old one.
|
|
65
|
-
*/
|
|
66
|
-
/** Supersedes and replans an effect through an already-active async SQL context. */
|
|
67
|
-
export declare function supersedeAndReplanWithSql(sql: SqlExecutor, fence: FencingContext, oldEffectId: string, newEffect: NewEffect): Promise<void>;
|
|
68
|
-
/** Supersedes and replans an effect inside an adapter-owned transaction. */
|
|
69
|
-
export declare function supersedeAndReplanWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, oldEffectId: string, newEffect: NewEffect): Promise<void>;
|
|
70
|
-
/**
|
|
71
|
-
* Marks expired processing effects as requiring postcondition recovery.
|
|
72
|
-
*
|
|
73
|
-
* The worker must read the remote postcondition before it schedules a retry;
|
|
74
|
-
* an expired lease is not evidence that the remote write did not happen.
|
|
75
|
-
*/
|
|
76
|
-
/** Marks expired effect leases through an already-active async SQL context. */
|
|
77
|
-
export declare function recoverExpiredLeasesWithSql(sql: SqlExecutor, fence: FencingContext): Promise<number>;
|
|
78
|
-
/** Marks expired effect leases inside an adapter-owned transaction. */
|
|
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>;
|
|
84
|
-
/**
|
|
85
|
-
* Returns an acknowledged-but-unprocessed batch suffix to pending.
|
|
86
|
-
*
|
|
87
|
-
* This is intentionally narrower than a generic redrive: it may be used only
|
|
88
|
-
* after a valid provider response explicitly says the batch budget stopped
|
|
89
|
-
* before this effect. Unknown response loss remains failed until read-back.
|
|
90
|
-
*/
|
|
91
|
-
/** Returns one acknowledged-but-unprocessed effect through an async SQL context. */
|
|
92
|
-
export declare function releaseUnprocessedEffectWithSql(sql: SqlExecutor, options: Pick<FencingContext, "role" | "writerEpoch" | "fencingToken" | "now"> & {
|
|
93
|
-
readonly effectId: string;
|
|
94
|
-
readonly claimToken: string;
|
|
95
|
-
}): Promise<boolean>;
|
|
96
|
-
/** Returns one acknowledged-but-unprocessed effect inside an adapter transaction. */
|
|
97
|
-
export declare function releaseUnprocessedEffectWithAdapter(storage: SqlStorageAdapter, options: Pick<FencingContext, "role" | "writerEpoch" | "fencingToken" | "now"> & {
|
|
98
|
-
readonly effectId: string;
|
|
99
|
-
readonly claimToken: string;
|
|
100
|
-
}): Promise<boolean>;
|
|
101
|
-
/** Requeues a claimed effect only after the current fence still owns it. */
|
|
102
|
-
/** Requeues a claimed effect through an already-active async SQL context. */
|
|
103
|
-
export declare function retryClaimedEffectWithSql(sql: SqlExecutor, options: RetryClaimedEffectOptions): Promise<boolean>;
|
|
104
|
-
/** Requeues a claimed effect inside an adapter-owned transaction. */
|
|
105
|
-
export declare function retryClaimedEffectWithAdapter(storage: SqlStorageAdapter, options: RetryClaimedEffectOptions): Promise<boolean>;
|
|
106
|
-
/**
|
|
107
|
-
* Finds pending effects for a given stream (target), ordered by stream_sequence.
|
|
108
|
-
* Returns the head-of-line effects for a target stream.
|
|
109
|
-
*/
|
|
110
|
-
/** Reads one target stream through an already-active async SQL context. */
|
|
111
|
-
export declare function findPendingEffectsByTargetWithSql(sql: SqlExecutor, logicalSheetId: string, targetKind: string, targetId: string): Promise<readonly PendingEffect[]>;
|
|
112
|
-
/** Reads one target stream through a fresh adapter read context. */
|
|
113
|
-
export declare function findPendingEffectsByTargetWithAdapter(storage: SqlStorageAdapter, logicalSheetId: string, targetKind: string, targetId: string): Promise<readonly PendingEffect[]>;
|
|
114
|
-
/**
|
|
115
|
-
* Returns ordered head-of-line effects across streams for one bounded worker pass.
|
|
116
|
-
*
|
|
117
|
-
* Claiming still performs the authoritative CAS, so a concurrent worker can
|
|
118
|
-
* safely race this advisory selection without processing a later stream item.
|
|
119
|
-
*/
|
|
120
|
-
/** Reads bounded head-of-line effects through an already-active async SQL context. */
|
|
121
|
-
export declare function listReadyEffectsWithSql(sql: SqlExecutor, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
122
|
-
/** Reads bounded head-of-line effects through a fresh adapter read context. */
|
|
123
|
-
export declare function listReadyEffectsWithAdapter(storage: SqlStorageAdapter, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
124
|
-
/**
|
|
125
|
-
* Reads bounded head-of-line effects that can only be fast-append rows.
|
|
126
|
-
*
|
|
127
|
-
* The query jumps past any regular/recovery backlog in the same ready order,
|
|
128
|
-
* so an arbitrary number of head-of-queue rows cannot starve the bulk append
|
|
129
|
-
* path. Only the SQL-visible append shape is filtered; the worker still
|
|
130
|
-
* validates each row's payload (createIfMissing) before claiming it.
|
|
131
|
-
*/
|
|
132
|
-
/** Reads bounded ready fast-append candidates through an already-active async SQL context. */
|
|
133
|
-
export declare function listReadyFastAppendEffectsWithSql(sql: SqlExecutor, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
134
|
-
/** Reads bounded ready fast-append candidates through a fresh adapter read context. */
|
|
135
|
-
export declare function listReadyFastAppendEffectsWithAdapter(storage: SqlStorageAdapter, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
136
|
-
/** Returns whether normal outbox work is still pending or actively processing. */
|
|
137
|
-
/** Checks whether the durable outbox still has pending or processing work. */
|
|
138
|
-
export declare function hasPendingOrProcessingEffectsWithSql(sql: SqlExecutor): Promise<boolean>;
|
|
139
|
-
/** Checks outbox activity through a fresh adapter read context. */
|
|
140
|
-
export declare function hasPendingOrProcessingEffectsWithAdapter(storage: SqlStorageAdapter): Promise<boolean>;
|
|
141
|
-
//# sourceMappingURL=effectOutbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effectOutbox.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutbox.ts"],"names":[],"mappings":"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"}
|