hikoutei 0.8.0 → 0.8.2

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 (139) hide show
  1. package/README.md +4 -0
  2. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +23 -11
  3. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -1
  4. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +26 -18
  5. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -1
  6. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +24 -5
  7. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -1
  8. package/dist/adapter/sheets/providers/google-sheets-api/constants.js +24 -5
  9. package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -1
  10. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +8 -0
  11. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -1
  12. package/dist/adapter/sheets/providers/google-sheets-api/errors.js +20 -0
  13. package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -1
  14. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +1 -1
  15. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -1
  16. package/dist/adapter/sheets/providers/google-sheets-api/index.js +1 -1
  17. package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -1
  18. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.d.ts.map +1 -1
  19. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js +11 -29
  20. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js.map +1 -1
  21. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts +20 -0
  22. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts.map +1 -0
  23. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js +26 -0
  24. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js.map +1 -0
  25. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +11 -1
  26. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -1
  27. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +12 -2
  28. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -1
  29. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts +19 -6
  30. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts.map +1 -1
  31. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js +61 -14
  32. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js.map +1 -1
  33. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +13 -0
  34. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -1
  35. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +60 -29
  36. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -1
  37. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +40 -4
  38. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -1
  39. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +26 -20
  40. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -1
  41. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts +7 -0
  42. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts.map +1 -0
  43. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js +24 -0
  44. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js.map +1 -0
  45. package/dist/api/Hikoutei.d.ts.map +1 -1
  46. package/dist/api/Hikoutei.js +244 -30
  47. package/dist/api/Hikoutei.js.map +1 -1
  48. package/dist/api/internalEntityManager.d.ts.map +1 -1
  49. package/dist/api/internalEntityManager.js +152 -53
  50. package/dist/api/internalEntityManager.js.map +1 -1
  51. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts +41 -0
  52. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -1
  53. package/dist/application/sync/outbound/SheetsEffectDispatcher.js +85 -3
  54. package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -1
  55. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  56. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +39 -5
  57. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  58. package/dist/application/sync/outbound/reconciliation/diff.d.ts +19 -1
  59. package/dist/application/sync/outbound/reconciliation/diff.d.ts.map +1 -1
  60. package/dist/application/sync/outbound/reconciliation/diff.js +60 -17
  61. package/dist/application/sync/outbound/reconciliation/diff.js.map +1 -1
  62. package/dist/application/sync/outbound/reconciliation/repair.d.ts +34 -3
  63. package/dist/application/sync/outbound/reconciliation/repair.d.ts.map +1 -1
  64. package/dist/application/sync/outbound/reconciliation/repair.js +120 -47
  65. package/dist/application/sync/outbound/reconciliation/repair.js.map +1 -1
  66. package/dist/application/sync/outbound/reconciliation/shared.d.ts +20 -0
  67. package/dist/application/sync/outbound/reconciliation/shared.d.ts.map +1 -1
  68. package/dist/application/sync/outbound/reconciliation/shared.js +35 -0
  69. package/dist/application/sync/outbound/reconciliation/shared.js.map +1 -1
  70. package/dist/application/sync/service/SyncPollingSupervisor.d.ts +16 -0
  71. package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -1
  72. package/dist/application/sync/service/SyncPollingSupervisor.js +24 -0
  73. package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -1
  74. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  75. package/dist/application/sync/service/SyncServiceBootstrap.js +26 -1
  76. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  77. package/dist/application/sync/service/configSchemas.d.ts +10 -0
  78. package/dist/application/sync/service/configSchemas.d.ts.map +1 -0
  79. package/dist/application/sync/service/configSchemas.js +13 -0
  80. package/dist/application/sync/service/configSchemas.js.map +1 -0
  81. package/dist/application/sync/service/effectSupervisor.d.ts.map +1 -1
  82. package/dist/application/sync/service/effectSupervisor.js +114 -9
  83. package/dist/application/sync/service/effectSupervisor.js.map +1 -1
  84. package/dist/application/sync/service/pollingSupervisor.d.ts +17 -0
  85. package/dist/application/sync/service/pollingSupervisor.d.ts.map +1 -1
  86. package/dist/application/sync/service/pollingSupervisor.js +103 -3
  87. package/dist/application/sync/service/pollingSupervisor.js.map +1 -1
  88. package/dist/application/sync/service/serviceOptionSchemas.d.ts +11 -0
  89. package/dist/application/sync/service/serviceOptionSchemas.d.ts.map +1 -0
  90. package/dist/application/sync/service/serviceOptionSchemas.js +11 -0
  91. package/dist/application/sync/service/serviceOptionSchemas.js.map +1 -0
  92. package/dist/application/sync/service/serviceOptions.d.ts.map +1 -1
  93. package/dist/application/sync/service/serviceOptions.js +20 -6
  94. package/dist/application/sync/service/serviceOptions.js.map +1 -1
  95. package/dist/application/sync/service/shutdown.d.ts.map +1 -1
  96. package/dist/application/sync/service/shutdown.js +6 -2
  97. package/dist/application/sync/service/shutdown.js.map +1 -1
  98. package/dist/application/sync/service/syncAutoStart.d.ts +71 -6
  99. package/dist/application/sync/service/syncAutoStart.d.ts.map +1 -1
  100. package/dist/application/sync/service/syncAutoStart.js +175 -12
  101. package/dist/application/sync/service/syncAutoStart.js.map +1 -1
  102. package/dist/application/sync/service/systemStateReadiness.d.ts +35 -0
  103. package/dist/application/sync/service/systemStateReadiness.d.ts.map +1 -0
  104. package/dist/application/sync/service/systemStateReadiness.js +51 -0
  105. package/dist/application/sync/service/systemStateReadiness.js.map +1 -0
  106. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts +37 -1
  107. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -1
  108. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js +57 -3
  109. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -1
  110. package/dist/application/sync/sheetsContract/payloadSchemas.d.ts +14 -0
  111. package/dist/application/sync/sheetsContract/payloadSchemas.d.ts.map +1 -0
  112. package/dist/application/sync/sheetsContract/payloadSchemas.js +18 -0
  113. package/dist/application/sync/sheetsContract/payloadSchemas.js.map +1 -0
  114. package/dist/application/sync/sheetsContract/syncSheets.d.ts.map +1 -1
  115. package/dist/application/sync/sheetsContract/syncSheets.js +12 -31
  116. package/dist/application/sync/sheetsContract/syncSheets.js.map +1 -1
  117. package/dist/application/sync/sheetsContract/transportOutcome.d.ts +32 -5
  118. package/dist/application/sync/sheetsContract/transportOutcome.d.ts.map +1 -1
  119. package/dist/application/sync/sheetsContract/transportOutcome.js +101 -7
  120. package/dist/application/sync/sheetsContract/transportOutcome.js.map +1 -1
  121. package/dist/internal/syncStatus.js +33 -2
  122. package/dist/internal/syncStatus.js.map +1 -1
  123. package/dist/shared/observability/index.d.ts +9 -0
  124. package/dist/shared/observability/index.d.ts.map +1 -0
  125. package/dist/shared/observability/index.js +9 -0
  126. package/dist/shared/observability/index.js.map +1 -0
  127. package/dist/shared/observability/internalLog.d.ts +175 -0
  128. package/dist/shared/observability/internalLog.d.ts.map +1 -0
  129. package/dist/shared/observability/internalLog.js +471 -0
  130. package/dist/shared/observability/internalLog.js.map +1 -0
  131. package/dist/shared/observability/logEvents.d.ts +96 -0
  132. package/dist/shared/observability/logEvents.d.ts.map +1 -0
  133. package/dist/shared/observability/logEvents.js +247 -0
  134. package/dist/shared/observability/logEvents.js.map +1 -0
  135. package/dist/shared/validation/zodBoundary.d.ts +10 -0
  136. package/dist/shared/validation/zodBoundary.d.ts.map +1 -0
  137. package/dist/shared/validation/zodBoundary.js +24 -0
  138. package/dist/shared/validation/zodBoundary.js.map +1 -0
  139. package/package.json +7 -5
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * This internal module owns the mapping from environment variables to the
5
5
  * sync service bootstrap: spreadsheet URL parsing, service-account credentials
