@camstack/addon-decoder-ffmpeg 1.2.45 → 1.2.46

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/index.js CHANGED
@@ -8004,6 +8004,21 @@ var RelocateJobSchema = object({
8004
8004
  bytesMoved: number().int(),
8005
8005
  /** Total files discovered up front; null while (or when) unknown. */
8006
8006
  filesTotal: number().int().nullable(),
8007
+ /**
8008
+ * Rows this run CORRECTED while moving them — a durable mutation the move
8009
+ * made that nobody asked for, so it is reported where the operator reads the
8010
+ * job rather than only in a log line.
8011
+ *
8012
+ * A footage segment records its byte count in its own NAME, and the durable
8013
+ * hour row derives its aggregates from those names. A file that does not
8014
+ * match its name therefore makes the ledger's sums — and with them quota and
8015
+ * pressure eviction — wrong by the difference, and only a rename can fix it.
8016
+ * On 2026-08-30 one such row also stalled a 110 749-file drain permanently.
8017
+ *
8018
+ * Absent on lanes where the question has no meaning: a media blob's size is
8019
+ * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
8020
+ */
8021
+ rowsReconciled: number().int().nonnegative().optional(),
8007
8022
  startedAt: number(),
8008
8023
  finishedAt: number().nullable(),
8009
8024
  error: string().nullable()
@@ -8072,14 +8087,42 @@ var RelocateMediaInputSchema = object({
8072
8087
  /** Omitted = `move`, the pre-existing behaviour. */
8073
8088
  mode: MediaRelocateModeSchema.optional()
8074
8089
  });
8075
- /** How many rows still carry NO `locationId` — the population a repoint would
8076
- * silently re-aim at a disk that does not hold their bytes. Zero is the only
8077
- * value that permits a non-blocking `eventMedia` cutover. */
8078
- var UnstampedEventMediaCountSchema = object({
8079
- media: number().int().nonnegative(),
8080
- retrainFrames: number().int().nonnegative(),
8081
- total: number().int().nonnegative()
8090
+ /**
8091
+ * The unstamped population of ONE collection split, because the gate and the
8092
+ * operator ask two different questions and only one of them has to be cheap.
8093
+ *
8094
+ * `present` is the GATE: "is there at least one row that would be orphaned by a
8095
+ * repoint". It is a single indexed seek to the first matching row, so it stays
8096
+ * answerable on a saturated disk and answers in O(log n) precisely in the state
8097
+ * that matters — after a seal, when the population is empty.
8098
+ *
8099
+ * `rows` is the NUMBER, for the refusal message and the operator's sense of
8100
+ * scale. It is a second, indexed `COUNT(*)`, and `null` means **not
8101
+ * measurable** — never zero. `{ present: true, rows: null }` is a legitimate
8102
+ * and useful answer: "there are some, and this read could not say how many"
8103
+ * still refuses the cutover, which is the whole job.
8104
+ */
8105
+ var UnstampedRowsSchema = object({
8106
+ present: boolean(),
8107
+ rows: number().int().nonnegative().nullable()
8082
8108
  });
8109
+ /**
8110
+ * How many rows still carry NO `locationId` — the population a repoint would
8111
+ * silently re-aim at a disk that does not hold their bytes.
8112
+ *
8113
+ * **`null` = the count could not be taken**, and it is NOT permission to cut
8114
+ * over. The gate opens on a measured absence and on nothing else; an unread
8115
+ * collection and an empty one are different facts, and this repo has already
8116
+ * paid for conflating them (`RelocateResidueSchema`, D295).
8117
+ */
8118
+ var UnstampedEventMediaCountSchema = object({
8119
+ media: UnstampedRowsSchema,
8120
+ retrainFrames: UnstampedRowsSchema,
8121
+ /** True when EITHER collection holds one. The refusal reads this. */
8122
+ anyPresent: boolean(),
8123
+ /** Sum across both, or `null` when either lane could not be counted. */
8124
+ total: number().int().nonnegative().nullable()
8125
+ }).nullable();
8083
8126
  var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
8084
8127
  /** The independently selectable logical storage classes — every class
8085
8128
  * `storage.listLocationDeclarations` reports, so an operator never meets a
@@ -8190,6 +8233,10 @@ var StorageMigrationMoveProgressSchema = object({
8190
8233
  /** The archive census — the **M** of "N of M" (D295). `null` = unknowable. */
8191
8234
  filesTotal: number().int().nonnegative().nullable(),
8192
8235
  bytesMoved: number().int().nonnegative(),
8236
+ /** Rows the mover corrected while moving them — see `RelocateJob`. Absent on
8237
+ * a lane that cannot reconcile. A migration that silently rewrote durable
8238
+ * rows would be the same failure as one that silently skipped them. */
8239
+ rowsReconciled: number().int().nonnegative().optional(),
8193
8240
  /** The MOVER's start, not the migration's: a drain restarted after an addon
8194
8241
  * crash gets a new mover, and a rate computed from the migration's start
8195
8242
  * would silently average in the time nothing was running. */
package/dist/index.mjs CHANGED
@@ -8000,6 +8000,21 @@ var RelocateJobSchema = object({
8000
8000
  bytesMoved: number().int(),
8001
8001
  /** Total files discovered up front; null while (or when) unknown. */
8002
8002
  filesTotal: number().int().nullable(),
8003
+ /**
8004
+ * Rows this run CORRECTED while moving them — a durable mutation the move
8005
+ * made that nobody asked for, so it is reported where the operator reads the
8006
+ * job rather than only in a log line.
8007
+ *
8008
+ * A footage segment records its byte count in its own NAME, and the durable
8009
+ * hour row derives its aggregates from those names. A file that does not
8010
+ * match its name therefore makes the ledger's sums — and with them quota and
8011
+ * pressure eviction — wrong by the difference, and only a rename can fix it.
8012
+ * On 2026-08-30 one such row also stalled a 110 749-file drain permanently.
8013
+ *
8014
+ * Absent on lanes where the question has no meaning: a media blob's size is
8015
+ * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
8016
+ */
8017
+ rowsReconciled: number().int().nonnegative().optional(),
8003
8018
  startedAt: number(),
8004
8019
  finishedAt: number().nullable(),
8005
8020
  error: string().nullable()
@@ -8068,14 +8083,42 @@ var RelocateMediaInputSchema = object({
8068
8083
  /** Omitted = `move`, the pre-existing behaviour. */
8069
8084
  mode: MediaRelocateModeSchema.optional()
8070
8085
  });
8071
- /** How many rows still carry NO `locationId` — the population a repoint would
8072
- * silently re-aim at a disk that does not hold their bytes. Zero is the only
8073
- * value that permits a non-blocking `eventMedia` cutover. */
8074
- var UnstampedEventMediaCountSchema = object({
8075
- media: number().int().nonnegative(),
8076
- retrainFrames: number().int().nonnegative(),
8077
- total: number().int().nonnegative()
8086
+ /**
8087
+ * The unstamped population of ONE collection split, because the gate and the
8088
+ * operator ask two different questions and only one of them has to be cheap.
8089
+ *
8090
+ * `present` is the GATE: "is there at least one row that would be orphaned by a
8091
+ * repoint". It is a single indexed seek to the first matching row, so it stays
8092
+ * answerable on a saturated disk and answers in O(log n) precisely in the state
8093
+ * that matters — after a seal, when the population is empty.
8094
+ *
8095
+ * `rows` is the NUMBER, for the refusal message and the operator's sense of
8096
+ * scale. It is a second, indexed `COUNT(*)`, and `null` means **not
8097
+ * measurable** — never zero. `{ present: true, rows: null }` is a legitimate
8098
+ * and useful answer: "there are some, and this read could not say how many"
8099
+ * still refuses the cutover, which is the whole job.
8100
+ */
8101
+ var UnstampedRowsSchema = object({
8102
+ present: boolean(),
8103
+ rows: number().int().nonnegative().nullable()
8078
8104
  });
8105
+ /**
8106
+ * How many rows still carry NO `locationId` — the population a repoint would
8107
+ * silently re-aim at a disk that does not hold their bytes.
8108
+ *
8109
+ * **`null` = the count could not be taken**, and it is NOT permission to cut
8110
+ * over. The gate opens on a measured absence and on nothing else; an unread
8111
+ * collection and an empty one are different facts, and this repo has already
8112
+ * paid for conflating them (`RelocateResidueSchema`, D295).
8113
+ */
8114
+ var UnstampedEventMediaCountSchema = object({
8115
+ media: UnstampedRowsSchema,
8116
+ retrainFrames: UnstampedRowsSchema,
8117
+ /** True when EITHER collection holds one. The refusal reads this. */
8118
+ anyPresent: boolean(),
8119
+ /** Sum across both, or `null` when either lane could not be counted. */
8120
+ total: number().int().nonnegative().nullable()
8121
+ }).nullable();
8079
8122
  var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
8080
8123
  /** The independently selectable logical storage classes — every class
8081
8124
  * `storage.listLocationDeclarations` reports, so an operator never meets a
@@ -8186,6 +8229,10 @@ var StorageMigrationMoveProgressSchema = object({
8186
8229
  /** The archive census — the **M** of "N of M" (D295). `null` = unknowable. */
8187
8230
  filesTotal: number().int().nonnegative().nullable(),
8188
8231
  bytesMoved: number().int().nonnegative(),
8232
+ /** Rows the mover corrected while moving them — see `RelocateJob`. Absent on
8233
+ * a lane that cannot reconcile. A migration that silently rewrote durable
8234
+ * rows would be the same failure as one that silently skipped them. */
8235
+ rowsReconciled: number().int().nonnegative().optional(),
8189
8236
  /** The MOVER's start, not the migration's: a drain restarted after an addon
8190
8237
  * crash gets a new mover, and a rate computed from the migration's start
8191
8238
  * would silently average in the time nothing was running. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-decoder-ffmpeg",
3
- "version": "1.2.45",
3
+ "version": "1.2.46",
4
4
  "description": "Standalone ffmpeg-subprocess decoder fallback addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",