@origintrail-official/dkg-core 10.0.11 → 10.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +29 -29
  3. package/dist/assertion-seal.js +46 -1
  4. package/dist/assertion-seal.js.map +1 -1
  5. package/dist/author-catalog-codec.d.ts +8 -20
  6. package/dist/author-catalog-codec.d.ts.map +1 -1
  7. package/dist/author-catalog-codec.js +33 -41
  8. package/dist/author-catalog-codec.js.map +1 -1
  9. package/dist/author-lane-scope-v1.d.ts +40 -0
  10. package/dist/author-lane-scope-v1.d.ts.map +1 -0
  11. package/dist/author-lane-scope-v1.js +168 -0
  12. package/dist/author-lane-scope-v1.js.map +1 -0
  13. package/dist/backpressure-observability.d.ts +273 -0
  14. package/dist/backpressure-observability.d.ts.map +1 -0
  15. package/dist/backpressure-observability.js +572 -0
  16. package/dist/backpressure-observability.js.map +1 -0
  17. package/dist/canonical-graph-scoped-author-seal.d.ts +2 -5
  18. package/dist/canonical-graph-scoped-author-seal.d.ts.map +1 -1
  19. package/dist/canonical-graph-scoped-author-seal.js +40 -32
  20. package/dist/canonical-graph-scoped-author-seal.js.map +1 -1
  21. package/dist/cg-shared-projection.d.ts.map +1 -1
  22. package/dist/cg-shared-projection.js +2 -10
  23. package/dist/cg-shared-projection.js.map +1 -1
  24. package/dist/genesis.js +15 -15
  25. package/dist/graph-knowledge-asset-metadata.js +106 -106
  26. package/dist/imported-artifact-metadata.js +31 -31
  27. package/dist/index.d.ts +5 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/ka-bundle-v1.d.ts +2 -0
  32. package/dist/ka-bundle-v1.d.ts.map +1 -1
  33. package/dist/ka-bundle-v1.js +7 -2
  34. package/dist/ka-bundle-v1.js.map +1 -1
  35. package/dist/ka-content-scope.d.ts +27 -0
  36. package/dist/ka-content-scope.d.ts.map +1 -1
  37. package/dist/ka-content-scope.js +43 -1
  38. package/dist/ka-content-scope.js.map +1 -1
  39. package/dist/ka-ual-identity.d.ts +33 -0
  40. package/dist/ka-ual-identity.d.ts.map +1 -0
  41. package/dist/ka-ual-identity.js +89 -0
  42. package/dist/ka-ual-identity.js.map +1 -0
  43. package/dist/message-stream-pool.d.ts +15 -0
  44. package/dist/message-stream-pool.d.ts.map +1 -1
  45. package/dist/message-stream-pool.js +23 -0
  46. package/dist/message-stream-pool.js.map +1 -1
  47. package/dist/protocol-router.d.ts +18 -0
  48. package/dist/protocol-router.d.ts.map +1 -1
  49. package/dist/protocol-router.js +96 -1
  50. package/dist/protocol-router.js.map +1 -1
  51. package/dist/swm-author-inventory-v1.d.ts +83 -0
  52. package/dist/swm-author-inventory-v1.d.ts.map +1 -0
  53. package/dist/swm-author-inventory-v1.js +379 -0
  54. package/dist/swm-author-inventory-v1.js.map +1 -0
  55. package/dist/telemetry-api.d.ts +76 -0
  56. package/dist/telemetry-api.d.ts.map +1 -1
  57. package/dist/telemetry-api.js +101 -0
  58. package/dist/telemetry-api.js.map +1 -1
  59. package/dist/vm-update-convergence.d.ts +277 -0
  60. package/dist/vm-update-convergence.d.ts.map +1 -0
  61. package/dist/vm-update-convergence.js +715 -0
  62. package/dist/vm-update-convergence.js.map +1 -0
  63. package/package.json +2 -2