6
- * file validation, polling interval parsing, projection auto-generation from
7
- * entity descriptors, and fail-closed startup failure classification. It is
8
- * never re-exported from `src/index.ts`; the public factory calls it only when
9
- * `HIKOUTEI_SYNC_SPREADSHEET_URL` is set, so local-only users never load the
10
- * sync module graph.
6
+ * file validation, polling interval parsing, request-start pacing override
7
+ * parsing, projection auto-generation from entity descriptors, and fail-closed
8
+ * startup failure classification. It is never re-exported from `src/index.ts`;
9
+ * the public factory calls it only when `HIKOUTEI_SYNC_SPREADSHEET_URL` is
10
+ * set, so local-only users never load the sync module graph.
11
11
  *
12
12
  * The env reader, transport, and diagnostic sink are injectable so tests can
13
13
  * exercise every startup branch with a stub transport, a fake env, and a
@@ -25,9 +25,13 @@ import { createLocalTypedSheetsRuntime, validateTypedSheetsOptions, } from "../.
25
25
  import { HIKOUTEI_ERROR_CODES, HikouteiError, } from "../../../api/errors.js";
26
26
  import { GoogleSheetsApiTransportError, } from "../../../adapter/sheets/providers/google-sheets-api/errors.js";
27
27
  import { columnLetters } from "../../../adapter/sheets/providers/google-sheets-api/model/valueNormalization.js";
28
+ import { GOOGLE_SHEETS_API_DEFAULTS, } from "../../../adapter/sheets/providers/google-sheets-api/constants.js";
28
29
  import { PRESENCE_KINDS } from "../../../shared/state/index.js";
30
+ import { DEFAULT_EFFECT_LEASE_DURATION_MS, EFFECT_LEASE_PROVIDER_HEADROOM_MS, } from "@hikoutei/ikisaki";
29
31
  import { SYNC_CONFLICT_PROJECTION_REGISTERED_RANGE, } from "../sheetsContract/conflictProjection.js";
30
32
  import { SyncSheetsContractError } from "../sheetsContract/errors.js";
33
+ import { describeErrorForInternalLog, logHikouteiInternalEvent, } from "../../../shared/observability/internalLog.js";
34
+ import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, HIKOUTEI_LOG_STABLE_CLASSES, HIKOUTEI_LOG_STABLE_CODES, } from "../../../shared/observability/logEvents.js";
31
35
  import { createInternalSyncService, } from "./SyncServiceBootstrap.js";
32
36
  /** Env keys consumed by the sync auto-start bridge. */
