@mongrov/analytics 0.6.0 → 0.7.0

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 (213) hide show
  1. package/README.md +23 -10
  2. package/UPGRADING.md +370 -0
  3. package/dist/core/device-events.d.ts +14 -0
  4. package/dist/core/device-events.d.ts.map +1 -0
  5. package/dist/core/device-events.js +13 -0
  6. package/dist/core/device-events.js.map +1 -0
  7. package/dist/core/errors.d.ts +1 -1
  8. package/dist/core/errors.d.ts.map +1 -1
  9. package/dist/core/errors.js.map +1 -1
  10. package/dist/core/extensions.d.ts +21 -4
  11. package/dist/core/extensions.d.ts.map +1 -1
  12. package/dist/core/extensions.js +21 -4
  13. package/dist/core/extensions.js.map +1 -1
  14. package/dist/core/factory.d.ts.map +1 -1
  15. package/dist/core/factory.js +125 -23
  16. package/dist/core/factory.js.map +1 -1
  17. package/dist/core/hooks.js +1 -1
  18. package/dist/core/hooks.js.map +1 -1
  19. package/dist/core/index.d.ts +11 -1
  20. package/dist/core/index.d.ts.map +1 -1
  21. package/dist/core/index.js +14 -0
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/core/insight.d.ts +44 -0
  24. package/dist/core/insight.d.ts.map +1 -0
  25. package/dist/core/insight.js +62 -0
  26. package/dist/core/insight.js.map +1 -0
  27. package/dist/core/metric_metadata.d.ts +55 -0
  28. package/dist/core/metric_metadata.d.ts.map +1 -1
  29. package/dist/core/metric_metadata.js +35 -7
  30. package/dist/core/metric_metadata.js.map +1 -1
  31. package/dist/core/migrations.d.ts.map +1 -1
  32. package/dist/core/migrations.js +64 -2
  33. package/dist/core/migrations.js.map +1 -1
  34. package/dist/core/retention.d.ts +44 -13
  35. package/dist/core/retention.d.ts.map +1 -1
  36. package/dist/core/retention.js +49 -22
  37. package/dist/core/retention.js.map +1 -1
  38. package/dist/core/schemas.d.ts +73 -2
  39. package/dist/core/schemas.d.ts.map +1 -1
  40. package/dist/core/schemas.js +154 -3
  41. package/dist/core/schemas.js.map +1 -1
  42. package/dist/core/table_metadata.d.ts.map +1 -1
  43. package/dist/core/table_metadata.js +3 -0
  44. package/dist/core/table_metadata.js.map +1 -1
  45. package/dist/core/types.d.ts +45 -10
  46. package/dist/core/types.d.ts.map +1 -1
  47. package/dist/core/warehouse.d.ts +28 -0
  48. package/dist/core/warehouse.d.ts.map +1 -1
  49. package/dist/core/warehouse.js +44 -0
  50. package/dist/core/warehouse.js.map +1 -1
  51. package/dist/core/watermark-cache.d.ts +75 -0
  52. package/dist/core/watermark-cache.d.ts.map +1 -0
  53. package/dist/core/watermark-cache.js +0 -0
  54. package/dist/core/watermark-cache.js.map +1 -0
  55. package/dist/rules/__fakes__/fakeEngine.d.ts +2 -0
  56. package/dist/rules/__fakes__/fakeEngine.d.ts.map +1 -1
  57. package/dist/rules/__fakes__/fakeEngine.js +4 -0
  58. package/dist/rules/__fakes__/fakeEngine.js.map +1 -1
  59. package/dist/rules/baseline-reader.d.ts +55 -0
  60. package/dist/rules/baseline-reader.d.ts.map +1 -0
  61. package/dist/rules/baseline-reader.js +111 -0
  62. package/dist/rules/baseline-reader.js.map +1 -0
  63. package/dist/rules/compiler.d.ts +36 -1
  64. package/dist/rules/compiler.d.ts.map +1 -1
  65. package/dist/rules/compiler.js +185 -39
  66. package/dist/rules/compiler.js.map +1 -1
  67. package/dist/rules/defaults/luminx.d.ts.map +1 -1
  68. package/dist/rules/defaults/luminx.js +8 -0
  69. package/dist/rules/defaults/luminx.js.map +1 -1
  70. package/dist/rules/defaults/viva.d.ts.map +1 -1
  71. package/dist/rules/defaults/viva.js +7 -0
  72. package/dist/rules/defaults/viva.js.map +1 -1
  73. package/dist/rules/defaults/yogaring.d.ts.map +1 -1
  74. package/dist/rules/defaults/yogaring.js +7 -0
  75. package/dist/rules/defaults/yogaring.js.map +1 -1
  76. package/dist/rules/defaults/ziva.d.ts.map +1 -1
  77. package/dist/rules/defaults/ziva.js +100 -24
  78. package/dist/rules/defaults/ziva.js.map +1 -1
  79. package/dist/rules/evaluator.d.ts +14 -3
  80. package/dist/rules/evaluator.d.ts.map +1 -1
  81. package/dist/rules/evaluator.js +157 -5
  82. package/dist/rules/evaluator.js.map +1 -1
  83. package/dist/rules/factory.d.ts.map +1 -1
  84. package/dist/rules/factory.js +5 -1
  85. package/dist/rules/factory.js.map +1 -1
  86. package/dist/rules/index.d.ts +2 -1
  87. package/dist/rules/index.d.ts.map +1 -1
  88. package/dist/rules/index.js +2 -1
  89. package/dist/rules/index.js.map +1 -1
  90. package/dist/rules/schema.d.ts +75 -4
  91. package/dist/rules/schema.d.ts.map +1 -1
  92. package/dist/rules/schema.js +44 -0
  93. package/dist/rules/schema.js.map +1 -1
  94. package/dist/rules/types.d.ts +16 -1
  95. package/dist/rules/types.d.ts.map +1 -1
  96. package/dist/rules/validator.d.ts.map +1 -1
  97. package/dist/rules/validator.js +56 -0
  98. package/dist/rules/validator.js.map +1 -1
  99. package/dist/sync/baseline-compute.d.ts +63 -0
  100. package/dist/sync/baseline-compute.d.ts.map +1 -0
  101. package/dist/sync/baseline-compute.js +211 -0
  102. package/dist/sync/baseline-compute.js.map +1 -0
  103. package/dist/sync/events.d.ts +19 -5
  104. package/dist/sync/events.d.ts.map +1 -1
  105. package/dist/sync/events.js +17 -0
  106. package/dist/sync/events.js.map +1 -1
  107. package/dist/sync/factory.d.ts +25 -4
  108. package/dist/sync/factory.d.ts.map +1 -1
  109. package/dist/sync/factory.js +108 -15
  110. package/dist/sync/factory.js.map +1 -1
  111. package/dist/sync/fetcher.d.ts +15 -2
  112. package/dist/sync/fetcher.d.ts.map +1 -1
  113. package/dist/sync/fetcher.js +43 -7
  114. package/dist/sync/fetcher.js.map +1 -1
  115. package/dist/sync/flusher.d.ts +52 -2
  116. package/dist/sync/flusher.d.ts.map +1 -1
  117. package/dist/sync/flusher.js +78 -9
  118. package/dist/sync/flusher.js.map +1 -1
  119. package/dist/sync/index.d.ts +3 -1
  120. package/dist/sync/index.d.ts.map +1 -1
  121. package/dist/sync/index.js +1 -0
  122. package/dist/sync/index.js.map +1 -1
  123. package/dist/sync/mapper/activity.d.ts.map +1 -1
  124. package/dist/sync/mapper/activity.js +2 -1
  125. package/dist/sync/mapper/activity.js.map +1 -1
  126. package/dist/sync/mapper/ring-config.js +1 -1
  127. package/dist/sync/mapper/ring-config.js.map +1 -1
  128. package/dist/sync/mapper/schema.d.ts +411 -0
  129. package/dist/sync/mapper/schema.d.ts.map +1 -0
  130. package/dist/sync/mapper/schema.js +128 -0
  131. package/dist/sync/mapper/schema.js.map +1 -0
  132. package/dist/sync/mapper/sleep.d.ts +58 -13
  133. package/dist/sync/mapper/sleep.d.ts.map +1 -1
  134. package/dist/sync/mapper/sleep.js +141 -44
  135. package/dist/sync/mapper/sleep.js.map +1 -1
  136. package/dist/sync/mapper/types.d.ts +66 -10
  137. package/dist/sync/mapper/types.d.ts.map +1 -1
  138. package/dist/sync/scheduler.d.ts +7 -0
  139. package/dist/sync/scheduler.d.ts.map +1 -1
  140. package/dist/sync/scheduler.js +14 -0
  141. package/dist/sync/scheduler.js.map +1 -1
  142. package/dist/tools/__fakes__/engine.d.ts +2 -0
  143. package/dist/tools/__fakes__/engine.d.ts.map +1 -1
  144. package/dist/tools/__fakes__/engine.js +10 -0
  145. package/dist/tools/__fakes__/engine.js.map +1 -1
  146. package/dist/tools/authorize.d.ts +19 -12
  147. package/dist/tools/authorize.d.ts.map +1 -1
  148. package/dist/tools/authorize.js +31 -40
  149. package/dist/tools/authorize.js.map +1 -1
  150. package/dist/tools/factory.d.ts +2 -0
  151. package/dist/tools/factory.d.ts.map +1 -1
  152. package/dist/tools/factory.js +12 -1
  153. package/dist/tools/factory.js.map +1 -1
  154. package/dist/tools/formatters/copy-guidelines.d.ts +57 -0
  155. package/dist/tools/formatters/copy-guidelines.d.ts.map +1 -0
  156. package/dist/tools/formatters/copy-guidelines.js +110 -0
  157. package/dist/tools/formatters/copy-guidelines.js.map +1 -0
  158. package/dist/tools/formatters/index.d.ts +14 -0
  159. package/dist/tools/formatters/index.d.ts.map +1 -0
  160. package/dist/tools/formatters/index.js +14 -0
  161. package/dist/tools/formatters/index.js.map +1 -0
  162. package/dist/tools/formatters/spo2.d.ts +21 -0
  163. package/dist/tools/formatters/spo2.d.ts.map +1 -0
  164. package/dist/tools/formatters/spo2.js +79 -0
  165. package/dist/tools/formatters/spo2.js.map +1 -0
  166. package/dist/tools/{formatters.d.ts → formatters/text.d.ts} +1 -1
  167. package/dist/tools/formatters/text.d.ts.map +1 -0
  168. package/dist/tools/{formatters.js → formatters/text.js} +1 -1
  169. package/dist/tools/formatters/text.js.map +1 -0
  170. package/dist/tools/impls/activity.d.ts +2 -2
  171. package/dist/tools/impls/activity.js +7 -3
  172. package/dist/tools/impls/activity.js.map +1 -1
  173. package/dist/tools/impls/anomaly.d.ts +2 -2
  174. package/dist/tools/impls/anomaly.js +8 -4
  175. package/dist/tools/impls/anomaly.js.map +1 -1
  176. package/dist/tools/impls/compare.d.ts +2 -2
  177. package/dist/tools/impls/compare.js +8 -4
  178. package/dist/tools/impls/compare.js.map +1 -1
  179. package/dist/tools/impls/hrv.d.ts +2 -2
  180. package/dist/tools/impls/hrv.js +6 -2
  181. package/dist/tools/impls/hrv.js.map +1 -1
  182. package/dist/tools/impls/insights.d.ts +4 -4
  183. package/dist/tools/impls/insights.d.ts.map +1 -1
  184. package/dist/tools/impls/insights.js +10 -3
  185. package/dist/tools/impls/insights.js.map +1 -1
  186. package/dist/tools/impls/sleep.d.ts +2 -2
  187. package/dist/tools/impls/sleep.js +6 -2
  188. package/dist/tools/impls/sleep.js.map +1 -1
  189. package/dist/tools/impls/spo2.d.ts +52 -0
  190. package/dist/tools/impls/spo2.d.ts.map +1 -0
  191. package/dist/tools/impls/spo2.js +65 -0
  192. package/dist/tools/impls/spo2.js.map +1 -0
  193. package/dist/tools/index.d.ts +1 -0
  194. package/dist/tools/index.d.ts.map +1 -1
  195. package/dist/tools/index.js +4 -0
  196. package/dist/tools/index.js.map +1 -1
  197. package/dist/tools/mcp/guard.d.ts +28 -11
  198. package/dist/tools/mcp/guard.d.ts.map +1 -1
  199. package/dist/tools/mcp/guard.js +45 -15
  200. package/dist/tools/mcp/guard.js.map +1 -1
  201. package/dist/tools/mcp/index.d.ts +1 -1
  202. package/dist/tools/mcp/index.d.ts.map +1 -1
  203. package/dist/tools/mcp/index.js +1 -1
  204. package/dist/tools/mcp/index.js.map +1 -1
  205. package/dist/tools/mcp/server.d.ts.map +1 -1
  206. package/dist/tools/mcp/server.js +4 -0
  207. package/dist/tools/mcp/server.js.map +1 -1
  208. package/dist/tools/mcp/transports/http.d.ts.map +1 -1
  209. package/dist/tools/mcp/transports/http.js +4 -0
  210. package/dist/tools/mcp/transports/http.js.map +1 -1
  211. package/package.json +8 -5
  212. package/dist/tools/formatters.d.ts.map +0 -1
  213. package/dist/tools/formatters.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-compute.js","sourceRoot":"","sources":["../../src/sync/baseline-compute.ts"],"names":[],"mappings":"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"}
