@mongrov/analytics 0.23.1 → 0.24.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 (67) hide show
  1. package/dist/core/migrations.d.ts.map +1 -1
  2. package/dist/core/migrations.js +35 -0
  3. package/dist/core/migrations.js.map +1 -1
  4. package/dist/core/schemas.d.ts.map +1 -1
  5. package/dist/core/schemas.js +5 -2
  6. package/dist/core/schemas.js.map +1 -1
  7. package/dist/rules/compiler.d.ts.map +1 -1
  8. package/dist/rules/compiler.js +37 -16
  9. package/dist/rules/compiler.js.map +1 -1
  10. package/dist/sync/factory.d.ts +7 -0
  11. package/dist/sync/factory.d.ts.map +1 -1
  12. package/dist/sync/factory.js +31 -1
  13. package/dist/sync/factory.js.map +1 -1
  14. package/dist/sync/index.d.ts +2 -2
  15. package/dist/sync/index.d.ts.map +1 -1
  16. package/dist/sync/index.js +1 -1
  17. package/dist/sync/index.js.map +1 -1
  18. package/dist/sync/mapper/firmware.d.ts.map +1 -1
  19. package/dist/sync/mapper/firmware.js +7 -5
  20. package/dist/sync/mapper/firmware.js.map +1 -1
  21. package/dist/sync/mapper/schema.d.ts +29 -36
  22. package/dist/sync/mapper/schema.d.ts.map +1 -1
  23. package/dist/sync/mapper/schema.js +11 -12
  24. package/dist/sync/mapper/schema.js.map +1 -1
  25. package/dist/sync/mapper/sleep.d.ts +50 -43
  26. package/dist/sync/mapper/sleep.d.ts.map +1 -1
  27. package/dist/sync/mapper/sleep.js +99 -118
  28. package/dist/sync/mapper/sleep.js.map +1 -1
  29. package/dist/sync/mapper/types.d.ts +17 -18
  30. package/dist/sync/mapper/types.d.ts.map +1 -1
  31. package/dist/sync/sleep-correction/classify.d.ts +86 -0
  32. package/dist/sync/sleep-correction/classify.d.ts.map +1 -0
  33. package/dist/sync/sleep-correction/classify.js +247 -0
  34. package/dist/sync/sleep-correction/classify.js.map +1 -0
  35. package/dist/sync/sleep-correction/correct.d.ts +46 -0
  36. package/dist/sync/sleep-correction/correct.d.ts.map +1 -0
  37. package/dist/sync/sleep-correction/correct.js +60 -0
  38. package/dist/sync/sleep-correction/correct.js.map +1 -0
  39. package/dist/sync/sleep-correction/index.d.ts +8 -0
  40. package/dist/sync/sleep-correction/index.d.ts.map +1 -0
  41. package/dist/sync/sleep-correction/index.js +8 -0
  42. package/dist/sync/sleep-correction/index.js.map +1 -0
  43. package/dist/sync/sleep-correction/night.d.ts +26 -0
  44. package/dist/sync/sleep-correction/night.d.ts.map +1 -0
  45. package/dist/sync/sleep-correction/night.js +48 -0
  46. package/dist/sync/sleep-correction/night.js.map +1 -0
  47. package/dist/sync/sleep-correction/orchestrate.d.ts +50 -0
  48. package/dist/sync/sleep-correction/orchestrate.d.ts.map +1 -0
  49. package/dist/sync/sleep-correction/orchestrate.js +57 -0
  50. package/dist/sync/sleep-correction/orchestrate.js.map +1 -0
  51. package/dist/sync/sleep-correction/settle.d.ts +24 -0
  52. package/dist/sync/sleep-correction/settle.d.ts.map +1 -0
  53. package/dist/sync/sleep-correction/settle.js +59 -0
  54. package/dist/sync/sleep-correction/settle.js.map +1 -0
  55. package/dist/sync/sleep-correction/sql.d.ts +44 -0
  56. package/dist/sync/sleep-correction/sql.d.ts.map +1 -0
  57. package/dist/sync/sleep-correction/sql.js +329 -0
  58. package/dist/sync/sleep-correction/sql.js.map +1 -0
  59. package/dist/sync/sleep-correction/staging.d.ts +32 -0
  60. package/dist/sync/sleep-correction/staging.d.ts.map +1 -0
  61. package/dist/sync/sleep-correction/staging.js +51 -0
  62. package/dist/sync/sleep-correction/staging.js.map +1 -0
  63. package/dist/sync/sleep-derive.d.ts +55 -0
  64. package/dist/sync/sleep-derive.d.ts.map +1 -0
  65. package/dist/sync/sleep-derive.js +180 -0
  66. package/dist/sync/sleep-derive.js.map +1 -0
  67. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/sync/mapper/sleep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/sync/mapper/sleep.ts"],"names":[],"mappings":"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"}