33
37
  export const SYNC_ENV_KEYS = {
@@ -39,11 +43,46 @@ export const SYNC_ENV_KEYS = {
39
43
  POLLING_INTERVAL_MS: "HIKOUTEI_SYNC_POLLING_INTERVAL_MS",
40
44
  /** Optional metadata safety full-scan cadence in ms; defaults to 60 seconds. */
41
45
  FULL_SCAN_INTERVAL_MS: "HIKOUTEI_SYNC_FULL_SCAN_INTERVAL_MS",
46
+ /**
47
+ * Optional request-start pacing in ms for the direct provider's ONE shared
48
+ * read+write limiter; absent uses the safe default (2,500 ms). Internal
49
+ * only — never part of the root public API.
50
+ */
51
+ RATE_LIMIT_INTERVAL_MS: "HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS",
42
52
  };
43
53
  /** Default polling cadence applied when the interval env vars are absent. */
44
54
  export const DEFAULT_SYNC_POLLING_INTERVAL_MS = 60_000;
45
55
  /** Default safety full-scan cadence applied when the interval env vars are absent. */
46
56
  export const DEFAULT_SYNC_FULL_SCAN_INTERVAL_MS = 60_000;
57
+ /** Lower bound for the sync request-start pacing env override (1 second). */
58
+ export const MIN_SYNC_RATE_LIMIT_INTERVAL_MS = 1_000;
59
+ /**
60
+ * Upper bound for the sync request-start pacing env override.
61
+ *
62
+ * A worst-case effect dispatch performs THREE sequential paced transport
63
+ * calls (two preflight/postcondition reads plus one batch write). The effect
64
+ * lease must still cover the whole sequence with the 30-second provider
65
+ * headroom, and a dispatch can wait up to one FULL interval for its first
66
+ * slot because the shared limiter may hold a prior reservation — admission
67
+ * is BOUNDED to one interval, so a request whose slot lies further out is
68
+ * refused before any SDK call (delivery-uncertain, requeued durably)
69
+ * instead of waiting past the lease. With the DEFAULT lease, write timeout,
70
+ * and read timeout the interval must satisfy
71
+ * `120s > 60s + I + 2 * max(10s, I) + 30s`, i.e. `I < 10s`. Below
72
+ * the 10 s read timeout the two read slots cost 2 x 10 s and the interval
73
+ * adds once, so the bound is `I < 120 - 60 - 2x10 - 30 = 10 s`; at or
74
+ * above the read timeout the interval dominates (`3I < 30s` has no
75
+ * solution at or above 10 s), so the below-read-slot branch is binding.
76
+ * The ceiling below is derived from those defaults (10,000 - 1 = 9,999 ms)
77
+ * and the service-level lease-headroom validation applies the same math to
78
+ * the ACTIVE lease and timeouts, so an override that could let pacing push
79
+ * a dispatch past the lease is rejected with a stable startup failure
80
+ * instead of risking lease expiry and duplicate remote delivery.
81
+ */
82
+ export const MAX_SYNC_RATE_LIMIT_INTERVAL_MS = Math.max(MIN_SYNC_RATE_LIMIT_INTERVAL_MS, Math.floor(DEFAULT_EFFECT_LEASE_DURATION_MS -
83
+ GOOGLE_SHEETS_API_DEFAULTS.REQUEST_TIMEOUT_MS -
84
+ EFFECT_LEASE_PROVIDER_HEADROOM_MS -
85
+ 2 * GOOGLE_SHEETS_API_DEFAULTS.READ_TIMEOUT_MS) - 1);
47
86
  /** Required service-account fields validated before any remote contact. */
48
87
  const REQUIRED_CREDENTIAL_FIELDS = ["type", "client_email", "private_key"];
49
88
  const SPREADSHEET_PATH_SEGMENT = "d";
@@ -110,20 +149,42 @@ export async function createTypedSheetsWithSync(options) {
110
149
  ({ clientEmail } = await validateSyncCredentialsFile(env[SYNC_ENV_KEYS.CREDENTIALS_FILE]));
111
150
  const pollingIntervalMs = parseIntervalEnv(env, SYNC_ENV_KEYS.POLLING_INTERVAL_MS, DEFAULT_SYNC_POLLING_INTERVAL_MS);
112
151
  const pollingFullScanIntervalMs = parseIntervalEnv(env, SYNC_ENV_KEYS.FULL_SCAN_INTERVAL_MS, DEFAULT_SYNC_FULL_SCAN_INTERVAL_MS);
152
+ // The pacing env override applies ONLY to the real Google Sheets
153
+ // provider: it is resolved and validated only when no fake transport is
154
+ // injected, so local/fake suites stay immune to a misconfigured or
155
+ // invalid override in the host env.
156
+ const rateLimitIntervalMs = options.transport === undefined
157
+ ? resolveSyncRateLimitIntervalMs(env)
158
+ : undefined;
113
159
  const projections = buildSyncProjections(options.entities, spreadsheetId);
114
160
  const service = await createInternalSyncService({
115
161
  dbName: options.dbName,
116
162
  entities: [...options.entities],
117
163
  projections,
118
- // Injected transports are a test-only affordance; the fast pacing keeps
119
- // stub-based suites wall-clock cheap. Production builds the real
120
- // ADC-backed transport with its default pacing.
164
+ // Injected transports are a test-only affordance; ZERO pacing keeps
165
+ // stub-based suites wall-clock cheap AND immune to the bounded
166
+ // admission (interval 0 never waits and never refuses). The pacing env
167
+ // override applies ONLY to the real Google Sheets provider (no injected
168
+ // transport): a valid override is plumbed through, and the production
169
+ // path builds the real ADC-backed transport with the provider's safe
170
+ // default (2,500 ms) when the override is absent. Fake transports never
171
+ // consult HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS, so local/fake suites
172
+ // stay immune to a misconfigured or invalid override in the host env.
121
173
  googleSheetsApi: options.transport === undefined
122
- ? {}
123
- : { transport: options.transport, rateLimitIntervalMs: 1 },
174
+ ? (rateLimitIntervalMs === undefined ? {} : { rateLimitIntervalMs })
175
+ : {
176
+ transport: options.transport,
177
+ rateLimitIntervalMs: 0,
178
+ },
124
179
  pollingIntervalMs,
125
180
  pollingFullScanIntervalMs,
126
181
  });
182
+ logHikouteiInternalEvent({
183
+ event: HIKOUTEI_LOG_EVENTS.SYNC_AUTOSTART_STARTED,
184
+ level: "info",
185
+ component: HIKOUTEI_LOG_COMPONENTS.SYNC_AUTOSTART,
186
+ counts: { entities: options.entities.length },
187
+ });
127
188
  return { kind: "sync", hikoutei: service.hikoutei, service };
128
189
  }
129
190
  catch (error) {
@@ -262,17 +323,119 @@ function parseIntervalEnv(env, key, fallback) {
262
323
  }
263
324
  return value;
264
325
  }
326
+ /**
327
+ * Resolves the sync request-start pacing env override, or undefined.
328
+ *
329
+ * `HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS` is the internal override for the
330
+ * direct provider's ONE shared read+write request-start limiter. Absent or
331
+ * blank means the provider's safe default (2,500 ms) applies; a present
332
+ * value must be a plain decimal integer between 1,000 ms and
333
+ * `MAX_SYNC_RATE_LIMIT_INTERVAL_MS` (~10 s). The ceiling is the largest
334
+ * interval whose worst-case three-request paced dispatch still finishes
335
+ * inside the default effect lease (120 s) with the default write timeout
336
+ * (60 s), read timeout (10 s), and provider headroom (30 s): a dispatch
337
+ * can wait up to one full interval for its first slot because the shared
338
+ * limiter may hold a prior reservation, so the strict default-safe bound
339
+ * is `120s > 60s + I + 2 * max(10s, I) + 30s` and a larger interval could
340
+ * let pacing push the dispatch past the lease and risk duplicate remote
341
+ * delivery. Values outside those bounds (including hex,
342
+ * exponent, signed, padded, fractional, and non-numeric forms) fail closed
343
+ * with the stable startup code so a mistyped override can never silently
344
+ * drop pacing to a burst or outlive the effect lease. The key stays internal
345
+ * and is never part of the root public API.
346
+ */
347
+ export function resolveSyncRateLimitIntervalMs(env) {
348
+ const raw = env[SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS];
349
+ if (raw === undefined || raw.trim() === "")
350
+ return undefined;
351
+ if (!/^\d+$/.test(raw)) {
352
+ throw new HikouteiError(HIKOUTEI_ERROR_CODES.SYNC_STARTUP_FAILED, `Sync start failed: ${SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS} must be an integer between ` +
353
+ `${MIN_SYNC_RATE_LIMIT_INTERVAL_MS} and ${MAX_SYNC_RATE_LIMIT_INTERVAL_MS} ms — current value: ${raw}`);
354
+ }
355
+ const value = Number(raw);
356
+ if (!Number.isSafeInteger(value) ||
357
+ value < MIN_SYNC_RATE_LIMIT_INTERVAL_MS ||
358
+ value > MAX_SYNC_RATE_LIMIT_INTERVAL_MS) {
359
+ throw new HikouteiError(HIKOUTEI_ERROR_CODES.SYNC_STARTUP_FAILED, `Sync start failed: ${SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS} must be an integer between ` +
360
+ `${MIN_SYNC_RATE_LIMIT_INTERVAL_MS} and ${MAX_SYNC_RATE_LIMIT_INTERVAL_MS} ms — current value: ${raw}`);
361
+ }
362
+ return value;
363
+ }
265
364
  function raiseDiagnosed(diagnostic, failure) {
266
- diagnostic("error", failure.message);
365
+ logHikouteiInternalEvent({
366
+ event: HIKOUTEI_LOG_EVENTS.SYNC_AUTOSTART_FAILED,
367
+ level: "error",
368
+ component: HIKOUTEI_LOG_COMPONENTS.SYNC_AUTOSTART,
369
+ ...describeErrorForInternalLog(failure),
370
+ });
371
+ // EVERY diagnostic sink — injected or default — receives only the
372
+ // stable class/code summary. Full failure messages can embed the
373
+ // service-account email, spreadsheet ID, credential path, or raw
374
+ // provider text and must never reach a sink; the thrown HikouteiError
375
+ // always carries the full public message regardless of the sink.
376
+ try {
377
+ diagnostic("error", stableStartupDiagnostic(failure));
378
+ }
379
+ catch {
380
+ // Fail-open: a throwing diagnostic sink (injected or default) can
381
+ // never replace the classified startup failure. The original
382
+ // HikouteiError — with its stable class and machine-readable code —
383
+ // is preserved and rethrown unchanged, exactly as if the sink had
384
+ // succeeded.
385
+ }
267
386
  throw failure;
268
387
  }
388
+ /** Stable error-class allowlist backing sink diagnostics (see logEvents.ts). */
389
+ const STABLE_CLASS_ALLOWLIST = new Set(HIKOUTEI_LOG_STABLE_CLASSES);
390
+ /** Stable error-code allowlist backing sink diagnostics (see logEvents.ts). */
391
+ const STABLE_CODE_ALLOWLIST = new Set(HIKOUTEI_LOG_STABLE_CODES);
392
+ /**
393
+ * Stable redacted startup summary for diagnostic sinks: class and code
394
+ * only, each checked against the shared stable allowlists.
395
+ *
396
+ * `failure.name` and `failure.code` are runtime strings that could carry
397
+ * secret-like text (paths, emails, tokens) if an unexpected error shape
398
+ * ever reached the sink path, so unknown or malformed values collapse to
399
+ * the fixed `unknown` class/code. The full public message is carried by
400
+ * the thrown HikouteiError alone and never reaches any sink.
401
+ */
402
+ export function stableStartupDiagnostic(failure) {
403
+ const described = describeErrorForInternalLog(failure);
404
+ const errorClass = STABLE_CLASS_ALLOWLIST.has(described.errorClass)
405
+ ? described.errorClass
406
+ : "unknown";
407
+ const code = described.code !== undefined && STABLE_CODE_ALLOWLIST.has(described.code)
408
+ ? described.code
409
+ : "unknown";
410
+ return `Hikoutei sync autostart failed (class=${errorClass}, code=${code})`;
411
+ }
412
+ /**
413
+ * Shape gate for the default sink's error line (defense in depth).
414
+ *
415
+ * The error path receives only the stable class/code summary built by
416
+ * `stableStartupDiagnostic`, but the gate re-validates the exact summary
417
+ * shape before printing: an unexpected raw message (which could embed a
418
+ * path, email, spreadsheet ID, or provider text) collapses to the
419
+ * level-only fallback and never reaches the console.
420
+ */
421
+ const STABLE_SUMMARY_SHAPE = /^Hikoutei sync autostart failed \(class=(unknown|[A-Za-z][A-Za-z0-9]*), code=(unknown|[A-Za-z][A-Za-z0-9_]*)\)$/;
269
422
  function defaultDiagnostic(level, message) {
270
423
  if (level === "info") {
424
+ // The info path emits only the static local-mode notice.
271
425
  console.info(message);
426
+ return;
272
427
  }
273
- else {
428
+ // The error path emits the already-redacted stable class/code summary
429
+ // (never the full failure message — that stays on the thrown
430
+ // HikouteiError). The shape gate above keeps the defense in depth:
431
+ // anything that is not the exact stable summary shape falls back to the
432
+ // level-only notice.
433
+ if (STABLE_SUMMARY_SHAPE.test(message)) {
274
434
  console.error(message);
275
435
  }
436
+ else {
437
+ console.error(`[hikoutei] sync autostart failed (level=${level})`);
438
+ }
276
439
  }
277
440
  function isNodeErrorWithCode(error, code) {
278
441
  return error !== null &&
@@ -1 +1 @@
1
- {"version":3,"file":"syncAutoStart.js","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncAutoStart.js","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Internal System_State readiness controller for external convergence
3
+ * barriers.
4
+ *
5
+ * External tooling (for example the local multi-table soak runner's live
6
+ * convergence phase) needs to know when a runtime's System_State outbox
7
+ * drain has finished so its own batched sheet reads do not compete with
8
+ * the initial drain on the shared request limiter. The sync service
9
+ * registers every runtime it bootstraps here and unregisters it when the
10
+ * runtime closes; a runtime that was never registered (plain local-only
11
+ * mode, or an already-closed runtime) reports ready immediately.
12
+ *
13
+ * This module is deliberately internal: it is never re-exported from
14
+ * `src/index.ts`, and applications observe readiness only through the
15
+ * library's own behavior.
16
+ */
17
+ import type { Hikoutei } from "../../../api/Hikoutei.js";
18
+ import type { MikroOrmSqliteAdapter } from "../../../adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js";
19
+ import { type SystemStateDrainReadiness } from "@hikoutei/ikisaki";
20
+ /** Registers one bootstrapped runtime for readiness queries. */
21
+ export declare function registerSystemStateReadiness(runtime: Hikoutei, storage: MikroOrmSqliteAdapter): void;
22
+ /** Unregisters one runtime (called on close, before storage is released). */
23
+ export declare function unregisterSystemStateReadiness(runtime: Hikoutei): void;
24
+ /**
25
+ * Reports the CURRENT System_State drain readiness of one runtime.
26
+ *
27
+ * Only the System_State projection's claimable in-flight effects are
28
+ * considered — never the whole-outbox idle state. A pending follower behind
29
+ * a conflict/blocked_candidate/failed predecessor is not claimable drain
30
+ * work and never defers, so an open conflict cannot stall the barrier. A
31
+ * runtime without a registered sync service (local-only mode, or already
32
+ * closed) has no outbox to drain and is ready immediately.
33
+ */
34
+ export declare function readRuntimeSystemStateReadiness(runtime: Hikoutei): Promise<SystemStateDrainReadiness>;
35
+ //# sourceMappingURL=systemStateReadiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemStateReadiness.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/systemStateReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mFAAmF,CAAC;AAC/H,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAiB3B,gEAAgE;AAChE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAEN;AAED,6EAA6E;AAC7E,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAEtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,yBAAyB,CAAC,CAIpC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Internal System_State readiness controller for external convergence
3
+ * barriers.
4
+ *
5
+ * External tooling (for example the local multi-table soak runner's live
6
+ * convergence phase) needs to know when a runtime's System_State outbox
7
+ * drain has finished so its own batched sheet reads do not compete with
8
+ * the initial drain on the shared request limiter. The sync service
9
+ * registers every runtime it bootstraps here and unregisters it when the
10
+ * runtime closes; a runtime that was never registered (plain local-only
11
+ * mode, or an already-closed runtime) reports ready immediately.
12
+ *
13
+ * This module is deliberately internal: it is never re-exported from
14
+ * `src/index.ts`, and applications observe readiness only through the
15
+ * library's own behavior.
16
+ */
17
+ import { readSystemStateDrainReadinessWithAdapter, } from "@hikoutei/ikisaki";
18
+ /**
19
+ * Registry of bootstrapped runtimes keyed by the runtime object itself.
20
+ *
21
+ * A WeakMap keeps the registry inert: a runtime that is garbage-collected
22
+ * without closing (or whose registration leaked) never pins its storage
23
+ * or SQLite file open, and the key is the exact public `Hikoutei` object
24
+ * the caller holds.
25
+ */
26
+ const registeredRuntimes = new WeakMap();
27
+ /** Registers one bootstrapped runtime for readiness queries. */
28
+ export function registerSystemStateReadiness(runtime, storage) {
29
+ registeredRuntimes.set(runtime, { storage });
30
+ }
31
+ /** Unregisters one runtime (called on close, before storage is released). */
32
+ export function unregisterSystemStateReadiness(runtime) {
33
+ registeredRuntimes.delete(runtime);
34
+ }
35
+ /**
36
+ * Reports the CURRENT System_State drain readiness of one runtime.
37
+ *
38
+ * Only the System_State projection's claimable in-flight effects are
39
+ * considered — never the whole-outbox idle state. A pending follower behind
40
+ * a conflict/blocked_candidate/failed predecessor is not claimable drain
41
+ * work and never defers, so an open conflict cannot stall the barrier. A
42
+ * runtime without a registered sync service (local-only mode, or already
43
+ * closed) has no outbox to drain and is ready immediately.
44
+ */
45
+ export async function readRuntimeSystemStateReadiness(runtime) {
46
+ const entry = registeredRuntimes.get(runtime);
47
+ if (entry === undefined)
48
+ return { status: "ready" };
49
+ return readSystemStateDrainReadinessWithAdapter(entry.storage);
50
+ }
51
+ //# sourceMappingURL=systemStateReadiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemStateReadiness.js","sourceRoot":"","sources":["../../../../src/application/sync/service/systemStateReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EACL,wCAAwC,GAEzC,MAAM,mBAAmB,CAAC;AAO3B;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAA+B,CAAC;AAEtE,gEAAgE;AAChE,MAAM,UAAU,4BAA4B,CAC1C,OAAiB,EACjB,OAA8B;IAE9B,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,8BAA8B,CAAC,OAAiB;IAC9D,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAiB;IAEjB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACpD,OAAO,wCAAwC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC"}
@@ -29,12 +29,22 @@
29
29
  * stable sorted order, so it cannot deadlock with single-sheet mutations.
30
30
  * - Provisioning uses a dedicated lane so setup never races an append/write.
31
31
  * - A failing or throwing mutation releases the lane, so it never deadlocks.
32
+ * - `runSerializedInner` runs an optional in-lane precondition (the effect
33
+ * lease renewal) after the lane is acquired and before the inner provider
34
+ * call, so queue time plus limiter waits cannot outlive the lease.
32
35
  */
33
- import type { ApplySyncEffectsRequest, ApplySyncEffectsResult, EnsureSyncRowAnchorsRequest, EnsureSyncRowAnchorsResult, FastAppendRowsRequest, FastAppendRowsResult, ReadSyncEffectPostconditionsRequest, ReadSyncSnapshotRequest, ReadSyncTableRowsRequest, SyncEffectPostcondition, SyncProjectionEffect, SyncEffectPostconditionResult, SyncSheetsSnapshot, SyncObservedSnapshot, SyncSheetsProvider, SyncSheetsObservationBatchProvider, SyncSheetsTableReader, SyncTableRowsResult } from "../syncSheets.js";
36
+ import type { ApplySyncEffectsRequest, ApplySyncEffectsResult, EnsureSyncRowAnchorsRequest, EnsureSyncRowAnchorsResult, FastAppendRowsRequest, FastAppendRowsResult, ReadSyncEffectPostconditionsRequest, ReadSyncSnapshotRequest, ReadSyncTableRowsRequest, SyncEffectPostcondition, SyncProjectionEffect, SyncEffectPostconditionResult, SyncSheetsSnapshot, SyncObservedSnapshot, SyncSheetsProvider, SyncSheetsObservationBatchProvider, SyncSheetsTableReader, SyncTableRowsResult, SyncEffectWorkerProvider } from "../syncSheets.js";
34
37
  import { AsyncMutex } from "./asyncMutex.js";
35
38
  import { type CoordinatorLaneEvent } from "./laneTelemetry.js";
36
39
  /** Provider boundary the coordinator wraps (effect + observation + table read). */
37
40
  export type CoordinatedSheetsInner = SyncSheetsProvider & SyncSheetsTableReader;
41
+ /**
42
+ * Thrown when an in-lane precondition callback rejects before the remote
43
+ * call. Carries only the static redacted message above.
44
+ */
45
+ export declare class CoordinatedLanePreconditionError extends Error {
46
+ constructor();
47
+ }
38
48
  /** Options for constructing a per-spreadsheet coordinator. */
39
49
  export interface CoordinatedSheetsProviderOptions<TInner extends CoordinatedSheetsInner> {
40
50
  readonly inner: TInner;
@@ -73,6 +83,21 @@ export declare class CoordinatedSheetsProvider<TInner extends CoordinatedSheetsI
73
83
  * competing provider request outside the coordinator.
74
84
  */
75
85
  runSerializedControl<T>(physicalSheetId: string, operation: string, task: () => Promise<T>): Promise<T>;
86
+ /**
87
+ * Runs one internal remote task on the mutation lane with an optional
88
+ * in-lane precondition hook.
89
+ *
90
+ * The effect dispatcher uses this so the worker's lease-renewal callback
91
+ * runs AFTER the lane is acquired (covering queue wait time) but BEFORE the
92
+ * inner provider's remote call (covering shared limiter waits and the call
93
+ * itself). The `remote` closure receives the INNER provider and must call
94
+ * it directly, so the call never re-enters this coordinator's lane and
95
+ * cannot deadlock. When `beforeRemote` resolves false (or throws), a
96
+ * `CoordinatedLanePreconditionError` is raised before any remote request
97
+ * and the lane is released normally; lane telemetry still records the
98
+ * aborted dispatch with a delivery-uncertain outcome.
99
+ */
100
+ runSerializedInner<T>(physicalSheetId: string, operation: string, remote: (inner: TInner) => Promise<T>, beforeRemote?: () => Promise<boolean>): Promise<T>;
76
101
  fastAppendRows(request: FastAppendRowsRequest): Promise<FastAppendRowsResult>;
77
102
  applyEffects(request: ApplySyncEffectsRequest): Promise<ApplySyncEffectsResult>;
78
103
  readEffectPostcondition(effect: SyncProjectionEffect): Promise<SyncEffectPostcondition>;
@@ -100,4 +125,15 @@ export declare class CoordinatedSheetsProvider<TInner extends CoordinatedSheetsI
100
125
  private emitFailure;
101
126
  private emit;
102
127
  }
128
+ /** The in-lane dispatch capability the effect dispatcher detects on a provider. */
129
+ export type CoordinatedSerializedInnerProvider = Pick<CoordinatedSheetsProvider<CoordinatedSheetsInner>, "runSerializedInner">;
130
+ /**
131
+ * Returns whether a provider exposes the coordinator's in-lane dispatch hook.
132
+ *
133
+ * The effect dispatcher uses this to route its `beforeRemoteDispatch` lease
134
+ * renewal through the acquired mutation lane; providers without the hook
135
+ * (bare fakes and test doubles) keep the direct call path and simply ignore
136
+ * the hook.
137
+ */
138
+ export declare function hasCoordinatedSerializedInner(provider: SyncEffectWorkerProvider): provider is SyncEffectWorkerProvider & CoordinatedSerializedInnerProvider;
103
139
  //# sourceMappingURL=CoordinatedSheetsProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoordinatedSheetsProvider.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,mCAAmC,EACnC,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,kCAAkC,EAClC,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAG5B,mFAAmF;AACnF,MAAM,MAAM,sBAAsB,GAChC,kBAAkB,GAClB,qBAAqB,CAAC;AAMxB,8DAA8D;AAC9D,MAAM,WAAW,gCAAgC,CAAC,MAAM,SAAS,sBAAsB;IACrF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3E,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC7D,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,qBAAa,yBAAyB,CAAC,MAAM,SAAS,sBAAsB,CAC1E,YAAW,kBAAkB,EAAE,qBAAqB,EAAE,kCAAkC;IACxF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsD;IAClF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;gBAEpC,OAAO,EAAE,gCAAgC,CAAC,MAAM,CAAC;IAOpE,qEAAqE;IAC9D,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAM5E;;;;OAIG;IACI,oBAAoB,CAAC,CAAC,EAC3B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC;IAIA,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAM7E,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM/E,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAMvF,wBAAwB,CACnC,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,SAAS,6BAA6B,EAAE,CAAC;IAMvC,gBAAgB,CAC3B,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IAMzB,eAAe,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAMhF,gBAAgB,CAC3B,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAC3C,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAqB3C,iEAAiE;IACpD,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIxF,oEAAoE;IACvD,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAItF,4EAA4E;IAC/D,aAAa,CACxB,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAI1C;;;;;OAKG;YACW,eAAe;IAS7B,OAAO,CAAC,OAAO;YASD,WAAW;YASX,UAAU;IA4CxB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,IAAI;CAOb"}
1
+ {"version":3,"file":"CoordinatedSheetsProvider.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"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"}
@@ -29,11 +29,31 @@
29
29
  * stable sorted order, so it cannot deadlock with single-sheet mutations.
30
30
  * - Provisioning uses a dedicated lane so setup never races an append/write.
31
31
  * - A failing or throwing mutation releases the lane, so it never deadlocks.
32
+ * - `runSerializedInner` runs an optional in-lane precondition (the effect
33
+ * lease renewal) after the lane is acquired and before the inner provider
34
+ * call, so queue time plus limiter waits cannot outlive the lease.
32
35
  */
33
36
  import { isSyncSheetsObservationBatchProvider, } from "../syncSheets.js";
34
37
  import { AsyncMutex } from "./asyncMutex.js";
35
38
  import { TRANSPORT_OUTCOME_KINDS, } from "./laneTelemetry.js";
36
39
  import { classifyTransportOutcome } from "../transportOutcome.js";
40
+ /**
41
+ * Redacted, stable diagnostic for an aborted in-lane precondition.
42
+ *
43
+ * Static by design: it never embeds effect IDs, payloads, sheet names, or
44
+ * provider errors, so it is safe to persist on outbox rows and logs.
45
+ */
46
+ const COORDINATED_LANE_PRECONDITION_MESSAGE = "Mutation lane precondition failed before the remote call; the request was not sent.";
47
+ /**
48
+ * Thrown when an in-lane precondition callback rejects before the remote
49
+ * call. Carries only the static redacted message above.
50
+ */
51
+ export class CoordinatedLanePreconditionError extends Error {
52
+ constructor() {
53
+ super(COORDINATED_LANE_PRECONDITION_MESSAGE);
54
+ this.name = "CoordinatedLanePreconditionError";
55
+ }
56
+ }
37
57
  /**
38
58
  * Serializes provider mutations per lane while keeping value reads lock-free.
39
59
  *
@@ -69,6 +89,23 @@ export class CoordinatedSheetsProvider {
69
89
  runSerializedControl(physicalSheetId, operation, task) {
70
90
  return this.runMutation(physicalSheetId, operation, task);
71
91
  }
92
+ /**
93
+ * Runs one internal remote task on the mutation lane with an optional
94
+ * in-lane precondition hook.
95
+ *
96
+ * The effect dispatcher uses this so the worker's lease-renewal callback
97
+ * runs AFTER the lane is acquired (covering queue wait time) but BEFORE the
98
+ * inner provider's remote call (covering shared limiter waits and the call
99
+ * itself). The `remote` closure receives the INNER provider and must call
100
+ * it directly, so the call never re-enters this coordinator's lane and
101
+ * cannot deadlock. When `beforeRemote` resolves false (or throws), a
102
+ * `CoordinatedLanePreconditionError` is raised before any remote request
103
+ * and the lane is released normally; lane telemetry still records the
104
+ * aborted dispatch with a delivery-uncertain outcome.
105
+ */
106
+ runSerializedInner(physicalSheetId, operation, remote, beforeRemote) {
107
+ return this.runMutation(physicalSheetId, operation, () => remote(this.inner), beforeRemote);
108
+ }
72
109
  async fastAppendRows(request) {
73
110
  return this.runMutation(request.physicalSheetId, "fastAppendRows", () => this.inner.fastAppendRows(request));
74
111
  }
@@ -142,11 +179,11 @@ export class CoordinatedSheetsProvider {
142
179
  }
143
180
  return lane;
144
181
  }
145
- async runMutation(physicalSheetId, operation, task) {
182
+ async runMutation(physicalSheetId, operation, task, beforeRemote) {
146
183
  const key = this.resolveKey(physicalSheetId);
147
- return this.runInLanes([key], operation, task);
184
+ return this.runInLanes([key], operation, task, beforeRemote);
148
185
  }
149
- async runInLanes(keys, operation, task) {
186
+ async runInLanes(keys, operation, task, beforeRemote) {
150
187
  // Acquire lanes in stable sorted order so concurrent batch mutations cannot
151
188
  // deadlock with each other regardless of input order. Each release token is
152
189
  // held until the task settles so the lane stays locked for the whole call.
@@ -163,6 +200,12 @@ export class CoordinatedSheetsProvider {
163
200
  const queueWaitMs = this.now() - queueStartedAt;
164
201
  const remoteStartedAt = this.now();
165
202
  try {
203
+ // The in-lane precondition runs after the queue wait but before any
204
+ // remote request; a false result aborts the dispatch with a redacted
205
+ // classified error instead of sending a write with an expired lease.
206
+ if (beforeRemote !== undefined && !(await beforeRemote())) {
207
+ throw new CoordinatedLanePreconditionError();
208
+ }
166
209
  const result = await task();
167
210
  this.emitSuccess(operation, ordered.join(","), queueWaitMs, remoteStartedAt);
168
211
  return result;
@@ -215,6 +258,17 @@ export class CoordinatedSheetsProvider {
215
258
  }
216
259
  }
217
260
  const DEFAULT_LANE_KEY = "default";
261
+ /**
262
+ * Returns whether a provider exposes the coordinator's in-lane dispatch hook.
263
+ *
264
+ * The effect dispatcher uses this to route its `beforeRemoteDispatch` lease
265
+ * renewal through the acquired mutation lane; providers without the hook
266
+ * (bare fakes and test doubles) keep the direct call path and simply ignore
267
+ * the hook.
268
+ */
269
+ export function hasCoordinatedSerializedInner(provider) {
270
+ return typeof provider.runSerializedInner === "function";
271
+ }
218
272
  /** Returns the distinct, sorted lane keys for one batch mutation. */
219
273
  function distinctLaneKeys(keys) {
220
274
  return [...new Set(keys)].sort();
@@ -1 +1 @@
1
- {"version":3,"file":"CoordinatedSheetsProvider.js","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoordinatedSheetsProvider.js","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import { type NormalizedCell } from "../../../shared/encoding/index.js";
3
+ /** Wire shape for one persisted projection effect before semantic promotion. */
4
+ export declare const syncProjectionEffectPayloadSchema: z.ZodObject<{
5
+ sheetName: z.ZodString;
6
+ registeredRange: z.ZodString;
7
+ schemaVersion: z.ZodNumber;
8
+ targetAnchor: z.ZodString;
9
+ fields: z.ZodRecord<z.ZodString, z.ZodCustom<NormalizedCell, NormalizedCell>>;
10
+ targetVisibleHash: z.ZodString;
11
+ createIfMissing: z.ZodBoolean;
12
+ expectedCandidateHash: z.ZodNullable<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ //# sourceMappingURL=payloadSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/sheetsContract/payloadSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAW3C,gFAAgF;AAChF,eAAO,MAAM,iCAAiC;;;;;;;;;iBASpC,CAAC"}