@blockcast/mmt-container 0.4.1 → 0.5.0-main.34c7b9c2cfa0

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 (87) hide show
  1. package/README.md +2 -2
  2. package/dist/browser-runtime.js +3769 -364
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/cmcd-producer.d.ts +5 -1
  5. package/dist/cmcd-producer.d.ts.map +1 -1
  6. package/dist/cmcd-producer.js.map +2 -2
  7. package/dist/delivery-catalog.js +18 -2
  8. package/dist/delivery-catalog.js.map +2 -2
  9. package/dist/fec-manager.d.ts +21 -16
  10. package/dist/fec-manager.d.ts.map +1 -1
  11. package/dist/fec-manager.js +197 -80
  12. package/dist/fec-manager.js.map +3 -3
  13. package/dist/held-layer-admission.d.ts +58 -0
  14. package/dist/held-layer-admission.d.ts.map +1 -0
  15. package/dist/held-layer-admission.js +105 -0
  16. package/dist/held-layer-admission.js.map +7 -0
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js.map +2 -2
  20. package/dist/mmtp-container-parser.d.ts +10 -0
  21. package/dist/mmtp-container-parser.d.ts.map +1 -1
  22. package/dist/mmtp-container-parser.js +31 -1
  23. package/dist/mmtp-container-parser.js.map +2 -2
  24. package/dist/mmtp-container-parser.no-modules.js +2713 -1024
  25. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  26. package/dist/mmtp-decode-pipeline.js +31 -1
  27. package/dist/mmtp-decode-pipeline.js.map +2 -2
  28. package/dist/mmtp-fec-session.d.ts +36 -3
  29. package/dist/mmtp-fec-session.d.ts.map +1 -1
  30. package/dist/mmtp-fec-session.js +114 -5
  31. package/dist/mmtp-fec-session.js.map +3 -3
  32. package/dist/mmtp-router.d.ts +96 -29
  33. package/dist/mmtp-router.d.ts.map +1 -1
  34. package/dist/mmtp-router.js +522 -205
  35. package/dist/mmtp-router.js.map +2 -2
  36. package/dist/multicast-auth-catalog.d.ts +10 -2
  37. package/dist/multicast-auth-catalog.d.ts.map +1 -1
  38. package/dist/multicast-auth-catalog.js +422 -22
  39. package/dist/multicast-auth-catalog.js.map +4 -4
  40. package/dist/multicast-manager.d.ts +78 -11
  41. package/dist/multicast-manager.d.ts.map +1 -1
  42. package/dist/multicast-manager.js +3663 -333
  43. package/dist/multicast-manager.js.map +4 -4
  44. package/dist/multicast-transport.d.ts +4 -1
  45. package/dist/multicast-transport.d.ts.map +1 -1
  46. package/dist/multicast-transport.js +20 -3
  47. package/dist/multicast-transport.js.map +2 -2
  48. package/dist/no-modules.d.ts +1 -2
  49. package/dist/no-modules.d.ts.map +1 -1
  50. package/dist/no-modules.js +2699 -1008
  51. package/dist/no-modules.js.map +4 -4
  52. package/dist/repair-fetch.d.ts +50 -10
  53. package/dist/repair-fetch.d.ts.map +1 -1
  54. package/dist/repair-fetch.js +62 -20
  55. package/dist/repair-fetch.js.map +2 -2
  56. package/dist/wasm-mmtp-container-parser.js +31 -1
  57. package/dist/wasm-mmtp-container-parser.js.map +2 -2
  58. package/package.json +7 -15
  59. package/src/cmcd-producer.ts +6 -1
  60. package/src/fec-manager.ts +147 -131
  61. package/src/held-layer-admission.ts +161 -0
  62. package/src/index.ts +6 -9
  63. package/src/mmtp-container-parser.ts +48 -0
  64. package/src/mmtp-fec-session.ts +76 -3
  65. package/src/mmtp-router.ts +637 -274
  66. package/src/multicast-auth-catalog.ts +81 -8
  67. package/src/multicast-manager.ts +274 -49
  68. package/src/multicast-transport.ts +6 -2
  69. package/src/no-modules.ts +1 -6
  70. package/src/repair-fetch.ts +154 -34
  71. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +0 -1
  72. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +0 -1
  73. package/test-vectors/catalog/negative/multicast-auth-root-dotted-key.json +0 -1
  74. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +0 -1
  75. package/test-vectors/repair-policy-v1.json +113 -0
  76. package/dist/manifest-auth-plan.d.ts +0 -31
  77. package/dist/manifest-auth-plan.d.ts.map +0 -1
  78. package/dist/manifest-auth-plan.js +0 -426
  79. package/dist/manifest-auth-plan.js.map +0 -7
  80. package/dist/source-auth.d.ts +0 -2
  81. package/dist/source-auth.d.ts.map +0 -1
  82. package/dist/source-auth.js +0 -3912
  83. package/dist/source-auth.js.map +0 -7
  84. package/src/manifest-auth-plan.ts +0 -55
  85. package/src/source-auth.ts +0 -1
  86. package/test-vectors/generate-source-auth-fixture.mjs +0 -114
  87. package/test-vectors/source-auth-v1.json +0 -61