@@ -0,0 +1,572 @@
1
+ import { getMetrics } from './telemetry-api.js';
2
+ const DEFAULT_DEGRADED_QUEUE_AGE_MS = 5_000;
3
+ const DEFAULT_STALLED_ACTIVE_AGE_MS = 30_000;
4
+ const DEFAULT_DEGRADED_QUEUE_UTILIZATION = 0.75;
5
+ const DEFAULT_REJECTION_STATE_WINDOW_MS = 60_000;
6
+ const MAX_OPERATION_SUMMARIES = 8;
7
+ const STATE_RANK = {
8
+ healthy: 0,
9
+ degraded: 1,
10
+ saturated: 2,
11
+ stalled: 3,
12
+ };
13
+ function maxState(a, b) {
14
+ return STATE_RANK[a] >= STATE_RANK[b] ? a : b;
15
+ }
16
+ function normalizeLimit(value) {
17
+ return Number.isFinite(value) && value >= 0 ? value : null;
18
+ }
19
+ /**
20
+ * Keep metric/log dimensions bounded and strip payload-like punctuation.
21
+ * Callers should still pass static operation names rather than graph, peer, or
22
+ * job identifiers.
23
+ */
24
+ export function normalizeBackpressureLabel(value, fallback = 'unknown') {
25
+ const trimmed = value.trim();
26
+ if (!trimmed)
27
+ return fallback;
28
+ return trimmed.replace(/[^\w:./-]/g, '_').slice(0, 80) || fallback;
29
+ }
30
+ function mapToRecord(map) {
31
+ return Object.fromEntries([...map.entries()].sort(([a], [b]) => a.localeCompare(b)));
32
+ }
33
+ function operationSummaries(records, timestamp, now) {
34
+ const byOperation = new Map();
35
+ for (const record of records) {
36
+ const existing = byOperation.get(record.operation);
37
+ const at = timestamp(record);
38
+ if (existing) {
39
+ existing.count += 1;
40
+ existing.oldestAt = Math.min(existing.oldestAt, at);
41
+ }
42
+ else {
43
+ byOperation.set(record.operation, { count: 1, oldestAt: at });
44
+ }
45
+ }
46
+ return [...byOperation.entries()]
47
+ .map(([operation, value]) => ({
48
+ operation,
49
+ count: value.count,
50
+ oldestAgeMs: Math.max(0, Math.floor(now - value.oldestAt)),
51
+ }))
52
+ .sort((a, b) => b.oldestAgeMs - a.oldestAgeMs || b.count - a.count || a.operation.localeCompare(b.operation))
53
+ .slice(0, MAX_OPERATION_SUMMARIES);
54
+ }
55
+ /**
56
+ * Scheduling-policy-neutral lifecycle tracker.
57
+ *
58
+ * Queue implementations call the five transition methods at their existing
59
+ * admission boundaries. The tracker owns timings, state classification,
60
+ * bounded metrics, and diagnostic snapshots, but never decides which work may
61
+ * run. All observability calls are fail-open so instrumentation cannot change
62
+ * scheduler behaviour.
63
+ */
64
+ export class SchedulerPressureTracker {
65
+ scheduler;
66
+ queued = new Map();
67
+ active = new Map();
68
+ lanes = new Map();
69
+ now;
70
+ thresholds;
71
+ capacity;
72
+ nextTicketId = 1;
73
+ constructor(options) {
74
+ this.scheduler = normalizeBackpressureLabel(options.scheduler, 'scheduler');
75
+ this.capacity = options.capacity ?? {};
76
+ this.now = options.now ?? Date.now;
77
+ this.thresholds = {
78
+ degradedQueueAgeMs: options.thresholds?.degradedQueueAgeMs ?? DEFAULT_DEGRADED_QUEUE_AGE_MS,
79
+ stalledActiveAgeMs: options.thresholds?.stalledActiveAgeMs ?? DEFAULT_STALLED_ACTIVE_AGE_MS,
80
+ degradedQueueUtilization: options.thresholds?.degradedQueueUtilization ?? DEFAULT_DEGRADED_QUEUE_UTILIZATION,
81
+ rejectionStateWindowMs: options.thresholds?.rejectionStateWindowMs ?? DEFAULT_REJECTION_STATE_WINDOW_MS,
82
+ };
83
+ }
84
+ updateCapacity(capacity) {
85
+ this.capacity = capacity;
86
+ }
87
+ enqueue(work) {
88
+ const record = {
89
+ id: this.nextTicketId++,
90
+ lane: normalizeBackpressureLabel(work.lane, 'default'),
91
+ operation: normalizeBackpressureLabel(work.operation),
92
+ queuedAt: this.now(),
93
+ };
94
+ this.queued.set(record.id, record);
95
+ this.recordEvent(record.lane, 'enqueued');
96
+ return { id: record.id };
97
+ }
98
+ start(ticket) {
99
+ const record = this.queued.get(ticket.id);
100
+ if (!record)
101
+ return;
102
+ this.queued.delete(ticket.id);
103
+ record.startedAt = this.now();
104
+ this.active.set(ticket.id, record);
105
+ this.recordEvent(record.lane, 'started');
106
+ this.safeMetric(() => getMetrics().backpressureQueueWaitMs.record(Math.max(0, record.startedAt - record.queuedAt), { scheduler: this.scheduler, lane: record.lane }));
107
+ }
108
+ reject(work, reason) {
109
+ const lane = normalizeBackpressureLabel(work.lane, 'default');
110
+ this.recordRejection(lane, reason);
111
+ }
112
+ rejectQueued(ticket, reason) {
113
+ const record = this.queued.get(ticket.id);
114
+ if (!record)
115
+ return;
116
+ this.queued.delete(ticket.id);
117
+ this.recordRejection(record.lane, reason);
118
+ }
119
+ cancelQueued(ticket, reason = 'cancelled') {
120
+ const record = this.queued.get(ticket.id);
121
+ if (!record)
122
+ return;
123
+ this.queued.delete(ticket.id);
124
+ this.recordEvent(record.lane, 'cancelled', reason);
125
+ }
126
+ finish(ticket, outcome) {
127
+ const record = this.active.get(ticket.id);
128
+ if (!record)
129
+ return;
130
+ this.active.delete(ticket.id);
131
+ const finishedAt = this.now();
132
+ this.recordEvent(record.lane, outcome);
133
+ this.safeMetric(() => getMetrics().backpressureActiveDurationMs.record(Math.max(0, finishedAt - (record.startedAt ?? finishedAt)), {
134
+ scheduler: this.scheduler,
135
+ lane: record.lane,
136
+ outcome,
137
+ }));
138
+ }
139
+ snapshot() {
140
+ const now = this.now();
141
+ const laneNames = new Set([
142
+ ...this.lanes.keys(),
143
+ ...Object.keys(this.capacity.lanes ?? {}),
144
+ ...[...this.queued.values()].map((entry) => entry.lane),
145
+ ...[...this.active.values()].map((entry) => entry.lane),
146
+ ]);
147
+ const snapshots = [...laneNames]
148
+ .sort()
149
+ .map((lane) => this.laneSnapshot(lane, now));
150
+ const totals = {
151
+ queued: snapshots.reduce((sum, lane) => sum + lane.queued, 0),
152
+ queueLimit: normalizeLimit(this.capacity.queueLimit)
153
+ ?? this.sumLaneLimits('queueLimit', snapshots),
154
+ inflight: snapshots.reduce((sum, lane) => sum + lane.inflight, 0),
155
+ inflightLimit: normalizeLimit(this.capacity.inflightLimit)
156
+ ?? this.sumLaneLimits('inflightLimit', snapshots),
157
+ oldestQueuedAgeMs: Math.max(0, ...snapshots.map((lane) => lane.oldestQueuedAgeMs)),
158
+ oldestActiveAgeMs: Math.max(0, ...snapshots.map((lane) => lane.oldestActiveAgeMs)),
159
+ rejectedTotal: snapshots.reduce((sum, lane) => sum + lane.rejectedTotal, 0),
160
+ };
161
+ let state = snapshots.reduce((current, lane) => maxState(current, lane.state), 'healthy');
162
+ if (totals.queueLimit !== null
163
+ && totals.queueLimit > 0
164
+ && totals.queued >= totals.queueLimit) {
165
+ state = maxState(state, 'saturated');
166
+ }
167
+ else if (totals.queueLimit !== null
168
+ && totals.queueLimit > 0
169
+ && totals.queued / totals.queueLimit >= this.thresholds.degradedQueueUtilization) {
170
+ state = maxState(state, 'degraded');
171
+ }
172
+ if (totals.oldestQueuedAgeMs >= this.thresholds.degradedQueueAgeMs) {
173
+ state = maxState(state, 'degraded');
174
+ }
175
+ if (totals.oldestActiveAgeMs >= this.thresholds.stalledActiveAgeMs) {
176
+ state = maxState(state, 'stalled');
177
+ }
178
+ return {
179
+ scheduler: this.scheduler,
180
+ state,
181
+ capacityModel: this.capacity.capacityModel === 'shared' ? 'shared' : 'partitioned',
182
+ totals,
183
+ lanes: snapshots,
184
+ };
185
+ }
186
+ runtimeFor(lane) {
187
+ let runtime = this.lanes.get(lane);
188
+ if (!runtime) {
189
+ runtime = {
190
+ events: new Map(),
191
+ rejectedByReason: new Map(),
192
+ lastRejectedAt: null,
193
+ };
194
+ this.lanes.set(lane, runtime);
195
+ }
196
+ return runtime;
197
+ }
198
+ recordEvent(lane, event, reason) {
199
+ const runtime = this.runtimeFor(lane);
200
+ runtime.events.set(event, (runtime.events.get(event) ?? 0) + 1);
201
+ this.safeMetric(() => getMetrics().backpressureEventsTotal.add(1, {
202
+ scheduler: this.scheduler,
203
+ lane,
204
+ event,
205
+ ...(reason ? { reason: normalizeBackpressureLabel(reason) } : {}),
206
+ }));
207
+ }
208
+ recordRejection(lane, reason) {
209
+ const normalizedReason = normalizeBackpressureLabel(reason, 'rejected');
210
+ const runtime = this.runtimeFor(lane);
211
+ runtime.rejectedByReason.set(normalizedReason, (runtime.rejectedByReason.get(normalizedReason) ?? 0) + 1);
212
+ runtime.lastRejectedAt = this.now();
213
+ this.recordEvent(lane, 'rejected', normalizedReason);
214
+ }
215
+ /**
216
+ * Everything the capacity model decides, in one place: which ceilings apply
217
+ * to a lane, what depth its state is measured against, and whether depth
218
+ * pressure applies at all. `laneSnapshot` stays a model-agnostic classifier,
219
+ * so adding a model means extending this descriptor rather than editing the
220
+ * classifier's branches.
221
+ */
222
+ laneCapacityFor(lane, laneQueued) {
223
+ const shared = this.capacity.capacityModel === 'shared';
224
+ const queueLimit = shared
225
+ ? normalizeLimit(this.capacity.queueLimit)
226
+ : normalizeLimit(this.capacity.lanes?.[lane]?.queueLimit);
227
+ // A lane with nothing waiting is not held back by a full queue, whoever
228
+ // filled it. Scoped to `shared` deliberately: under `partitioned` the
229
+ // comparisons imply it only for a positive utilization threshold, and
230
+ // `degradedQueueUtilization` is caller-supplied public API — at 0 the old
231
+ // branch read `0 / limit >= 0` as degraded on an idle lane. Applying the
232
+ // guard there would have been a real behaviour change for a private
233
+ // allocation, so it is not applied there.
234
+ const depthApplies = queueLimit !== null && queueLimit > 0 && (!shared || laneQueued > 0);
235
+ return {
236
+ capacityModel: shared ? 'shared' : 'partitioned',
237
+ queueLimit,
238
+ inflightLimit: shared
239
+ ? normalizeLimit(this.capacity.inflightLimit)
240
+ : normalizeLimit(this.capacity.lanes?.[lane]?.inflightLimit),
241
+ // Depth is measured against whatever the lane's ceiling bounds: its own
242
+ // backlog when the allocation is private, the whole pool when the ceiling
243
+ // is shared.
244
+ depthPressure: depthApplies && queueLimit !== null
245
+ ? { queued: shared ? this.queued.size : laneQueued, limit: queueLimit }
246
+ : null,
247
+ };
248
+ }
249
+ laneSnapshot(lane, now) {
250
+ const runtime = this.runtimeFor(lane);
251
+ const queued = [...this.queued.values()].filter((entry) => entry.lane === lane);
252
+ const active = [...this.active.values()].filter((entry) => entry.lane === lane);
253
+ const { capacityModel, queueLimit, inflightLimit, depthPressure, } = this.laneCapacityFor(lane, queued.length);
254
+ // Exactly the depth the classifier used, so `pressureQueued / queueLimit`
255
+ // is always the utilization behind this lane's own state. A lane no depth
256
+ // applies to reports its own backlog rather than a pool it is not being
257
+ // held back by — publishing the pool there would read as full utilization
258
+ // on a lane that is `healthy` and waiting for nothing.
259
+ const pressureQueued = depthPressure?.queued ?? queued.length;
260
+ // The concurrency ceiling on a shared row is the pool's, so the count
261
+ // beside it must be too. The classifier reads neither — this pair is
262
+ // reported, not judged — but a row that pairs a lane-local count with a
263
+ // pool ceiling tells an operator the pool is idle while it is the reason
264
+ // nothing drains.
265
+ const pressureInflight = capacityModel === 'shared' ? this.active.size : active.length;
266
+ const oldestQueuedAgeMs = queued.length === 0
267
+ ? 0
268
+ : Math.max(...queued.map((entry) => Math.max(0, Math.floor(now - entry.queuedAt))));
269
+ const oldestActiveAgeMs = active.length === 0
270
+ ? 0
271
+ : Math.max(...active.map((entry) => Math.max(0, Math.floor(now - (entry.startedAt ?? now)))));
272
+ let state = 'healthy';
273
+ if (oldestActiveAgeMs >= this.thresholds.stalledActiveAgeMs) {
274
+ state = 'stalled';
275
+ }
276
+ else if ((depthPressure !== null && depthPressure.queued >= depthPressure.limit)
277
+ || (runtime.lastRejectedAt !== null
278
+ && now - runtime.lastRejectedAt <= this.thresholds.rejectionStateWindowMs)) {
279
+ state = 'saturated';
280
+ }
281
+ else if (oldestQueuedAgeMs >= this.thresholds.degradedQueueAgeMs
282
+ || (depthPressure !== null
283
+ && depthPressure.queued / depthPressure.limit >= this.thresholds.degradedQueueUtilization)) {
284
+ state = 'degraded';
285
+ }
286
+ return {
287
+ lane,
288
+ state,
289
+ capacityModel,
290
+ queued: queued.length,
291
+ pressureQueued,
292
+ queueLimit,
293
+ inflight: active.length,
294
+ pressureInflight,
295
+ inflightLimit,
296
+ oldestQueuedAgeMs,
297
+ oldestActiveAgeMs,
298
+ queuedOperations: operationSummaries(queued, (entry) => entry.queuedAt, now),
299
+ activeOperations: operationSummaries(active, (entry) => entry.startedAt ?? now, now),
300
+ events: mapToRecord(runtime.events),
301
+ rejectedTotal: [...runtime.rejectedByReason.values()].reduce((sum, value) => sum + value, 0),
302
+ rejectedByReason: mapToRecord(runtime.rejectedByReason),
303
+ lastRejectedAgeMs: runtime.lastRejectedAt === null
304
+ ? null
305
+ : Math.max(0, Math.floor(now - runtime.lastRejectedAt)),
306
+ };
307
+ }
308
+ /**
309
+ * Reached only when the scheduler publishes no ceiling of its own — which is
310
+ * also the only case in which a `shared` lane has none either, since a shared
311
+ * lane's ceiling resolves from that same value. A pool ceiling can therefore
312
+ * never become a summand here, which it must not: summing it would report N×
313
+ * the real capacity and silence the rollup's own saturation branch.
314
+ */
315
+ sumLaneLimits(field, lanes) {
316
+ if (lanes.length === 0 || lanes.some((lane) => lane[field] === null))
317
+ return null;
318
+ return lanes.reduce((sum, lane) => sum + (lane[field] ?? 0), 0);
319
+ }
320
+ safeMetric(record) {
321
+ try {
322
+ record();
323
+ }
324
+ catch {
325
+ // Metrics are strictly fail-open.
326
+ }
327
+ }
328
+ }
329
+ /**
330
+ * Base class for in-memory schedulers. Subclasses retain complete ownership of
331
+ * queue ordering, admission, coalescing, and release semantics and call these
332
+ * protected lifecycle methods at their existing boundaries.
333
+ */
334
+ export class ObservableScheduler {
335
+ pressure;
336
+ constructor(options) {
337
+ this.pressure = new SchedulerPressureTracker(options);
338
+ }
339
+ get backpressureId() {
340
+ return this.pressure.scheduler;
341
+ }
342
+ getBackpressureSnapshot() {
343
+ return this.pressure.snapshot();
344
+ }
345
+ updatePressureCapacity(capacity) {
346
+ this.pressure.updateCapacity(capacity);
347
+ }
348
+ pressureEnqueue(work) {
349
+ return this.pressure.enqueue(work);
350
+ }
351
+ pressureStart(ticket) {
352
+ this.pressure.start(ticket);
353
+ }
354
+ pressureReject(work, reason) {
355
+ this.pressure.reject(work, reason);
356
+ }
357
+ pressureRejectQueued(ticket, reason) {
358
+ this.pressure.rejectQueued(ticket, reason);
359
+ }
360
+ pressureCancelQueued(ticket, reason) {
361
+ this.pressure.cancelQueued(ticket, reason);
362
+ }
363
+ pressureFinish(ticket, outcome) {
364
+ this.pressure.finish(ticket, outcome);
365
+ }
366
+ }
367
+ export class BackpressureRegistry {
368
+ sources = new Map();
369
+ register(source) {
370
+ const id = normalizeBackpressureLabel(source.backpressureId, 'scheduler');
371
+ const existing = this.sources.get(id);
372
+ if (existing && existing !== source) {
373
+ throw new Error(`Backpressure source "${id}" is already registered`);
374
+ }
375
+ this.sources.set(id, source);
376
+ return () => {
377
+ if (this.sources.get(id) === source)
378
+ this.sources.delete(id);
379
+ };
380
+ }
381
+ capture() {
382
+ const schedulers = [];
383
+ const failures = [];
384
+ for (const [id, source] of [...this.sources.entries()].sort(([a], [b]) => a.localeCompare(b))) {
385
+ try {
386
+ schedulers.push(source.getBackpressureSnapshot());
387
+ }
388
+ catch (error) {
389
+ failures.push({
390
+ scheduler: id,
391
+ error: error instanceof Error ? error.message : String(error),
392
+ });
393
+ }
394
+ }
395
+ return {
396
+ capturedAt: new Date().toISOString(),
397
+ state: schedulers.reduce((current, scheduler) => maxState(current, scheduler.state), 'healthy'),
398
+ schedulers,
399
+ failures,
400
+ };
401
+ }
402
+ }
403
+ export const backpressureRegistry = new BackpressureRegistry();
404
+ export function recordBackpressureSnapshotMetrics(snapshot) {
405
+ const metrics = getMetrics();
406
+ const record = (lane, values) => {
407
+ const attributes = { scheduler: snapshot.scheduler, lane };
408
+ metrics.backpressureQueueDepth.record(values.queued, attributes);
409
+ // `queue_depth` stays this lane's own backlog — the attribution signal —
410
+ // so the numerator that actually goes with `queue_limit` is published
411
+ // beside it. Without this a shared lane exports `queue_depth: 1` against a
412
+ // pool `queue_limit: 4` and a utilization alert reads 25% while the lane is
413
+ // `saturated`; on a private allocation the two are equal.
414
+ metrics.backpressurePressureDepth.record(values.pressureQueued ?? values.queued, attributes);
415
+ metrics.backpressureInflight.record(values.inflight, attributes);
416
+ metrics.backpressurePressureInflight.record(values.pressureInflight ?? values.inflight, attributes);
417
+ metrics.backpressureOldestQueuedAgeMs.record(values.oldestQueuedAgeMs, attributes);
418
+ metrics.backpressureOldestActiveAgeMs.record(values.oldestActiveAgeMs, attributes);
419
+ if (values.queueLimit !== null) {
420
+ metrics.backpressureQueueLimit.record(values.queueLimit, attributes);
421
+ }
422
+ if (values.inflightLimit !== null) {
423
+ metrics.backpressureInflightLimit.record(values.inflightLimit, attributes);
424
+ }
425
+ };
426
+ record('all', {
427
+ queued: snapshot.totals.queued,
428
+ // The rollup row is the whole queue, so its depth is its own pressure.
429
+ pressureQueued: snapshot.totals.queued,
430
+ pressureInflight: snapshot.totals.inflight,
431
+ queueLimit: snapshot.totals.queueLimit,
432
+ inflight: snapshot.totals.inflight,
433
+ inflightLimit: snapshot.totals.inflightLimit,
434
+ oldestQueuedAgeMs: snapshot.totals.oldestQueuedAgeMs,
435
+ oldestActiveAgeMs: snapshot.totals.oldestActiveAgeMs,
436
+ });
437
+ for (const lane of snapshot.lanes)
438
+ record(lane.lane, lane);
439
+ }
440
+ /**
441
+ * One process-wide sampler provides transition/recovery logging and periodic
442
+ * summaries. It logs state changes rather than individual queue operations.
443
+ */
444
+ export class BackpressureMonitor {
445
+ registry;
446
+ intervalMs;
447
+ summaryIntervalMs;
448
+ now;
449
+ emit;
450
+ logged = new Map();
451
+ timer = null;
452
+ constructor(options) {
453
+ this.registry = options.registry ?? backpressureRegistry;
454
+ this.intervalMs = Math.max(1_000, options.intervalMs ?? 5_000);
455
+ this.summaryIntervalMs = Math.max(this.intervalMs, options.summaryIntervalMs ?? 60_000);
456
+ this.now = options.now ?? Date.now;
457
+ this.emit = options.emit;
458
+ }
459
+ start() {
460
+ if (this.timer)
461
+ return;
462
+ this.sample();
463
+ this.timer = setInterval(() => this.sample(), this.intervalMs);
464
+ if (typeof this.timer.unref === 'function')
465
+ this.timer.unref();
466
+ }
467
+ stop() {
468
+ if (!this.timer)
469
+ return;
470
+ clearInterval(this.timer);
471
+ this.timer = null;
472
+ }
473
+ sample() {
474
+ const captured = this.registry.capture();
475
+ const now = this.now();
476
+ for (const scheduler of captured.schedulers) {
477
+ try {
478
+ recordBackpressureSnapshotMetrics(scheduler);
479
+ }
480
+ catch {
481
+ // The monitor must keep logging even if a metrics provider misbehaves.
482
+ }
483
+ const worstLaneState = scheduler.lanes.reduce((state, lane) => maxState(state, lane.state), 'healthy');
484
+ const samples = scheduler.lanes.map((lane) => ({
485
+ key: `${scheduler.scheduler}/${lane.lane}`,
486
+ state: lane.state,
487
+ lane,
488
+ }));
489
+ if (STATE_RANK[scheduler.state] > STATE_RANK[worstLaneState]) {
490
+ samples.push({
491
+ key: `${scheduler.scheduler}/all`,
492
+ state: scheduler.state,
493
+ lane: null,
494
+ });
495
+ }
496
+ for (const sample of samples) {
497
+ this.observeSample(sample.key, sample.state, scheduler, sample.lane, now);
498
+ }
499
+ }
500
+ }
501
+ observeSample(key, state, scheduler, lane, now) {
502
+ const previous = this.logged.get(key);
503
+ if (state === 'healthy') {
504
+ if (previous && previous.state !== 'healthy') {
505
+ this.safeEmit('info', this.message('recovered', scheduler, lane, state, previous.state), scheduler, lane);
506
+ }
507
+ this.logged.set(key, { state, lastLoggedAt: previous?.lastLoggedAt ?? now });
508
+ return;
509
+ }
510
+ const transition = !previous || previous.state !== state;
511
+ const summaryDue = !previous || now - previous.lastLoggedAt >= this.summaryIntervalMs;
512
+ if (transition || summaryDue) {
513
+ this.safeEmit('warn', this.message(transition ? 'transition' : 'summary', scheduler, lane, state, previous?.state), scheduler, lane);
514
+ this.logged.set(key, { state, lastLoggedAt: now });
515
+ }
516
+ }
517
+ message(event, scheduler, lane, state, previousState) {
518
+ const values = lane ?? {
519
+ lane: 'all',
520
+ queued: scheduler.totals.queued,
521
+ queueLimit: scheduler.totals.queueLimit,
522
+ inflight: scheduler.totals.inflight,
523
+ inflightLimit: scheduler.totals.inflightLimit,
524
+ oldestQueuedAgeMs: scheduler.totals.oldestQueuedAgeMs,
525
+ oldestActiveAgeMs: scheduler.totals.oldestActiveAgeMs,
526
+ rejectedTotal: scheduler.totals.rejectedTotal,
527
+ queuedOperations: scheduler.lanes.flatMap((item) => item.queuedOperations)
528
+ .sort((a, b) => b.oldestAgeMs - a.oldestAgeMs)
529
+ .slice(0, MAX_OPERATION_SUMMARIES),
530
+ activeOperations: scheduler.lanes.flatMap((item) => item.activeOperations)
531
+ .sort((a, b) => b.oldestAgeMs - a.oldestAgeMs)
532
+ .slice(0, MAX_OPERATION_SUMMARIES),
533
+ };
534
+ // A source that predates `pressureQueued` reports its own backlog, which is
535
+ // what a private allocation is classified against anyway.
536
+ const pressureQueued = lane?.pressureQueued ?? values.queued;
537
+ const pressureInflight = lane?.pressureInflight ?? values.inflight;
538
+ return `[backpressure] ${JSON.stringify({
539
+ event,
540
+ scheduler: scheduler.scheduler,
541
+ lane: values.lane,
542
+ state,
543
+ ...(previousState ? { previousState } : {}),
544
+ queued: values.queued,
545
+ // Only when the depth that classified the lane is not the lane's own
546
+ // backlog — i.e. a shared pool. Without it the line reads as a
547
+ // contradiction (`state: saturated` next to `queued: 1, queueLimit: 4`),
548
+ // and the rollup line that would have carried the pool's depth is
549
+ // suppressed exactly when a lane matches the rollup's state. A private
550
+ // allocation emits nothing extra, so those records are unchanged.
551
+ ...(pressureQueued === values.queued ? {} : { pressureQueued }),
552
+ queueLimit: values.queueLimit,
553
+ inflight: values.inflight,
554
+ ...(pressureInflight === values.inflight ? {} : { pressureInflight }),
555
+ inflightLimit: values.inflightLimit,
556
+ oldestQueuedAgeMs: values.oldestQueuedAgeMs,
557
+ oldestActiveAgeMs: values.oldestActiveAgeMs,
558
+ rejectedTotal: values.rejectedTotal,
559
+ queuedOperations: values.queuedOperations,
560
+ activeOperations: values.activeOperations,
561
+ })}`;
562
+ }
563
+ safeEmit(level, message, scheduler, lane) {
564
+ try {
565
+ this.emit(level, message, scheduler, lane);
566
+ }
567
+ catch {
568
+ // Logging must never break scheduling or the monitor loop.
569
+ }
570
+ }
571
+ }
572
+ //# sourceMappingURL=backpressure-observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backpressure-observability.js","sourceRoot":"","sources":["../src/backpressure-observability.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { type AssertionSeal, type GraphScopedAssertionSealCandidate } from './assertion-seal.js';
2
2
  import { type AssertionCoordinateV1, type CatalogLaneV1, type ContextGraphIdV1, type SubGraphNameV1 } from './author-catalog-codec.js';