@@ -48,24 +48,17 @@ export interface FirmwareActivityRow {
48
48
  distance: number;
49
49
  arraySteps: number[];
50
50
  }
51
- export interface FirmwareSleepRow {
52
- start: string;
53
- end: string;
54
- block_type: string;
55
- confidence: number;
51
+ /**
52
+ * One raw firmware sleep sample (types 0.10.0). `quality` is the FIRMWARE
53
+ * code (1 deep / 2 light / 3 rem / 5 awake; other codes pass through to
54
+ * `sleep_raw` and are filtered by the correction pipeline). Sessions and
55
+ * stages are no longer mapped from these directly — see `sleep-correction`.
56
+ */
57
+ export interface FirmwareSleepRawRow {
56
58
  timestamp: string;
57
- /**
58
- * Raw per-block quality score, when the firmware revision carries one.
59
- * Passed through verbatim to `sleep_raw.quality`. Revisions that omit it
60
- * fall back to `round(confidence * 100)` — see `mapper/sleep.ts`.
61
- */
62
- quality?: number;
63
- /**
64
- * Block width in minutes, when the firmware revision carries one.
65
- * Passed through verbatim to `sleep_raw.unit_length`; drives stage-minute
66
- * accumulation. Defaults to `DEFAULT_BLOCK_MINUTES` (1) when absent.
67
- */
68
- unit_length?: number;
59
+ quality: number;
60
+ start: string;
61
+ unitLength: number;
69
62
  }
70
63
  export interface FirmwareBatteryRow {
71
64
  timestamp: string;
@@ -121,7 +114,7 @@ export interface FirmwareExport {
121
114
  spo2: FirmwareSpO2Row[];
122
115
  temperature_table: FirmwareTempRow[];
123
116
  activitydetails: FirmwareActivityRow[];
124
- sleep_processed: FirmwareSleepRow[];
117
+ sleep: FirmwareSleepRawRow[];
125
118
  battery_table: FirmwareBatteryRow[];
126
119
  ring: FirmwareRingConfig;
127
120
  }
@@ -186,6 +179,10 @@ export interface SleepSessionRow extends TenantRow {
186
179
  awake_minutes: number | null;
187
180
  avg_confidence: number | null;
188
181
  night_of: Date;
182
+ /** Minutes from bed until HR settled; null when unknown or on the 30-min HR tier (R-C). */
183
+ settle_min: number | null;
184
+ /** Primary minutes recovered from HR (envelope/gap) rather than firmware-scored. */
185
+ recovered_min: number | null;
189
186
  }
190
187
  /**
191
188
  * `sleep_stage` warehouse row. `stage` is the DDL's integer code
@@ -196,6 +193,8 @@ export interface SleepStageRow extends BaseRow {
196
193
  session_id: string;
197
194
  stage: number;
198
195
  confidence: number | null;
196
+ /** Provenance from correction: firmware / envelope / gap / bout_consolidated. */
197
+ source: string | null;
199
198
  }
200
199
  /**
201
200
  * `sleep_raw` warehouse row (`collected_only`). Preserves each firmware
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Sleep correction — Phase 3 and the night window (sleep-correction port).
3
+ *
4
+ * VERBATIM port of ziva_app `packages/ux/helpers/sleepCorrectionLayer.ts` v3.1
5
+ * (`fix/sleepProcessed`, unchanged db0c58a43 → a611cecca): `computeNightEpochs`,
6
+ * `parseDateStr`, `classifyBlocks` and every constant. Only the formatting
7
+ * follows this repo's lint; the logic, order of operations and constants are
8
+ * the validated ones (END within-30 74% → 88% on the QA study set) and must
9
+ * not be retuned during the port. The parity harness is the check.
10
+ *
11
+ * Timestamps are epoch seconds. Row `date`/`start` strings are the Phase 2
12
+ * output shape, "YYYY.MM.DD HH:MM:SS" in UTC.
13
+ */
14
+ export declare const HR_MIN = 40;
15
+ export declare const HR_MAX = 120;
16
+ export declare const EXTEND_AFTER = 7200;
17
+ export declare const LONG_GAP_MIN = 600;
18
+ export declare const LONG_GAP_MAX = 28800;
19
+ export declare const LONG_GAP_HR_FRAC = 0.4;
20
+ export declare const STITCH_GAP_SHORT = 120;
21
+ export declare const STITCH_GAP_MED = 300;
22
+ export declare const STITCH_GAP_LONG = 1200;
23
+ export declare const BLOCK_SEP = 1800;
24
+ export declare const BOUT_MAX_LEN = 1;
25
+ export declare const MORNING_TRIM_FLOOR_MIN: number;
26
+ export declare const MORNING_TRIM_CEIL_MIN: number;
27
+ export declare const FETCH_BEFORE = 21600;
28
+ export declare const FETCH_AFTER = 1800;
29
+ export declare const CONF_FIRMWARE = 0.9;
30
+ export declare const CONF_ENVELOPE = 0.5;
31
+ export declare const CONF_GAP = 0.4;
32
+ export declare const CONF_BOUT = 0.7;
33
+ export declare const END_BASE_PCTILE = 0.2;
34
+ export declare const END_WAKE_MARGIN_BPM = 12;
35
+ export declare const END_WAKE_MARGIN_FRAC = 0.18;
36
+ export declare const END_QUIET_STEPS = 80;
37
+ export declare const END_WAKE_STEPS = 150;
38
+ export declare const END_MIN_TRIM = 1800;
39
+ export declare const END_MIN_SLEEP = 7200;
40
+ export declare const END_WAKE_SUSTAIN = 1200;
41
+ export declare const END_GAP_TOL = 900;
42
+ /**
43
+ * 'YYYY-MM-DD' night → epoch window [18:00 previous local day, 18:00 local).
44
+ *
45
+ * `tzOffsetHours` is the offset in force for THIS night. v3.1 fed it one fixed
46
+ * device offset; the port's caller derives it per night from the user's IANA
47
+ * zone (spec: per-night IANA offset), so DST nights land correctly.
48
+ */
49
+ export declare function computeNightEpochs(nightDate: string, tzOffsetHours?: number): {
50
+ windowStart: number;
51
+ windowEnd: number;
52
+ };
53
+ /** "YYYY.MM.DD HH:mm:ss" (UTC) → epoch seconds. v3.1 verbatim. */
54
+ export declare function parseDateStr(d: string): number;
55
+ /** A Phase 2 output row. */
56
+ export interface Phase2Row {
57
+ date: string;
58
+ quality: number;
59
+ start: string;
60
+ unitLength: number;
61
+ source: string;
62
+ confidence: number;
63
+ session_id: number;
64
+ }
65
+ /** A Phase 3 output row — v3.1's `sleep_processed` row shape. */
66
+ export interface ClassifiedRow {
67
+ date: string;
68
+ quality: number;
69
+ start: string;
70
+ unitLength: number;
71
+ source: string;
72
+ confidence: number;
73
+ block_type: string;
74
+ }
75
+ export interface VitalSample {
76
+ kind: string;
77
+ epoch: number;
78
+ value: number;
79
+ }
80
+ /**
81
+ * Bout consolidation + block classification (primary / secondary /
82
+ * microsleep), the synthetic head/tail trims and the Step 5.6 HR + movement
83
+ * END refinement. v3.1 verbatim — see the file header.
84
+ */
85
+ export declare function classifyBlocks(rows: Phase2Row[], tzOffsetHours?: number, vitals?: VitalSample[]): ClassifiedRow[];
86
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/sync/sleep-correction/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,MAAM,KAAK,CAAA;AACxB,eAAO,MAAM,MAAM,MAAM,CAAA;AACzB,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,YAAY,MAAM,CAAA;AAC/B,eAAO,MAAM,YAAY,QAAQ,CAAA;AACjC,eAAO,MAAM,gBAAgB,MAAO,CAAA;AACpC,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,SAAS,OAAO,CAAA;AAC7B,eAAO,MAAM,YAAY,IAAI,CAAA;AAG7B,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAC5C,eAAO,MAAM,qBAAqB,QAAU,CAAA;AAC5C,eAAO,MAAM,YAAY,QAAQ,CAAA;AACjC,eAAO,MAAM,WAAW,OAAO,CAAA;AAC/B,eAAO,MAAM,aAAa,MAAO,CAAA;AACjC,eAAO,MAAM,aAAa,MAAO,CAAA;AACjC,eAAO,MAAM,QAAQ,MAAO,CAAA;AAC5B,eAAO,MAAM,SAAS,MAAO,CAAA;AAG7B,eAAO,MAAM,eAAe,MAAO,CAAA;AACnC,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,oBAAoB,OAAO,CAAA;AACxC,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,aAAa,OAAO,CAAA;AACjC,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,WAAW,MAAM,CAAA;AAE9B;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAU,GACxB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAS5C;AAID,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,4BAA4B;AAC5B,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EAAE,EACjB,aAAa,GAAE,MAAU,EACzB,MAAM,CAAC,EAAE,WAAW,EAAE,GACrB,aAAa,EAAE,CA8LjB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Sleep correction — Phase 3 and the night window (sleep-correction port).
3
+ *
4
+ * VERBATIM port of ziva_app `packages/ux/helpers/sleepCorrectionLayer.ts` v3.1
5
+ * (`fix/sleepProcessed`, unchanged db0c58a43 → a611cecca): `computeNightEpochs`,
6
+ * `parseDateStr`, `classifyBlocks` and every constant. Only the formatting
7
+ * follows this repo's lint; the logic, order of operations and constants are
8
+ * the validated ones (END within-30 74% → 88% on the QA study set) and must
9
+ * not be retuned during the port. The parity harness is the check.
10
+ *
11
+ * Timestamps are epoch seconds. Row `date`/`start` strings are the Phase 2
12
+ * output shape, "YYYY.MM.DD HH:MM:SS" in UTC.
13
+ */
14
+ export const HR_MIN = 40;
15
+ export const HR_MAX = 120;
16
+ export const EXTEND_AFTER = 7200; // max seconds to extend past firmware end
17
+ export const LONG_GAP_MIN = 600;
18
+ export const LONG_GAP_MAX = 28800;
19
+ export const LONG_GAP_HR_FRAC = 0.40;
20
+ export const STITCH_GAP_SHORT = 120;
21
+ export const STITCH_GAP_MED = 300;
22
+ export const STITCH_GAP_LONG = 1200;
23
+ export const BLOCK_SEP = 1800;
24
+ export const BOUT_MAX_LEN = 1;
25
+ // Morning over-extension guard (Step 5.5): only trim when the primary END lands
26
+ // in this late-morning band.
27
+ export const MORNING_TRIM_FLOOR_MIN = 7 * 60; // 07:00 local
28
+ export const MORNING_TRIM_CEIL_MIN = 14 * 60; // 14:00 local
29
+ export const FETCH_BEFORE = 21600; // 6h before window, so envelope HR context spans pre-sleep
30
+ export const FETCH_AFTER = 1800;
31
+ export const CONF_FIRMWARE = 0.90;
32
+ export const CONF_ENVELOPE = 0.50;
33
+ export const CONF_GAP = 0.40;
34
+ export const CONF_BOUT = 0.70;
35
+ // HR + movement END refinement (Step 5.6).
36
+ export const END_BASE_PCTILE = 0.20; // personal sleep-HR baseline = 20th pct of in-block HR
37
+ export const END_WAKE_MARGIN_BPM = 12; // wake threshold = baseline + max(this, frac*baseline)
38
+ export const END_WAKE_MARGIN_FRAC = 0.18;
39
+ export const END_QUIET_STEPS = 80; // steps within ±10min for a sample to still count "asleep"
40
+ export const END_WAKE_STEPS = 150; // steps after the cut required to confirm wake (movement)
41
+ export const END_MIN_TRIM = 1800; // 30min — only correct clear over-extensions
42
+ export const END_MIN_SLEEP = 7200; // 2h — never collapse the primary block below this
43
+ export const END_WAKE_SUSTAIN = 1200; // 20min — the awake run after the cut must persist
44
+ export const END_GAP_TOL = 900; // 15min — tolerance for step/HR sample proximity
45
+ /**
46
+ * 'YYYY-MM-DD' night → epoch window [18:00 previous local day, 18:00 local).
47
+ *
48
+ * `tzOffsetHours` is the offset in force for THIS night. v3.1 fed it one fixed
49
+ * device offset; the port's caller derives it per night from the user's IANA
50
+ * zone (spec: per-night IANA offset), so DST nights land correctly.
51
+ */
52
+ export function computeNightEpochs(nightDate, tzOffsetHours = 0) {
53
+ const [year, month, day] = nightDate.split('-').map(Number);
54
+ const nightMidnightUtc = Date.UTC(year, month - 1, day) / 1000;
55
+ const priorMidnightUtc = nightMidnightUtc - 86400;
56
+ const tzOffsetSec = Math.round(tzOffsetHours * 3600);
57
+ return {
58
+ windowStart: priorMidnightUtc + 18 * 3600 - tzOffsetSec,
59
+ windowEnd: nightMidnightUtc + 18 * 3600 - tzOffsetSec,
60
+ };
61
+ }
62
+ const DOT_RE = /\./g;
63
+ /** "YYYY.MM.DD HH:mm:ss" (UTC) → epoch seconds. v3.1 verbatim. */
64
+ export function parseDateStr(d) {
65
+ if (!d)
66
+ return 0;
67
+ // "2026.04.18 16:52:01" → "2026-04-18T16:52:01Z"
68
+ const iso = `${d.replace(DOT_RE, (_m, offset) => offset < 10 ? '-' : '.').replace(' ', 'T')}Z`;
69
+ return Math.floor(new Date(iso).getTime() / 1000);
70
+ }
71
+ /**
72
+ * Bout consolidation + block classification (primary / secondary /
73
+ * microsleep), the synthetic head/tail trims and the Step 5.6 HR + movement
74
+ * END refinement. v3.1 verbatim — see the file header.
75
+ */
76
+ export function classifyBlocks(rows, tzOffsetHours = 0, vitals) {
77
+ if (!rows || rows.length === 0)
78
+ return [];
79
+ const tzOffsetSec = Math.round(tzOffsetHours * 3600);
80
+ const localHour = (epoch) => new Date((epoch + tzOffsetSec) * 1000).getUTCHours();
81
+ // Step 1: Assign bout IDs (consecutive same-quality runs)
82
+ const withBouts = rows.map((row, i) => {
83
+ const prev = rows[i - 1];
84
+ const isBoutStart = !prev
85
+ || row.quality !== prev.quality
86
+ || parseDateStr(row.date) - parseDateStr(prev.date) > 65
87
+ || row.quality === 5
88
+ || (prev && prev.quality === 5);
89
+ return { ...row, is_bout_start: isBoutStart ? 1 : 0 };
90
+ });
91
+ let boutId = 0;
92
+ const withBoutIds = withBouts.map((row) => {
93
+ if (row.is_bout_start)
94
+ boutId++;
95
+ return { ...row, bout_id: boutId };
96
+ });
97
+ // Step 2: Consolidate short deep bouts → light (never REM)
98
+ const boutLengths = {};
99
+ const boutQualities = {};
100
+ for (const row of withBoutIds) {
101
+ boutLengths[row.bout_id] = (boutLengths[row.bout_id] || 0) + 1;
102
+ boutQualities[row.bout_id] = row.quality;
103
+ }
104
+ const consolidated = withBoutIds.map((row) => {
105
+ const len = boutLengths[row.bout_id];
106
+ const qual = boutQualities[row.bout_id];
107
+ const prevBoutQual = boutQualities[row.bout_id - 1];
108
+ const nextBoutQual = boutQualities[row.bout_id + 1];
109
+ // Only consolidate deep sleep (1) micro-fragments — never REM (3).
110
+ const isMergeable = qual === 1
111
+ && len <= BOUT_MAX_LEN
112
+ && (prevBoutQual === 2 || nextBoutQual === 2);
113
+ return {
114
+ ...row,
115
+ quality: isMergeable ? 2 : row.quality,
116
+ source: isMergeable ? 'bout_consolidated' : row.source,
117
+ confidence: isMergeable ? CONF_BOUT : row.confidence,
118
+ };
119
+ });
120
+ // Step 3: Assign block IDs (gaps > BLOCK_SEP = new block)
121
+ let blockId = 0;
122
+ const withBlocks = consolidated.map((row, i) => {
123
+ const prev = consolidated[i - 1];
124
+ if (!prev || parseDateStr(row.date) - parseDateStr(prev.date) > BLOCK_SEP)
125
+ blockId++;
126
+ return { ...row, block_id: blockId };
127
+ });
128
+ // Step 4: Find primary block (most sleep minutes during NIGHT hours)
129
+ const blockSleepMins = {};
130
+ const blockNightMins = {};
131
+ const blockFwMins = {};
132
+ const sessionSizes = {};
133
+ const sessionFwMins = {};
134
+ for (const row of withBlocks) {
135
+ if ([1, 2, 3].includes(row.quality)) {
136
+ blockSleepMins[row.block_id] = (blockSleepMins[row.block_id] || 0) + 1;
137
+ // Core-night window (20:00–10:00 local) only, so a spurious daytime
138
+ // firmware block can't be picked as the primary sleep.
139
+ const h = localHour(parseDateStr(row.date));
140
+ if (h >= 20 || h < 10)
141
+ blockNightMins[row.block_id] = (blockNightMins[row.block_id] || 0) + 1;
142
+ }
143
+ if (row.source === 'firmware') {
144
+ blockFwMins[row.block_id] = (blockFwMins[row.block_id] || 0) + 1;
145
+ sessionFwMins[row.session_id] = (sessionFwMins[row.session_id] || 0) + 1;
146
+ }
147
+ sessionSizes[row.session_id] = (sessionSizes[row.session_id] || 0) + 1;
148
+ }
149
+ // Prefer the block with the most night-hour sleep; fall back to total sleep
150
+ // minutes when no block has any (e.g. shift workers).
151
+ const primaryScore = Object.keys(blockNightMins).length ? blockNightMins : blockSleepMins;
152
+ const primaryBlockId = Object.entries(primaryScore)
153
+ .sort(([idA, a], [idB, b]) => b - a || Number(idA) - Number(idB))[0]?.[0];
154
+ const isFwBacked = (s) => s === 'firmware' || s === 'bout_consolidated';
155
+ const primaryIndices = () => {
156
+ const primIdx = [];
157
+ withBlocks.forEach((row, i) => {
158
+ if (String(row.block_id) === primaryBlockId)
159
+ primIdx.push(i);
160
+ });
161
+ return primIdx;
162
+ };
163
+ // Step 5.5: Trailing-synthetic-tail trim (morning over-extension guard).
164
+ const trimmedIdx = new Set();
165
+ if (primaryBlockId != null && (blockFwMins[Number(primaryBlockId)] || 0) > 0) {
166
+ const primIdx = primaryIndices();
167
+ const lastIdx = primIdx[primIdx.length - 1];
168
+ const endLocalMin = ((((parseDateStr(withBlocks[lastIdx].date) + tzOffsetSec) % 86400) + 86400) % 86400) / 60;
169
+ if (endLocalMin >= MORNING_TRIM_FLOOR_MIN && endLocalMin < MORNING_TRIM_CEIL_MIN) {
170
+ for (let p = primIdx.length - 1; p >= 0; p--) {
171
+ if (isFwBacked(withBlocks[primIdx[p]].source))
172
+ break;
173
+ trimmedIdx.add(primIdx[p]);
174
+ }
175
+ }
176
+ }
177
+ // Step 5.5b: Leading-synthetic-head trim (evening onset guard).
178
+ if (primaryBlockId != null && (blockFwMins[Number(primaryBlockId)] || 0) > 0) {
179
+ const primIdx = primaryIndices();
180
+ for (let p = 0; p < primIdx.length; p++) {
181
+ if (isFwBacked(withBlocks[primIdx[p]].source))
182
+ break;
183
+ trimmedIdx.add(primIdx[p]);
184
+ }
185
+ }
186
+ // Step 5.6: HR + movement END refinement.
187
+ if (vitals && vitals.length && primaryBlockId != null) {
188
+ const hr = vitals
189
+ .filter(v => v.kind === 'hr' && Number.isFinite(v.value) && v.value > 0)
190
+ .map(v => ({ e: Number(v.epoch), v: Number(v.value) }))
191
+ .sort((a, b) => a.e - b.e);
192
+ const steps = vitals
193
+ .filter(v => v.kind === 'step' && Number.isFinite(v.value))
194
+ .map(v => ({ e: Number(v.epoch), v: Number(v.value) }))
195
+ .sort((a, b) => a.e - b.e);
196
+ const stepsIn = (a, b) => {
197
+ let s = 0;
198
+ for (const x of steps) {
199
+ if (x.e > a && x.e <= b)
200
+ s += x.v;
201
+ }
202
+ return s;
203
+ };
204
+ const primIdx = primaryIndices();
205
+ const procStart = parseDateStr(withBlocks[primIdx[0]].date);
206
+ const procEnd = parseDateStr(withBlocks[primIdx[primIdx.length - 1]].date);
207
+ const inBlock = hr.filter(h => h.e >= procStart && h.e <= procEnd).map(h => h.v).sort((a, b) => a - b);
208
+ if (inBlock.length >= 4) {
209
+ const base = inBlock[Math.min(inBlock.length - 1, Math.floor(END_BASE_PCTILE * inBlock.length))];
210
+ const thr = base + Math.max(END_WAKE_MARGIN_BPM, END_WAKE_MARGIN_FRAC * base);
211
+ // "Asleep" only if HR is at sleep level AND steps are quiet around it.
212
+ const asleepAt = (h) => h.v <= thr && stepsIn(h.e - END_GAP_TOL + 300, h.e + END_GAP_TOL - 300) <= END_QUIET_STEPS;
213
+ const tail = hr.filter(h => h.e >= procStart && h.e <= procEnd + END_GAP_TOL);
214
+ let wakeAt = procEnd;
215
+ for (let i = tail.length - 1; i >= 0; i--) {
216
+ if (asleepAt(tail[i])) {
217
+ wakeAt = tail[i].e;
218
+ break;
219
+ }
220
+ }
221
+ const runLen = procEnd - wakeAt;
222
+ const stepsAfter = stepsIn(wakeAt, procEnd + END_GAP_TOL);
223
+ if (wakeAt < procEnd
224
+ && runLen >= END_WAKE_SUSTAIN
225
+ && stepsAfter >= END_WAKE_STEPS
226
+ && runLen >= END_MIN_TRIM
227
+ && (wakeAt - procStart) >= END_MIN_SLEEP) {
228
+ for (const i of primIdx) {
229
+ if (parseDateStr(withBlocks[i].date) > wakeAt)
230
+ trimmedIdx.add(i);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ // Step 5: Assign block_type
236
+ return withBlocks.map(({ is_bout_start: _b, bout_id: _bo, block_id, session_id, ...row }, i) => ({
237
+ ...row,
238
+ block_type: sessionSizes[session_id] < 30 && !sessionFwMins[session_id]
239
+ ? 'microsleep'
240
+ : (blockFwMins[block_id] || 0) === 0 && (blockSleepMins[block_id] || 0) < 30
241
+ ? 'microsleep'
242
+ : String(block_id) === primaryBlockId
243
+ ? (trimmedIdx.has(i) ? 'secondary' : 'primary')
244
+ : 'secondary',
245
+ }));
246
+ }
247
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/sync/sleep-correction/classify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Sleep correction — orchestration (v3.1's AppContextProvider loop, per night).
3
+ *
4
+ * Engine-agnostic: anything with `execute(sql)` returning rows. The relation
5
+ * names select where the raw firmware shapes come from — staging views over
6
+ * the warehouse in production, capture tables in the parity harness.
7
+ *
8
+ * NOT wired into sync yet (sleep-correction tasks §3): nothing calls this on
9
+ * a device, so the mapper path is unchanged until that lands.
10
+ */
11
+ import type { ClassifiedRow, VitalSample } from './classify';
12
+ import type { SleepRelations } from './sql';
13
+ export interface SqlRunner {
14
+ execute: (sql: string) => Promise<unknown[]>;
15
+ }
16
+ /** v3.1 fallbacks when a scalar cannot be computed (AppContextProvider). */
17
+ export declare const TIER_FALLBACK = 5;
18
+ export declare const P90_FALLBACK = 120;
19
+ export declare const P75_FALLBACK = 80;
20
+ export declare function detectHrTier(db: SqlRunner, r?: SleepRelations): Promise<number>;
21
+ export declare function globalBaselines(db: SqlRunner, cutoffEpoch: number, r?: SleepRelations): Promise<{
22
+ p75: number;
23
+ p90: number;
24
+ }>;
25
+ export interface CorrectNightInput {
26
+ windowStart: number;
27
+ windowEnd: number;
28
+ hrIntervalMin: number;
29
+ p75: number;
30
+ p90: number;
31
+ /** Offset in force for this night (the caller derives it from the IANA zone). */
32
+ tzOffsetHours: number;
33
+ relations?: SleepRelations;
34
+ }
35
+ export type CorrectNightResult = {
36
+ status: 'no_firmware_sleep';
37
+ } | {
38
+ status: 'no_phase2_rows';
39
+ } | {
40
+ status: 'ok';
41
+ rows: ClassifiedRow[];
42
+ vitals: VitalSample[];
43
+ };
44
+ /** One night: guard → Phase 2 (SQL) → morning vitals → Phase 3 (JS). */
45
+ export declare function correctNight(db: SqlRunner, input: CorrectNightInput): Promise<CorrectNightResult>;
46
+ //# sourceMappingURL=correct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correct.d.ts","sourceRoot":"","sources":["../../../src/sync/sleep-correction/correct.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAa,WAAW,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAW3C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CAC7C;AAcD,4EAA4E;AAC5E,eAAO,MAAM,aAAa,IAAI,CAAA;AAC9B,eAAO,MAAM,YAAY,MAAM,CAAA;AAC/B,eAAO,MAAM,YAAY,KAAK,CAAA;AAE9B,wBAAsB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAE,cAAkC,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxG;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,WAAW,EAAE,MAAM,EACnB,CAAC,GAAE,cAAkC,GACpC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAMvC;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,cAAc,CAAA;CAC3B;AAED,MAAM,MAAM,kBAAkB,GACxB;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC5B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAEpE,wEAAwE;AACxE,wBAAsB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4BvG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Sleep correction — orchestration (v3.1's AppContextProvider loop, per night).
3
+ *
4
+ * Engine-agnostic: anything with `execute(sql)` returning rows. The relation
5
+ * names select where the raw firmware shapes come from — staging views over
6
+ * the warehouse in production, capture tables in the parity harness.
7
+ *
8
+ * NOT wired into sync yet (sleep-correction tasks §3): nothing calls this on
9
+ * a device, so the mapper path is unchanged until that lands.
10
+ */
11
+ import { classifyBlocks } from './classify';
12
+ import { correctNightSql, DEFAULT_RELATIONS, detectHrTierSql, globalBaselinesSql, hasSleepDataSql, morningVitalsSql, } from './sql';
13
+ /** DuckDB hands BIGINT/HUGEINT back as bigint; every consumer here wants number. */
14
+ function toNum(v) {
15
+ if (v == null)
16
+ return null;
17
+ if (typeof v === 'bigint')
18
+ return Number(v);
19
+ const n = Number(v);
20
+ return Number.isFinite(n) ? n : null;
21
+ }
22
+ /** v3.1 fallbacks when a scalar cannot be computed (AppContextProvider). */
23
+ export const TIER_FALLBACK = 5;
24
+ export const P90_FALLBACK = 120;
25
+ export const P75_FALLBACK = 80;
26
+ export async function detectHrTier(db, r = DEFAULT_RELATIONS) {
27
+ const [row] = (await db.execute(detectHrTierSql(r)));
28
+ return toNum(row?.hr_interval_minutes) || TIER_FALLBACK;
29
+ }
30
+ export async function globalBaselines(db, cutoffEpoch, r = DEFAULT_RELATIONS) {
31
+ const [row] = (await db.execute(globalBaselinesSql(cutoffEpoch, r)));
32
+ return {
33
+ p90: toNum(row?.p90_global) ?? P90_FALLBACK,
34
+ p75: toNum(row?.p75_global) ?? P75_FALLBACK,
35
+ };
36
+ }
37
+ /** One night: guard → Phase 2 (SQL) → morning vitals → Phase 3 (JS). */
38
+ export async function correctNight(db, input) {
39
+ const r = input.relations ?? DEFAULT_RELATIONS;
40
+ const { windowStart, windowEnd } = input;
41
+ const [guard] = (await db.execute(hasSleepDataSql(windowStart, windowEnd, r)));
42
+ if (!toNum(guard?.has_data))
43
+ return { status: 'no_firmware_sleep' };
44
+ const phase2 = (await db.execute(correctNightSql(windowStart, windowEnd, input.hrIntervalMin, input.p75, input.p90, r)));
45
+ if (!phase2.length)
46
+ return { status: 'no_phase2_rows' };
47
+ const rows = phase2.map(p => ({
48
+ date: String(p.date),
49
+ quality: toNum(p.quality) ?? 0,
50
+ start: String(p.start),
51
+ unitLength: 1,
52
+ source: String(p.source),
53
+ confidence: toNum(p.confidence) ?? 0,
54
+ session_id: toNum(p.session_id) ?? 0,
55
+ }));
56
+ const vitals = (await db.execute(morningVitalsSql(windowStart, windowEnd, r)))
57
+ .map(v => ({ kind: String(v.kind), epoch: toNum(v.epoch) ?? 0, value: toNum(v.value) ?? Number.NaN }));
58
+ return { status: 'ok', rows: classifyBlocks(rows, input.tzOffsetHours, vitals), vitals };
59
+ }
60
+ //# sourceMappingURL=correct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correct.js","sourceRoot":"","sources":["../../../src/sync/sleep-correction/correct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { type ClassifiedRow, classifyBlocks, computeNightEpochs, parseDateStr, type Phase2Row, type VitalSample, } from './classify';
2
+ export { correctNight, type CorrectNightInput, type CorrectNightResult, detectHrTier, globalBaselines, type SqlRunner, } from './correct';
3
+ export { nightOffsetHours, nightWindow } from './night';
4
+ export { type CorrectSleepInput, correctSleepNights, type CorrectSleepResult, type NightOutcome, nightsForEpochs, } from './orchestrate';
5
+ export { computeSettleMin, recoveredMinutes } from './settle';
6
+ export { correctNightSql, DEFAULT_RELATIONS, detectHrTierSql, globalBaselinesSql, hasSleepDataSql, morningVitalsSql, type SleepRelations, } from './sql';
7
+ export { type StagingScope, stagingViewsSql } from './staging';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/sleep-correction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,YAAY,EACZ,eAAe,EACf,KAAK,SAAS,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EACL,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,KAAK,cAAc,GACpB,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,KAAK,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,8 @@
1
+ export { classifyBlocks, computeNightEpochs, parseDateStr, } from './classify';
2
+ export { correctNight, detectHrTier, globalBaselines, } from './correct';
3
+ export { nightOffsetHours, nightWindow } from './night';
4
+ export { correctSleepNights, nightsForEpochs, } from './orchestrate';
5
+ export { computeSettleMin, recoveredMinutes } from './settle';
6
+ export { correctNightSql, DEFAULT_RELATIONS, detectHrTierSql, globalBaselinesSql, hasSleepDataSql, morningVitalsSql, } from './sql';
7
+ export { stagingViewsSql } from './staging';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync/sleep-correction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,YAAY,GAGb,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EAGZ,YAAY,EACZ,eAAe,GAEhB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAEL,kBAAkB,EAGlB,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GAEjB,MAAM,OAAO,CAAA;AACd,OAAO,EAAqB,eAAe,EAAE,MAAM,WAAW,CAAA"}