@camstack/addon-provider-dreame 0.2.45 → 0.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/addon.js CHANGED
@@ -58508,6 +58508,21 @@ var RelocateJobSchema = object({
58508
58508
  bytesMoved: number().int(),
58509
58509
  /** Total files discovered up front; null while (or when) unknown. */
58510
58510
  filesTotal: number().int().nullable(),
58511
+ /**
58512
+ * Rows this run CORRECTED while moving them — a durable mutation the move
58513
+ * made that nobody asked for, so it is reported where the operator reads the
58514
+ * job rather than only in a log line.
58515
+ *
58516
+ * A footage segment records its byte count in its own NAME, and the durable
58517
+ * hour row derives its aggregates from those names. A file that does not
58518
+ * match its name therefore makes the ledger's sums — and with them quota and
58519
+ * pressure eviction — wrong by the difference, and only a rename can fix it.
58520
+ * On 2026-08-30 one such row also stalled a 110 749-file drain permanently.
58521
+ *
58522
+ * Absent on lanes where the question has no meaning: a media blob's size is
58523
+ * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
58524
+ */
58525
+ rowsReconciled: number().int().nonnegative().optional(),
58511
58526
  startedAt: number(),
58512
58527
  finishedAt: number().nullable(),
58513
58528
  error: string().nullable()
@@ -58576,14 +58591,42 @@ var RelocateMediaInputSchema = object({
58576
58591
  /** Omitted = `move`, the pre-existing behaviour. */
58577
58592
  mode: MediaRelocateModeSchema.optional()
58578
58593
  });
58579
- /** How many rows still carry NO `locationId` — the population a repoint would
58580
- * silently re-aim at a disk that does not hold their bytes. Zero is the only
58581
- * value that permits a non-blocking `eventMedia` cutover. */
58582
- var UnstampedEventMediaCountSchema = object({
58583
- media: number().int().nonnegative(),
58584
- retrainFrames: number().int().nonnegative(),
58585
- total: number().int().nonnegative()
58594
+ /**
58595
+ * The unstamped population of ONE collection — split, because the gate and the
58596
+ * operator ask two different questions and only one of them has to be cheap.
58597
+ *
58598
+ * `present` is the GATE: "is there at least one row that would be orphaned by a
58599
+ * repoint". It is a single indexed seek to the first matching row, so it stays
58600
+ * answerable on a saturated disk and answers in O(log n) precisely in the state
58601
+ * that matters — after a seal, when the population is empty.
58602
+ *
58603
+ * `rows` is the NUMBER, for the refusal message and the operator's sense of
58604
+ * scale. It is a second, indexed `COUNT(*)`, and `null` means **not
58605
+ * measurable** — never zero. `{ present: true, rows: null }` is a legitimate
58606
+ * and useful answer: "there are some, and this read could not say how many"
58607
+ * still refuses the cutover, which is the whole job.
58608
+ */
58609
+ var UnstampedRowsSchema = object({
58610
+ present: boolean(),
58611
+ rows: number().int().nonnegative().nullable()
58586
58612
  });
58613
+ /**
58614
+ * How many rows still carry NO `locationId` — the population a repoint would
58615
+ * silently re-aim at a disk that does not hold their bytes.
58616
+ *
58617
+ * **`null` = the count could not be taken**, and it is NOT permission to cut
58618
+ * over. The gate opens on a measured absence and on nothing else; an unread
58619
+ * collection and an empty one are different facts, and this repo has already
58620
+ * paid for conflating them (`RelocateResidueSchema`, D295).
58621
+ */
58622
+ var UnstampedEventMediaCountSchema = object({
58623
+ media: UnstampedRowsSchema,
58624
+ retrainFrames: UnstampedRowsSchema,
58625
+ /** True when EITHER collection holds one. The refusal reads this. */
58626
+ anyPresent: boolean(),
58627
+ /** Sum across both, or `null` when either lane could not be counted. */
58628
+ total: number().int().nonnegative().nullable()
58629
+ }).nullable();
58587
58630
  var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
58588
58631
  /** The independently selectable logical storage classes — every class
58589
58632
  * `storage.listLocationDeclarations` reports, so an operator never meets a
@@ -58694,6 +58737,10 @@ var StorageMigrationMoveProgressSchema = object({
58694
58737
  /** The archive census — the **M** of "N of M" (D295). `null` = unknowable. */
58695
58738
  filesTotal: number().int().nonnegative().nullable(),
58696
58739
  bytesMoved: number().int().nonnegative(),
58740
+ /** Rows the mover corrected while moving them — see `RelocateJob`. Absent on
58741
+ * a lane that cannot reconcile. A migration that silently rewrote durable
58742
+ * rows would be the same failure as one that silently skipped them. */
58743
+ rowsReconciled: number().int().nonnegative().optional(),
58697
58744
  /** The MOVER's start, not the migration's: a drain restarted after an addon
58698
58745
  * crash gets a new mover, and a rate computed from the migration's start
58699
58746
  * would silently average in the time nothing was running. */
package/dist/addon.mjs CHANGED
@@ -58508,6 +58508,21 @@ var RelocateJobSchema = object({
58508
58508
  bytesMoved: number().int(),
58509
58509
  /** Total files discovered up front; null while (or when) unknown. */
58510
58510
  filesTotal: number().int().nullable(),
58511
+ /**
58512
+ * Rows this run CORRECTED while moving them — a durable mutation the move
58513
+ * made that nobody asked for, so it is reported where the operator reads the
58514
+ * job rather than only in a log line.
58515
+ *
58516
+ * A footage segment records its byte count in its own NAME, and the durable
58517
+ * hour row derives its aggregates from those names. A file that does not
58518
+ * match its name therefore makes the ledger's sums — and with them quota and
58519
+ * pressure eviction — wrong by the difference, and only a rename can fix it.
58520
+ * On 2026-08-30 one such row also stalled a 110 749-file drain permanently.
58521
+ *
58522
+ * Absent on lanes where the question has no meaning: a media blob's size is
58523
+ * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
58524
+ */
58525
+ rowsReconciled: number().int().nonnegative().optional(),
58511
58526
  startedAt: number(),
58512
58527
  finishedAt: number().nullable(),
58513
58528
  error: string().nullable()
@@ -58576,14 +58591,42 @@ var RelocateMediaInputSchema = object({
58576
58591
  /** Omitted = `move`, the pre-existing behaviour. */
58577
58592
  mode: MediaRelocateModeSchema.optional()
58578
58593
  });
58579
- /** How many rows still carry NO `locationId` — the population a repoint would
58580
- * silently re-aim at a disk that does not hold their bytes. Zero is the only
58581
- * value that permits a non-blocking `eventMedia` cutover. */
58582
- var UnstampedEventMediaCountSchema = object({
58583
- media: number().int().nonnegative(),
58584
- retrainFrames: number().int().nonnegative(),
58585
- total: number().int().nonnegative()
58594
+ /**
58595
+ * The unstamped population of ONE collection — split, because the gate and the
58596
+ * operator ask two different questions and only one of them has to be cheap.
58597
+ *
58598
+ * `present` is the GATE: "is there at least one row that would be orphaned by a
58599
+ * repoint". It is a single indexed seek to the first matching row, so it stays
58600
+ * answerable on a saturated disk and answers in O(log n) precisely in the state
58601
+ * that matters — after a seal, when the population is empty.
58602
+ *
58603
+ * `rows` is the NUMBER, for the refusal message and the operator's sense of
58604
+ * scale. It is a second, indexed `COUNT(*)`, and `null` means **not
58605
+ * measurable** — never zero. `{ present: true, rows: null }` is a legitimate
58606
+ * and useful answer: "there are some, and this read could not say how many"
58607
+ * still refuses the cutover, which is the whole job.
58608
+ */
58609
+ var UnstampedRowsSchema = object({
58610
+ present: boolean(),
58611
+ rows: number().int().nonnegative().nullable()
58586
58612
  });
58613
+ /**
58614
+ * How many rows still carry NO `locationId` — the population a repoint would
58615
+ * silently re-aim at a disk that does not hold their bytes.
58616
+ *
58617
+ * **`null` = the count could not be taken**, and it is NOT permission to cut
58618
+ * over. The gate opens on a measured absence and on nothing else; an unread
58619
+ * collection and an empty one are different facts, and this repo has already
58620
+ * paid for conflating them (`RelocateResidueSchema`, D295).
58621
+ */
58622
+ var UnstampedEventMediaCountSchema = object({
58623
+ media: UnstampedRowsSchema,
58624
+ retrainFrames: UnstampedRowsSchema,
58625
+ /** True when EITHER collection holds one. The refusal reads this. */
58626
+ anyPresent: boolean(),
58627
+ /** Sum across both, or `null` when either lane could not be counted. */
58628
+ total: number().int().nonnegative().nullable()
58629
+ }).nullable();
58587
58630
  var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
58588
58631
  /** The independently selectable logical storage classes — every class
58589
58632
  * `storage.listLocationDeclarations` reports, so an operator never meets a
@@ -58694,6 +58737,10 @@ var StorageMigrationMoveProgressSchema = object({
58694
58737
  /** The archive census — the **M** of "N of M" (D295). `null` = unknowable. */
58695
58738
  filesTotal: number().int().nonnegative().nullable(),
58696
58739
  bytesMoved: number().int().nonnegative(),
58740
+ /** Rows the mover corrected while moving them — see `RelocateJob`. Absent on
58741
+ * a lane that cannot reconcile. A migration that silently rewrote durable
58742
+ * rows would be the same failure as one that silently skipped them. */
58743
+ rowsReconciled: number().int().nonnegative().optional(),
58697
58744
  /** The MOVER's start, not the migration's: a drain restarted after an addon
58698
58745
  * crash gets a new mover, and a rate computed from the migration's start
58699
58746
  * would silently average in the time nothing was running. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.45",
3
+ "version": "0.2.46",
4
4
  "description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
5
5
  "keywords": [
6
6
  "camstack",