@mongrov/analytics 0.23.2 → 0.25.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 (86) hide show
  1. package/dist/core/index.d.ts +2 -0
  2. package/dist/core/index.d.ts.map +1 -1
  3. package/dist/core/index.js +3 -0
  4. package/dist/core/index.js.map +1 -1
  5. package/dist/core/migrations.d.ts.map +1 -1
  6. package/dist/core/migrations.js +35 -0
  7. package/dist/core/migrations.js.map +1 -1
  8. package/dist/core/reading-quality.d.ts +90 -0
  9. package/dist/core/reading-quality.d.ts.map +1 -0
  10. package/dist/core/reading-quality.js +247 -0
  11. package/dist/core/reading-quality.js.map +1 -0
  12. package/dist/core/schemas.d.ts.map +1 -1
  13. package/dist/core/schemas.js +5 -2
  14. package/dist/core/schemas.js.map +1 -1
  15. package/dist/core/warehouse.d.ts.map +1 -1
  16. package/dist/core/warehouse.js +21 -0
  17. package/dist/core/warehouse.js.map +1 -1
  18. package/dist/rules/compiler.d.ts.map +1 -1
  19. package/dist/rules/compiler.js +4 -1
  20. package/dist/rules/compiler.js.map +1 -1
  21. package/dist/sync/baseline-compute.d.ts.map +1 -1
  22. package/dist/sync/baseline-compute.js +4 -1
  23. package/dist/sync/baseline-compute.js.map +1 -1
  24. package/dist/sync/factory.d.ts +7 -0
  25. package/dist/sync/factory.d.ts.map +1 -1
  26. package/dist/sync/factory.js +31 -1
  27. package/dist/sync/factory.js.map +1 -1
  28. package/dist/sync/index.d.ts +2 -2
  29. package/dist/sync/index.d.ts.map +1 -1
  30. package/dist/sync/index.js +1 -1
  31. package/dist/sync/index.js.map +1 -1
  32. package/dist/sync/mapper/firmware.d.ts.map +1 -1
  33. package/dist/sync/mapper/firmware.js +7 -5
  34. package/dist/sync/mapper/firmware.js.map +1 -1
  35. package/dist/sync/mapper/schema.d.ts +29 -36
  36. package/dist/sync/mapper/schema.d.ts.map +1 -1
  37. package/dist/sync/mapper/schema.js +11 -12
  38. package/dist/sync/mapper/schema.js.map +1 -1
  39. package/dist/sync/mapper/sleep.d.ts +50 -43
  40. package/dist/sync/mapper/sleep.d.ts.map +1 -1
  41. package/dist/sync/mapper/sleep.js +99 -138
  42. package/dist/sync/mapper/sleep.js.map +1 -1
  43. package/dist/sync/mapper/types.d.ts +17 -18
  44. package/dist/sync/mapper/types.d.ts.map +1 -1
  45. package/dist/sync/sleep-correction/classify.d.ts +86 -0
  46. package/dist/sync/sleep-correction/classify.d.ts.map +1 -0
  47. package/dist/sync/sleep-correction/classify.js +247 -0
  48. package/dist/sync/sleep-correction/classify.js.map +1 -0
  49. package/dist/sync/sleep-correction/correct.d.ts +46 -0
  50. package/dist/sync/sleep-correction/correct.d.ts.map +1 -0
  51. package/dist/sync/sleep-correction/correct.js +60 -0
  52. package/dist/sync/sleep-correction/correct.js.map +1 -0
  53. package/dist/sync/sleep-correction/index.d.ts +8 -0
  54. package/dist/sync/sleep-correction/index.d.ts.map +1 -0
  55. package/dist/sync/sleep-correction/index.js +8 -0
  56. package/dist/sync/sleep-correction/index.js.map +1 -0
  57. package/dist/sync/sleep-correction/night.d.ts +26 -0
  58. package/dist/sync/sleep-correction/night.d.ts.map +1 -0
  59. package/dist/sync/sleep-correction/night.js +48 -0
  60. package/dist/sync/sleep-correction/night.js.map +1 -0
  61. package/dist/sync/sleep-correction/orchestrate.d.ts +50 -0
  62. package/dist/sync/sleep-correction/orchestrate.d.ts.map +1 -0
  63. package/dist/sync/sleep-correction/orchestrate.js +57 -0
  64. package/dist/sync/sleep-correction/orchestrate.js.map +1 -0
  65. package/dist/sync/sleep-correction/settle.d.ts +24 -0
  66. package/dist/sync/sleep-correction/settle.d.ts.map +1 -0
  67. package/dist/sync/sleep-correction/settle.js +59 -0
  68. package/dist/sync/sleep-correction/settle.js.map +1 -0
  69. package/dist/sync/sleep-correction/sql.d.ts +44 -0
  70. package/dist/sync/sleep-correction/sql.d.ts.map +1 -0
  71. package/dist/sync/sleep-correction/sql.js +329 -0
  72. package/dist/sync/sleep-correction/sql.js.map +1 -0
  73. package/dist/sync/sleep-correction/staging.d.ts +32 -0
  74. package/dist/sync/sleep-correction/staging.d.ts.map +1 -0
  75. package/dist/sync/sleep-correction/staging.js +51 -0
  76. package/dist/sync/sleep-correction/staging.js.map +1 -0
  77. package/dist/sync/sleep-derive.d.ts +55 -0
  78. package/dist/sync/sleep-derive.d.ts.map +1 -0
  79. package/dist/sync/sleep-derive.js +180 -0
  80. package/dist/sync/sleep-derive.js.map +1 -0
  81. package/dist/tools/impls/anomaly.js +1 -1
  82. package/dist/tools/impls/compare.js +1 -1
  83. package/dist/tools/impls/hrv.js +1 -1
  84. package/dist/tools/impls/spo2.js +1 -1
  85. package/dist/tools/impls/temperature.js +1 -1
  86. package/package.json +3 -3
