@mongrov/analytics 0.10.0 → 0.14.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.
- package/dist/rules/compiler.d.ts +13 -0
- package/dist/rules/compiler.d.ts.map +1 -1
- package/dist/rules/compiler.js +166 -4
- package/dist/rules/compiler.js.map +1 -1
- package/dist/rules/defaults/ziva.d.ts.map +1 -1
- package/dist/rules/defaults/ziva.js +88 -0
- package/dist/rules/defaults/ziva.js.map +1 -1
- package/dist/rules/evaluator.d.ts +2 -0
- package/dist/rules/evaluator.d.ts.map +1 -1
- package/dist/rules/evaluator.js +50 -2
- package/dist/rules/evaluator.js.map +1 -1
- package/dist/rules/factory.d.ts.map +1 -1
- package/dist/rules/factory.js +2 -1
- package/dist/rules/factory.js.map +1 -1
- package/dist/rules/registry.d.ts.map +1 -1
- package/dist/rules/registry.js +3 -1
- package/dist/rules/registry.js.map +1 -1
- package/dist/rules/schema.d.ts +86 -0
- package/dist/rules/schema.d.ts.map +1 -1
- package/dist/rules/schema.js +57 -0
- package/dist/rules/schema.js.map +1 -1
- package/dist/rules/types.d.ts +41 -1
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/validator.d.ts +13 -0
- package/dist/rules/validator.d.ts.map +1 -1
- package/dist/rules/validator.js +68 -0
- package/dist/rules/validator.js.map +1 -1
- package/package.json +3 -3
package/dist/rules/compiler.d.ts
CHANGED
|
@@ -56,6 +56,19 @@ export declare function emitContextJoin(context: RuleContext): string;
|
|
|
56
56
|
* (T-19/T-23). Exported so the evaluator and its tests agree on the name.
|
|
57
57
|
*/
|
|
58
58
|
export declare const USER_SETTING_PARAM = "userSettingValue";
|
|
59
|
+
/** Placeholder the evaluator binds for a `baseline_offset` target's offset. */
|
|
60
|
+
export declare const BASELINE_OFFSET_PARAM = "baselineOffset";
|
|
61
|
+
/**
|
|
62
|
+
* The local-day bucket for a naive-UTC timestamp column.
|
|
63
|
+
*
|
|
64
|
+
* Exported so the compiler and its tests share one definition rather than
|
|
65
|
+
* two that agree today. The nested `timezone('UTC', …)` is load-bearing:
|
|
66
|
+
* DuckDB selects the `timezone()` overload from its SECOND argument, so
|
|
67
|
+
* `timezone($tz, ts)` on a naive column LABELS the value with the zone
|
|
68
|
+
* instead of converting into it, leaving an evening reading on its UTC date
|
|
69
|
+
* (zivaone_app#73).
|
|
70
|
+
*/
|
|
71
|
+
export declare function localDayExpr(tsColumn: string): string;
|
|
59
72
|
/** Compile a validated rule to a `CompiledRule`. */
|
|
60
73
|
export declare function compileRule(rule: Rule): CompiledRule;
|
|
61
74
|
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAwB,IAAI,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAc3C,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AA6CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAsB5D;AAgBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAwB,IAAI,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAc3C,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AA6CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAsB5D;AAgBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,mBAAmB,CAAA;AAErD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,CAsDpD"}
|
package/dist/rules/compiler.js
CHANGED
|
@@ -138,6 +138,21 @@ function placeholdersOf(sql) {
|
|
|
138
138
|
* (T-19/T-23). Exported so the evaluator and its tests agree on the name.
|
|
139
139
|
*/
|
|
140
140
|
export const USER_SETTING_PARAM = 'userSettingValue';
|
|
141
|
+
/** Placeholder the evaluator binds for a `baseline_offset` target's offset. */
|
|
142
|
+
export const BASELINE_OFFSET_PARAM = 'baselineOffset';
|
|
143
|
+
/**
|
|
144
|
+
* The local-day bucket for a naive-UTC timestamp column.
|
|
145
|
+
*
|
|
146
|
+
* Exported so the compiler and its tests share one definition rather than
|
|
147
|
+
* two that agree today. The nested `timezone('UTC', …)` is load-bearing:
|
|
148
|
+
* DuckDB selects the `timezone()` overload from its SECOND argument, so
|
|
149
|
+
* `timezone($tz, ts)` on a naive column LABELS the value with the zone
|
|
150
|
+
* instead of converting into it, leaving an evening reading on its UTC date
|
|
151
|
+
* (zivaone_app#73).
|
|
152
|
+
*/
|
|
153
|
+
export function localDayExpr(tsColumn) {
|
|
154
|
+
return `date_trunc('day', timezone(CAST($tz AS VARCHAR), timezone('UTC', ${tsColumn})))`;
|
|
155
|
+
}
|
|
141
156
|
/** Compile a validated rule to a `CompiledRule`. */
|
|
142
157
|
export function compileRule(rule) {
|
|
143
158
|
const meta = METRIC_METADATA[rule.metric];
|
|
@@ -162,10 +177,13 @@ export function compileRule(rule) {
|
|
|
162
177
|
target: rule.target,
|
|
163
178
|
compare: rule.compare,
|
|
164
179
|
consecutive: rule.consecutive,
|
|
180
|
+
metricId: rule.metric,
|
|
165
181
|
};
|
|
166
|
-
const { sql, params } = rule.
|
|
167
|
-
?
|
|
168
|
-
:
|
|
182
|
+
const { sql, params } = rule.cadence === 'day'
|
|
183
|
+
? buildDayCadence(args)
|
|
184
|
+
: rule.consecutive && rule.consecutive > 1
|
|
185
|
+
? buildConsecutive(args)
|
|
186
|
+
: buildForTarget(args);
|
|
169
187
|
return {
|
|
170
188
|
ruleId: rule.id,
|
|
171
189
|
metric: rule.metric,
|
|
@@ -175,6 +193,11 @@ export function compileRule(rule) {
|
|
|
175
193
|
/** Evaluator binds `$userSettingValue` from this key when present. */
|
|
176
194
|
userSettingKey: rule.target.type === 'user_setting' ? rule.target.key : undefined,
|
|
177
195
|
userSettingDefault: rule.target.type === 'user_setting' ? rule.target.defaultValue : undefined,
|
|
196
|
+
/** Evaluator binds `$baselineOffset` from this key when present. */
|
|
197
|
+
offsetKey: rule.target.type === 'baseline_offset' ? rule.target.offsetKey : undefined,
|
|
198
|
+
offsetDefault: rule.target.type === 'baseline_offset' ? rule.target.offset : undefined,
|
|
199
|
+
cadence: rule.cadence,
|
|
200
|
+
consecutiveKey: rule.consecutiveKey,
|
|
178
201
|
};
|
|
179
202
|
}
|
|
180
203
|
function describeTarget(target) {
|
|
@@ -184,6 +207,7 @@ function describeTarget(target) {
|
|
|
184
207
|
case 'baseline_stddev': return `${target.stddevs} stddev over ${target.windowDays}d baseline`;
|
|
185
208
|
case 'range': return `[${target.min}, ${target.max}]`;
|
|
186
209
|
case 'user_setting': return `user setting ${target.key} (default ${target.defaultValue})`;
|
|
210
|
+
case 'baseline_offset': return (`${target.offset} ${target.direction} ${target.windowDays}d baseline p50${target.offsetKey ? ` (key ${target.offsetKey})` : ''}`);
|
|
187
211
|
}
|
|
188
212
|
}
|
|
189
213
|
/** Tenant + window predicate, shared by both paths. */
|
|
@@ -192,7 +216,7 @@ function whereClause(ts, interval) {
|
|
|
192
216
|
+ ` AND m.${ts} > NOW() - ${interval}`);
|
|
193
217
|
}
|
|
194
218
|
function buildForTarget(args) {
|
|
195
|
-
const { view, join, ts, interval, column, agg, target, compare } = args;
|
|
219
|
+
const { view, join, ts, interval, column, agg, target, compare, metricId } = args;
|
|
196
220
|
const where = whereClause(ts, interval);
|
|
197
221
|
const from = `FROM ${view} m${join}`;
|
|
198
222
|
if (target.type === 'absolute') {
|
|
@@ -227,6 +251,43 @@ ${where}
|
|
|
227
251
|
HAVING ${outside};`;
|
|
228
252
|
return { sql, params };
|
|
229
253
|
}
|
|
254
|
+
if (target.type === 'baseline_offset') {
|
|
255
|
+
// Reads the STORED baseline, not a recomputed mean. `user_baseline.p50`
|
|
256
|
+
// is day-first and ≥20-day gated (principle 27); the inline AVG the
|
|
257
|
+
// other baseline targets use is neither, so recomputing here would let
|
|
258
|
+
// this rule and the user's own "usual range" mean different numbers.
|
|
259
|
+
//
|
|
260
|
+
// Unqualified `user_baseline` resolves to the local catalog, same as the
|
|
261
|
+
// insight INSERT — baselines are local-first.
|
|
262
|
+
//
|
|
263
|
+
// Every parameter is CAST. react-native-duckdb resolves param types from
|
|
264
|
+
// SQL context at prepare time, and a bare param in a projection or an
|
|
265
|
+
// arithmetic expression has none (zivaone_app#70/#72).
|
|
266
|
+
const params = {
|
|
267
|
+
baselineDays: target.windowDays,
|
|
268
|
+
baselineMetric: metricId,
|
|
269
|
+
};
|
|
270
|
+
// Bound at eval time when `offsetKey` is set; otherwise the evaluator
|
|
271
|
+
// binds the literal default. Either way the SQL is identical, so one
|
|
272
|
+
// compiled statement serves every user in the family.
|
|
273
|
+
if (target.offsetKey === undefined)
|
|
274
|
+
params.baselineOffset = target.offset;
|
|
275
|
+
const sign = target.direction === 'below' ? '-' : '+';
|
|
276
|
+
const operator = target.direction === 'below' ? 'less_than' : 'greater_than';
|
|
277
|
+
const sql = `WITH baseline AS (
|
|
278
|
+
SELECT p50
|
|
279
|
+
FROM user_baseline
|
|
280
|
+
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
281
|
+
AND metric = CAST($baselineMetric AS VARCHAR)
|
|
282
|
+
AND window_days = CAST($baselineDays AS INTEGER)
|
|
283
|
+
)
|
|
284
|
+
SELECT ${agg} AS observed_value,
|
|
285
|
+
(SELECT p50 FROM baseline) ${sign} CAST($baselineOffset AS DOUBLE) AS threshold_value
|
|
286
|
+
${from}
|
|
287
|
+
${where}
|
|
288
|
+
HAVING ${compareClause(operator, 'observed_value', 'threshold_value')};`;
|
|
289
|
+
return { sql, params };
|
|
290
|
+
}
|
|
230
291
|
// Baselines use a CTE for the user's historical mean over windowDays.
|
|
231
292
|
// DuckDB can't parametrize inside an INTERVAL literal, but it can
|
|
232
293
|
// multiply a static unit interval by a bound integer.
|
|
@@ -280,6 +341,107 @@ HAVING ${compareClause(compare, 'observed_value', 'threshold_value')};`;
|
|
|
280
341
|
* rejects the combination rather than silently emitting something subtly
|
|
281
342
|
* wrong.
|
|
282
343
|
*/
|
|
344
|
+
/**
|
|
345
|
+
* `cadence: 'day'` — collapse to one value per LOCAL day, then count runs of
|
|
346
|
+
* days (sprint6 T-04).
|
|
347
|
+
*
|
|
348
|
+
* Not a variant of `buildConsecutive`. That builder rejects baseline targets
|
|
349
|
+
* because a per-sample comparison has no stable threshold; here the threshold
|
|
350
|
+
* IS stable for the whole window (a stored `user_baseline` row), and the
|
|
351
|
+
* things being compared are daily aggregates. Different shape, different
|
|
352
|
+
* builder.
|
|
353
|
+
*
|
|
354
|
+
* Three things the SQL has to get right, each of which has already been a bug
|
|
355
|
+
* somewhere in this codebase:
|
|
356
|
+
*
|
|
357
|
+
* 1. **Direction of the zone conversion.** `ts` is naive UTC, and DuckDB
|
|
358
|
+
* picks the `timezone()` overload from its SECOND argument — so
|
|
359
|
+
* `timezone($tz, ts)` LABELS the value rather than converting it, which
|
|
360
|
+
* attributed evening readings to the next local day (zivaone_app#73).
|
|
361
|
+
* The inner `timezone('UTC', ts)` is what makes it a conversion.
|
|
362
|
+
* 2. **The partial current day is excluded.** Today is still accumulating;
|
|
363
|
+
* including it lets a quiet morning break a run that the full day would
|
|
364
|
+
* have continued, so a 3-day rule would fire or not depending on the
|
|
365
|
+
* hour it happened to run.
|
|
366
|
+
* 3. **Every parameter is CAST**, for the react-native-duckdb prepare path
|
|
367
|
+
* (zivaone_app#70/#72).
|
|
368
|
+
*/
|
|
369
|
+
function buildDayCadence(args) {
|
|
370
|
+
const { view, join, ts, interval, target, consecutive, metricId, agg } = args;
|
|
371
|
+
if (target.type !== 'baseline_offset' && target.type !== 'absolute'
|
|
372
|
+
&& target.type !== 'user_setting') {
|
|
373
|
+
throw new RuleValidationError(`cadence 'day' supports absolute, user_setting and baseline_offset `
|
|
374
|
+
+ `targets; got '${target.type}'.`);
|
|
375
|
+
}
|
|
376
|
+
const params = {};
|
|
377
|
+
// Daily aggregate — the same collapse `user_baseline` performs, so the two
|
|
378
|
+
// agree about what a day's value is, not merely about where it starts.
|
|
379
|
+
const dailyAgg = agg;
|
|
380
|
+
const localDay = localDayExpr(`m.${ts}`);
|
|
381
|
+
let thresholdExpr;
|
|
382
|
+
let baselineCte = '';
|
|
383
|
+
if (target.type === 'absolute') {
|
|
384
|
+
params.threshold_absolute = target.value;
|
|
385
|
+
thresholdExpr = 'CAST($threshold_absolute AS DOUBLE)';
|
|
386
|
+
}
|
|
387
|
+
else if (target.type === 'user_setting') {
|
|
388
|
+
thresholdExpr = `CAST($${USER_SETTING_PARAM} AS DOUBLE)`;
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
params.baselineDays = target.windowDays;
|
|
392
|
+
params.baselineMetric = metricId;
|
|
393
|
+
if (target.offsetKey === undefined)
|
|
394
|
+
params.baselineOffset = target.offset;
|
|
395
|
+
const sign = target.direction === 'below' ? '-' : '+';
|
|
396
|
+
baselineCte = `baseline AS (
|
|
397
|
+
SELECT p50
|
|
398
|
+
FROM user_baseline
|
|
399
|
+
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
400
|
+
AND metric = CAST($baselineMetric AS VARCHAR)
|
|
401
|
+
AND window_days = CAST($baselineDays AS INTEGER)
|
|
402
|
+
),
|
|
403
|
+
`;
|
|
404
|
+
thresholdExpr = `(SELECT p50 FROM baseline) ${sign} CAST($${BASELINE_OFFSET_PARAM} AS DOUBLE)`;
|
|
405
|
+
}
|
|
406
|
+
const direction = target.type === 'baseline_offset' && target.direction === 'above'
|
|
407
|
+
? 'greater_than'
|
|
408
|
+
: target.type === 'baseline_offset'
|
|
409
|
+
? 'less_than'
|
|
410
|
+
: args.compare;
|
|
411
|
+
const extreme = direction === 'greater_than' ? 'MAX' : 'MIN';
|
|
412
|
+
const sql = `WITH ${baselineCte}daily AS (
|
|
413
|
+
SELECT ${localDay} AS day,
|
|
414
|
+
${dailyAgg} AS value
|
|
415
|
+
FROM ${view} m${join}
|
|
416
|
+
WHERE m.user_id = $userId AND m.brand = $brand AND m.family_id = $familyId
|
|
417
|
+
AND m.${ts} > NOW() - ${interval}
|
|
418
|
+
GROUP BY day
|
|
419
|
+
-- Exclude today: it is still accumulating, and a half-finished day would
|
|
420
|
+
-- make the same rule fire or not depending on the hour it ran.
|
|
421
|
+
HAVING day < date_trunc('day', timezone(CAST($tz AS VARCHAR), NOW()))
|
|
422
|
+
),
|
|
423
|
+
marked AS (
|
|
424
|
+
SELECT day, value,
|
|
425
|
+
(${compareClause(direction, 'value', thresholdExpr)}) AS breached,
|
|
426
|
+
${thresholdExpr} AS threshold_value
|
|
427
|
+
FROM daily
|
|
428
|
+
),
|
|
429
|
+
runs AS (
|
|
430
|
+
SELECT day, value, breached, threshold_value,
|
|
431
|
+
ROW_NUMBER() OVER (ORDER BY day)
|
|
432
|
+
- ROW_NUMBER() OVER (PARTITION BY breached ORDER BY day) AS run_key
|
|
433
|
+
FROM marked
|
|
434
|
+
)
|
|
435
|
+
SELECT ${extreme}(value) AS observed_value,
|
|
436
|
+
ANY_VALUE(threshold_value) AS threshold_value
|
|
437
|
+
FROM runs
|
|
438
|
+
WHERE breached
|
|
439
|
+
GROUP BY run_key
|
|
440
|
+
HAVING COUNT(*) >= CAST($consecutive AS BIGINT)
|
|
441
|
+
ORDER BY observed_value ${direction === 'greater_than' ? 'DESC' : 'ASC'}
|
|
442
|
+
LIMIT 1;`;
|
|
443
|
+
return { sql, params: { ...params, consecutive: consecutive ?? 2 } };
|
|
444
|
+
}
|
|
283
445
|
function buildConsecutive(args) {
|
|
284
446
|
const { view, join, ts, interval, column, target, compare, consecutive } = args;
|
|
285
447
|
const where = whereClause(ts, interval);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ziva.d.ts","sourceRoot":"","sources":["../../../src/rules/defaults/ziva.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ziva.d.ts","sourceRoot":"","sources":["../../../src/rules/defaults/ziva.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAqPrC,eAAO,MAAM,YAAY,EAAE,IAAI,EAAyC,CAAA"}
|
|
@@ -158,6 +158,94 @@ value = 88
|
|
|
158
158
|
[rule.throttle]
|
|
159
159
|
minGapMinutes = 720
|
|
160
160
|
maxPerDay = 1
|
|
161
|
+
|
|
162
|
+
# ── sprint6: temperature ─────────────────────────────────────────────────
|
|
163
|
+
#
|
|
164
|
+
# Mirrors ziva.spo2-safe-level with the direction flipped. Canonical °C, and
|
|
165
|
+
# fractional on purpose: temp_c is DECIMAL(4,1) as of analytics 0.9.1
|
|
166
|
+
# precisely so the 37.2–38.1 range this setting offers discriminates. Against
|
|
167
|
+
# the old INTEGER column every value in that range selected the same rows.
|
|
168
|
+
[[rule]]
|
|
169
|
+
id = "ziva.temp-flag-level"
|
|
170
|
+
brand = "ziva"
|
|
171
|
+
name = "Running warm"
|
|
172
|
+
description = "Temperature at or above the level you set."
|
|
173
|
+
metric = "temp_c"
|
|
174
|
+
window = "24h"
|
|
175
|
+
aggregation = "max"
|
|
176
|
+
compare = "greater_than"
|
|
177
|
+
context = "any"
|
|
178
|
+
severity = "warn"
|
|
179
|
+
|
|
180
|
+
[rule.target]
|
|
181
|
+
type = "user_setting"
|
|
182
|
+
key = "user:tempFlagLevel"
|
|
183
|
+
defaultValue = 37.5
|
|
184
|
+
|
|
185
|
+
[rule.throttle]
|
|
186
|
+
minGapMinutes = 60
|
|
187
|
+
maxPerDay = 3
|
|
188
|
+
|
|
189
|
+
# Relative secondary insight: warm compared to YOUR usual, not to a number.
|
|
190
|
+
# Two days rather than one — a single warm day is weather, a mattress, or a
|
|
191
|
+
# late workout.
|
|
192
|
+
[[rule]]
|
|
193
|
+
id = "ziva.temp-warm-days"
|
|
194
|
+
brand = "ziva"
|
|
195
|
+
name = "Warmer than usual"
|
|
196
|
+
description = "Daily average ran above your usual range two days running."
|
|
197
|
+
metric = "temp_c"
|
|
198
|
+
window = "30d"
|
|
199
|
+
aggregation = "avg"
|
|
200
|
+
compare = "greater_than"
|
|
201
|
+
cadence = "day"
|
|
202
|
+
consecutive = 2
|
|
203
|
+
severity = "info"
|
|
204
|
+
|
|
205
|
+
[rule.target]
|
|
206
|
+
type = "baseline_offset"
|
|
207
|
+
windowDays = 30
|
|
208
|
+
offset = 0.3
|
|
209
|
+
direction = "above"
|
|
210
|
+
|
|
211
|
+
[rule.throttle]
|
|
212
|
+
minGapMinutes = 1440
|
|
213
|
+
maxPerDay = 1
|
|
214
|
+
|
|
215
|
+
# ── sprint6: HRV ─────────────────────────────────────────────────────────
|
|
216
|
+
#
|
|
217
|
+
# HRV's ONLY rule, and relative-only by locked decision D3. There is no
|
|
218
|
+
# meaningful absolute HRV threshold: 30 ms is alarming for one person and
|
|
219
|
+
# unremarkable for another. Every generation of the HRV screen so far has
|
|
220
|
+
# tried to add an absolute flag anyway, which is why the validator now
|
|
221
|
+
# rejects one rather than a reviewer having to catch it.
|
|
222
|
+
#
|
|
223
|
+
# Both the drop and the day count are user-settable (user:hrvDropMs,
|
|
224
|
+
# user:hrvDropDays) — the same KVStore mechanism the SpO₂ safe level uses.
|
|
225
|
+
[[rule]]
|
|
226
|
+
id = "ziva.hrv-below-usual"
|
|
227
|
+
brand = "ziva"
|
|
228
|
+
name = "HRV below your usual"
|
|
229
|
+
description = "Daily average HRV ran below your usual range for several days."
|
|
230
|
+
metric = "hrv_ms"
|
|
231
|
+
window = "30d"
|
|
232
|
+
aggregation = "avg"
|
|
233
|
+
compare = "less_than"
|
|
234
|
+
cadence = "day"
|
|
235
|
+
consecutive = 3
|
|
236
|
+
consecutiveKey = "user:hrvDropDays"
|
|
237
|
+
severity = "info"
|
|
238
|
+
|
|
239
|
+
[rule.target]
|
|
240
|
+
type = "baseline_offset"
|
|
241
|
+
windowDays = 30
|
|
242
|
+
offset = 10
|
|
243
|
+
direction = "below"
|
|
244
|
+
offsetKey = "user:hrvDropMs"
|
|
245
|
+
|
|
246
|
+
[rule.throttle]
|
|
247
|
+
minGapMinutes = 1440
|
|
248
|
+
maxPerDay = 1
|
|
161
249
|
`;
|
|
162
250
|
export const zivaDefaults = parseCatalog(TOML, { name: 'ziva' });
|
|
163
251
|
//# sourceMappingURL=ziva.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ziva.js","sourceRoot":"","sources":["../../../src/rules/defaults/ziva.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"ziva.js","sourceRoot":"","sources":["../../../src/rules/defaults/ziva.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgPZ,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAW,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA"}
|
|
@@ -46,6 +46,8 @@ export interface EvaluatorConfig {
|
|
|
46
46
|
/** Optional app bus for `threshold:violation` / `insight:insert`. */
|
|
47
47
|
eventBus?: EventBus;
|
|
48
48
|
logger?: RulesLogger;
|
|
49
|
+
/** The user's own IANA zone; day-cadence rules are skipped without it. */
|
|
50
|
+
userTimezoneProvider?: (userId: string) => Promise<string | undefined>;
|
|
49
51
|
}
|
|
50
52
|
export interface Evaluator {
|
|
51
53
|
evaluateOnBatch: (batch: FlushSummary) => Promise<RuleViolation[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/rules/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAgB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAM5F,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;IAChD,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IACzC,SAAS,EAAE,eAAe,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB,EAAE,CAAC,GAAG,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/rules/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAgB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAM5F,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;IAChD,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IACzC,SAAS,EAAE,eAAe,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB,EAAE,CAAC,GAAG,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACvE;AAkBD,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAClE,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CAClD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAqWlE"}
|
package/dist/rules/evaluator.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
import { nanoid } from 'nanoid';
|
|
23
23
|
import { AnalyticsError, describeError } from '../core/errors';
|
|
24
24
|
import { METRIC_METADATA } from '../core/metric_metadata';
|
|
25
|
-
import { USER_SETTING_PARAM } from './compiler';
|
|
25
|
+
import { BASELINE_OFFSET_PARAM, USER_SETTING_PARAM } from './compiler';
|
|
26
26
|
/**
|
|
27
27
|
* Rule severity → insight severity. The rule schema keeps the historical
|
|
28
28
|
* `'critical'` tier (TOML catalogs ship it); the `insight` table + registry
|
|
@@ -34,7 +34,30 @@ const INSIGHT_SEVERITY = {
|
|
|
34
34
|
critical: 'urgent',
|
|
35
35
|
};
|
|
36
36
|
export function createEvaluator(config) {
|
|
37
|
-
const { registry, cache, throttle, emitter, analytics, brand, familyId, familyMembersProvider, clock, eventBus, logger, storage, } = config;
|
|
37
|
+
const { registry, cache, throttle, emitter, analytics, brand, familyId, familyMembersProvider, clock, eventBus, logger, storage, userTimezoneProvider, } = config;
|
|
38
|
+
/**
|
|
39
|
+
* The user's own zone, or undefined.
|
|
40
|
+
*
|
|
41
|
+
* Deliberately does NOT fall back to the device zone the way sync's
|
|
42
|
+
* resolver does. Sync's fallback is defensible — a baseline in the device
|
|
43
|
+
* zone beats no baseline. A rule is different: firing "three days running"
|
|
44
|
+
* against days that started at the wrong hour is a wrong alert, and a
|
|
45
|
+
* wrong alert about someone's health is worse than a missing one.
|
|
46
|
+
*/
|
|
47
|
+
async function resolveTimezone(userId) {
|
|
48
|
+
if (!userTimezoneProvider)
|
|
49
|
+
return undefined;
|
|
50
|
+
try {
|
|
51
|
+
return await userTimezoneProvider(userId);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
logger?.warn('rules.evaluator: userTimezoneProvider threw', {
|
|
55
|
+
userId,
|
|
56
|
+
err: describeError(err),
|
|
57
|
+
});
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
38
61
|
/**
|
|
39
62
|
* Per-eval-batch cache of resolved user settings. A batch may evaluate
|
|
40
63
|
* the same (user, key) across several rules; re-reading MMKV each time
|
|
@@ -152,6 +175,31 @@ export function createEvaluator(config) {
|
|
|
152
175
|
if (compiled.userSettingKey !== undefined) {
|
|
153
176
|
params[USER_SETTING_PARAM] = await resolveUserSetting(ctx.userId, compiled.userSettingKey, compiled.userSettingDefault ?? 0, rule.id);
|
|
154
177
|
}
|
|
178
|
+
// sprint6 T-04 — day cadence buckets on the USER's zone, so the
|
|
179
|
+
// rule and `user_baseline` agree about what a day is. No zone means
|
|
180
|
+
// the boundary is unknowable: skip the rule and say so, rather than
|
|
181
|
+
// bucketing on UTC and firing a day early for anyone west of it.
|
|
182
|
+
if (compiled.cadence === 'day') {
|
|
183
|
+
const tz = await resolveTimezone(ctx.userId);
|
|
184
|
+
if (tz === undefined) {
|
|
185
|
+
logger?.warn('rules.evaluator: skipping day-cadence rule, no user timezone', {
|
|
186
|
+
ruleId: rule.id,
|
|
187
|
+
userId: ctx.userId,
|
|
188
|
+
});
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
params.tz = tz;
|
|
192
|
+
if (compiled.consecutiveKey !== undefined) {
|
|
193
|
+
params.consecutive = await resolveUserSetting(ctx.userId, compiled.consecutiveKey, compiled.params.consecutive, rule.id);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// sprint6 T-03 — same mechanism, different parameter. A
|
|
197
|
+
// `baseline_offset` target with an `offsetKey` reads its offset from
|
|
198
|
+
// KVStore per user, so one compiled statement serves a family whose
|
|
199
|
+
// members each chose a different sensitivity.
|
|
200
|
+
if (compiled.offsetKey !== undefined) {
|
|
201
|
+
params[BASELINE_OFFSET_PARAM] = await resolveUserSetting(ctx.userId, compiled.offsetKey, compiled.offsetDefault ?? 0, rule.id);
|
|
202
|
+
}
|
|
155
203
|
rows = await analytics.execute(compiled.sql, params);
|
|
156
204
|
}
|
|
157
205
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/rules/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAWH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/rules/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/rules/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAO7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/rules/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAO7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAkFxE"}
|
package/dist/rules/factory.js
CHANGED
|
@@ -14,7 +14,7 @@ import { createEvaluator } from './evaluator';
|
|
|
14
14
|
import { createRulesRegistry } from './registry';
|
|
15
15
|
import { createThrottleStore } from './throttle';
|
|
16
16
|
export function createRulesEngine(config) {
|
|
17
|
-
const { analytics, storage, familyMembersProvider, brand, familyId, eventBus, logger, clock = () => new Date(), } = config;
|
|
17
|
+
const { analytics, storage, familyMembersProvider, brand, familyId, eventBus, logger, userTimezoneProvider, clock = () => new Date(), } = config;
|
|
18
18
|
const emitter = createEmitter({ logger });
|
|
19
19
|
const throttle = createThrottleStore({ storage, clock, logger });
|
|
20
20
|
const cache = createCompilerCache();
|
|
@@ -35,6 +35,7 @@ export function createRulesEngine(config) {
|
|
|
35
35
|
clock,
|
|
36
36
|
eventBus,
|
|
37
37
|
logger,
|
|
38
|
+
userTimezoneProvider,
|
|
38
39
|
// Sprint 5 T-23 — same KVStore the throttle uses; user_setting
|
|
39
40
|
// thresholds live under `analytics:{userId}:{key}`.
|
|
40
41
|
storage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/rules/factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/rules/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/rules/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAW1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,EAAE,CAAA;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAA;IACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,CAAA;IACrC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,WAAW,CAAA;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,YAAqB,GACtB,EAAE,oBAAoB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/rules/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAW1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,EAAE,CAAA;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAA;IACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,CAAA;IACrC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,WAAW,CAAA;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,YAAqB,GACtB,EAAE,oBAAoB,GAAG,aAAa,CAuHtC"}
|
package/dist/rules/registry.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { describeError } from '../core/errors';
|
|
11
11
|
import { RuleSchema, RuleValidationError } from './schema';
|
|
12
|
-
import { validateRule } from './validator';
|
|
12
|
+
import { assertRegistrable, validateRule } from './validator';
|
|
13
13
|
const KV_ENABLED_PREFIX = 'analytics:rules:';
|
|
14
14
|
function enabledKey(ruleId) {
|
|
15
15
|
return `${KV_ENABLED_PREFIX}${ruleId}:enabled`;
|
|
@@ -38,6 +38,7 @@ export function createRulesRegistry({ storage, logger, defaultBrand = 'ziva', })
|
|
|
38
38
|
for (const raw of rules) {
|
|
39
39
|
const parsed = RuleSchema.parse(raw);
|
|
40
40
|
validateRule(parsed, logger);
|
|
41
|
+
assertRegistrable(parsed);
|
|
41
42
|
validated.push(parsed);
|
|
42
43
|
}
|
|
43
44
|
for (const rule of validated) {
|
|
@@ -56,6 +57,7 @@ export function createRulesRegistry({ storage, logger, defaultBrand = 'ziva', })
|
|
|
56
57
|
for (const raw of rules) {
|
|
57
58
|
const parsed = RuleSchema.parse(raw);
|
|
58
59
|
validateRule(parsed, logger);
|
|
60
|
+
assertRegistrable(parsed);
|
|
59
61
|
validated.push(parsed);
|
|
60
62
|
}
|
|
61
63
|
entries.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/rules/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/rules/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/schema.d.ts
CHANGED
|
@@ -94,6 +94,26 @@ export declare const TargetSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<
|
|
|
94
94
|
key: string;
|
|
95
95
|
defaultValue: number;
|
|
96
96
|
compare?: "as_configured" | undefined;
|
|
97
|
+
}>, z.ZodObject<{
|
|
98
|
+
type: z.ZodLiteral<"baseline_offset">;
|
|
99
|
+
windowDays: z.ZodNumber;
|
|
100
|
+
/** Absolute units of the metric — ms for hrv_ms, °C for temp_c. */
|
|
101
|
+
offset: z.ZodNumber;
|
|
102
|
+
direction: z.ZodEnum<["below", "above"]>;
|
|
103
|
+
/** KVStore key overriding `offset` at eval time. Registry-validated. */
|
|
104
|
+
offsetKey: z.ZodOptional<z.ZodString>;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
type: "baseline_offset";
|
|
107
|
+
windowDays: number;
|
|
108
|
+
offset: number;
|
|
109
|
+
direction: "below" | "above";
|
|
110
|
+
offsetKey?: string | undefined;
|
|
111
|
+
}, {
|
|
112
|
+
type: "baseline_offset";
|
|
113
|
+
windowDays: number;
|
|
114
|
+
offset: number;
|
|
115
|
+
direction: "below" | "above";
|
|
116
|
+
offsetKey?: string | undefined;
|
|
97
117
|
}>]>;
|
|
98
118
|
export type Target = z.infer<typeof TargetSchema>;
|
|
99
119
|
export declare const ThrottleSchema: z.ZodDefault<z.ZodObject<{
|
|
@@ -107,6 +127,21 @@ export declare const ThrottleSchema: z.ZodDefault<z.ZodObject<{
|
|
|
107
127
|
maxPerDay?: number | undefined;
|
|
108
128
|
}>>;
|
|
109
129
|
export type Throttle = z.infer<typeof ThrottleSchema>;
|
|
130
|
+
/**
|
|
131
|
+
* What a "sample" is when counting `consecutive` (sprint6 §3).
|
|
132
|
+
*
|
|
133
|
+
* `reading` (default, existing behaviour) counts adjacent raw readings.
|
|
134
|
+
* `day` collapses to one value per LOCAL day first, then counts adjacent
|
|
135
|
+
* days — so `consecutive: 3` means "three days running", not "three readings
|
|
136
|
+
* in a row", which for an hourly metric could be three hours of one evening.
|
|
137
|
+
*
|
|
138
|
+
* Local means the user's own zone, resolved from their profile attribute.
|
|
139
|
+
* Days are midnight-to-midnight in that zone, matching `user_baseline`
|
|
140
|
+
* compute exactly: a rule and the baseline it compares against must not
|
|
141
|
+
* disagree about what a day is.
|
|
142
|
+
*/
|
|
143
|
+
export declare const CADENCES: readonly ["reading", "day"];
|
|
144
|
+
export type RuleCadence = (typeof CADENCES)[number];
|
|
110
145
|
export declare const RuleSchema: z.ZodObject<{
|
|
111
146
|
id: z.ZodString;
|
|
112
147
|
brand: z.ZodOptional<z.ZodString>;
|
|
@@ -126,6 +161,19 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
126
161
|
* `>= 2` switches the compiler to run-length detection.
|
|
127
162
|
*/
|
|
128
163
|
consecutive: z.ZodOptional<z.ZodNumber>;
|
|
164
|
+
/**
|
|
165
|
+
* Unit `consecutive` counts in. Default `reading` — existing behaviour.
|
|
166
|
+
*
|
|
167
|
+
* `day` requires `consecutive >= 2` unless `allowSingleDay` is set: a
|
|
168
|
+
* single-day rule with day cadence is just an aggregate over one day,
|
|
169
|
+
* which the reading path already expresses more cheaply, and writing it
|
|
170
|
+
* this way usually means the author meant "days running".
|
|
171
|
+
*/
|
|
172
|
+
cadence: z.ZodDefault<z.ZodEnum<["reading", "day"]>>;
|
|
173
|
+
/** Opt out of the `cadence: 'day'` ⇒ `consecutive >= 2` requirement. */
|
|
174
|
+
allowSingleDay: z.ZodOptional<z.ZodBoolean>;
|
|
175
|
+
/** KVStore key overriding `consecutive` at eval time (sprint6 §4). */
|
|
176
|
+
consecutiveKey: z.ZodOptional<z.ZodString>;
|
|
129
177
|
target: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
130
178
|
type: z.ZodLiteral<"absolute">;
|
|
131
179
|
value: z.ZodNumber;
|
|
@@ -188,6 +236,26 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
188
236
|
key: string;
|
|
189
237
|
defaultValue: number;
|
|
190
238
|
compare?: "as_configured" | undefined;
|
|
239
|
+
}>, z.ZodObject<{
|
|
240
|
+
type: z.ZodLiteral<"baseline_offset">;
|
|
241
|
+
windowDays: z.ZodNumber;
|
|
242
|
+
/** Absolute units of the metric — ms for hrv_ms, °C for temp_c. */
|
|
243
|
+
offset: z.ZodNumber;
|
|
244
|
+
direction: z.ZodEnum<["below", "above"]>;
|
|
245
|
+
/** KVStore key overriding `offset` at eval time. Registry-validated. */
|
|
246
|
+
offsetKey: z.ZodOptional<z.ZodString>;
|
|
247
|
+
}, "strip", z.ZodTypeAny, {
|
|
248
|
+
type: "baseline_offset";
|
|
249
|
+
windowDays: number;
|
|
250
|
+
offset: number;
|
|
251
|
+
direction: "below" | "above";
|
|
252
|
+
offsetKey?: string | undefined;
|
|
253
|
+
}, {
|
|
254
|
+
type: "baseline_offset";
|
|
255
|
+
windowDays: number;
|
|
256
|
+
offset: number;
|
|
257
|
+
direction: "below" | "above";
|
|
258
|
+
offsetKey?: string | undefined;
|
|
191
259
|
}>]>;
|
|
192
260
|
severity: z.ZodEnum<["info", "warn", "critical"]>;
|
|
193
261
|
throttle: z.ZodDefault<z.ZodObject<{
|
|
@@ -229,6 +297,12 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
229
297
|
key: string;
|
|
230
298
|
defaultValue: number;
|
|
231
299
|
compare: "as_configured";
|
|
300
|
+
} | {
|
|
301
|
+
type: "baseline_offset";
|
|
302
|
+
windowDays: number;
|
|
303
|
+
offset: number;
|
|
304
|
+
direction: "below" | "above";
|
|
305
|
+
offsetKey?: string | undefined;
|
|
232
306
|
};
|
|
233
307
|
context: "any" | "asleep" | "resting";
|
|
234
308
|
name: string;
|
|
@@ -236,6 +310,7 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
236
310
|
compare: "less_than" | "greater_than" | "equals" | "not_equals" | "between";
|
|
237
311
|
window: "1h" | "6h" | "24h" | "3d" | "7d" | "30d";
|
|
238
312
|
aggregation: "avg" | "sum" | "min" | "max" | "last" | "count";
|
|
313
|
+
cadence: "reading" | "day";
|
|
239
314
|
severity: "info" | "warn" | "critical";
|
|
240
315
|
throttle: {
|
|
241
316
|
minGapMinutes: number;
|
|
@@ -244,6 +319,8 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
244
319
|
description?: string | undefined;
|
|
245
320
|
brand?: string | undefined;
|
|
246
321
|
consecutive?: number | undefined;
|
|
322
|
+
allowSingleDay?: boolean | undefined;
|
|
323
|
+
consecutiveKey?: string | undefined;
|
|
247
324
|
rawSql?: string | undefined;
|
|
248
325
|
rawSqlParams?: string[] | undefined;
|
|
249
326
|
exposureOverride?: boolean | undefined;
|
|
@@ -269,6 +346,12 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
269
346
|
key: string;
|
|
270
347
|
defaultValue: number;
|
|
271
348
|
compare?: "as_configured" | undefined;
|
|
349
|
+
} | {
|
|
350
|
+
type: "baseline_offset";
|
|
351
|
+
windowDays: number;
|
|
352
|
+
offset: number;
|
|
353
|
+
direction: "below" | "above";
|
|
354
|
+
offsetKey?: string | undefined;
|
|
272
355
|
};
|
|
273
356
|
name: string;
|
|
274
357
|
metric: "spo2" | "device_battery" | "hrv_ms" | "stress" | "systolic_bp" | "diastolic_bp" | "vascular_aging" | "hr_bpm" | "temp_c" | "activity_steps" | "calories" | "distance_km" | "sleep_total_minutes" | "sleep_score";
|
|
@@ -280,6 +363,9 @@ export declare const RuleSchema: z.ZodObject<{
|
|
|
280
363
|
brand?: string | undefined;
|
|
281
364
|
aggregation?: "avg" | "sum" | "min" | "max" | "last" | "count" | undefined;
|
|
282
365
|
consecutive?: number | undefined;
|
|
366
|
+
cadence?: "reading" | "day" | undefined;
|
|
367
|
+
allowSingleDay?: boolean | undefined;
|
|
368
|
+
consecutiveKey?: string | undefined;
|
|
283
369
|
throttle?: {
|
|
284
370
|
minGapMinutes?: number | undefined;
|
|
285
371
|
maxPerDay?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/rules/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,+DAA+D;AAC/D,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAID,eAAO,MAAM,OAAO,iDAAkD,CAAA;AACtE,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,YAAY,wDAAyD,CAAA;AAClF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,eAAO,MAAM,QAAQ,2EAMX,CAAA;AACV,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/C,eAAO,MAAM,UAAU,uCAAwC,CAAA;AAC/D,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAElD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,uCAAwC,CAAA;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/rules/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,+DAA+D;AAC/D,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAID,eAAO,MAAM,OAAO,iDAAkD,CAAA;AACtE,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,YAAY,wDAAyD,CAAA;AAClF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,eAAO,MAAM,QAAQ,2EAMX,CAAA;AACV,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/C,eAAO,MAAM,UAAU,uCAAwC,CAAA;AAC/D,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAElD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,uCAAwC,CAAA;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AA6EnD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IArCvB,iFAAiF;;IAEjF,kDAAkD;;;;;;;;;;;;;;;;IA4BlD,mEAAmE;;;IAGnE,wEAAwE;;;;;;;;;;;;;;IAWxE,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;GAKb,CAAA;AAEd,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAErD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,6BAA8B,CAAA;AACnD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnD,eAAO,MAAM,UAAU;;;;;;;;;IASrB,kEAAkE;;IAElE;;;;;;OAMG;;IAEH;;;;;;;OAOG;;IAEH,wEAAwE;;IAExE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAtGtE,iFAAiF;;QAEjF,kDAAkD;;;;;;;;;;;;;;;;QA4BlD,mEAAmE;;;QAGnE,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4ExE;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAA;AAEF,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
package/dist/rules/schema.js
CHANGED
|
@@ -78,12 +78,42 @@ const TargetUserSetting = z.object({
|
|
|
78
78
|
defaultValue: z.number(),
|
|
79
79
|
compare: z.enum(['as_configured']).default('as_configured'),
|
|
80
80
|
});
|
|
81
|
+
/**
|
|
82
|
+
* sprint6 §3 — a fixed offset from the user's OWN stored baseline.
|
|
83
|
+
*
|
|
84
|
+
* Distinct from `baseline_percent`/`baseline_stddev` in where the baseline
|
|
85
|
+
* comes from, which matters more than it looks. Those two recompute a mean
|
|
86
|
+
* inline over raw readings in the window. This one reads `user_baseline.p50`
|
|
87
|
+
* — the stored, day-first, ≥20-day-gated percentile (principle 27). An HRV
|
|
88
|
+
* drop of 10 ms is only meaningful against the number the user's screen also
|
|
89
|
+
* calls "usual"; recomputing a different average here would let the rule and
|
|
90
|
+
* the chart disagree about the same word.
|
|
91
|
+
*
|
|
92
|
+
* `direction` fixes the comparison, so the rule's own `compare` is ignored
|
|
93
|
+
* for this target — `below` fires when the observed value sits at least
|
|
94
|
+
* `offset` under p50, `above` when it sits at least `offset` over.
|
|
95
|
+
*
|
|
96
|
+
* `offsetKey` makes the offset user-configurable at eval time, the same
|
|
97
|
+
* mechanism as `user_setting`: the compiled SQL binds a parameter and the
|
|
98
|
+
* evaluator resolves it from KVStore per user. `offset` is the fallback when
|
|
99
|
+
* the key is unset, and is required so a rule always has a defined threshold.
|
|
100
|
+
*/
|
|
101
|
+
const TargetBaselineOffset = z.object({
|
|
102
|
+
type: z.literal('baseline_offset'),
|
|
103
|
+
windowDays: z.number().int().positive(),
|
|
104
|
+
/** Absolute units of the metric — ms for hrv_ms, °C for temp_c. */
|
|
105
|
+
offset: z.number().positive(),
|
|
106
|
+
direction: z.enum(['below', 'above']),
|
|
107
|
+
/** KVStore key overriding `offset` at eval time. Registry-validated. */
|
|
108
|
+
offsetKey: z.string().min(1).optional(),
|
|
109
|
+
});
|
|
81
110
|
export const TargetSchema = z.discriminatedUnion('type', [
|
|
82
111
|
TargetAbsolute,
|
|
83
112
|
TargetBaselinePercent,
|
|
84
113
|
TargetBaselineStddev,
|
|
85
114
|
TargetRange,
|
|
86
115
|
TargetUserSetting,
|
|
116
|
+
TargetBaselineOffset,
|
|
87
117
|
]);
|
|
88
118
|
export const ThrottleSchema = z
|
|
89
119
|
.object({
|
|
@@ -91,6 +121,20 @@ export const ThrottleSchema = z
|
|
|
91
121
|
maxPerDay: z.number().int().positive().default(3),
|
|
92
122
|
})
|
|
93
123
|
.default({});
|
|
124
|
+
/**
|
|
125
|
+
* What a "sample" is when counting `consecutive` (sprint6 §3).
|
|
126
|
+
*
|
|
127
|
+
* `reading` (default, existing behaviour) counts adjacent raw readings.
|
|
128
|
+
* `day` collapses to one value per LOCAL day first, then counts adjacent
|
|
129
|
+
* days — so `consecutive: 3` means "three days running", not "three readings
|
|
130
|
+
* in a row", which for an hourly metric could be three hours of one evening.
|
|
131
|
+
*
|
|
132
|
+
* Local means the user's own zone, resolved from their profile attribute.
|
|
133
|
+
* Days are midnight-to-midnight in that zone, matching `user_baseline`
|
|
134
|
+
* compute exactly: a rule and the baseline it compares against must not
|
|
135
|
+
* disagree about what a day is.
|
|
136
|
+
*/
|
|
137
|
+
export const CADENCES = ['reading', 'day'];
|
|
94
138
|
export const RuleSchema = z.object({
|
|
95
139
|
id: z.string().min(1),
|
|
96
140
|
brand: z.string().optional(),
|
|
@@ -110,6 +154,19 @@ export const RuleSchema = z.object({
|
|
|
110
154
|
* `>= 2` switches the compiler to run-length detection.
|
|
111
155
|
*/
|
|
112
156
|
consecutive: z.number().int().min(1).optional(),
|
|
157
|
+
/**
|
|
158
|
+
* Unit `consecutive` counts in. Default `reading` — existing behaviour.
|
|
159
|
+
*
|
|
160
|
+
* `day` requires `consecutive >= 2` unless `allowSingleDay` is set: a
|
|
161
|
+
* single-day rule with day cadence is just an aggregate over one day,
|
|
162
|
+
* which the reading path already expresses more cheaply, and writing it
|
|
163
|
+
* this way usually means the author meant "days running".
|
|
164
|
+
*/
|
|
165
|
+
cadence: z.enum(CADENCES).default('reading'),
|
|
166
|
+
/** Opt out of the `cadence: 'day'` ⇒ `consecutive >= 2` requirement. */
|
|
167
|
+
allowSingleDay: z.boolean().optional(),
|
|
168
|
+
/** KVStore key overriding `consecutive` at eval time (sprint6 §4). */
|
|
169
|
+
consecutiveKey: z.string().min(1).optional(),
|
|
113
170
|
target: TargetSchema,
|
|
114
171
|
severity: z.enum(SEVERITIES),
|
|
115
172
|
throttle: ThrottleSchema,
|
package/dist/rules/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/rules/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D,+DAA+D;AAC/D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,mBAAmB,EAA+B,CAAA;AAE3E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAA;AAGtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAGlF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW;IACX,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,SAAS;CACD,CAAA;AAGV,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAU,CAAA;AAG/D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAG7D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAA;AAEF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/B,iFAAiF;IACjF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,kDAAkD;IAClD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;CAC5D,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,cAAc;IACd,qBAAqB;IACrB,oBAAoB;IACpB,WAAW;IACX,iBAAiB;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/rules/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/types.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { MetricId } from '../core/metric_metadata';
|
|
9
9
|
import type { TableName } from '../core/schemas';
|
|
10
10
|
import type { AnalyticsEngine, EventBus, FamilyMembersProvider, KVStore, Unsubscribe } from '../core/types';
|
|
11
|
-
import type { Rule } from './schema';
|
|
11
|
+
import type { Rule, RuleCadence } from './schema';
|
|
12
12
|
export type { Unsubscribe };
|
|
13
13
|
/** Rule severity mirrors the `insight.severity` column. */
|
|
14
14
|
export type RuleSeverity = 'info' | 'warn' | 'critical';
|
|
@@ -43,6 +43,26 @@ export interface CompiledRule {
|
|
|
43
43
|
userSettingKey?: string;
|
|
44
44
|
/** Fallback threshold when the user has never set the value. */
|
|
45
45
|
userSettingDefault?: number;
|
|
46
|
+
/**
|
|
47
|
+
* KVStore key the evaluator reads to bind `$baselineOffset` (sprint6 T-03).
|
|
48
|
+
* Present only for `target.type: 'baseline_offset'` with an `offsetKey`.
|
|
49
|
+
*
|
|
50
|
+
* Separate from `userSettingKey` rather than reusing it: a rule could in
|
|
51
|
+
* principle carry both a user-set threshold and a user-set offset, and
|
|
52
|
+
* collapsing them into one field would make that unrepresentable for the
|
|
53
|
+
* sake of saving a property.
|
|
54
|
+
*/
|
|
55
|
+
offsetKey?: string;
|
|
56
|
+
/** Offset used when the key is unset — the target's own `offset`. */
|
|
57
|
+
offsetDefault?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Evaluation cadence (sprint6 T-04). `'day'` means the SQL collapses to one
|
|
60
|
+
* value per LOCAL day before counting runs, so the evaluator must bind
|
|
61
|
+
* `$tz` — and must skip the rule when it has no user zone to bind.
|
|
62
|
+
*/
|
|
63
|
+
cadence?: RuleCadence;
|
|
64
|
+
/** KVStore key overriding the run length at eval time. */
|
|
65
|
+
consecutiveKey?: string;
|
|
46
66
|
}
|
|
47
67
|
/** Structured violation delivered to `on('violation', handler)` subscribers. */
|
|
48
68
|
export interface RuleViolation {
|
|
@@ -81,6 +101,26 @@ export interface RulesEngineConfig {
|
|
|
81
101
|
* to the `insight` table (principle 35 fire-and-forget).
|
|
82
102
|
*/
|
|
83
103
|
eventBus?: EventBus;
|
|
104
|
+
/**
|
|
105
|
+
* The user's own IANA timezone, resolved per evaluation.
|
|
106
|
+
*
|
|
107
|
+
* Every timestamp is stored in UTC, so this is the only thing that decides
|
|
108
|
+
* which local day a reading belongs to. It is the USER's attribute
|
|
109
|
+
* (`UserInfo.timezone` / `User.timezone`), never the device's: a user who
|
|
110
|
+
* travels must not have their days re-bucketed by the handset they happen
|
|
111
|
+
* to be holding.
|
|
112
|
+
*
|
|
113
|
+
* Same seam as `createSyncManager({ userTimezoneProvider })`, deliberately
|
|
114
|
+
* — a rule and the baseline it compares against must agree about what "a
|
|
115
|
+
* day" is (sprint6 design decision 2), and two different sources is how
|
|
116
|
+
* they come to disagree.
|
|
117
|
+
*
|
|
118
|
+
* When absent, day-cadence rules are SKIPPED with a warning rather than
|
|
119
|
+
* evaluated against a guessed zone. A rule that fires on the wrong day is
|
|
120
|
+
* worse than one that does not fire, and silently substituting UTC is the
|
|
121
|
+
* failure mode that cost an afternoon in zivaone_app#74.
|
|
122
|
+
*/
|
|
123
|
+
userTimezoneProvider?: (userId: string) => Promise<string | undefined>;
|
|
84
124
|
logger?: RulesLogger;
|
|
85
125
|
clock?: Clock;
|
|
86
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,WAAW,EACZ,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,19 @@ export declare function allowedWindowsFor(metric: MetricId): Window[];
|
|
|
22
22
|
* When rawSql is present with `exposureOverride: true`, emits a warn via `logger`.
|
|
23
23
|
*/
|
|
24
24
|
export declare function validateRule(rule: Rule, logger?: RulesLogger): void;
|
|
25
|
+
/**
|
|
26
|
+
* Admission policy, checked at REGISTRATION rather than inside
|
|
27
|
+
* `validateRule`.
|
|
28
|
+
*
|
|
29
|
+
* `validateRule` answers "is this rule well-formed?" — a structural question
|
|
30
|
+
* with the same answer everywhere. This answers "may this rule enter the
|
|
31
|
+
* system?", which is a product decision. Keeping them apart matters
|
|
32
|
+
* practically as well as conceptually: unit tests use `hrv_ms` as an ordinary
|
|
33
|
+
* metric to exercise the compiler's absolute branch and the window minimums,
|
|
34
|
+
* and a policy living in the structural validator made 36 of them fail for
|
|
35
|
+
* reasons that had nothing to do with what they assert.
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertRegistrable(rule: Rule): void;
|
|
25
38
|
/** Scan a rawSql body for whole-word references to collected-only columns. */
|
|
26
39
|
export declare function referencedCollectedOnlyColumns(sql: string): string[];
|
|
27
40
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/rules/validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAoC1C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,CAU5D;AAgBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/rules/validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAoC1C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,CAU5D;AAgBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CA6BnE;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAElD;AAkID,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpE"}
|
package/dist/rules/validator.js
CHANGED
|
@@ -68,6 +68,7 @@ function samplingLabel(metric) {
|
|
|
68
68
|
*/
|
|
69
69
|
export function validateRule(rule, logger) {
|
|
70
70
|
validateConsecutive(rule);
|
|
71
|
+
validateCadence(rule);
|
|
71
72
|
validateContext(rule);
|
|
72
73
|
validateUserSettingKey(rule);
|
|
73
74
|
const allowed = allowedWindowsFor(rule.metric);
|
|
@@ -102,12 +103,79 @@ export function validateRule(rule, logger) {
|
|
|
102
103
|
* is deliberately permissive — a denser real device only makes a rule MORE
|
|
103
104
|
* satisfiable, never less.
|
|
104
105
|
*/
|
|
106
|
+
/**
|
|
107
|
+
* D3 — HRV rules are relative-only (sprint6 §4).
|
|
108
|
+
*
|
|
109
|
+
* There is no meaningful absolute HRV threshold: 30 ms is alarming for one
|
|
110
|
+
* person and unremarkable for another, so a fixed flag is a number that means
|
|
111
|
+
* something different for every user who sees it.
|
|
112
|
+
*
|
|
113
|
+
* This is a validator rather than a review note because review has already
|
|
114
|
+
* failed at it. Every generation of the HRV screen so far has shipped an
|
|
115
|
+
* absolute flag — the most recent as `thresh: 35` on a drag control — and
|
|
116
|
+
* each was caught by a person, late, after the work was done. Code catches
|
|
117
|
+
* it whoever writes it and whenever they write it.
|
|
118
|
+
*
|
|
119
|
+
* `user_setting` is absolute too: letting the user pick 35 ms does not make
|
|
120
|
+
* 35 ms mean anything. Relative targets (`baseline_percent`,
|
|
121
|
+
* `baseline_stddev`, `baseline_offset`) are the whole permitted set.
|
|
122
|
+
*/
|
|
123
|
+
const RELATIVE_ONLY_METRICS = new Set(['hrv_ms']);
|
|
124
|
+
const ABSOLUTE_TARGET_TYPES = new Set(['absolute', 'range', 'user_setting']);
|
|
125
|
+
/**
|
|
126
|
+
* Admission policy, checked at REGISTRATION rather than inside
|
|
127
|
+
* `validateRule`.
|
|
128
|
+
*
|
|
129
|
+
* `validateRule` answers "is this rule well-formed?" — a structural question
|
|
130
|
+
* with the same answer everywhere. This answers "may this rule enter the
|
|
131
|
+
* system?", which is a product decision. Keeping them apart matters
|
|
132
|
+
* practically as well as conceptually: unit tests use `hrv_ms` as an ordinary
|
|
133
|
+
* metric to exercise the compiler's absolute branch and the window minimums,
|
|
134
|
+
* and a policy living in the structural validator made 36 of them fail for
|
|
135
|
+
* reasons that had nothing to do with what they assert.
|
|
136
|
+
*/
|
|
137
|
+
export function assertRegistrable(rule) {
|
|
138
|
+
validateRelativeOnly(rule);
|
|
139
|
+
}
|
|
140
|
+
function validateRelativeOnly(rule) {
|
|
141
|
+
if (!RELATIVE_ONLY_METRICS.has(rule.metric))
|
|
142
|
+
return;
|
|
143
|
+
if (!ABSOLUTE_TARGET_TYPES.has(rule.target.type))
|
|
144
|
+
return;
|
|
145
|
+
throw new RuleValidationError(`Rule ${rule.id}: metric ${rule.metric} is relative-only (decision D3) — `
|
|
146
|
+
+ `target.type '${rule.target.type}' sets an absolute threshold. There is `
|
|
147
|
+
+ `no HRV number that means the same thing for two people; compare against `
|
|
148
|
+
+ `the user's own baseline instead (baseline_offset, baseline_percent or `
|
|
149
|
+
+ `baseline_stddev). See .specifica/hrv/spec.md D3.`);
|
|
150
|
+
}
|
|
151
|
+
function validateCadence(rule) {
|
|
152
|
+
if (rule.cadence !== 'day')
|
|
153
|
+
return;
|
|
154
|
+
// A day-cadence rule counting one day is an aggregate over a single day,
|
|
155
|
+
// which the reading path already expresses more cheaply. Authors who write
|
|
156
|
+
// it almost always meant "days running", so this is a prompt rather than a
|
|
157
|
+
// prohibition — `allowSingleDay` opts out.
|
|
158
|
+
const n = rule.consecutive ?? 1;
|
|
159
|
+
if (n < 2 && rule.allowSingleDay !== true) {
|
|
160
|
+
throw new RuleValidationError(`Rule ${rule.id}: cadence 'day' needs consecutive >= 2 (got ${n}). `
|
|
161
|
+
+ `A single day is an aggregate, not a run — use cadence 'reading', `
|
|
162
|
+
+ `or set allowSingleDay: true if one day is genuinely intended.`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
105
165
|
function validateConsecutive(rule) {
|
|
106
166
|
const n = rule.consecutive;
|
|
107
167
|
if (n === undefined || n <= 1)
|
|
108
168
|
return;
|
|
109
169
|
// Baseline targets resolve per-window, not per-sample; the compiler has
|
|
110
170
|
// no correct query shape for the combination.
|
|
171
|
+
//
|
|
172
|
+
// `baseline_offset` under `cadence: 'day'` is the exception, and the
|
|
173
|
+
// reasoning above is why: the objection is about resolving a threshold
|
|
174
|
+
// per SAMPLE. Day cadence compares one value per day against a stored
|
|
175
|
+
// baseline that is stable for the whole window, so there is a correct
|
|
176
|
+
// shape — see buildDayCadence.
|
|
177
|
+
if (rule.target.type === 'baseline_offset' && rule.cadence === 'day')
|
|
178
|
+
return;
|
|
111
179
|
if (rule.target.type === 'baseline_percent' || rule.target.type === 'baseline_stddev') {
|
|
112
180
|
throw new RuleValidationError(`Rule ${rule.id}: consecutive is not supported with target.type `
|
|
113
181
|
+ `'${rule.target.type}' — baseline targets resolve per-window, not `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/rules/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/rules/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongrov/analytics",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"description": "DuckDB + R2 Iceberg local analytics for @mongrov apps",
|
|
6
6
|
"license": "MIT",
|
|
@@ -107,8 +107,8 @@
|
|
|
107
107
|
"typescript": "^5.9.3",
|
|
108
108
|
"vitest": "^2.1.9",
|
|
109
109
|
"zod": "^3.23.8",
|
|
110
|
-
"@mongrov/
|
|
111
|
-
"@mongrov/
|
|
110
|
+
"@mongrov/types": "0.5.3",
|
|
111
|
+
"@mongrov/db": "0.3.0"
|
|
112
112
|
},
|
|
113
113
|
"scripts": {
|
|
114
114
|
"build": "tsc -p tsconfig.build.json",
|