@@ -12,6 +12,7 @@ import { type FecBlockProfile } from '@blockcast/mmt-base';
12
12
  import { type IsoBlockRange, type IsoPlacedSource, type IsoRepairPlacement } from './iso-block-locator.js';
13
13
  import { MIN_INTERLEAVE_DEPTH_MS } from './fec-state.js';
14
14
  import { type BlockClass, type BlockClassifierGeometry, type ClassifierMode, type ClassifierReason, type ReclassificationEvidence, type SourceSymbolEvidence, type TrackKind } from './block-policy.js';
15
+ import { type FecFailClosedReason } from './held-layer-admission.js';
15
16
  import type { MmtpDeliveryProvenance } from './mfu-reassembler.js';
16
17
  import type { FecWorkerClient, FecTrackStats, FrameMeta } from '@blockcast/fec-worker';
17
18
  export { MIN_INTERLEAVE_DEPTH_MS };
@@ -196,21 +197,7 @@ export interface FecRepairLayer {
196
197
  rsIdOffset: number;
197
198
  repairSymbols: number;
198
199
  }
199
- /**
200
- * Why a source track's FEC failed closed at runtime (fec-01 6.3.9): a repair
201
- * packet stated an RSB_length below a held layer's total B_i on that layer's
202
- * own repair track (`below_own_track_total`), or at or after the anchor, the
203
- * earliest block in SS_Start serial order whose repair carried >= B_i
204
- * (`below_anchored_total`). Repair for the track is refused from then on.
205
- */
206
- export interface FecFailClosedReason {
207
- code: 'below_own_track_total' | 'below_anchored_total';
208
- layer: number;
209
- total: number;
210
- rsbLength: number;
211
- ssStart: number;
212
- anchor?: number;
213
- }
200
+ export type { FecFailClosedReason } from './held-layer-admission.js';
214
201
  /** A {@link FecFailClosedReason} with the stream it closed, as reported to the fail-closed handler. */