@@ -17,6 +17,8 @@ export { dismissInsight } from './insight';
17
17
  export type { DismissInsightArgs, DismissInsightDeps } from './insight';
18
18
  export { BASELINE_MIN_DAYS, BASELINE_WINDOW_DAYS, baselineAggregateFor, getBaselineMetricIds, } from './metric_metadata';
19
19
  export type { BaselineDailyAggregate, BaselineWindowDays, } from './metric_metadata';
20
+ export { cleanViewFor, isQualityTable, PLAUSIBLE_RANGES, QUALITY_FLAG_COLUMNS, QUALITY_TABLES, qualityViewDdls, qualityViewFor, READING_QUALITY_COUNTS_SQL, readViewFor, } from './reading-quality';
21
+ export type { QualityTable, QualityView } from './reading-quality';
20
22
  export { createSamplingResolver, fallbackSampling, minimumWindowMinutes, SAMPLING_CACHE_TTL_MS, } from './sampling';
21
23
  export type { EffectiveSampling, SamplingResolver, SamplingResolverConfig, } from './sampling';
22
24
  export { dropViewDdl, generateViewDdl, LOCAL_SCHEMAS, quoteQualifier, TABLE_NAMES, VIEWED_TABLES, watermarkColumnFor, } from './schemas';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAIvD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGvE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAK1B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAUnB,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAIvD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGvE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKlE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAUnB,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA"}
@@ -20,6 +20,9 @@ export { useAnalytics, useInsight, useTimeseries } from './hooks';
20
20
  export { dismissInsight } from './insight';
21
21
  // Baseline metadata (Sprint 5 §7).
22
22
  export { BASELINE_MIN_DAYS, BASELINE_WINDOW_DAYS, baselineAggregateFor, getBaselineMetricIds, } from './metric_metadata';
23
+ // Signal-quality views (T-25, sprint6 §13). Claims read `v_{vital}_clean`;
24
+ // `v_{vital}_q` carries the per-reading flags for diagnostics and muted charts.
25
+ export { cleanViewFor, isQualityTable, PLAUSIBLE_RANGES, QUALITY_FLAG_COLUMNS, QUALITY_TABLES, qualityViewDdls, qualityViewFor, READING_QUALITY_COUNTS_SQL, readViewFor, } from './reading-quality';
23
26
  // Effective sampling cadence (Sprint 5 T-41, principle 22). Chart data
24
27
  // providers and gap detection should resolve cadence through this rather
25
28
  // than reading metric_metadata directly.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,sEAAsE;AACtE,oEAAoE;AACpE,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAOxB,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAG9D,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAOjE,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,mCAAmC;AACnC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAM1B,uEAAuE;AACvE,yEAAyE;AACzE,yCAAyC;AACzC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAOnB,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAGlB,sEAAsE;AACtE,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAuB5E,2EAA2E;AAC3E,6DAA6D;AAC7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,sEAAsE;AACtE,oEAAoE;AACpE,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAOxB,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAG9D,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAOjE,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,mCAAmC;AACnC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAM1B,2EAA2E;AAC3E,gFAAgF;AAChF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAG1B,uEAAuE;AACvE,yEAAyE;AACzE,yCAAyC;AACzC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAOnB,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAGlB,sEAAsE;AACtE,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAuB5E,2EAA2E;AAC3E,6DAA6D;AAC7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrE;AAkDD,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EA+OzC,CAAA;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,MAA0B,CAAA;AAExD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAWD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAyCjC"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrE;AAkDD,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAuRzC,CAAA;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,MAA0B,CAAA;AAExD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAWD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAyCjC"}
