@trazum/core 1.53.4 → 1.56.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/conform.d.ts CHANGED
@@ -33,7 +33,7 @@
33
33
  * two contracts added at 1.50.4 and 1.51.0 existed, had rules, and could not be
34
34
  * named. One home per fact, and this is the home.
35
35
  */
36
- export declare const CONTRACT_NAMES: readonly ['usage-log', 'profile', 'plan', 'verification', 'history', 'connected', 'cost-answer', 'outcome-report', 'annual-record'];
36
+ export declare const CONTRACT_NAMES: readonly ['usage-log', 'profile', 'plan', 'verification', 'history', 'connected', 'cost-answer', 'outcome-report', 'annual-record', 'roll-up'];
37
37
  export type ContractName = (typeof CONTRACT_NAMES)[number];
38
38
  export interface ConformanceProblem {
39
39
  /** Where: `line 12` for a log, or a dotted path inside a document. */
@@ -1 +1 @@
1
- {"version":3,"file":"conform.d.ts","sourceRoot":"","sources":["../src/conform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,YACzB,WAAW,EACX,SAAS,EACT,MAAM,EACN,cAAc,EACd,SAAS,EACT,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,eAAe,CACP,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI;IACF,kCAAkC;IAChC,SAAS;IACX,qDAAqD;OACnD,YAAY;IACd,qEAAqE;OACnE,iBAAiB;IACnB,2DAA2D;OACzD,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,CAAC;IACjB,gEAAgE;IAChE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA+SD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,iBAAiB,CAwIrF"}
1
+ {"version":3,"file":"conform.d.ts","sourceRoot":"","sources":["../src/conform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,YACzB,WAAW,EACX,SAAS,EACT,MAAM,EACN,cAAc,EACd,SAAS,EACT,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,SAAS,CACD,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI;IACF,kCAAkC;IAChC,SAAS;IACX,qDAAqD;OACnD,YAAY;IACd,qEAAqE;OACnE,iBAAiB;IACnB,2DAA2D;OACzD,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,CAAC;IACjB,gEAAgE;IAChE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA0WD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,iBAAiB,CAwIrF"}
package/dist/conform.js CHANGED
@@ -43,6 +43,7 @@ export const CONTRACT_NAMES = [
43
43
  'cost-answer',
44
44
  'outcome-report',
45
45
  'annual-record',
46
+ 'roll-up',
46
47
  ];
47
48
  /** Fields a usage record may carry, and the finding each one buys. */
48
49
  const USAGE_OPTIONAL = [
@@ -231,6 +232,23 @@ const DOCUMENT_RULES = {
231
232
  rule('outcomes', 'an object, or null when nothing recorded one', (v) => v === null || isObject(v)),
232
233
  rule('cannotSay', 'an array of what this record cannot answer', isArray),
233
234
  ],
235
+ /**
236
+ * The roll-up — the chapter where the refusals matter most, because this is
237
+ * the one document assembled from other people's measurements.
238
+ *
239
+ * `contributors` and `rejected` are both required and neither may be
240
+ * inferred from the other: a roll-up that merged three of four contributions
241
+ * and listed three contributors is indistinguishable, field by field, from a
242
+ * roll-up of three. The fourth machine's entire bill goes missing and the
243
+ * total looks complete.
244
+ */
245
+ 'roll-up': [
246
+ rule('contributors', 'an array — every contribution that was merged, with its own gaps', isArray),
247
+ rule('rejected', 'an array — every contribution that was not merged, and why; never dropped in silence', isArray),
248
+ rule('total', 'an object of token counts and dollars', isObject),
249
+ rule('notMerged', 'an array of findings that do not roll up, each with the reason', isArray),
250
+ rule('cannotSay', 'an array of what this roll-up cannot say about itself', isArray),
251
+ ],
234
252
  'cost-answer': [
235
253
  rule('verdict', 'one of within, over, cannot-tell', (v) => v === 'within' || v === 'over' || v === 'cannot-tell'),
236
254
  rule('call', 'an object, or null when nothing was described', (v) => v === null || isObject(v)),
@@ -258,6 +276,39 @@ const CROSS_RULES = {
258
276
  detail: 'a null rate needs a reason beside it and a stated rate must not carry one — a refusal never arrives bare, and a reason attached to an answer is two answers',
259
277
  },
260
278
  ],
279
+ /**
280
+ * The two refusals that must travel with a roll-up, or the format is worse
281
+ * than no format.
282
+ *
283
+ * **Overlap between contributors is unmeasurable**, always, for every
284
+ * roll-up of more than one document: two people exporting the same traffic
285
+ * double the bill and no merge of summaries can see it, because the raw
286
+ * lines a duplicate check needs are in neither document. An emitter that
287
+ * carried the fields and lost that would be handing somebody a doubled total
288
+ * that looks audited.
289
+ *
290
+ * And a **rejected contribution** is the other one. A machine whose document
291
+ * did not conform contributed nothing, and a roll-up that says so nowhere
292
+ * reads exactly like a roll-up of everybody.
293
+ */
294
+ 'roll-up': [
295
+ {
296
+ at: 'cannotSay',
297
+ kind: 'missing',
298
+ ok: (doc) => !Array.isArray(doc.contributors) ||
299
+ doc.contributors.length < 2 ||
300
+ (Array.isArray(doc.cannotSay) && doc.cannotSay.includes('overlap-invisible')),
301
+ detail: 'more than one contributor and cannotSay does not say overlap-invisible — two people exporting the same traffic double the bill, and a merge of summaries cannot see it',
302
+ },
303
+ {
304
+ at: 'cannotSay',
305
+ kind: 'missing',
306
+ ok: (doc) => !Array.isArray(doc.rejected) ||
307
+ doc.rejected.length === 0 ||
308
+ (Array.isArray(doc.cannotSay) && doc.cannotSay.includes('contribution-rejected')),
309
+ detail: 'a contribution was rejected and cannotSay does not say so — a machine that contributed nothing must not read as a machine that spent nothing',
310
+ },
311
+ ],
261
312
  'annual-record': [
262
313
  {
263
314
  at: 'cannotSay',
@@ -277,6 +328,12 @@ const CROSS_RULES = {
277
328
  * a slightly-more-broken profile, and send somebody to fix the wrong document.
278
329
  */
279
330
  function contractOf(doc) {
331
+ // Before the profile check, deliberately: a roll-up carries `byLabelAndModel`
332
+ // too — it is a merged bill, sliced the same way — so testing the profile
333
+ // first would classify every roll-up as a profile, accept it as conformant,
334
+ // and never apply the two refusals that only a roll-up has to carry.
335
+ if (Array.isArray(doc.contributors) && Array.isArray(doc.notMerged))
336
+ return 'roll-up';
280
337
  if (Array.isArray(doc.byLabelAndModel))
281
338
  return 'profile';
282
339
  if (Array.isArray(doc.missingMonths) && isObject(doc.promises))
@@ -367,7 +424,7 @@ export function conform(text, options = {}) {
367
424
  return {
368
425
  schemaVersion: 1,
369
426
  contract: null,
370
- because: 'no contract recognised it — a profile has byLabelAndModel, a plan has actions, a verification adds arrived, a history has periods and runs, a connected report has provider and unavailable, a cost answer has verdict and restsOn',
427
+ because: 'no contract recognised it — a roll-up has contributors and notMerged, a profile has byLabelAndModel, a plan has actions, a verification adds arrived, a history has periods and runs, a connected report has provider and unavailable, a cost answer has verdict and restsOn',
371
428
  problems: [],
372
429
  unavailable: [],
373
430
  records: null,
@@ -1 +1 @@
1
- {"version":3,"file":"conform.js","sourceRoot":"","sources":["../src/conform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conform.js","sourceRoot":"","sources":["../src/conform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW;IACX,SAAS;IACT,MAAM;IACN,cAAc;IACd,SAAS;IACT,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,SAAS;CACD,CAAC;AA2CX,sEAAsE;AACtE,MAAM,cAAc,GAA6D;IAC/E;QACE,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,wDAAwD;QACjE,UAAU,EAAE,8CAA8C;KAC3D;IACD;QACE,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,6CAA6C;QACtD,UAAU,EAAE,+DAA+D;KAC5E;IACD;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,yDAAyD;QAClE,UAAU,EAAE,oDAAoD;KACjE;IACD;QACE,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,0DAA0D;QACnE,UAAU,EAAE,yDAAyD;KACtE;IACD;QACE,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,wDAAwD;QACjE,UAAU,EAAE,qDAAqD;KAClE;CACF,CAAC;AAEF,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;AACvD,CAAC;AAED,oEAAoE;AACpE,SAAS,OAAO,CAAC,MAA+B;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAiC,CAAC;IAC3C,CAAC;IACD,2EAA2E;IAC3E,sEAAsE;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,cAAc;IACd,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,yBAAyB;IACzB,6BAA6B;CAC9B,CAAC;AAEF,yDAAyD;AACzD,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO;QAC/B,MAAM,EAAE,GAAG,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,qCAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACzG,OAAO;QACT,CAAC;QACD,OAAO,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,MAAiC,CAAC;QAEjD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,SAAS,GACb,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;QACnF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE;gBACF,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,sCAAsC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC;aACtG,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;YACrE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,EAAE,CAAC;gBAC/E,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,sBAAsB,KAAK,CAAC,KAAK,GAAG;QAC7C,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,WAAW;QACX,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,CAAC,GAA4B;IACxD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC1F,CAAC;AASD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,KAAkC,EAAa,EAAE,CAAC,CAAC;IAC/F,IAAI;IACJ,QAAQ;IACR,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClE,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAC3C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAElG,MAAM,cAAc,GAA4D;IAC9E,OAAO,EAAE;QACP,IAAI,CAAC,OAAO,EAAE,uCAAuC,EAAE,QAAQ,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE,8BAA8B,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,8BAA8B,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE,oDAAoD,EAAE,OAAO,CAAC;QACtF,IAAI,CAAC,gBAAgB,EAAE,4CAA4C,EAAE,OAAO,CAAC;QAC7E,IAAI,CAAC,cAAc,EAAE,+BAA+B,EAAE,OAAO,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,kDAAkD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;KACnG;IACD,IAAI,EAAE;QACJ,IAAI,CAAC,SAAS,EAAE,+BAA+B,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,kBAAkB,EAAE,yCAAyC,EAAE,QAAQ,CAAC;QAC7E,IAAI,CAAC,UAAU,EAAE,+CAA+C,EAAE,QAAQ,CAAC;KAC5E;IACD,YAAY,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE,4BAA4B,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QACrC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxC,IAAI,CAAC,YAAY,EAAE,sCAAsC,EAAE,QAAQ,CAAC;KACrE;IACD,OAAO,EAAE;QACP,IAAI,CAAC,SAAS,EAAE,yCAAyC,EAAE,OAAO,CAAC;QACnE,IAAI,CAAC,MAAM,EAAE,4CAA4C,EAAE,OAAO,CAAC;KACpE;IACD,SAAS,EAAE;QACT,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,iDAAiD,EAAE,OAAO,CAAC;KAChF;IACD;;;;;;;;;;OAUG;IACH,gBAAgB,EAAE;QAChB,IAAI,CAAC,QAAQ,EAAE,oDAAoD,EAAE,OAAO,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE,6CAA6C,EAAE,OAAO,CAAC;QAC1E,IAAI,CAAC,UAAU,EAAE,mDAAmD,EAAE,QAAQ,CAAC;QAC/E,IAAI,CACF,2BAA2B,EAC3B,4HAA4H;QAC5H,qEAAqE;QACrE,qEAAqE;QACrE,uDAAuD;QACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CACjC;QACD,IAAI,CACF,QAAQ,EACR,gGAAgG,EAChG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAC3C;KACF;IACD,eAAe,EAAE;QACf,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE,OAAO,CAAC;QACjD,IAAI,CAAC,eAAe,EAAE,sCAAsC,EAAE,OAAO,CAAC;QACtE,IAAI,CAAC,UAAU,EAAE,4DAA4D,EAAE,QAAQ,CAAC;QACxF,IAAI,CACF,UAAU,EACV,8CAA8C,EAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CACjC;QACD,IAAI,CAAC,WAAW,EAAE,4CAA4C,EAAE,OAAO,CAAC;KACzE;IACD;;;;;;;;;OASG;IACH,SAAS,EAAE;QACT,IAAI,CAAC,cAAc,EAAE,kEAAkE,EAAE,OAAO,CAAC;QACjG,IAAI,CAAC,UAAU,EAAE,sFAAsF,EAAE,OAAO,CAAC;QACjH,IAAI,CAAC,OAAO,EAAE,uCAAuC,EAAE,QAAQ,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE,gEAAgE,EAAE,OAAO,CAAC;QAC5F,IAAI,CAAC,WAAW,EAAE,uDAAuD,EAAE,OAAO,CAAC;KACpF;IACD,aAAa,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,kCAAkC,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,+CAA+C,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,QAAQ,EAAE,4CAA4C,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC/F;CACF,CAAC;AAyBF,MAAM,WAAW,GAAqE;IACpF,gBAAgB,EAAE;QAChB;YACE,EAAE,EAAE,2BAA2B;YAC/B,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACV,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8C,CAAC;gBACpE,MAAM,QAAQ,GAAG,OAAO,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnF,IAAI,QAAQ,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAChC,OAAO,GAAG,CAAC,yBAAyB,KAAK,IAAI,CAAC;YAChD,CAAC;YACD,MAAM,EACJ,8GAA8G;SACjH;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;YACjG,MAAM,EACJ,6JAA6J;SAChK;KACF;IACD;;;;;;;;;;;;;;OAcG;IACH,SAAS,EAAE;QACT;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACV,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;gBAChC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;gBAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC/E,MAAM,EACJ,wKAAwK;SAC3K;QACD;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACV,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC5B,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACzB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YACnF,MAAM,EACJ,8IAA8I;SACjJ;KACF;IACD,eAAe,EAAE;QACf;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACV,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;gBACjC,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;gBAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAC5E,MAAM,EACJ,4IAA4I;SAC/I;KACF;CACF,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,GAA4B;IAC9C,8EAA8E;IAC9E,0EAA0E;IAC1E,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,eAAe,CAAC;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACrF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC;IACzF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG;QAAE,OAAO,aAAa,CAAC;IAC9E,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3F,OAAO,IAAI,CAAC;AACd,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAO,GAAmB,EAAE;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,uDAAuD;YAChE,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,2CAA2C,MAAM,CAAC,MAAM,CAAC,EAAE;YACpE,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C;;;;;;;;OAQG;IACH,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAE9F,qEAAqE;IACrE,uCAAuC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAErD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,IAAI;YACd,OAAO,EACL,8QAA8Q;YAChR,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C;;;;;OAKG;IACH,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,mGAAmG;SAC5G,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;SACjE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC1F,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,uEAAuE;YACvE,uEAAuE;YACvE,kEAAkE;YAClE,aAAa;YACb,MAAM,IAAI,GACR,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK,CAAC,IAAI;gBACd,IAAI;gBACJ,MAAM,EAAE,YAAY,KAAK,CAAC,QAAQ,WAAW,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,sEAAsE;IACtE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,QAAQ;QACR,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Did the things that are supposed to run, run?
3
+ *
4
+ * `watch --once` is designed for a scheduler: it pulls, stores, evaluates and
5
+ * saves state, so a cron entry is the whole daemon. Its state file records the
6
+ * last cycle precisely so a restart is honest about the stretch it did not
7
+ * watch — and that file is read by exactly one thing, which is the next cycle.
8
+ *
9
+ * **So nothing can tell you the watcher stopped, because the thing that would
10
+ * tell you is the thing that stopped.** A dead cron produces silence, and
11
+ * silence is what a watcher with nothing to report produces too. That is
12
+ * `not-recorded is not not-happened` one layer up from where this repository
13
+ * usually meets it: not a missing record, a missing *run*.
14
+ *
15
+ * This module is the arithmetic for saying so. The caller reads the state file
16
+ * and the store; this turns instants into ages and ages into a verdict, which
17
+ * is what makes the rule testable without waiting a week for a cron to die.
18
+ *
19
+ * **Three refusals shape it:**
20
+ *
21
+ * - **Something that never ran cannot be stale.** A repository where nobody
22
+ * has ever started a watcher is not a repository whose watcher is late; it
23
+ * has no cadence to be late against. `never-run` is its own verdict and it
24
+ * never gates, because a gate that fires on "you have not adopted this
25
+ * feature" is a tool nagging rather than measuring.
26
+ * - **No limit, no verdict.** Without a stated threshold the ages are reported
27
+ * and nothing is judged. How stale is too stale is a policy, and this
28
+ * product does not write somebody's policy for them.
29
+ * - **How far the measurements reach is not a run.** A store whose newest
30
+ * record covers up to yesterday is a provider reporting on its own schedule,
31
+ * not a job that failed. It is reported beside the runs and deliberately
32
+ * never judged by the same threshold: merging "nothing ran" with "the
33
+ * provider is a day behind" would produce a red build for somebody else's
34
+ * latency.
35
+ */
36
+ export type HeartbeatKind =
37
+ /** The last `watch` cycle, from its state file. */
38
+ 'watch-cycle'
39
+ /** The last time a connector wrote a record into the store. */
40
+ | 'store-pull'
41
+ /** How far the stored measurements reach — a fact, never a run. */
42
+ | 'store-coverage';
43
+ export type HeartbeatVerdict =
44
+ /** It has never happened here. Not late; there is no cadence to be late against. */
45
+ 'never-run'
46
+ /** It happened, and no threshold was stated, so nothing is judged. */
47
+ | 'not-judged'
48
+ /** Within the stated threshold. */
49
+ | 'within'
50
+ /** Past the stated threshold. */
51
+ | 'stale';
52
+ export interface Heartbeat {
53
+ kind: HeartbeatKind;
54
+ /** When it last happened, or null when it never has. */
55
+ lastMs: number | null;
56
+ /**
57
+ * Whole hours since, or null when it never happened.
58
+ *
59
+ * Hours rather than days because the schedules this is about are hourly as
60
+ * often as daily, and a cron that died twenty hours ago is zero days old.
61
+ * Floored, so an age this reports as six hours is at least six hours.
62
+ */
63
+ ageHours: number | null;
64
+ verdict: HeartbeatVerdict;
65
+ }
66
+ export interface HeartbeatReport {
67
+ schemaVersion: 1;
68
+ nowMs: number;
69
+ /** The threshold the caller stated, or null when none was. */
70
+ maxStaleHours: number | null;
71
+ beats: Heartbeat[];
72
+ /**
73
+ * True when something that has run before is past the threshold.
74
+ *
75
+ * Never true for a `never-run` beat, and never true for `store-coverage`,
76
+ * which is not a run.
77
+ */
78
+ stale: boolean;
79
+ }
80
+ /** What the caller found on disk. Nulls are absences, never zero. */
81
+ export interface HeartbeatInput {
82
+ /** `lastCycleMs` from the watch state file, or null when there is none. */
83
+ watchCycleMs: number | null;
84
+ /** The newest `pulledAtMs` in the store, or null when the store is empty. */
85
+ storePulledMs: number | null;
86
+ /** The furthest `toMs` in the store, or null when the store is empty. */
87
+ storeCoveredToMs: number | null;
88
+ }
89
+ export declare function heartbeats(input: HeartbeatInput, options: {
90
+ nowMs: number;
91
+ maxStaleHours?: number;
92
+ }): HeartbeatReport;
93
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,MAAM,MAAM,aAAa;AACvB,mDAAmD;AACjD,aAAa;AACf,+DAA+D;GAC7D,YAAY;AACd,mEAAmE;GACjE,gBAAgB,CAAC;AAErB,MAAM,MAAM,gBAAgB;AAC1B,oFAAoF;AAClF,WAAW;AACb,sEAAsE;GACpE,YAAY;AACd,mCAAmC;GACjC,QAAQ;AACV,iCAAiC;GAC/B,OAAO,CAAC;AAEZ,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,wDAAwD;IACxD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAaD,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,eAAe,CA+BjB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Did the things that are supposed to run, run?
3
+ *
4
+ * `watch --once` is designed for a scheduler: it pulls, stores, evaluates and
5
+ * saves state, so a cron entry is the whole daemon. Its state file records the
6
+ * last cycle precisely so a restart is honest about the stretch it did not
7
+ * watch — and that file is read by exactly one thing, which is the next cycle.
8
+ *
9
+ * **So nothing can tell you the watcher stopped, because the thing that would
10
+ * tell you is the thing that stopped.** A dead cron produces silence, and
11
+ * silence is what a watcher with nothing to report produces too. That is
12
+ * `not-recorded is not not-happened` one layer up from where this repository
13
+ * usually meets it: not a missing record, a missing *run*.
14
+ *
15
+ * This module is the arithmetic for saying so. The caller reads the state file
16
+ * and the store; this turns instants into ages and ages into a verdict, which
17
+ * is what makes the rule testable without waiting a week for a cron to die.
18
+ *
19
+ * **Three refusals shape it:**
20
+ *
21
+ * - **Something that never ran cannot be stale.** A repository where nobody
22
+ * has ever started a watcher is not a repository whose watcher is late; it
23
+ * has no cadence to be late against. `never-run` is its own verdict and it
24
+ * never gates, because a gate that fires on "you have not adopted this
25
+ * feature" is a tool nagging rather than measuring.
26
+ * - **No limit, no verdict.** Without a stated threshold the ages are reported
27
+ * and nothing is judged. How stale is too stale is a policy, and this
28
+ * product does not write somebody's policy for them.
29
+ * - **How far the measurements reach is not a run.** A store whose newest
30
+ * record covers up to yesterday is a provider reporting on its own schedule,
31
+ * not a job that failed. It is reported beside the runs and deliberately
32
+ * never judged by the same threshold: merging "nothing ran" with "the
33
+ * provider is a day behind" would produce a red build for somebody else's
34
+ * latency.
35
+ */
36
+ const HOUR_MS = 3_600_000;
37
+ /** Whole hours between two instants, floored and never negative. */
38
+ const hoursSince = (fromMs, nowMs) => Math.max(0, Math.floor((nowMs - fromMs) / HOUR_MS));
39
+ /** Kinds that answer "did something run", as opposed to "how far does it reach". */
40
+ const IS_A_RUN = {
41
+ 'watch-cycle': true,
42
+ 'store-pull': true,
43
+ 'store-coverage': false,
44
+ };
45
+ export function heartbeats(input, options) {
46
+ const { nowMs } = options;
47
+ const maxStaleHours = typeof options.maxStaleHours === 'number' && Number.isFinite(options.maxStaleHours)
48
+ ? options.maxStaleHours
49
+ : null;
50
+ const build = (kind, lastMs) => {
51
+ if (lastMs === null) {
52
+ return { kind, lastMs: null, ageHours: null, verdict: 'never-run' };
53
+ }
54
+ const ageHours = hoursSince(lastMs, nowMs);
55
+ if (maxStaleHours === null || !IS_A_RUN[kind]) {
56
+ return { kind, lastMs, ageHours, verdict: 'not-judged' };
57
+ }
58
+ return { kind, lastMs, ageHours, verdict: ageHours > maxStaleHours ? 'stale' : 'within' };
59
+ };
60
+ const beats = [
61
+ build('watch-cycle', input.watchCycleMs),
62
+ build('store-pull', input.storePulledMs),
63
+ build('store-coverage', input.storeCoveredToMs),
64
+ ];
65
+ return {
66
+ schemaVersion: 1,
67
+ nowMs,
68
+ maxStaleHours,
69
+ beats,
70
+ stale: beats.some((beat) => beat.verdict === 'stale'),
71
+ };
72
+ }
73
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,OAAO,GAAG,SAAS,CAAC;AA4D1B,oEAAoE;AACpE,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAa,EAAU,EAAE,CAC3D,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAEtD,oFAAoF;AACpF,MAAM,QAAQ,GAAmC;IAC/C,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF,MAAM,UAAU,UAAU,CACxB,KAAqB,EACrB,OAAkD;IAElD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,aAAa,GACjB,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;QACjF,CAAC,CAAC,OAAO,CAAC,aAAa;QACvB,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAE,MAAqB,EAAa,EAAE;QACtE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACtE,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5F,CAAC,CAAC;IAEF,MAAM,KAAK,GAAgB;QACzB,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QACxC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC;QACxC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC;KAChD,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,KAAK;QACL,aAAa;QACb,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;KACtD,CAAC;AACJ,CAAC"}
package/dist/history.d.ts CHANGED
@@ -59,6 +59,56 @@ export interface HistoryRun {
59
59
  /** First and last values of the run, so the reader judges the size. */
60
60
  from: number;
61
61
  to: number;
62
+ /**
63
+ * Days inside this run's stretch that no report covers.
64
+ *
65
+ * A run is *consecutive reports*, and until this field existed it read as
66
+ * *consecutive time*. Four reports with a three-week hole between the second
67
+ * and the third is not "climbing for four periods" in any sense a reader
68
+ * would act on — the climb may have reversed and come back inside the hole,
69
+ * and nothing here can see it. The caveat travels with the finding rather
70
+ * than living in another field the reader has to cross-reference, because a
71
+ * finding that needs a second lookup to be read correctly will be read
72
+ * incorrectly.
73
+ */
74
+ unmeasuredDays: number;
75
+ }
76
+ /**
77
+ * A stretch of calendar time no stored report covers.
78
+ *
79
+ * Arithmetic on the spans, not an inference about a schedule: this module has
80
+ * no idea how often somebody meant to run anything, and guessing a cadence in
81
+ * order to call a gap late would be the tool deciding what the reader's
82
+ * routine is. A hole between one report's end and the next one's start is a
83
+ * fact about the reports.
84
+ *
85
+ * It is also the whole of what "nobody produced this series on a schedule"
86
+ * looks like from inside the data: a cron that died three weeks ago does not
87
+ * announce itself, it just stops adding points — and a shorter series and a
88
+ * series with a hole in it read identically until somebody says which.
89
+ */
90
+ export interface UnmeasuredStretch {
91
+ fromMs: number;
92
+ toMs: number;
93
+ days: number;
94
+ /** The report that ends where the hole begins. */
95
+ afterName: string;
96
+ /** The report that begins where the hole ends. */
97
+ beforeName: string;
98
+ }
99
+ /**
100
+ * Two reports covering some of the same calendar time.
101
+ *
102
+ * `history` never sums `totalUsd` across periods, but a reader with the
103
+ * document in a spreadsheet will, and two reports over the same fortnight
104
+ * count that fortnight twice. Named rather than merged: which of the two is
105
+ * the better measurement is not knowable from here, and picking one would be
106
+ * throwing away money on a guess.
107
+ */
108
+ export interface OverlappingReports {
109
+ a: string;
110
+ b: string;
111
+ days: number;
62
112
  }
63
113
  /** The same action planned again and again: a decision nobody is executing. */
64
114
  export interface RepeatedPlanAction {
@@ -100,6 +150,17 @@ export interface HistoryDocument {
100
150
  * named here and in no series above, never silently absorbed.
101
151
  */
102
152
  undatedReports: string[];
153
+ /**
154
+ * Calendar time between the first report's start and the last one's end
155
+ * that no report covers, oldest first.
156
+ *
157
+ * The series is stated with its holes rather than closed over them: a
158
+ * scheduled run that stopped three weeks ago produces a series that looks
159
+ * exactly like a shorter one, and only this field tells the two apart.
160
+ */
161
+ unmeasured: UnmeasuredStretch[];
162
+ /** The same calendar time covered by two reports. Named, never merged. */
163
+ overlappingReports: OverlappingReports[];
103
164
  }
104
165
  export declare const MIN_RUN = 3;
105
166
  export declare function buildHistory(reports: StoredReport[], plans?: (PlanDocument & {
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9D,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mCAAmC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mCAAmC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wEAAwE;IACxE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,sBAAsB,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,0CAA0C;IAC1C,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAClG,2EAA2E;IAC3E,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;KAAE,EAAE,CAAC;IAC5D,mEAAmE;IACnE,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;KAAE,EAAE,CAAC;IACjE,0DAA0D;IAC1D,gBAAgB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,oEAAoE;IACpE,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,OAAO,IAAI,CAAC;AAwBzB,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,GAAE,CAAC,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAO,GACnE,eAAe,CAiHjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA8CnF"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
package/dist/history.js CHANGED
@@ -21,6 +21,62 @@
21
21
  */
22
22
  import { UNLABELLED } from './usage.js';
23
23
  export const MIN_RUN = 3;
24
+ const DAY_MS = 86_400_000;
25
+ /**
26
+ * Whole days between two instants, never negative and never rounded up.
27
+ *
28
+ * Rounded down deliberately: a gap this module calls three days must be at
29
+ * least three days. A ceiling would make the smallest possible hole read as a
30
+ * day of missing measurement, which is the flattering direction inverted —
31
+ * alarming rather than reassuring, and just as wrong.
32
+ */
33
+ const daysBetween = (fromMs, toMs) => Math.max(0, Math.floor((toMs - fromMs) / DAY_MS));
34
+ /**
35
+ * The holes and the overlaps in a set of dated reports.
36
+ *
37
+ * One sweep in start order. A report that ends before the furthest end seen so
38
+ * far is contained in what is already covered and moves nothing; one that
39
+ * starts after it opens a hole; one that starts before it overlaps.
40
+ */
41
+ function coverageOf(dated) {
42
+ const unmeasured = [];
43
+ const overlaps = [];
44
+ if (dated.length === 0)
45
+ return { unmeasured, overlaps };
46
+ let coveredTo = dated[0].toMs;
47
+ let coveredBy = dated[0].name;
48
+ for (let i = 1; i < dated.length; i += 1) {
49
+ const report = dated[i];
50
+ if (report.fromMs > coveredTo) {
51
+ const days = daysBetween(coveredTo, report.fromMs);
52
+ // A hole shorter than a whole day is the seam between two adjacent
53
+ // exports, not a stretch nobody measured.
54
+ if (days > 0) {
55
+ unmeasured.push({
56
+ fromMs: coveredTo,
57
+ toMs: report.fromMs,
58
+ days,
59
+ afterName: coveredBy,
60
+ beforeName: report.name,
61
+ });
62
+ }
63
+ }
64
+ else if (report.fromMs < coveredTo) {
65
+ const days = daysBetween(report.fromMs, Math.min(coveredTo, report.toMs));
66
+ if (days > 0)
67
+ overlaps.push({ a: coveredBy, b: report.name, days });
68
+ }
69
+ if (report.toMs > coveredTo) {
70
+ coveredTo = report.toMs;
71
+ coveredBy = report.name;
72
+ }
73
+ }
74
+ return { unmeasured, overlaps };
75
+ }
76
+ /** Days of hole inside a stretch of the timeline. */
77
+ const unmeasuredWithin = (unmeasured, fromMs, toMs) => unmeasured
78
+ .filter((hole) => hole.fromMs >= fromMs && hole.toMs <= toMs)
79
+ .reduce((sum, hole) => sum + hole.days, 0);
24
80
  /** The longest run of strictly consecutive movement ending anywhere in the series. */
25
81
  function longestRun(points, direction) {
26
82
  let best = null;
@@ -70,6 +126,9 @@ export function buildHistory(reports, plans = []) {
70
126
  }),
71
127
  }));
72
128
  const cacheShareSeries = dated.map((r) => r.cacheReadShare);
129
+ const { unmeasured, overlaps: overlappingReports } = coverageOf(periods);
130
+ /** The unmeasured days a run spans, from the report it starts in to the one it ends in. */
131
+ const holeIn = (start, length) => unmeasuredWithin(unmeasured, periods[start].fromMs, periods[start + length].toMs);
73
132
  const runs = [];
74
133
  for (const series of labelSeries) {
75
134
  const run = longestRun(series.points, 1);
@@ -82,6 +141,7 @@ export function buildHistory(reports, plans = []) {
82
141
  sinceName: periods[run.start].name,
83
142
  from: series.points[run.start],
84
143
  to: series.points[run.start + run.length],
144
+ unmeasuredDays: holeIn(run.start, run.length),
85
145
  });
86
146
  }
87
147
  for (const series of modelShareSeries) {
@@ -95,6 +155,7 @@ export function buildHistory(reports, plans = []) {
95
155
  sinceName: periods[run.start].name,
96
156
  from: series.points[run.start],
97
157
  to: series.points[run.start + run.length],
158
+ unmeasuredDays: holeIn(run.start, run.length),
98
159
  });
99
160
  }
100
161
  {
@@ -107,6 +168,7 @@ export function buildHistory(reports, plans = []) {
107
168
  sinceName: periods[run.start].name,
108
169
  from: cacheShareSeries[run.start],
109
170
  to: cacheShareSeries[run.start + run.length],
171
+ unmeasuredDays: holeIn(run.start, run.length),
110
172
  });
111
173
  }
112
174
  }
@@ -151,6 +213,8 @@ export function buildHistory(reports, plans = []) {
151
213
  runs,
152
214
  repeatedPlanActions,
153
215
  undatedReports,
216
+ unmeasured,
217
+ overlappingReports,
154
218
  };
155
219
  }
156
220
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export { coverageDrift, COVERAGE_FIELDS, COVERAGE_DRIFT_MIN } from './coverage-d
13
13
  export { explainGateFailure, gateMargin, GATE_MARGIN_TIGHT } from './gate-explain.js';
14
14
  export { measuredUsage, labelCoverage, MIN_SCALE_DAYS, SCALE_TO_DAYS } from './measured-profile.js';
15
15
  export { assignSources, fleetRollup } from './fleet.js';
16
+ export { rollUp } from './rollup.js';
17
+ export { heartbeats } from './heartbeat.js';
16
18
  export { buildPlan, planLabelName, parsePlanDocument, PLAN_ACTION_KINDS } from './plan.js';
17
19
  export type { PlanParseFailure, PlanParseResult } from './plan.js';
18
20
  export type { PlanAction, PlanActionKind, PlanAssumption, PlanDocument } from './plan.js';
@@ -56,9 +58,11 @@ export { STORE_SCHEMA_VERSION, identityOf, resolveStore, recordsFromBuckets, buc
56
58
  export type { PruneResult, ResolvedStore, StoreInventory, StoreRecord } from './store.js';
57
59
  export { CONNECTORS, connectorFor, normalizeAnthropicUsage, normalizeOpenAIUsage, bucketedProfile, bucketedCacheEconomics, } from './connector.js';
58
60
  export type { BucketedReport, BucketedSlice, ConnectorDescriptor, ConnectorGranularity, ConnectorPull, PullGap, UnavailableFinding, UsageBucket, } from './connector.js';
59
- export type { HistoryDocument, HistoryRun, RepeatedPlanAction, StoredReport } from './history.js';
61
+ export type { HistoryDocument, HistoryRun, RepeatedPlanAction, StoredReport, UnmeasuredStretch, OverlappingReports, } from './history.js';
60
62
  export type { CannotTellReason, PlanVerification, VerifiedAction, VerifyOutcome } from './verify.js';
61
63
  export type { FleetSource, FleetRollup } from './fleet.js';
64
+ export type { Heartbeat, HeartbeatInput, HeartbeatKind, HeartbeatReport, HeartbeatVerdict, } from './heartbeat.js';
65
+ export type { RollupInput, RollupDocument, RollupContributor, RollupDay, RollupCaveat, ContributorGap, UnmergedFinding, SilentRun, } from './rollup.js';
62
66
  export type { MeasuredUsage, LabelCoverage } from './measured-profile.js';
63
67
  export type { GateExplanation } from './gate-explain.js';
64
68
  export type { CoverageDrift, CoverageField } from './coverage-drift.js';