215
202
  export interface FecFailClosedEvent extends FecFailClosedReason {
216
203
  packetId: number;
@@ -275,7 +262,12 @@ export declare class FECManager {
275
262
  onBlockResolved: ((sbn: number, packetId: number, catalogTrackName: string | undefined) => void) | null;
276
263
  /** A stream's SBN went backwards (or jumped implausibly): the source restarted. */
277
264
  onSourceDiscontinuity: ((packetId: number, catalogTrackName: string | undefined) => void) | null;
278
- onBlockRecovered: ((sbn: number, packetId: number, data: ArrayBuffer, meta: FrameMeta, catalogTrackName?: string) => void) | null;
265
+ /**
266
+ * A recovered source symbol. Return false when admission refused the
267
+ * packet it carries (bc-provenance v2, draft-ramadan-moq-multicast-01
268
+ * 7.2.7): the block is then unrecovered and stays open to its FEC deadline.
269
+ */
270
+ onBlockRecovered: ((sbn: number, packetId: number, data: ArrayBuffer, meta: FrameMeta, catalogTrackName?: string) => boolean | void) | null;
279
271
  onFecStatsUpdate: ((packetId: number, stats: FecTrackStats) => void) | null;
280
272
  /** Internal state for diagnostics — not part of the public stats API. */
281
273
  get diagnostics(): {
@@ -434,6 +426,11 @@ export declare class FECManager {
434
426
  * a block no symbol reached (one materialized because a later SBN arrived).
435
427
  */
436
428
  blockAnchorAtMs(sbn: number, packetId: number, catalogTrackName?: string): number | undefined;
429
+ /**
430
+ * How long ago (ms) the oldest open block of the stream, one with an FEC
431
+ * deadline, took its first accepted symbol; undefined with none open.
432
+ */
433
+ oldestOpenBlockAgeMs(packetId: number, catalogTrackName: string): number | undefined;
437
434
  /** Absolute fail deadline of a still-open block, or undefined. */
438
435
  blockDeadlineAtMs(sbn: number, packetId: number, catalogTrackName?: string): number | undefined;
439
436
  /**
@@ -691,6 +688,14 @@ export declare class FECManager {
691
688
  * never reads the manager-global K or timeout.
692
689
  */
693
690
  trackBlock(sbn: number, packetId: number, catalogTrackName: string | undefined, esi: number, evidence: SourceSymbolEvidence): void;
691
+ /**
692
+ * Run `fn` with `receivedAtMs` (performance.now() clock) as the receipt
693
+ * time of what it feeds. Within a consumer the bc-provenance profile
694
+ * governs, a datagram held on a miss and admitted later keeps its receipt
695
+ * time (fec-01 9): it anchors its block's ts and arms the block's
696
+ * deadlines from then, never later than they are already armed.
697
+ */
698
+ withReceiptTime(receivedAtMs: number, fn: () => void): void;
694
699
  /** Refresh deadlines after accepted block activity. */
695
700
  noteBlockActivity(sbn: number, packetId: number, catalogTrackName?: string, sourceProgress?: boolean): void;
696
701
  /** Check whether a block has already been completed (clean or recovered). */
@@ -1 +1 @@
1
- {"version":3,"file":"fec-manager.d.ts","sourceRoot":"","sources":["../src/fec-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fec-manager.d.ts","sourceRoot":"","sources":["../src/fec-manager.ts"],"names":[],"mappings":"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"}
@@ -854,6 +854,79 @@ var BlockClassifier = class {
854
854
  }
855
855
  };
856
856
 
857
+ // src/held-layer-admission.ts
858
+ var HORIZON_CAP = 1073741824;
859
+ function heldLayerAnchorHorizon(retentionBlocks, k) {
860
+ return retentionBlocks === void 0 || k <= 0 ? HORIZON_CAP : Math.min(HORIZON_CAP, retentionBlocks * k);
861
+ }
862
+ var HeldLayerAdmission = class {
863
+ #layerNames;
864
+ #states;
865
+ constructor(layers, heldLayers = [0]) {
866
+ const held = new Set(heldLayers);
867
+ this.#layerNames = new Set(layers.map((l) => l.repairTrackName));
868
+ this.#states = layers.filter((l) => held.has(l.layer)).map((l) => ({ layer: l.layer, repairTrackName: l.repairTrackName, total: l.rsIdOffset + l.repairSymbols }));
869
+ }
870
+ /**
871
+ * Judges one repair packet, after the 4.5 discards and the size check and
872
+ * before it places a block. `repairTrackName` is the subscribed repair
873
+ * track, never inferred from RS_ID; without it only (b) runs. A packet on a
874
+ * repair track the catalog does not list is `'discard'` and anchors nothing.
875
+ * `sourceFrontier` is the newest source SS_ID, if any: a repair more than
876
+ * `horizon` past it is judged without moving the anchored state.
877
+ *
878
+ * @returns undefined to admit, `'discard'`, or the fail-closed reason.
879
+ */
880
+ admit(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier) {
881
+ if (repairTrackName !== void 0 && !this.#layerNames.has(repairTrackName)) return "discard";
882
+ const farAhead = sourceFrontier !== void 0 && serial32Precedes(sourceFrontier, ssStart) && serial32Distance(sourceFrontier, ssStart) > horizon;
883
+ for (const state of this.#states) {
884
+ let code;
885
+ if (farAhead) {
886
+ if (rsbLength < state.total) {
887
+ if (state.layer > 0 && repairTrackName === state.repairTrackName) code = "below_own_track_total";
888
+ else if (state.anchor !== void 0 || state.settled) code = "below_anchored_total";
889
+ }
890
+ } else {
891
+ if (state.newest === void 0 || serial32Precedes(state.newest, ssStart)) state.newest = ssStart;
892
+ const stale = (s) => serial32Distance(s, state.newest) > horizon;
893
+ if (state.latestBelow !== void 0 && stale(state.latestBelow)) {
894
+ delete state.latestBelow;
895
+ delete state.latestBelowRsb;
896
+ }
897
+ if (state.anchor !== void 0 && stale(state.anchor)) state.settled = true;
898
+ if (rsbLength < state.total) {
899
+ if (state.layer > 0 && repairTrackName === state.repairTrackName) code = "below_own_track_total";
900
+ else if (stale(ssStart)) continue;
901
+ else if (state.settled || state.anchor !== void 0 && !serial32Precedes(ssStart, state.anchor)) code = "below_anchored_total";
902
+ else if (state.latestBelow === void 0 || serial32Precedes(state.latestBelow, ssStart)) {
903
+ state.latestBelow = ssStart;
904
+ state.latestBelowRsb = rsbLength;
905
+ }
906
+ } else if (!state.settled && !stale(ssStart)) {
907
+ if (state.anchor === void 0 || serial32Precedes(ssStart, state.anchor)) state.anchor = ssStart;
908
+ if (state.latestBelow !== void 0 && !serial32Precedes(state.latestBelow, state.anchor)) {
909
+ code = "below_anchored_total";
910
+ ssStart = state.latestBelow;
911
+ rsbLength = state.latestBelowRsb;
912
+ }
913
+ }
914
+ }
915
+ if (code !== void 0) {
916
+ return {
917
+ code,
918
+ layer: state.layer,
919
+ total: state.total,
920
+ rsbLength,
921
+ ssStart,
922
+ ...state.anchor === void 0 ? {} : { anchor: state.anchor }
923
+ };
924
+ }
925
+ }
926
+ return void 0;
927
+ }
928
+ };
929
+
857
930
  // src/fec-manager.ts
858
931
  var RS_MAX_BLOCK_SYMBOLS = 255;
859
932
  var WORKER_ERROR_LOG_CAP = 5;
@@ -1010,6 +1083,9 @@ var FECManager = class _FECManager {
1010
1083
  // Receiver-local first-accepted-symbol time per block, bounded like
1011
1084
  // #blockPathCounts (see blockAnchorAtMs).
1012
1085
  this.#blockAnchorsMs = /* @__PURE__ */ new Map();
1086
+ // The receipt time of the packet being fed, when it is not now: a datagram
1087
+ // held on a miss and admitted later (withReceiptTime).
1088
+ this.#receiptAtMs = void 0;
1013
1089
  // Exact catalog identity observed on accepted symbols for each FEC block.
1014
1090
  // Conflicting identities collapse to null so recovery fails closed.
1015
1091
  this.#blockCatalogTrackNames = /* @__PURE__ */ new Map();
@@ -1057,6 +1133,14 @@ var FECManager = class _FECManager {
1057
1133
  // Worker recovery emits all K source symbols. Track recovery once per block
1058
1134
  // while routing only ESI slots that were absent from the direct source path.
1059
1135
  this.#workerRecoveredBlocks = /* @__PURE__ */ new Set();
1136
+ // Worker-recovered blocks a recovered packet of which admission refused,
1137
+ // until the decode's final symbol (7.2.7: the block is unrecovered).
1138
+ this.#refusedRecoveries = /* @__PURE__ */ new Set();
1139
+ // Worker-recovered blocks: the next ESI the decode's ordered emit owes. The
1140
+ // Worker emits every ESI 0..SSB_length-1 in order and drops only a symbol it
1141
+ // refuses (a malformed ssbg_mode1 symbol), so a skipped ESI is a dropped
1142
+ // recovered packet and the decode recovered nothing.
1143
+ this.#workerRecoveredNextEsi = /* @__PURE__ */ new Map();
1060
1144
  // How the multicast leg delivers symbols (see MulticastSymbolDelivery). The
1061
1145
  // provider declares it per transport join; absence keeps datagram semantics.
1062
1146
  this.#multicastSymbolDelivery = "datagram";
@@ -1195,6 +1279,11 @@ var FECManager = class _FECManager {
1195
1279
  /** A stream's SBN went backwards (or jumped implausibly): the source restarted. */
1196
1280
  this.onSourceDiscontinuity = null;
1197
1281
  // Worker-path callbacks — async recovery and stats from FecWorkerClient.
1282
+ /**
1283
+ * A recovered source symbol. Return false when admission refused the
1284
+ * packet it carries (bc-provenance v2, draft-ramadan-moq-multicast-01
1285
+ * 7.2.7): the block is then unrecovered and stays open to its FEC deadline.
1286
+ */
1198
1287
  this.onBlockRecovered = null;
1199
1288
  this.onFecStatsUpdate = null;
1200
1289
  }
@@ -1247,6 +1336,7 @@ var FECManager = class _FECManager {
1247
1336
  #seenSymbols;
1248
1337
  #blockPathCounts;
1249
1338
  #blockAnchorsMs;
1339
+ #receiptAtMs;
1250
1340
  #blockCatalogTrackNames;
1251
1341
  #startupAlignedPackets;
1252
1342
  #startupPartialBlocks;
@@ -1259,6 +1349,8 @@ var FECManager = class _FECManager {
1259
1349
  #repairDeadlines;
1260
1350
  #repairDeadlineAtMs;
1261
1351
  #workerRecoveredBlocks;
1352
+ #refusedRecoveries;
1353
+ #workerRecoveredNextEsi;
1262
1354
  #multicastSymbolDelivery;
1263
1355
  #orderedFrontiers;
1264
1356
  #orderedPendingBlocks;
@@ -1398,6 +1490,8 @@ var FECManager = class _FECManager {
1398
1490
  this.#completedBlocks.delete(record.key);
1399
1491
  this.#cleanlyCompletedBlocks.delete(record.key);
1400
1492
  this.#workerRecoveredBlocks.delete(record.key);
1493
+ this.#refusedRecoveries.delete(record.key);
1494
+ this.#workerRecoveredNextEsi.delete(record.key);
1401
1495
  this.#failedBlocks.delete(record.key);
1402
1496
  this.#resolvedBlockClasses.delete(record.key);
1403
1497
  this.#repairedBlocks.delete(record.key);
@@ -1736,7 +1830,7 @@ var FECManager = class _FECManager {
1736
1830
  * remainder, so repeated source progress costs no timer operation.
1737
1831
  */
1738
1832
  #armRepairDeadline(key, sbn, packetId, catalogTrackName, delayMs) {
1739
- const deadlineMs = performance.now() + delayMs;
1833
+ const deadlineMs = this.#notEarlierUnderReceipt(this.#receiptNow() + delayMs, this.#repairDeadlineAtMs.get(key));
1740
1834
  this.#repairDeadlineAtMs.set(key, deadlineMs);
1741
1835
  const armed = this.#repairDeadlines.get(key);
1742
1836
  if (armed?.handle != null) {
@@ -1756,7 +1850,7 @@ var FECManager = class _FECManager {
1756
1850
  timer.handle = null;
1757
1851
  this.#requestRepair(sbn, packetId, catalogTrackName);
1758
1852
  };
1759
- timer.handle = setTimeout(onFire, delayMs);
1853
+ timer.handle = setTimeout(onFire, Math.max(0, deadlineMs - performance.now()));
1760
1854
  this.#repairDeadlines.set(key, timer);
1761
1855
  }
1762
1856
  #requestRepair(sbn, packetId, catalogTrackName, settledByOrder = false) {
@@ -2160,7 +2254,10 @@ var FECManager = class _FECManager {
2160
2254
  }
2161
2255
  #armBlockTimeout(sbn, packetId, catalogTrackName, delayMs) {
2162
2256
  const key = this.#blockKey(sbn, packetId, catalogTrackName);
2163
- const waitAtMs = performance.now() + Math.max(1, Math.ceil(delayMs));
2257
+ const waitAtMs = this.#notEarlierUnderReceipt(
2258
+ this.#receiptNow() + Math.max(1, Math.ceil(delayMs)),
2259
+ this.#blockWaitDeadlinesMs.get(key)
2260
+ );
2164
2261
  const holdAtMs = this.#repairHoldUntilMs.get(key);
2165
2262
  this.#blockWaitDeadlinesMs.set(key, holdAtMs === void 0 ? waitAtMs : Math.min(waitAtMs, holdAtMs));
2166
2263
  this.#applyBlockDeadline(key, sbn, packetId, catalogTrackName);
@@ -2549,6 +2646,8 @@ var FECManager = class _FECManager {
2549
2646
  resetSet(this.#cleanlyCompletedBlocks);
2550
2647
  resetSet(this.#repairRequestedBlocks);
2551
2648
  resetSet(this.#workerRecoveredBlocks);
2649
+ resetSet(this.#refusedRecoveries);
2650
+ resetMap(this.#workerRecoveredNextEsi);
2552
2651
  resetSet(this.#startupAlignedPackets);
2553
2652
  resetSet(this.#startupPartialBlocks);
2554
2653
  resetSet(this.#startupRepairReadyPackets);
@@ -2675,6 +2774,8 @@ var FECManager = class _FECManager {
2675
2774
  dropSet(this.#cleanlyCompletedBlocks);
2676
2775
  dropSet(this.#repairRequestedBlocks);
2677
2776
  dropSet(this.#workerRecoveredBlocks);
2777
+ dropSet(this.#refusedRecoveries);
2778
+ dropMap(this.#workerRecoveredNextEsi);
2678
2779
  dropSet(this.#startupAlignedPackets);
2679
2780
  dropSet(this.#startupPartialBlocks);
2680
2781
  dropSet(this.#startupRepairReadyPackets);
@@ -2788,7 +2889,9 @@ var FECManager = class _FECManager {
2788
2889
  moqSymbols: 0,
2789
2890
  complete: false
2790
2891
  };
2791
- if (!this.#blockAnchorsMs.has(blockKey)) this.#blockAnchorsMs.set(blockKey, performance.now());
2892
+ const receivedAtMs = this.#receiptNow();
2893
+ const anchorMs = this.#blockAnchorsMs.get(blockKey);
2894
+ if (anchorMs === void 0 || receivedAtMs < anchorMs) this.#blockAnchorsMs.set(blockKey, receivedAtMs);
2792
2895
  if (source === "multicast") counts.multicastSymbols++;
2793
2896
  else counts.moqSymbols++;
2794
2897
  this.#blockPathCounts.set(blockKey, counts);
@@ -2949,6 +3052,18 @@ var FECManager = class _FECManager {
2949
3052
  blockAnchorAtMs(sbn, packetId, catalogTrackName) {
2950
3053
  return this.#blockAnchorsMs.get(this.#blockKey(sbn, packetId, catalogTrackName));
2951
3054
  }
3055
+ /**
3056
+ * How long ago (ms) the oldest open block of the stream, one with an FEC
3057
+ * deadline, took its first accepted symbol; undefined with none open.
3058
+ */
3059
+ oldestOpenBlockAgeMs(packetId, catalogTrackName) {
3060
+ let oldest = Infinity;
3061
+ for (const key of this.#activeBlocks.keys()) {
3062
+ if (!this.#belongsToStream(key, packetId, catalogTrackName)) continue;
3063
+ oldest = Math.min(oldest, this.#blockAnchorsMs.get(key) ?? Infinity);
3064
+ }
3065
+ return oldest === Infinity ? void 0 : performance.now() - oldest;
3066
+ }
2952
3067
  /** Absolute fail deadline of a still-open block, or undefined. */
2953
3068
  blockDeadlineAtMs(sbn, packetId, catalogTrackName) {
2954
3069
  return this.#activeBlockDeadlinesMs.get(this.#blockKey(sbn, packetId, catalogTrackName));
@@ -3448,8 +3563,36 @@ var FECManager = class _FECManager {
3448
3563
  if (!this.#claimDecoderBlock(client, meta.sbn, recoveredCatalogTrackName)) return;
3449
3564
  const blockKey = this.#blockKey(meta.sbn, packetId, recoveredCatalogTrackName);
3450
3565
  const cleanlyCompleted = this.#cleanlyCompletedBlocks.has(blockKey);
3566
+ if (esi !== (this.#workerRecoveredNextEsi.get(blockKey) ?? 0)) {
3567
+ this.#refusedRecoveries.add(blockKey);
3568
+ if (this.#refusedRecoveries.size > 1e3) dropOldest(this.#refusedRecoveries, 500);
3569
+ }
3570
+ if (esi >= meta.ssbLength - 1) {
3571
+ this.#workerRecoveredNextEsi.delete(blockKey);
3572
+ } else {
3573
+ this.#workerRecoveredNextEsi.set(blockKey, esi + 1);
3574
+ if (this.#workerRecoveredNextEsi.size > 1e3) dropOldest(this.#workerRecoveredNextEsi, 500);
3575
+ }
3451
3576
  if (!cleanlyCompleted) {
3452
- if (!this.#workerRecoveredBlocks.has(blockKey)) {
3577
+ const symbolKey = `${blockKey}:${esi}`;
3578
+ if (!this.#seenSymbols.has(symbolKey)) {
3579
+ this.#seenSymbols.add(symbolKey);
3580
+ const admitted = this.onBlockRecovered?.(
3581
+ meta.sbn,
3582
+ packetId,
3583
+ data,
3584
+ meta,
3585
+ recoveredCatalogTrackName
3586
+ );
3587
+ if (admitted === false) {
3588
+ this.#refusedRecoveries.add(blockKey);
3589
+ if (this.#refusedRecoveries.size > 1e3) dropOldest(this.#refusedRecoveries, 500);
3590
+ }
3591
+ }
3592
+ }
3593
+ const refused = esi >= meta.ssbLength - 1 && this.#refusedRecoveries.delete(blockKey);
3594
+ if (esi >= meta.ssbLength - 1 && !refused && !this.#completedBlocks.has(blockKey)) {
3595
+ if (!cleanlyCompleted && !this.#workerRecoveredBlocks.has(blockKey)) {
3453
3596
  this.#traceLifecycle(
3454
3597
  "recovered",
3455
3598
  meta.sbn,
@@ -3464,19 +3607,6 @@ var FECManager = class _FECManager {
3464
3607
  }
3465
3608
  this.#noteBlockRepaired(blockKey, meta.sbn, packetId, recoveredCatalogTrackName);
3466
3609
  }
3467
- const symbolKey = `${blockKey}:${esi}`;
3468
- if (!this.#seenSymbols.has(symbolKey)) {
3469
- this.#seenSymbols.add(symbolKey);
3470
- this.onBlockRecovered?.(
3471
- meta.sbn,
3472
- packetId,
3473
- data,
3474
- meta,
3475
- recoveredCatalogTrackName
3476
- );
3477
- }
3478
- }
3479
- if (esi >= meta.ssbLength - 1 && !this.#completedBlocks.has(blockKey)) {
3480
3610
  this.cancelBlockTimeout(meta.sbn, packetId, recoveredCatalogTrackName);
3481
3611
  if (recoveredCatalogTrackName === void 0) {
3482
3612
  this.onBlockComplete?.(meta.sbn, packetId);
@@ -3771,66 +3901,26 @@ var FECManager = class _FECManager {
3771
3901
  const config = this.#trackConfigs.get(packetId);
3772
3902
  const layers = config?.repairLayers;
3773
3903
  if (layers === void 0 || layers.length === 0) return true;
3774
- if (repairTrackName !== void 0 && !layers.some((l) => l.repairTrackName === repairTrackName)) {
3775
- return false;
3904
+ let admission = this.#heldLayerStates.get(streamKey);
3905
+ if (admission === void 0) {
3906
+ admission = new HeldLayerAdmission(layers, config.heldLayers);
3907
+ this.#heldLayerStates.set(streamKey, admission);
3776
3908
  }
3777
- let states = this.#heldLayerStates.get(streamKey);
3778
- if (states === void 0) {
3779
- const held = new Set(config.heldLayers ?? [0]);
3780
- states = layers.filter((l) => held.has(l.layer)).map((l) => ({ layer: l.layer, repairTrackName: l.repairTrackName, total: l.rsIdOffset + l.repairSymbols }));
3781
- this.#heldLayerStates.set(streamKey, states);
3782
- }
3783
- const horizon = this.#layerAnchorHorizon(packetId);
3784
- const frontier = this.#sourceFrontiers.get(streamKey)?.sbn;
3785
- const farAhead = frontier !== void 0 && serial32Precedes(frontier, ssStart) && serial32Distance(frontier, ssStart) > horizon;
3786
- for (const state of states) {
3787
- let code;
3788
- if (farAhead) {
3789
- if (rsbLength < state.total) {
3790
- if (state.layer > 0 && repairTrackName === state.repairTrackName) code = "below_own_track_total";
3791
- else if (state.anchor !== void 0 || state.settled) code = "below_anchored_total";
3792
- }
3793
- } else {
3794
- if (state.newest === void 0 || serial32Precedes(state.newest, ssStart)) state.newest = ssStart;
3795
- const stale = (s) => serial32Distance(s, state.newest) > horizon;
3796
- if (state.latestBelow !== void 0 && stale(state.latestBelow)) {
3797
- delete state.latestBelow;
3798
- delete state.latestBelowRsb;
3799
- }
3800
- if (state.anchor !== void 0 && stale(state.anchor)) state.settled = true;
3801
- if (rsbLength < state.total) {
3802
- if (state.layer > 0 && repairTrackName === state.repairTrackName) code = "below_own_track_total";
3803
- else if (stale(ssStart)) continue;
3804
- else if (state.settled || state.anchor !== void 0 && !serial32Precedes(ssStart, state.anchor)) code = "below_anchored_total";
3805
- else if (state.latestBelow === void 0 || serial32Precedes(state.latestBelow, ssStart)) {
3806
- state.latestBelow = ssStart;
3807
- state.latestBelowRsb = rsbLength;
3808
- }
3809
- } else if (!state.settled && !stale(ssStart)) {
3810
- if (state.anchor === void 0 || serial32Precedes(ssStart, state.anchor)) state.anchor = ssStart;
3811
- if (state.latestBelow !== void 0 && !serial32Precedes(state.latestBelow, state.anchor)) {
3812
- code = "below_anchored_total";
3813
- ssStart = state.latestBelow;
3814
- rsbLength = state.latestBelowRsb;
3815
- }
3816
- }
3817
- }
3818
- if (code !== void 0) {
3819
- const reason = {
3820
- code,
3821
- layer: state.layer,
3822
- total: state.total,
3823
- rsbLength,
3824
- ssStart,
3825
- ...state.anchor === void 0 ? {} : { anchor: state.anchor }
3826
- };
3827
- this.#fecFailClosed.set(streamKey, reason);
3828
- this.#onFecFailClosed?.({ ...reason, packetId, catalogTrackName });
3829
- console.warn(
3830
- `[FECManager] FEC failed closed (fec-01 6.3.9) packetId=${packetId} track=${catalogTrackName ?? "-"}: ${JSON.stringify(reason)}`
3831
- );
3832
- return false;
3833
- }
3909
+ const verdict = admission.admit(
3910
+ repairTrackName,
3911
+ ssStart,
3912
+ rsbLength,
3913
+ this.#layerAnchorHorizon(packetId),
3914
+ this.#sourceFrontiers.get(streamKey)?.sbn
3915
+ );
3916
+ if (verdict === "discard") return false;
3917
+ if (verdict !== void 0) {
3918
+ this.#fecFailClosed.set(streamKey, verdict);
3919
+ this.#onFecFailClosed?.({ ...verdict, packetId, catalogTrackName });
3920
+ console.warn(
3921
+ `[FECManager] FEC failed closed (fec-01 6.3.9) packetId=${packetId} track=${catalogTrackName ?? "-"}: ${JSON.stringify(verdict)}`
3922
+ );
3923
+ return false;
3834
3924
  }
3835
3925
  return true;
3836
3926
  }
@@ -3840,15 +3930,13 @@ var FECManager = class _FECManager {
3840
3930
  * times K, capped at 2^30 so compared serials stay inside one half-window.
3841
3931
  */
3842
3932
  #layerAnchorHorizon(packetId) {
3843
- const cap = 1073741824;
3844
3933
  let blocks;
3845
3934
  try {
3846
3935
  blocks = this.isoRetentionBlocksForPacket(packetId);
3847
3936
  } catch {
3848
3937
  blocks = void 0;
3849
3938
  }
3850
- const k = this.#trackConfigs.get(packetId)?.k ?? 0;
3851
- return blocks === void 0 || k <= 0 ? cap : Math.min(cap, blocks * k);
3939
+ return heldLayerAnchorHorizon(blocks, this.#trackConfigs.get(packetId)?.k ?? 0);
3852
3940
  }
3853
3941
  /**
3854
3942
  * Report each stream whose FEC fails closed at runtime (fec-01 6.3.9), once,
@@ -4088,6 +4176,33 @@ var FECManager = class _FECManager {
4088
4176
  }
4089
4177
  queueMicrotask(() => this.#syncDecoderBlockOwners.delete(key));
4090
4178
  }
4179
+ /**
4180
+ * Run `fn` with `receivedAtMs` (performance.now() clock) as the receipt
4181
+ * time of what it feeds. Within a consumer the bc-provenance profile
4182
+ * governs, a datagram held on a miss and admitted later keeps its receipt
4183
+ * time (fec-01 9): it anchors its block's ts and arms the block's
4184
+ * deadlines from then, never later than they are already armed.
4185
+ */
4186
+ withReceiptTime(receivedAtMs, fn) {
4187
+ const outer = this.#receiptAtMs;
4188
+ this.#receiptAtMs = receivedAtMs;
4189
+ try {
4190
+ fn();
4191
+ } finally {
4192
+ this.#receiptAtMs = outer;
4193
+ }
4194
+ }
4195
+ #receiptNow() {
4196
+ return this.#receiptAtMs ?? performance.now();
4197
+ }
4198
+ /**
4199
+ * A held packet admitted late arms from its (earlier) receipt time; that
4200
+ * never pulls in a deadline later activity already armed. Outside a
4201
+ * receipt scope a re-arm replaces the deadline, as a narrower bound may.
4202
+ */
4203
+ #notEarlierUnderReceipt(deadlineMs, armedMs) {
4204
+ return this.#receiptAtMs === void 0 || armedMs === void 0 ? deadlineMs : Math.max(deadlineMs, armedMs);
4205
+ }
4091
4206
  /** Refresh deadlines after accepted block activity. */
4092
4207
  noteBlockActivity(sbn, packetId, catalogTrackName, sourceProgress = false) {
4093
4208
  if (!this.#trackConfigs.has(packetId)) return;
@@ -4266,6 +4381,8 @@ var FECManager = class _FECManager {
4266
4381
  this.#cleanlyCompletedBlocks.clear();
4267
4382
  this.#repairRequestedBlocks.clear();
4268
4383
  this.#workerRecoveredBlocks.clear();
4384
+ this.#refusedRecoveries.clear();
4385
+ this.#workerRecoveredNextEsi.clear();
4269
4386
  this.#syncDecoderBlockOwners.clear();
4270
4387
  this.#startupAlignedPackets.clear();
4271
4388
  this.#startupPartialBlocks.clear();