3
3
  import { type StrictJsonParseOptions } from './canonical-json.js';
4
+ import { type CanonicalDeterministicUalV1 } from './ka-content-scope.js';
4
5
  import { type ChainIdV1, type DecimalU64V1, type Digest32V1, type EvmAddressV1, type KaIdV1 } from './sync-wire-scalars.js';
5
6
  declare const HEX_32_V1_BRAND: unique symbol;
6
7
  declare const POSITIVE_DECIMAL_U64_V1_BRAND: unique symbol;
7
8
  declare const SEAL_TRIPLE_COUNT_V1_BRAND: unique symbol;
8
9
  declare const CANONICAL_ISO_UTC_MILLIS_V1_BRAND: unique symbol;
9
- declare const CANONICAL_DETERMINISTIC_UAL_V1_BRAND: unique symbol;
10
10
  export type Hex32V1 = string & {
11
11
  readonly [HEX_32_V1_BRAND]: true;
12
12
  };
@@ -19,9 +19,7 @@ export type SealTripleCountV1 = DecimalU64V1 & {
19
19
  export type CanonicalIsoUtcMillisV1 = string & {
20
20
  readonly [CANONICAL_ISO_UTC_MILLIS_V1_BRAND]: true;
21
21
  };
22
- export type CanonicalDeterministicUalV1 = string & {
23
- readonly [CANONICAL_DETERMINISTIC_UAL_V1_BRAND]: true;
24
- };
22
+ export type { CanonicalDeterministicUalV1 } from './ka-content-scope.js';
25
23
  export declare const CANONICAL_GRAPH_SCOPED_AUTHOR_SEAL_DIGEST_DOMAIN_V1: "dkg-ka-author-seal-v1\n";
26
24
  export declare const MAX_CANONICAL_GRAPH_SCOPED_AUTHOR_SEAL_BYTES_V1: number;
27
25
  export declare const MAX_SEAL_TRIPLE_COUNT_V1 = 9007199254740991n;
@@ -132,5 +130,4 @@ export declare function decodeCanonicalGraphScopedAuthorSealRowsV1(rows: readonl
132
130
  * no catalog-row, signature/root, deployment, or chain-authority admission.
133
131
  */
134
132
  export declare function classifyCanonicalGraphScopedAuthorSealRowsV1(rows: readonly CanonicalAuthorSealStoreRowV1[], coordinate: CanonicalGraphScopedAuthorSealCoordinateV1): ClassifiedCanonicalGraphScopedAuthorSealRowsV1;
135
- export {};
136
133
  //# sourceMappingURL=canonical-graph-scoped-author-seal.d.ts.map