@@ -9,15 +9,20 @@
9
9
  * The `EventBus` is injected by the app (typically `@mongrov/core`'s event bus).
10
10
  * Consumers use these events to invalidate caches / re-run subscriptions.
11
11
  */
12
+ import type { EventBus as AnalyticsEventBus } from '../core/types';
12
13
  import type { FlushedEvent, SyncEmitter } from './flusher';
13
14
  import type { PushResult } from './pusher';
14
15
  /**
15
- * Minimal event-bus contract. Kept narrow so any host (React Query cache,
16
- * mitt, EventEmitter, custom fan-out) satisfies it structurally.
16
+ * The emit-only half of the package's `EventBus` contract.
17
+ *
18
+ * Derived from `core/types.ts` rather than redeclared: the sync layer only
19
+ * ever publishes, so requiring `subscribe` / `subscribePattern` here would
20
+ * force every host (React Query cache, mitt, EventEmitter, custom fan-out)
21
+ * to implement surface it never uses. Deriving keeps the two in step — a
22
+ * change to the core `emit` signature surfaces here instead of silently
23
+ * producing two incompatible buses in one package.
17
24
  */
18
- export interface EventBus {
19
- emit: (name: string, payload?: unknown) => void;
20
- }
25
+ export type EventBus = Pick<AnalyticsEventBus, 'emit'>;
21
26
  export interface FlushInsertPayload {
22
27
  table: string;
23
28
  rowsFlushed: number;
@@ -27,6 +32,15 @@ export interface SyncCompletePayload {
27
32
  table: string;
28
33
  rowsPushed: number;
29
34
  }
35
+ /** Payload of the `batch:complete` bus event (Sprint 5 T-12). */
36
+ export interface BatchCompletePayload {
37
+ batchId: string;
38
+ affectedTables: string[];
39
+ affectedUserIds: string[];
40
+ brand?: string;
41
+ familyId?: string;
42
+ rowCounts: Record<string, number>;
43
+ }
30
44
  /**
31
45
  * Adapts an `EventBus` into a `SyncEmitter` (as consumed by `BatchFlusher.emit`).
32
46
  * Only successful flushes produce an `${table}:insert` event; failures pass
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sync/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAW1D;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;AAEtD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAUzD;AAED;;;GAGG;AACH,YAAY,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sync/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CA4B1D;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;AAEtD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAUzD;AAED;;;GAGG;AACH,YAAY,EAAE,YAAY,EAAE,CAAA"}
@@ -24,6 +24,23 @@ export function bindFlushEvents(bus) {
24
24
  reason: event.payload.reason,
25
25
  };
26
26
  bus.emit(`${event.payload.table}:insert`, payload);
27
+ return;
28
+ }
29
+ if (event.type === 'batch-complete') {
30
+ // Both event families are emitted, and they serve different
31
+ // consumers: `{table}:insert` drives cache invalidation, which wants
32
+ // to refresh as early as possible, while `batch:complete` drives rule
33
+ // evaluation, which must not run until every table has landed
34
+ // (Sprint 5 item (a)).
35
+ const payload = {
36
+ batchId: event.payload.batchId,
37
+ affectedTables: event.payload.affectedTables,
38
+ affectedUserIds: event.payload.affectedUserIds,
39
+ brand: event.payload.brand,
40
+ familyId: event.payload.familyId,
41
+ rowCounts: event.payload.rowCounts,
42
+ };
43
+ bus.emit('batch:complete', payload);
27
44
  }
28
45
  };
29
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sync/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwBH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAuB;gBAClC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;gBACtC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;aAC7B,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,OAAO,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAID;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IAC1C,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sync/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuCH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAuB;gBAClC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;gBACtC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;aAC7B,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,OAAO,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,4DAA4D;YAC5D,qEAAqE;YACrE,sEAAsE;YACtE,8DAA8D;YAC9D,uBAAuB;YACvB,MAAM,OAAO,GAAyB;gBACpC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;gBAC9B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;gBAC5C,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe;gBAC9C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;gBAChC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;aACnC,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACrC,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAID;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IAC1C,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -50,12 +50,33 @@ export interface CreateSyncManagerConfig {
50
50
  taskName?: string;
51
51
  };
52
52
  /**
53
- * Optional rules engine wired into the flush pipeline. After a successful
54
- * flush the manager calls `rulesEngine.evaluateOnBatch({ affectedUserIds,
55
- * affectedTables: [table] })`. Fire-and-forget: the evaluator swallows its
56
- * own errors, so we never block a sync cycle on rules.
53
+ * Optional rules engine wired into the flush pipeline. Evaluation is
54
+ * driven by `batch:complete` (see `strictBatchOrdering`). Fire-and-forget:
55
+ * the evaluator swallows its own errors, so we never block a sync cycle
56
+ * on rules.
57
57
  */
58
58
  rulesEngine?: RulesEngine;
59
+ /**
60
+ * When true (default), rules evaluate once per batch on `batch:complete`
61
+ * rather than per table on each `{table}:insert` (Sprint 5 item (a)).
62
+ *
63
+ * This is the fix for a real race: a `context: 'asleep'` rule JOINs
64
+ * `v_sleep_session`, and firing it the moment `spo2` flushes lets it
65
+ * evaluate against a night whose sleep rows are still buffered. Set
66
+ * false only for a consumer that wants lower evaluation latency and
67
+ * ships no context-JOIN or consecutive rules.
68
+ */
69
+ strictBatchOrdering?: boolean;
70
+ /**
71
+ * Resolve a user's IANA timezone for day-first baseline bucketing
72
+ * (Sprint 5 §7). `User.timezone` lives in auth/RxDB, so it has to be
73
+ * injected rather than read here. Falls back to the device zone when
74
+ * omitted or when it resolves undefined — wrong-but-close beats
75
+ * refusing to compute a baseline at all.
76
+ */
77
+ userTimezoneProvider?: (userId: string) => Promise<string | undefined>;
78
+ /** Disable the per-cycle baseline recompute (Sprint 5 T-15). */
79
+ computeBaselines?: boolean;
59
80
  logger?: SchedulerLogger;
60
81
  /**
61
82
  * Consumer-provided translation between firmware ring-config semantics
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI/C,OAAO,KAAK,EAIV,oBAAoB,EACrB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAc,WAAW,EAAkC,MAAM,WAAW,CAAA;AAExF,OAAO,KAAK,EAAe,cAAc,EAAe,MAAM,SAAS,CAAA;AAIvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAyCjD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,aAAa,CAAA;IAClB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IAC9C,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,WAAW,CAAC,EAAE,cAAc,CAAA;IAC5B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,cAAc,CAAA;KACxB,CAAA;IACD,SAAS,CAAC,EAAE;QACV,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,CA+M9E"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAI5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI/C,OAAO,KAAK,EAIV,oBAAoB,EACrB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAc,WAAW,EAAkC,MAAM,WAAW,CAAA;AAExF,OAAO,KAAK,EAAe,cAAc,EAAe,MAAM,SAAS,CAAA;AAIvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAyCjD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,aAAa,CAAA;IAClB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IAC9C,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,WAAW,CAAC,EAAE,cAAc,CAAA;IAC5B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,cAAc,CAAA;KACxB,CAAA;IACD,SAAS,CAAC,EAAE;QACV,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,CAqT9E"}
@@ -17,6 +17,7 @@
17
17
  * controls; hooks in `hooks.ts` subscribe to state transitions.
18
18
  */
19
19
  import { z } from 'zod';
20
+ import { createBaselineComputer } from './baseline-compute';
20
21
  import { SensorBuffer } from './buffer';
21
22
  import { bindFlushEvents, bindPushEvents } from './events';
22
23
  import { R2Fetcher } from './fetcher';
@@ -89,24 +90,71 @@ export function createSyncManager(config) {
89
90
  // never stalls sync.
90
91
  const rulesEngine = config.rulesEngine;
91
92
  const rulesLogger = config.logger;
93
+ // Sprint 5 item (a): rules evaluate on `batch-complete`, never per-table.
94
+ // `strictBatchOrdering` (default true) is the escape hatch — setting it
95
+ // false restores the 0.1.0 per-table trigger for a consumer that needs
96
+ // lower latency and has no context-JOIN rules to race against.
97
+ const strictBatchOrdering = config.strictBatchOrdering ?? true;
98
+ const evaluateRules = (affectedTables, affectedUserIds, label) => {
99
+ if (!rulesEngine || affectedUserIds.length === 0 || affectedTables.length === 0) {
100
+ return;
101
+ }
102
+ // Fire-and-forget: a slow or throwing evaluator must never stall sync
103
+ // (principle 35).
104
+ rulesEngine.evaluateOnBatch({ affectedUserIds, affectedTables })
105
+ .catch((err) => {
106
+ rulesLogger?.warn('sync.factory: rulesEngine.evaluateOnBatch threw', {
107
+ trigger: label,
108
+ err: err instanceof Error ? err.message : String(err),
109
+ });
110
+ });
111
+ };
92
112
  const flushEmitter = (event) => {
93
113
  if (event.type === 'flushed') {
94
114
  progress.pendingByTable[event.payload.table] = 0;
95
115
  progress.lastFlushAt = Date.now();
96
- if (rulesEngine && event.payload.affectedUserIds.length > 0) {
97
- rulesEngine.evaluateOnBatch({
98
- affectedUserIds: event.payload.affectedUserIds,
99
- affectedTables: [event.payload.table],
100
- }).catch((err) => {
101
- rulesLogger?.warn('sync.factory: rulesEngine.evaluateOnBatch threw', {
102
- table: event.payload.table,
103
- err: err instanceof Error ? err.message : String(err),
104
- });
105
- });
116
+ if (!strictBatchOrdering) {
117
+ evaluateRules([event.payload.table], event.payload.affectedUserIds, `table:${event.payload.table}`);
106
118
  }
107
119
  }
120
+ if (event.type === 'batch-complete' && strictBatchOrdering) {
121
+ // Every table in the batch has landed, so a `context: 'asleep'` rule
122
+ // can now JOIN v_sleep_session and see the whole night.
123
+ evaluateRules(event.payload.affectedTables, event.payload.affectedUserIds, `batch:${event.payload.batchId}`);
124
+ }
108
125
  busFlushEmit?.(event);
109
126
  };
127
+ /**
128
+ * Device timezone, used when the app supplies no `userTimezoneProvider`
129
+ * or the provider has no profile for a user. `Intl` is present on every
130
+ * RN runtime we target (Hermes with intl enabled); the `catch` covers
131
+ * bare JS hosts in CI.
132
+ */
133
+ function deviceTimezone() {
134
+ try {
135
+ return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';
136
+ }
137
+ catch {
138
+ return 'UTC';
139
+ }
140
+ }
141
+ async function resolveTimezone(userId) {
142
+ if (!config.userTimezoneProvider)
143
+ return deviceTimezone();
144
+ try {
145
+ return (await config.userTimezoneProvider(userId)) ?? deviceTimezone();
146
+ }
147
+ catch {
148
+ // A profile lookup failure must not skip the baseline entirely —
149
+ // a baseline in the device zone is far better than none.
150
+ return deviceTimezone();
151
+ }
152
+ }
153
+ const baselineComputer = createBaselineComputer({
154
+ analytics: config.analytics,
155
+ eventBus: config.eventBus,
156
+ logger: config.logger,
157
+ });
110
158
  const engineAsHybrid = config.analytics;
111
159
  const flusher = new BatchFlusher({
112
160
  engine: engineAsHybrid,
@@ -152,7 +200,19 @@ export function createSyncManager(config) {
152
200
  constraints: config.constraints ?? alwaysAllowedConstraints(),
153
201
  coordinator: {
154
202
  flushAll: async () => {
155
- await Promise.all(config.tables.map(t => flusher.flush(t, 'scheduled')));
203
+ // One batch per scheduler cycle: rules see the whole cycle's write
204
+ // as a single unit rather than one wake-up per table.
205
+ const batchId = flusher.beginBatch('scheduled');
206
+ try {
207
+ await Promise.all(config.tables.map(t => flusher.flush(t, 'scheduled', batchId)));
208
+ }
209
+ finally {
210
+ // `finally` so a partial failure still closes the batch — the
211
+ // tables that DID land are real writes and their consumers
212
+ // should be woken. Leaving it open would leak the record and
213
+ // silently suppress the next cycle's evaluation.
214
+ flusher.endBatch(batchId);
215
+ }
156
216
  },
157
217
  pushAll: isLocal
158
218
  ? async () => []
@@ -184,6 +244,31 @@ export function createSyncManager(config) {
184
244
  fetchIncremental: isLocal
185
245
  ? async () => []
186
246
  : async (ctx) => fetcher.fetchIncremental(ctx),
247
+ computeBaselines: config.computeBaselines === false
248
+ ? undefined
249
+ : async () => {
250
+ // Fan out over the family so every member's baselines refresh
251
+ // on the device that synced — not just the signed-in user's.
252
+ // Empty roster (org scope, local mode, unattached) falls back
253
+ // to the attach ctx's own user.
254
+ let members = [];
255
+ try {
256
+ members = await config.analytics.getFamilyMembers();
257
+ }
258
+ catch {
259
+ members = [];
260
+ }
261
+ const userIds = members.length > 0 ? members : [config.ctx.userId];
262
+ for (const userId of userIds) {
263
+ const tz = await resolveTimezone(userId);
264
+ await baselineComputer.computeAll({
265
+ brand: config.ctx.brand,
266
+ familyId: config.ctx.tenantId,
267
+ userId,
268
+ userTimezone: tz,
269
+ });
270
+ }
271
+ },
187
272
  // Scheduled rules pass runs after the cycle's flush/push/fetch. Fire-
188
273
  // and-forget — a throw here would surface as a cycle error, but the
189
274
  // catch keeps the scheduler idle.
@@ -287,7 +372,6 @@ async function fetchActivePriorConfigs(engine, ctx) {
287
372
  for (const r of rows) {
288
373
  const dataType = Number(r.data_type);
289
374
  map.set(dataType, {
290
- ts: new Date(String(r.valid_from ?? '')),
291
375
  brand: String(r.brand ?? ''),
292
376
  family_id: String(r.family_id ?? ''),
293
377
  user_id: String(r.user_id ?? ''),
@@ -376,10 +460,19 @@ function createSensorSink(deps) {
376
460
  }
377
461
  },
378
462
  flush: async () => {
463
+ // A user-initiated flush is one batch too — otherwise a manual sync
464
+ // would evaluate rules per table and reintroduce the race that
465
+ // strictBatchOrdering exists to close.
466
+ const batchId = flusher.beginBatch('manual');
379
467
  const results = [];
380
- for (const table of tables) {
381
- results.push(await flusher.flush(table, 'manual'));
382
- triggers.noteDrain(table);
468
+ try {
469
+ for (const table of tables) {
470
+ results.push(await flusher.flush(table, 'manual', batchId));
471
+ triggers.noteDrain(table);
472
+ }
473
+ }
474
+ finally {
475
+ flusher.endBatch(batchId);
383
476
  }
384
477
  return results;
385
478
  },
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"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"}
@@ -66,8 +66,21 @@ export declare class R2Fetcher {
66
66
  */
67
67
  fetchIncremental(ctx: AttachContext): Promise<FetchResult[]>;
68
68
  /**
69
- * T-21: caller-driven fetch that bypasses the watermark. Advances the
70
- * fetch watermark only if the pulled range extends past the current one.
69
+ * T-21: caller-driven fetch that bypasses the watermark for the *read*
70
+ * but still advances it afterwards so incremental pulls stay bounded.
71
+ *
72
+ * Watermark rule (fix SY-1): the watermark may only cover rows that are
73
+ * actually in the local warehouse. When `limit` truncates the result,
74
+ * rows in `(watermark, until]` beyond the cut were never inserted —
75
+ * advancing to `until` would make them permanently invisible to
76
+ * `fetchIncremental`. So:
77
+ * - truncated fetch (rowsFetched == limit) → advance only to the max
78
+ * `ts` actually inserted; the remainder is picked up incrementally.
79
+ * - un-truncated fetch (covered the full requested range, including
80
+ * the zero-row case) → advancing to `until` (or now()) is safe and
81
+ * prevents refetching empty ranges.
82
+ * - truncated with no anchor ts (defensive edge) → no advance.
83
+ * `WatermarkStore.advance` still enforces never-regress on top.
71
84
  */
72
85
  fetchOnDemand(ctx: AttachContext, params: FetchParams): Promise<FetchResult>;
73
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/sync/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAcjD,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtB,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,+DAA+D;IAC/D,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAC5D;AAOD,qBAAa,SAAS;;gBAQR,MAAM,EAAE,eAAe;IASnC;;;OAGG;IACG,gBAAgB,CACpB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,WAAW,EAAE,CAAC;IAoBzB;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAWlE;;;OAGG;IACG,aAAa,CACjB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC;CA2IxB"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/sync/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAcjD,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtB,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,+DAA+D;IAC/D,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAC5D;AAOD,qBAAa,SAAS;;gBAQR,MAAM,EAAE,eAAe;IASnC;;;OAGG;IACG,gBAAgB,CACpB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,WAAW,EAAE,CAAC;IAoBzB;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAWlE;;;;;;;;;;;;;;;;OAgBG;IACG,aAAa,CACjB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC;CA+JxB"}
@@ -94,8 +94,21 @@ export class R2Fetcher {
94
94
  });
95
95
  }
96
96
  /**
97
- * T-21: caller-driven fetch that bypasses the watermark. Advances the
98
- * fetch watermark only if the pulled range extends past the current one.
97
+ * T-21: caller-driven fetch that bypasses the watermark for the *read*
98
+ * but still advances it afterwards so incremental pulls stay bounded.
99
+ *
100
+ * Watermark rule (fix SY-1): the watermark may only cover rows that are
101
+ * actually in the local warehouse. When `limit` truncates the result,
102
+ * rows in `(watermark, until]` beyond the cut were never inserted —
103
+ * advancing to `until` would make them permanently invisible to
104
+ * `fetchIncremental`. So:
105
+ * - truncated fetch (rowsFetched == limit) → advance only to the max
106
+ * `ts` actually inserted; the remainder is picked up incrementally.
107
+ * - un-truncated fetch (covered the full requested range, including
108
+ * the zero-row case) → advancing to `until` (or now()) is safe and
109
+ * prevents refetching empty ranges.
110
+ * - truncated with no anchor ts (defensive edge) → no advance.
111
+ * `WatermarkStore.advance` still enforces never-regress on top.
99
112
  */
100
113
  async fetchOnDemand(ctx, params) {
101
114
  try {
@@ -111,13 +124,36 @@ export class R2Fetcher {
111
124
  where += ` AND ${tsCol} <= $until`;
112
125
  bindings.until = params.until.toISOString();
113
126
  }
114
- const limitClause = params.limit ? ` LIMIT ${Math.max(1, Math.floor(params.limit))}` : '';
127
+ const limit = params.limit
128
+ ? Math.max(1, Math.floor(params.limit))
129
+ : undefined;
130
+ // A LIMIT without ORDER BY picks arbitrary rows, which would leave
131
+ // holes *below* the max fetched ts. Ordering by the time column makes
132
+ // a truncated fetch a contiguous prefix, so max(ts) is a safe cursor.
133
+ const limitClause = limit ? ` ORDER BY ${tsCol} ASC LIMIT ${limit}` : '';
115
134
  const sql = `INSERT INTO ${local} SELECT * FROM ${remote} WHERE ${where}${limitClause}${conflictClause(params.table)}`;
116
135
  await __classPrivateFieldGet(this, _R2Fetcher_engine, "f").execute(sql, bindings);
117
- const countRows = await __classPrivateFieldGet(this, _R2Fetcher_engine, "f").execute(`SELECT COUNT(*) AS c FROM ${remote} WHERE ${where}${limitClause}`, bindings);
118
- const rowsFetched = Number(countRows[0]?.c ?? 0);
119
- const upperBound = params.until ?? __classPrivateFieldGet(this, _R2Fetcher_now, "f").call(this);
120
- await __classPrivateFieldGet(this, _R2Fetcher_watermark, "f").advance(ctx.brand, ctx.tenantId, params.table, 'fetch', upperBound);
136
+ // Stats over the same (possibly truncated) selection the INSERT saw.
137
+ const statsSql = limit
138
+ ? `SELECT MAX(${tsCol}) AS max_ts, COUNT(*) AS row_count FROM (SELECT ${tsCol} FROM ${remote} WHERE ${where} ORDER BY ${tsCol} ASC LIMIT ${limit}) t`
139
+ : `SELECT MAX(${tsCol}) AS max_ts, COUNT(*) AS row_count FROM ${remote} WHERE ${where}`;
140
+ const statsRows = await __classPrivateFieldGet(this, _R2Fetcher_engine, "f").execute(statsSql, bindings);
141
+ const stats = statsRows[0];
142
+ const rowsFetched = Number(stats?.row_count ?? 0);
143
+ const truncated = limit !== undefined && rowsFetched >= limit;
144
+ let nextWatermark;
145
+ if (truncated) {
146
+ const maxTs = stats?.max_ts ? new Date(stats.max_ts) : undefined;
147
+ if (maxTs && !Number.isNaN(maxTs.getTime()))
148
+ nextWatermark = maxTs;
149
+ // else: truncated but nothing to anchor to — leave watermark alone.
150
+ }
151
+ else {
152
+ nextWatermark = params.until ?? __classPrivateFieldGet(this, _R2Fetcher_now, "f").call(this);
153
+ }
154
+ if (nextWatermark) {
155
+ await __classPrivateFieldGet(this, _R2Fetcher_watermark, "f").advance(ctx.brand, ctx.tenantId, params.table, 'fetch', nextWatermark);
156
+ }
121
157
  return { table: params.table, rowsFetched, ok: true };
122
158
  }
123
159
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/sync/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/sync/fetcher.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,31 @@ export interface FlushedEvent {
42
42
  * `evaluateOnBatch`.
43
43
  */
44
44
  affectedUserIds: string[];
45
+ /** Tenant observed on the drained entries; undefined for an empty flush. */
46
+ brand?: string;
47
+ familyId?: string;
48
+ }
49
+ /**
50
+ * Emitted once after every table in a batch has flushed (Sprint 5 T-11 /
51
+ * item (a)).
52
+ *
53
+ * This exists because per-table `{table}:insert` is the wrong trigger for
54
+ * rule evaluation. A rule with `context: 'asleep'` JOINs `v_sleep_session`;
55
+ * if it fires the instant `spo2` flushes, the matching `sleep_session` rows
56
+ * may still be sitting in the buffer, and the rule silently evaluates
57
+ * against an incomplete night. Waiting for the batch boundary removes the
58
+ * race entirely rather than papering over it with a delay.
59
+ */
60
+ export interface BatchCompleteEvent {
61
+ batchId: string;
62
+ /** Tables that flushed at least one row in this batch. */
63
+ affectedTables: string[];
64
+ affectedUserIds: string[];
65
+ brand?: string;
66
+ familyId?: string;
67
+ /** Rows written per table; only tables that wrote rows appear. */
68
+ rowCounts: Record<string, number>;
69
+ reason: FlushReason;
45
70
  }
46
71
  export type SyncEmitter = (event: {
47
72
  type: 'flushed';
@@ -52,6 +77,9 @@ export type SyncEmitter = (event: {
52
77
  table: string;
53
78
  error: SyncError;
54
79
  };
80
+ } | {
81
+ type: 'batch-complete';
82
+ payload: BatchCompleteEvent;
55
83
  }) => void;
56
84
  export interface BatchFlusherConfig {
57
85
  engine: HybridDuckDB;
@@ -74,6 +102,28 @@ export interface BatchFlusherConfig {
74
102
  export declare class BatchFlusher {
75
103
  #private;
76
104
  constructor(config: BatchFlusherConfig);
105
+ /**
106
+ * Open a batch. Every `flush(table, reason, batchId)` passing this id
107
+ * accumulates into it; `endBatch(batchId)` closes it and emits
108
+ * `batch-complete`.
109
+ *
110
+ * Batches are bookkeeping, not a lock: flushes still run concurrently
111
+ * through the p-queue, and a flush with no batchId is unaffected. The
112
+ * batch only decides *when* downstream consumers are told the write is
113
+ * settled.
114
+ */
115
+ beginBatch(reason?: FlushReason, batchId?: string): string;
116
+ /**
117
+ * Close a batch and emit `batch-complete`.
118
+ *
119
+ * Returns the event payload, or `null` when the batch wrote nothing —
120
+ * an empty cycle has no consumers to wake, and emitting would make rules
121
+ * re-evaluate on no new data. Unknown ids also return `null` rather than
122
+ * throwing, so a double-`endBatch` in a retry path is harmless.
123
+ */
124
+ endBatch(batchId: string): BatchCompleteEvent | null;
125
+ /** Open batch ids — diagnostics + leak detection in tests. */
126
+ openBatchIds(): string[];
77
127
  /** Runtime state for a table. `idle` if we've never touched it. */
78
128
  stateOf(table: string): FlusherState;
79
129
  lastErrorOf(table: string): SyncError | undefined;
@@ -83,12 +133,12 @@ export declare class BatchFlusher {
83
133
  * Single flush attempt (no retry). Used directly by explicit user code and
84
134
  * indirectly by `scheduleFlush` for the retry loop.
85
135
  */
86
- flush(table: string, reason?: FlushReason): Promise<FlushResult>;
136
+ flush(table: string, reason?: FlushReason, batchId?: string): Promise<FlushResult>;
87
137
  /**
88
138
  * Enqueue a flush with retry orchestration. Non-blocking — returns the
89
139
  * promise for callers that want to await final resolution.
90
140
  */
91
- scheduleFlush(table: string, reason: FlushReason): Promise<FlushResult>;
141
+ scheduleFlush(table: string, reason: FlushReason, batchId?: string): Promise<FlushResult>;
92
142
  /** Wait until every in-flight + queued flush settles. */
93
143
  drainQueue(): Promise<void>;
94
144
  /** Pause the queue — new `scheduleFlush()` calls enqueue but don't run. */
@@ -1 +1 @@
1
- {"version":3,"file":"flusher.d.ts","sourceRoot":"","sources":["../../src/sync/flusher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,SAAS,CAAA;AAEvD,MAAM,MAAM,WAAW,GACjB,WAAW,GACX,KAAK,GACL,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,WAAW,CAAA;AAajB,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAQhD,CAAA;AAED,eAAO,MAAM,wBAAwB,IAAI,CAAA;AACzC,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAA;IACnB;;;;OAIG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAA;CAAE,KACrE,IAAI,CAAA;AAET,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IAC9C,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAQD,qBAAa,YAAY;;gBAUX,MAAM,EAAE,kBAAkB;IAUtC,mEAAmE;IACnE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIjD,mDAAmD;IACnD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIrC;;;OAGG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,WAAsB,GAC7B,OAAO,CAAC,WAAW,CAAC;IAmCvB;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAQvE,yDAAyD;IACnD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,2EAA2E;IAC3E,UAAU,IAAI,IAAI;IAIlB,6BAA6B;IAC7B,WAAW,IAAI,IAAI;CA0GpB"}
1
+ {"version":3,"file":"flusher.d.ts","sourceRoot":"","sources":["../../src/sync/flusher.ts"],"names":[],"mappings":"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"}