@@ -266,6 +266,41 @@ export const MIGRATIONS = Object.freeze([
266
266
  await db.execute(`ALTER TABLE ${local}.temperature_v2 RENAME TO temperature;`);
267
267
  },
268
268
  },
269
+ {
270
+ version: 8,
271
+ name: 'sleep_session += settle_min, recovered_min; sleep_stage += source (sleep-correction §3)',
272
+ // The correction pipeline's per-night scalars and per-minute provenance.
273
+ // All three are nullable and appended last, so every existing row copies
274
+ // across unchanged and reads NULL for the new columns.
275
+ //
276
+ // Rebuild, not ALTER, for the same reason as 6 and 7: both tables carry a
277
+ // primary key, and a copy-and-swap is the path this file already trusts.
278
+ // Idempotent: a table that already has the new column is skipped.
279
+ //
280
+ // Local only, per the rule above. A remote catalog created before this has
281
+ // the old shapes; the `v_*` union reads `SELECT *` on both sides, so cloud
282
+ // sync needs the remote tables evolved server-side before it is switched
283
+ // on (sleep-correction §3 note). Cloud sync is off today.
284
+ async up(db, catalogs) {
285
+ const local = quoteQualifier(catalogs.local);
286
+ const additions = [
287
+ ['sleep_session', 'settle_min'],
288
+ ['sleep_stage', 'source'],
289
+ ];
290
+ for (const [table, marker] of additions) {
291
+ const cols = await listColumns(db, catalogs.local, table);
292
+ if (cols.length === 0 || cols.includes(marker))
293
+ continue; // absent (migration 1 creates it new) or already migrated
294
+ const columnList = cols.join(', ');
295
+ await db.execute(`DROP TABLE IF EXISTS ${local}.${table}_v2;`);
296
+ await db.execute(LOCAL_SCHEMAS[table].replace(`CREATE TABLE ${table}`, `CREATE TABLE ${local}.${table}_v2`));
297
+ await db.execute(`INSERT INTO ${local}.${table}_v2 (${columnList}) `
298
+ + `SELECT ${columnList} FROM ${local}.${table} ON CONFLICT DO NOTHING;`);
299
+ await db.execute(`DROP TABLE ${local}.${table};`);
300
+ await db.execute(`ALTER TABLE ${local}.${table}_v2 RENAME TO ${table};`);
301
+ }
302
+ },
303
+ },
269
304
  ]);
270
305
  /** Version of the latest known migration — target for every attach. */
271
306
  export const CURRENT_VERSION = MIGRATIONS.length;
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Signal-quality flags and clean-read views (sprint6 spec §13, T-25).
3
+ *
4
+ * Alpha ships processed metrics, not raw firmware values: a user must never
5
+ * see a claim computed from a reading the ring could not honestly have taken
6
+ * — a temperature from a ring on the nightstand, a 10x Android decode, an
7
+ * SpO2 taken mid-gesture, one 190 bpm spike between two 60s.
8
+ *
9
+ * Two view layers per vital, on top of the `v_{table}` union views:
10
+ *
11
+ * v_{table}_q every reading + its flags (`worn`, `warm_up`, `still`,
12
+ * `plausible`, and `spike` / `scale_suspect` where they
13
+ * apply). Diagnostics read this.
14
+ * v_{table}_clean same columns as `v_{table}`, dirty readings removed.
15
+ * Baselines, rules, verdicts and narratives read this —
16
+ * the §13 consume rule.
17
+ *
18
+ * Why views and not flag columns written at ingest (§13a says "computed once
19
+ * at sync"):
20
+ * - Most flags need neighbours. A spike is judged against the readings
21
+ * either side; warm-up against the previous temperature. Sync is delta and
22
+ * rows are insert-only, so the neighbour that decides a flag often arrives
23
+ * in a LATER sync than the reading it decides.
24
+ * - Columns need a migration locally AND an ALTER on the remote Iceberg
25
+ * tables, which the device cannot issue; a local-only column breaks the
26
+ * `SELECT *` union in `v_{table}`.
27
+ * - Plausibility is a pure function of the value, so computing it at read
28
+ * time gives the same answer ingest would.
29
+ *
30
+ * Excluded readings are flagged, never deleted: the raw row stays in
31
+ * `v_{table}` for charts (which may mute or omit them) and diagnostics.
32
+ *
33
+ * The ring reports no wear signal, so `worn` comes from temperature: a
34
+ * reading below 30 C is ambient, not skin. A vital is judged by the latest
35
+ * temperature at or before it, and only if that temperature is recent — with
36
+ * no recent evidence the reading is assumed worn, because absence of a
37
+ * temperature is not evidence the ring was off.
38
+ */
39
+ export declare const QUALITY_TABLES: readonly ["heart_rate", "hrv", "spo2", "temperature"];
40
+ export type QualityTable = (typeof QUALITY_TABLES)[number];
41
+ /** §13b clamps, inclusive. Outside ⇒ `plausible = false`. */
42
+ export declare const PLAUSIBLE_RANGES: {
43
+ readonly temp_c: readonly [30, 43];
44
+ readonly spo2: readonly [70, 100];
45
+ readonly bpm: readonly [30, 220];
46
+ readonly hrv_ms: readonly [5, 200];
47
+ };
48
+ /** Below this the ring is reading ambient air, not skin. */
49
+ export declare const WEAR_TEMP_MIN_C = 30;
50
+ /** How long a temperature reading counts as wear evidence for later vitals. */
51
+ export declare const WEAR_EVIDENCE_MINUTES = 60;
52
+ /** §13c: discard the first 10 minutes after the ring goes back on. */
53
+ export declare const WARM_UP_MINUTES = 10;
54
+ /** Same "still" test as rule context `resting` and the D-G resting metrics. */
55
+ export declare const STILL_WINDOW_MINUTES = 15;
56
+ /** §13c: a reading this far from BOTH neighbours is a single-slot spike. */
57
+ export declare const SPIKE_DELTA_BPM = 40;
58
+ /** Neighbours further apart than this are a gap, not neighbours. */
59
+ export declare const SPIKE_NEIGHBOUR_MINUTES = 60;
60
+ /** Flag columns each `_q` view adds, in order. The `_clean` view drops them. */
61
+ export declare const QUALITY_FLAG_COLUMNS: Readonly<Record<QualityTable, readonly string[]>>;
62
+ export declare function isQualityTable(table: string): table is QualityTable;
63
+ export declare function qualityViewFor(table: QualityTable): string;
64
+ export declare function cleanViewFor(table: QualityTable): string;
65
+ /**
66
+ * The view a claim-producing query reads for `table`: the clean view for a
67
+ * vital, the plain union view for everything else.
68
+ */
69
+ export declare function readViewFor(table: string): string;
70
+ export interface QualityView {
71
+ name: string;
72
+ sql: string;
73
+ }
74
+ /**
75
+ * Every quality view, in creation order (each reads only earlier ones and
76
+ * the `v_{table}` union views). They carry no tenant literal — the union
77
+ * views underneath already bake it in — so they are recreated alongside them
78
+ * on every attach and need no context.
79
+ */
80
+ export declare function qualityViewDdls(): QualityView[];
81
+ /** Reverse creation order, so no view is dropped while another reads it. */
82
+ export declare function qualityViewNames(): string[];
83
+ /**
84
+ * Diagnostic count of excluded readings per vital and reason (§13d: a
85
+ * `scale_suspect` temperature surfaces here, never on a user-facing
86
+ * surface). Binds `$userId`, `$brand`, `$familyId`, `$days`. Counts are
87
+ * BIGINT. `moving` is reported for every vital but gates only SpO2 and HRV.
88
+ */
89
+ export declare const READING_QUALITY_COUNTS_SQL: string;
90
+ //# sourceMappingURL=reading-quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-quality.d.ts","sourceRoot":"","sources":["../../src/core/reading-quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,eAAO,MAAM,cAAc,uDAAyF,CAAA;AACpH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAA;AAEV,4DAA4D;AAC5D,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,sEAAsE;AACtE,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,4EAA4E;AAC5E,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAKlF,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AA2ID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CAM/C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAKhB,CAAA"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Signal-quality flags and clean-read views (sprint6 spec §13, T-25).
3
+ *
4
+ * Alpha ships processed metrics, not raw firmware values: a user must never
5
+ * see a claim computed from a reading the ring could not honestly have taken
6
+ * — a temperature from a ring on the nightstand, a 10x Android decode, an
7
+ * SpO2 taken mid-gesture, one 190 bpm spike between two 60s.
8
+ *
9
+ * Two view layers per vital, on top of the `v_{table}` union views:
10
+ *
11
+ * v_{table}_q every reading + its flags (`worn`, `warm_up`, `still`,
12
+ * `plausible`, and `spike` / `scale_suspect` where they
13
+ * apply). Diagnostics read this.
14
+ * v_{table}_clean same columns as `v_{table}`, dirty readings removed.
15
+ * Baselines, rules, verdicts and narratives read this —
16
+ * the §13 consume rule.
17
+ *
18
+ * Why views and not flag columns written at ingest (§13a says "computed once
19
+ * at sync"):
20
+ * - Most flags need neighbours. A spike is judged against the readings
21
+ * either side; warm-up against the previous temperature. Sync is delta and
22
+ * rows are insert-only, so the neighbour that decides a flag often arrives
23
+ * in a LATER sync than the reading it decides.
24
+ * - Columns need a migration locally AND an ALTER on the remote Iceberg
25
+ * tables, which the device cannot issue; a local-only column breaks the
26
+ * `SELECT *` union in `v_{table}`.
27
+ * - Plausibility is a pure function of the value, so computing it at read
28
+ * time gives the same answer ingest would.
29
+ *
30
+ * Excluded readings are flagged, never deleted: the raw row stays in
31
+ * `v_{table}` for charts (which may mute or omit them) and diagnostics.
32
+ *
33
+ * The ring reports no wear signal, so `worn` comes from temperature: a
34
+ * reading below 30 C is ambient, not skin. A vital is judged by the latest
35
+ * temperature at or before it, and only if that temperature is recent — with
36
+ * no recent evidence the reading is assumed worn, because absence of a
37
+ * temperature is not evidence the ring was off.
38
+ */
39
+ export const QUALITY_TABLES = ['heart_rate', 'hrv', 'spo2', 'temperature'];
40
+ /** §13b clamps, inclusive. Outside ⇒ `plausible = false`. */
41
+ export const PLAUSIBLE_RANGES = {
42
+ temp_c: [30, 43],
43
+ spo2: [70, 100],
44
+ bpm: [30, 220],
45
+ hrv_ms: [5, 200],
46
+ };
47
+ /** Below this the ring is reading ambient air, not skin. */
48
+ export const WEAR_TEMP_MIN_C = 30;
49
+ /** How long a temperature reading counts as wear evidence for later vitals. */
50
+ export const WEAR_EVIDENCE_MINUTES = 60;
51
+ /** §13c: discard the first 10 minutes after the ring goes back on. */
52
+ export const WARM_UP_MINUTES = 10;
53
+ /** Same "still" test as rule context `resting` and the D-G resting metrics. */
54
+ export const STILL_WINDOW_MINUTES = 15;
55
+ /** §13c: a reading this far from BOTH neighbours is a single-slot spike. */
56
+ export const SPIKE_DELTA_BPM = 40;
57
+ /** Neighbours further apart than this are a gap, not neighbours. */
58
+ export const SPIKE_NEIGHBOUR_MINUTES = 60;
59
+ /** Flag columns each `_q` view adds, in order. The `_clean` view drops them. */
60
+ export const QUALITY_FLAG_COLUMNS = {
61
+ heart_rate: ['spike', 'worn', 'warm_up', 'still', 'plausible', 'clean'],
62
+ hrv: ['worn', 'warm_up', 'still', 'plausible', 'hrv_clean', 'stress_clean'],
63
+ spo2: ['worn', 'warm_up', 'still', 'plausible', 'clean'],
64
+ temperature: ['worn', 'warm_up', 'still', 'plausible', 'scale_suspect', 'clean'],
65
+ };
66
+ export function isQualityTable(table) {
67
+ return QUALITY_TABLES.includes(table);
68
+ }
69
+ export function qualityViewFor(table) {
70
+ return `v_${table}_q`;
71
+ }
72
+ export function cleanViewFor(table) {
73
+ return `v_${table}_clean`;
74
+ }
75
+ /**
76
+ * The view a claim-producing query reads for `table`: the clean view for a
77
+ * vital, the plain union view for everything else.
78
+ */
79
+ export function readViewFor(table) {
80
+ return isQualityTable(table) ? cleanViewFor(table) : `v_${table}`;
81
+ }
82
+ const WEAR_VIEW = 'v_wear';
83
+ const [TEMP_MIN, TEMP_MAX] = PLAUSIBLE_RANGES.temp_c;
84
+ const [SPO2_MIN, SPO2_MAX] = PLAUSIBLE_RANGES.spo2;
85
+ const [BPM_MIN, BPM_MAX] = PLAUSIBLE_RANGES.bpm;
86
+ const [HRV_MIN, HRV_MAX] = PLAUSIBLE_RANGES.hrv_ms;
87
+ const DEVICE_WINDOW = 'PARTITION BY user_id, brand, family_id, device_id ORDER BY ts';
88
+ /**
89
+ * Per temperature reading: is the ring on, and is this the first on-wrist
90
+ * reading after an off-wrist one (the warm-up onset)? The very first reading
91
+ * of a device is not an onset — nothing says it was just put on.
92
+ */
93
+ function wearViewDdl() {
94
+ return `CREATE OR REPLACE VIEW ${WEAR_VIEW} AS
95
+ SELECT user_id, brand, family_id, device_id, ts,
96
+ temp_c >= ${WEAR_TEMP_MIN_C} AS on_wrist,
97
+ COALESCE(temp_c >= ${WEAR_TEMP_MIN_C}
98
+ AND LAG(temp_c) OVER (${DEVICE_WINDOW}) < ${WEAR_TEMP_MIN_C}, FALSE) AS onset
99
+ FROM v_temperature;`;
100
+ }
101
+ /** Latest wear evidence at or before each reading, same device. */
102
+ const WEAR_JOIN = `ASOF LEFT JOIN ${WEAR_VIEW} w
103
+ ON w.user_id = m.user_id AND w.brand = m.brand
104
+ AND w.family_id = m.family_id AND w.device_id = m.device_id
105
+ AND m.ts >= w.ts`;
106
+ const WORN = `CASE WHEN w.ts IS NULL OR w.ts < m.ts - INTERVAL ${WEAR_EVIDENCE_MINUTES} MINUTE
107
+ THEN TRUE ELSE w.on_wrist END`;
108
+ const WARM_UP = `COALESCE(w.onset AND m.ts < w.ts + INTERVAL ${WARM_UP_MINUTES} MINUTE, FALSE)`;
109
+ /** Tenant-scoped like the rules' `resting` join, not device-scoped. */
110
+ const STILL = `NOT EXISTS (
111
+ SELECT 1 FROM v_activity a
112
+ WHERE a.user_id = m.user_id AND a.brand = m.brand AND a.family_id = m.family_id
113
+ AND a.steps > 0
114
+ AND a.ts >= m.ts - INTERVAL ${STILL_WINDOW_MINUTES} MINUTE
115
+ AND a.ts < m.ts + INTERVAL ${STILL_WINDOW_MINUTES} MINUTE)`;
116
+ function sharedFlags() {
117
+ return `${WORN} AS worn,
118
+ ${WARM_UP} AS warm_up,
119
+ ${STILL} AS still`;
120
+ }
121
+ function heartRateQDdl() {
122
+ // Spike needs both neighbours present and close; an edge reading or one
123
+ // next to a gap cannot be judged and is kept. A step change (60 → 110 →
124
+ // 120) is not a spike: the second reading agrees with the first.
125
+ return `CREATE OR REPLACE VIEW ${qualityViewFor('heart_rate')} AS
126
+ SELECT *, COALESCE(worn AND NOT warm_up AND plausible AND NOT spike, FALSE) AS clean
127
+ FROM (
128
+ SELECT m.*, ${sharedFlags()},
129
+ COALESCE(m.bpm BETWEEN ${BPM_MIN} AND ${BPM_MAX}, FALSE) AS plausible
130
+ FROM (
131
+ SELECT *, COALESCE(
132
+ LAG(ts) OVER n >= ts - INTERVAL ${SPIKE_NEIGHBOUR_MINUTES} MINUTE
133
+ AND LEAD(ts) OVER n <= ts + INTERVAL ${SPIKE_NEIGHBOUR_MINUTES} MINUTE
134
+ AND abs(bpm - LAG(bpm) OVER n) >= ${SPIKE_DELTA_BPM}
135
+ AND abs(bpm - LEAD(bpm) OVER n) >= ${SPIKE_DELTA_BPM}, FALSE) AS spike
136
+ FROM v_heart_rate
137
+ WINDOW n AS (${DEVICE_WINDOW})
138
+ ) m
139
+ ${WEAR_JOIN}
140
+ ) f;`;
141
+ }
142
+ function spo2QDdl() {
143
+ // Motion corrupts the optical read, so a moving SpO2 is excluded outright.
144
+ return `CREATE OR REPLACE VIEW ${qualityViewFor('spo2')} AS
145
+ SELECT *, COALESCE(worn AND NOT warm_up AND plausible AND still, FALSE) AS clean
146
+ FROM (
147
+ SELECT m.*, ${sharedFlags()},
148
+ COALESCE(m.spo2 BETWEEN ${SPO2_MIN} AND ${SPO2_MAX}, FALSE) AS plausible
149
+ FROM v_spo2 m
150
+ ${WEAR_JOIN}
151
+ ) f;`;
152
+ }
153
+ function temperatureQDdl() {
154
+ // Android 10x guard: a value that only lands in range when divided by ten
155
+ // is flagged, never divided. Corrected data is fabricated data.
156
+ return `CREATE OR REPLACE VIEW ${qualityViewFor('temperature')} AS
157
+ SELECT *, COALESCE(worn AND NOT warm_up AND plausible, FALSE) AS clean
158
+ FROM (
159
+ SELECT m.*, ${sharedFlags()},
160
+ COALESCE(m.temp_c BETWEEN ${TEMP_MIN} AND ${TEMP_MAX}, FALSE) AS plausible,
161
+ COALESCE(m.temp_c > ${TEMP_MAX}
162
+ AND m.temp_c / 10 BETWEEN ${TEMP_MIN} AND ${TEMP_MAX}, FALSE) AS scale_suspect
163
+ FROM v_temperature m
164
+ ${WEAR_JOIN}
165
+ ) f;`;
166
+ }
167
+ function hrvQDdl() {
168
+ // One row carries two vitals with different gates, so cleanliness is per
169
+ // column. HRV: clamp + still (§13c). Stress: no clamp, but an `active`
170
+ // reading is masked from alerting and tense-day counts (§13c) — the raw
171
+ // raster still shows it, reading `v_hrv`. HRV 0 is below the 5 ms clamp:
172
+ // the firmware reports it when RR variance is under its floor, which is a
173
+ // real observation of "unmeasurable", not a measurement.
174
+ return `CREATE OR REPLACE VIEW ${qualityViewFor('hrv')} AS
175
+ SELECT *,
176
+ COALESCE(hrv_ms IS NOT NULL AND worn AND NOT warm_up AND plausible AND still, FALSE) AS hrv_clean,
177
+ COALESCE(stress IS NOT NULL AND worn AND NOT warm_up AND still, FALSE) AS stress_clean
178
+ FROM (
179
+ SELECT m.*, ${sharedFlags()},
180
+ COALESCE(m.hrv_ms BETWEEN ${HRV_MIN} AND ${HRV_MAX}, FALSE) AS plausible
181
+ FROM v_hrv m
182
+ ${WEAR_JOIN}
183
+ ) f;`;
184
+ }
185
+ function cleanViewDdl(table) {
186
+ const exclude = `EXCLUDE (${QUALITY_FLAG_COLUMNS[table].join(', ')})`;
187
+ if (table === 'hrv') {
188
+ return `CREATE OR REPLACE VIEW ${cleanViewFor('hrv')} AS
189
+ SELECT * ${exclude}
190
+ REPLACE (CASE WHEN hrv_clean THEN hrv_ms END AS hrv_ms,
191
+ CASE WHEN stress_clean THEN stress END AS stress)
192
+ FROM ${qualityViewFor('hrv')}
193
+ WHERE hrv_clean OR stress_clean;`;
194
+ }
195
+ return `CREATE OR REPLACE VIEW ${cleanViewFor(table)} AS
196
+ SELECT * ${exclude} FROM ${qualityViewFor(table)} WHERE clean;`;
197
+ }
198
+ const Q_DDL = {
199
+ heart_rate: heartRateQDdl,
200
+ hrv: hrvQDdl,
201
+ spo2: spo2QDdl,
202
+ temperature: temperatureQDdl,
203
+ };
204
+ /**
205
+ * Every quality view, in creation order (each reads only earlier ones and
206
+ * the `v_{table}` union views). They carry no tenant literal — the union
207
+ * views underneath already bake it in — so they are recreated alongside them
208
+ * on every attach and need no context.
209
+ */
210
+ export function qualityViewDdls() {
211
+ return [
212
+ { name: WEAR_VIEW, sql: wearViewDdl() },
213
+ ...QUALITY_TABLES.map(t => ({ name: qualityViewFor(t), sql: Q_DDL[t]() })),
214
+ ...QUALITY_TABLES.map(t => ({ name: cleanViewFor(t), sql: cleanViewDdl(t) })),
215
+ ];
216
+ }
217
+ /** Reverse creation order, so no view is dropped while another reads it. */
218
+ export function qualityViewNames() {
219
+ return qualityViewDdls().map(v => v.name).reverse();
220
+ }
221
+ function countsFor(table, excluded, extra = {}) {
222
+ return `SELECT '${table}' AS metric,
223
+ COUNT(*) AS total,
224
+ COUNT(*) FILTER (WHERE ${excluded}) AS excluded,
225
+ COUNT(*) FILTER (WHERE NOT worn) AS off_wrist,
226
+ COUNT(*) FILTER (WHERE warm_up) AS warm_up,
227
+ COUNT(*) FILTER (WHERE NOT plausible) AS implausible,
228
+ COUNT(*) FILTER (WHERE NOT still) AS moving,
229
+ ${extra.spike ? 'COUNT(*) FILTER (WHERE spike)' : 'CAST(0 AS BIGINT)'} AS spike,
230
+ ${extra.scale ? 'COUNT(*) FILTER (WHERE scale_suspect)' : 'CAST(0 AS BIGINT)'} AS scale_suspect
231
+ FROM ${qualityViewFor(table)}
232
+ WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
233
+ AND ts > now() - (INTERVAL 1 DAY) * CAST($days AS BIGINT)`;
234
+ }
235
+ /**
236
+ * Diagnostic count of excluded readings per vital and reason (§13d: a
237
+ * `scale_suspect` temperature surfaces here, never on a user-facing
238
+ * surface). Binds `$userId`, `$brand`, `$familyId`, `$days`. Counts are
239
+ * BIGINT. `moving` is reported for every vital but gates only SpO2 and HRV.
240
+ */
241
+ export const READING_QUALITY_COUNTS_SQL = [
242
+ countsFor('heart_rate', 'NOT clean', { spike: true }),
243
+ countsFor('hrv', 'NOT hrv_clean'),
244
+ countsFor('spo2', 'NOT clean'),
245
+ countsFor('temperature', 'NOT clean', { scale: true }),
246
+ ].join('\nUNION ALL\n');
247
+ //# sourceMappingURL=reading-quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-quality.js","sourceRoot":"","sources":["../../src/core/reading-quality.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,qEAAqE;AACrE,eAAO,MAAM,WAAW,uPAiBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAEnD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAqNtD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,wJAWhB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CA2BR;AAsBD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAgBjF,CAAA;AAKJ,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAW,EACtD,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,qEAAqE;AACrE,eAAO,MAAM,WAAW,uPAiBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAEnD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAwNtD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,wJAWhB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CA2BR;AAsBD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAgBjF,CAAA;AAKJ,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAW,EACtD,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -140,7 +140,9 @@ export const SCHEMAS = Object.freeze({
140
140
  light_minutes INTEGER,
141
141
  awake_minutes INTEGER,
142
142
  avg_confidence DOUBLE,
143
- night_of DATE
143
+ night_of DATE,
144
+ settle_min INTEGER,
145
+ recovered_min INTEGER
144
146
  ) PARTITIONED BY (day(ts_start), user_id);`,
145
147
  sleep_stage: `CREATE TABLE sleep_stage (
146
148
  ts TIMESTAMP NOT NULL,
@@ -150,7 +152,8 @@ export const SCHEMAS = Object.freeze({
150
152
  user_id VARCHAR NOT NULL,
151
153
  device_id VARCHAR NOT NULL,
152
154
  stage INTEGER NOT NULL,
153
- confidence DOUBLE
155
+ confidence DOUBLE,
156
+ source VARCHAR
154
157
  ) PARTITIONED BY (day(ts), user_id);`,
155
158
  sleep_raw: `CREATE TABLE sleep_raw (
156
159
  ts TIMESTAMP NOT NULL,
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAgBhB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA0FvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAaf;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAwDD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE;IACH,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
1
+ {"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAiBhB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA0FvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAaf;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAwDD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE;IACH,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/D"}
@@ -33,6 +33,7 @@
33
33
  * <phase>, cause)`.
34
34
  */
35
35
  import { AnalyticsError } from './errors';
36
+ import { qualityViewDdls, qualityViewNames } from './reading-quality';
36
37
  import { dropViewDdl, generateViewDdl, VIEWED_TABLES } from './schemas';
37
38
  /**
38
39
  * Peel one layer of `AnalyticsError('query_failed')` off engine-wrapped
@@ -266,6 +267,17 @@ export async function createViews(db, ctx) {
266
267
  throw new AnalyticsError('attach_failed', `CREATE VIEW v_${table} failed`, rootCause(cause));
267
268
  }
268
269
  }
270
+ // Signal-quality views (T-25) read the union views above, so they come
271
+ // after them. A missing clean view would fail every rule and baseline, so
272
+ // it fails the attach just as loudly.
273
+ for (const view of qualityViewDdls()) {
274
+ try {
275
+ await db.execute(view.sql);
276
+ }
277
+ catch (cause) {
278
+ throw new AnalyticsError('attach_failed', `CREATE VIEW ${view.name} failed`, rootCause(cause));
279
+ }
280
+ }
269
281
  }
270
282
  /**
271
283
  * Drop every union view. Idempotent (`DROP VIEW IF EXISTS`), and tolerant
@@ -274,6 +286,15 @@ export async function createViews(db, ctx) {
274
286
  * in `detaching`.
275
287
  */
276
288
  export async function dropViews(db) {
289
+ // Dependents first: the quality views read the union views.
290
+ for (const name of qualityViewNames()) {
291
+ try {
292
+ await db.execute(`DROP VIEW IF EXISTS ${name};`);
293
+ }
294
+ catch {
295
+ // Best-effort, as below.
296
+ }
297
+ }
277
298
  for (const table of VIEWED_TABLES) {
278
299
  try {
279
300
  await db.execute(dropViewDdl(table));