@camstack/system 1.2.333 → 1.2.334

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 (70) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/addon-utils.js +1 -1
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +1 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  11. package/dist/builtins/autotrack/autotrack-cameras.d.ts +1 -1
  12. package/dist/builtins/autotrack/index.js +1 -1
  13. package/dist/builtins/autotrack/index.mjs +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  16. package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +1 -1
  17. package/dist/builtins/camera-grid/index.js +2 -2
  18. package/dist/builtins/camera-grid/index.mjs +2 -2
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/index.js +1 -1
  22. package/dist/builtins/console-logging/index.mjs +1 -1
  23. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  24. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  26. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  27. package/dist/builtins/device-manager/device-meta-types.d.ts +1 -1
  28. package/dist/builtins/hub-forwarder/index.js +1 -1
  29. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  31. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  32. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  33. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  34. package/dist/builtins/local-network/local-network.addon.js +1 -1
  35. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  36. package/dist/builtins/loki-logging/index.js +1 -1
  37. package/dist/builtins/loki-logging/index.mjs +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  39. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  40. package/dist/builtins/platform-probe/index.js +1 -1
  41. package/dist/builtins/platform-probe/index.mjs +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  43. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  44. package/dist/builtins/snapshot/index.js +3 -3
  45. package/dist/builtins/snapshot/index.mjs +3 -3
  46. package/dist/builtins/snapshot/snapshot-courtesy.d.ts +1 -1
  47. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  48. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  49. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  50. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  51. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  52. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  53. package/dist/builtins/system-config/system-config.addon.js +1 -1
  54. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  55. package/dist/builtins/winston-logging/index.js +1 -1
  56. package/dist/builtins/winston-logging/index.mjs +1 -1
  57. package/dist/{child-cap-dispatch-D_vavR92.js → child-cap-dispatch-Cy56Y66E.js} +1 -1
  58. package/dist/{child-cap-dispatch-DZBRtBiY.mjs → child-cap-dispatch-Dmo2YJFe.mjs} +1 -1
  59. package/dist/{composition-sources-pkS2rTOz.mjs → composition-sources-BWautla8.mjs} +1 -1
  60. package/dist/{composition-sources-BOmLYV5s.js → composition-sources-BuIRUkTE.js} +1 -1
  61. package/dist/{dist-DxkeG_0w.mjs → dist-COj36Fwm.mjs} +66 -66
  62. package/dist/{dist-Dl2VFsPg.js → dist-Ex-rbzic.js} +66 -66
  63. package/dist/index.js +4 -4
  64. package/dist/index.mjs +4 -4
  65. package/dist/kernel/capability-registry.d.ts +1 -1
  66. package/dist/{retired-settings-keys-D1iqJKR8.js → retired-settings-keys-Bmyl7KuD.js} +1 -1
  67. package/dist/{retired-settings-keys-BPWzEXW3.mjs → retired-settings-keys-DzbmRUhF.mjs} +1 -1
  68. package/dist/{snapshot-courtesy-CZPvteq2.mjs → snapshot-courtesy-CyFs1M3I.mjs} +1 -1
  69. package/dist/{snapshot-courtesy-Cqs7GkOV.js → snapshot-courtesy-D_C5-nC0.js} +1 -1
  70. package/package.json +1 -1
@@ -3521,7 +3521,7 @@ function errMsg(err) {
3521
3521
  return String(err);
3522
3522
  }
3523
3523
  //#endregion
3524
- //#region ../types/dist/composition-43aqsZQj.mjs
3524
+ //#region ../types/dist/composition-D7ULvLdD.mjs
3525
3525
  var AUDIO_ENCODER_BY_CODEC = {
3526
3526
  opus: "libopus",
3527
3527
  aac: "aac",
@@ -3967,20 +3967,20 @@ function portable(target) {
3967
3967
  }
3968
3968
  portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
3969
3969
  /**
3970
- * LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
3971
- * valutatore puro del suo FRONTE.
3970
+ * THE table "which boolean of this device type counts as HIGH", and the
3971
+ * pure evaluator of its EDGE.
3972
3972
  *
3973
- * UNA tabella per tutti quelli che chiedono "questo device è ALTO?": il
3974
- * trigger `RecordingTriggers.sensorDeviceIds` del recorder, i marker dei
3975
- * sensori della post-analysis, il bridge camera-sensors dell'orchestratore e
3976
- * le sorgenti di un campanello composto (`doorbellFeatureSources`, D671).
3977
- * Una seconda copia divergerebbe alla prima cap aggiunta, e il sintomo — "il
3978
- * sensore fa suonare il campanello ma non registra" — è esattamente D62.
3973
+ * ONE table for everyone who asks "is this device HIGH?": the
3974
+ * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
3975
+ * sensor markers, the orchestrator's camera-sensors bridge and
3976
+ * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
3977
+ * A second copy would diverge at the first cap added, and the symptom — "the
3978
+ * sensor rings the doorbell but does not record" — is exactly D62.
3979
3979
  *
3980
- * ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
3981
- * due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
3982
- * regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
3983
- * booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
3980
+ * ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
3981
+ * two must not be unified: that one answers "what is the state WORD for a
3982
+ * rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
3983
+ * boolean's EDGE counts". Deliberately different vocabularies.
3984
3984
  */
3985
3985
  /**
3986
3986
  * Known binary / switch source caps → the boolean slice field whose
@@ -6149,22 +6149,22 @@ var CLASS_MAP_MACRO_TARGETS = [
6149
6149
  "package"
6150
6150
  ];
6151
6151
  /**
6152
- * Le macro classi di PRIMO LIVELLO: quelle che un object detector emette e che
6153
- * un operatore può selezionare.
6152
+ * The FIRST-LEVEL macro classes: those an object detector emits and that
6153
+ * an operator can select.
6154
6154
  *
6155
- * Sono le tre offerte dallo step `object-detection`
6155
+ * They are the three offered by the `object-detection` step
6156
6156
  * (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
6157
- * `enabledMacroClasses`). `package` sta in {@link CLASS_MAP_MACRO_TARGETS} e in
6158
- * `MACRO_LABELS` — è una macro vera — ma NON qui: appartiene allo step
6159
- * `package-detection`, la cui abilitazione è guidata dalle zone, e offrire la
6160
- * stessa parola due volte ha già fatto accendere a un operatore il proxy COCO
6157
+ * `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
6158
+ * `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
6159
+ * `package-detection`, whose enablement is driven by zones, and offering the
6160
+ * same word twice has already made an operator turn on the COCO proxy
6161
6161
  * (suitcase/backpack/handbag) lasciando spento il detector dedicato.
6162
6162
  *
6163
- * UNA lista. Prima di oggi le stesse tre erano scritte a mano nell'offerta
6164
- * dello step e una seconda volta come union `FirstLevelMacro`
6165
- * (`types/detection.ts`); una terza copia per il trigger di registrazione
6166
- * (`RecordingTriggers.objectClasses`) avrebbe reso invisibile la divergenza
6167
- * successiva.
6163
+ * ONE list. Before today the same three were hand-written in the step's offer
6164
+ * and a second time as the union `FirstLevelMacro`
6165
+ * (`types/detection.ts`); a third copy for the recording trigger
6166
+ * (`RecordingTriggers.objectClasses`) would have made the later divergence
6167
+ * invisible.
6168
6168
  */
6169
6169
  var FIRST_LEVEL_MACRO_CLASSES = [
6170
6170
  "person",
@@ -6229,17 +6229,17 @@ var RecordingStorageModeSchema = z.enum([
6229
6229
  "on-device-decision"
6230
6230
  ]);
6231
6231
  /**
6232
- * Le macro classi che possono aprire una finestra di registrazione — le stesse
6233
- * tre offerte dallo step `object-detection`, da UNA lista
6232
+ * The macro classes that can open a recording window — the same
6233
+ * three offered by the `object-detection` step, from ONE list
6234
6234
  * ({@link FIRST_LEVEL_MACRO_CLASSES}).
6235
6235
  */
6236
6236
  var RecordingObjectTriggerClassSchema = z.enum(FIRST_LEVEL_MACRO_CLASSES);
6237
6237
  /**
6238
- * True quando `values` non ripete un elemento.
6238
+ * True when `values` does not repeat an element.
6239
6239
  *
6240
- * Un duplicato non è innocuo: ogni voce di `objectClasses` / `sensorDeviceIds`
6241
- * diventa una SORGENTE in `bandTriggerSources`, e la stessa sorgente due volte
6242
- * conterebbe due volte le sue finestre in `segmentMissedByMs`.
6240
+ * A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
6241
+ * becomes a SOURCE in `bandTriggerSources`, and the same source twice
6242
+ * would count its windows twice in `segmentMissedByMs`.
6243
6243
  */
6244
6244
  var noDuplicates = (values) => new Set(values).size === values.length;
6245
6245
  /** Which detectors trigger an `events`-mode band. */
@@ -6247,34 +6247,34 @@ var RecordingTriggersSchema = z.object({
6247
6247
  motion: z.boolean().optional(),
6248
6248
  audioThresholdDbfs: z.number().optional(),
6249
6249
  /**
6250
- * Le macro classi la cui detection apre una finestra. ASSENTE = la sorgente
6251
- * non è ascoltata; un array VUOTO è rifiutato, perché "banda events, trigger
6252
- * object acceso, nessuna classe" è la stessa forma "abilitata e non registra
6253
- * nulla, per sempre" contro cui è scritto `eventsBandCanEverDemand`.
6250
+ * The macro classes whose detection opens a window. ABSENT = the source
6251
+ * is not listened to; an EMPTY array is rejected, because "events band, object
6252
+ * trigger on, no class" is the same shape "enabled and records
6253
+ * nothing, forever" that `eventsBandCanEverDemand` is written against.
6254
6254
  *
6255
- * Il segnale letto è GIÀ FILTRATO: solo detection `source: 'pipeline'`, cioè
6256
- * quelle che hanno attraversato `enabledMacroClasses`, i
6257
- * `minConfidence<Macro>` e il full-frame guard. L'AI a bordo camera
6258
- * (`source: 'onboard'`) non attraversa nessuno di quei gate e NON apre
6259
- * finestre — vedi `recorder/object-trigger.ts`.
6255
+ * The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
6256
+ * those that went through `enabledMacroClasses`, the
6257
+ * `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
6258
+ * (`source: 'onboard'`) goes through none of those gates and does NOT open
6259
+ * windows — see `recorder/object-trigger.ts`.
6260
6260
  */
6261
6261
  objectClasses: z.array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
6262
6262
  /**
6263
- * I device LINKED il cui FRONTE ALTO apre una finestra. Assente = la sorgente
6264
- * non è ascoltata; un array vuoto è rifiutato per la stessa ragione di
6263
+ * The LINKED devices whose RISING EDGE opens a window. Absent = the source
6264
+ * is not listened to; an empty array is rejected for the same reason as
6265
6265
  * `objectClasses`.
6266
6266
  *
6267
- * Sono id di device SORGENTE, non camere: la banda li nomina, quindi il
6268
- * percorso caldo (`DeviceStateChanged`, a ritmo di bus su tutta la flotta)
6269
- * non fa RPC. L'OFFERTA da cui l'operatore li sceglie è un'altra domanda, e
6270
- * si risolve con `deviceManager.getLinkedDevices` + `getBindingsBatch` per
6271
- * device (D12) — mai un elenco globale di cap.
6267
+ * These are SOURCE device ids, not cameras: the band names them, so the
6268
+ * hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
6269
+ * does no RPC. The OFFER from which the operator picks them is another question, and
6270
+ * is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
6271
+ * device (D12) — never a global list of caps.
6272
6272
  *
6273
- * Cosa vuol dire "alto" dipende dal TIPO di device e non è deciso qui:
6274
- * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) è LA tabella,
6275
- * la stessa del campanello composto (D671). Ed è il FRONTE, non
6276
- * il livello: un contatto trovato già aperto al riavvio del runner non fa
6277
- * registrare.
6273
+ * What "high" means depends on the device TYPE and is not decided here:
6274
+ * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
6275
+ * the same one as the composite doorbell (D671). And it is the EDGE, not
6276
+ * the level: a contact found already open at runner restart does not
6277
+ * record.
6278
6278
  */
6279
6279
  sensorDeviceIds: z.array(z.number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
6280
6280
  });
@@ -7545,7 +7545,7 @@ var DecoderSessionConfigSchema = z.object({
7545
7545
  * - **VALUE** — at which level, for which scope, until when. That stays ONE
7546
7546
  * thing: the logging settings document on the `system` cap. Two authorities
7547
7547
  * over the values is the exact defect
7548
- * `docs/design/plans/2026-08-26-logging-per-componente.md` was written to
7548
+ * `docs/design/plans/2026-08-26-per-component-logging.md` was written to
7549
7549
  * remove; re-introducing it from the cure side would be grotesque.
7550
7550
  *
7551
7551
  * Nothing in this file reads a clock, an env var or a store. The registry is
@@ -13660,7 +13660,7 @@ var dataStoreProviderCapability = {
13660
13660
  *
13661
13661
  * ⚠ An earlier version of this comment blamed Zod stripping, and that
13662
13662
  * was wrong — corrected 2026-08-26 after the hop map
13663
- * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
13663
+ * (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
13664
13664
  * There is **no Zod parse at all** between the door and the engine: the
13665
13665
  * dispatcher forwards the payload verbatim and UDS carries it whole. A
13666
13666
  * field declared here reaches `SqliteSettingsBackend` either way.
@@ -15947,7 +15947,7 @@ var deviceManagerCapability = {
15947
15947
  * sources could be switched off without switching off the rest (D556, then
15948
15948
  * D555's re-key by source). The operator removed the whole idea the same
15949
15949
  * day: *"tutti i providers funzionano sempre, non serve
15950
- * disattivarli/attivarli … loro vivono lì"* (D557 amended, third). A
15950
+ * disattivarli/attivarli … loro vivono lì"* [all the providers always work, there is no need to deactivate/activate them … they live there] (D557 amended, third). A
15951
15951
  * collection cap's providers are a DERIVED set — every addon that provides
15952
15952
  * the cap for this device type, computed on every read and persisted
15953
15953
  * nowhere — so there is nothing here to activate, and a verb that accepted
@@ -16799,7 +16799,7 @@ var embeddingEncoderCapability = {
16799
16799
  * per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
16800
16800
  * ends in a log line, and a log line is the thing the operator asked to stop
16801
16801
  * needing: *"possiamo armare questi errori intanto? Così al prossimo giro
16802
- * ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
16802
+ * ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
16803
16803
  * hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
16804
16804
  * media blackout were both diagnosed. The counters stay; this is where they can
16805
16805
  * be READ.
@@ -23070,14 +23070,14 @@ var TrackSchema = z.object({
23070
23070
  * `derive-returned-null tile=standin`,
23071
23071
  * `native-tile tile=native no-key-frame-at-close`, …) written at close and
23072
23072
  * CLEARED by the late-keyFrame upgrade when a native tile lands after all.
23073
- * The operator-facing answer to "perché manca l'immagine?" on a track whose
23073
+ * The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
23074
23074
  * tile is a face/plate stand-in, a raster crop, or an icon.
23075
23075
  *
23076
23076
  * **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
23077
23077
  * the TILE ranked below native, so a track whose thumbnail landed natively
23078
23078
  * while its key frame missed carried no reason at all — three of the four
23079
23079
  * `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
23080
- * that shape, and their "niente ultimo" had no cause anywhere on the row.
23080
+ * that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
23081
23081
  * The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
23082
23082
  * lastFrame copy source`), so its absence is now on this line whatever the
23083
23083
  * tile ended up being.
@@ -23164,7 +23164,7 @@ var MotionEventSchema = z.object({
23164
23164
  /**
23165
23165
  * Ms offsets from `timestamp` (the episode's own first rising edge, so the
23166
23166
  * first entry is always `0`) of every genuine off→on transition the
23167
- * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
23167
+ * episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
23168
23168
  * push: a firmware source that keepalives at ~1 Hz for the whole burst
23169
23169
  * (Reolink, Hikvision) produces exactly one edge; a source that reports an
23170
23170
  * explicit `false` mid-episode and then resumes before the quiet window
@@ -30493,7 +30493,7 @@ var ClipPlaybackSchema = z.object({
30493
30493
  * **One authorised yes is one wake.** `next-natural` — take the clip the next
30494
30494
  * time the camera is awake for its own reasons — is deliberately not a member:
30495
30495
  * it was proposed, it is free on the battery, and the operator declined it on
30496
- * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."*,
30496
+ * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
30497
30497
  * D558 "Considered and not taken").
30498
30498
  */
30499
30499
  var ClipWakeSchema = z.enum(["authorised"]);
@@ -30738,7 +30738,7 @@ var videoclipsCapability = {
30738
30738
  * **It is a SECTION of the Recording tab, at the end of it — not a tab of
30739
30739
  * its own.** It shipped as a `clips` top-tab and the operator rejected the
30740
30740
  * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
30741
- * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
30741
+ * necessario, una nuova sezione alla fine per le clips"* [I would use the same recordings tab, there we already have everything necessary, a new section at the end for the clips]. The Recording tab
30742
30742
  * already holds the recorder's panel, the schedule bands and the unified
30743
30743
  * retention policy; footage the camera itself holds is the same question,
30744
30744
  * asked of a different store. `order: 100` puts it after all of them with
@@ -30799,7 +30799,7 @@ var videoclipsCapability = {
30799
30799
  * It replaced `sources?: string[]`, a VIEW filter over source ids that
30800
30800
  * assumed the answer was a fan-out over everything a camera has. The
30801
30801
  * operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
30802
- * solo"* — so the list is asked of one provider at a time and there is
30802
+ * solo"* [there is only one user] — so the list is asked of one provider at a time and there is
30803
30803
  * nothing to filter out of it.
30804
30804
  */
30805
30805
  provider: z.string().min(1)
@@ -36466,7 +36466,7 @@ authKey: z.string().optional() }), z.object({
36466
36466
  */
36467
36467
  /**
36468
36468
  * How long after a camera's last rising edge `pipeline-analytics` closes the
36469
- * motion EPISODE row it kept open for it (D475) — "il delay della cap", in
36469
+ * motion EPISODE row it kept open for it (D475) — "il delay della cap" [the cap's delay], in
36470
36470
  * the operator's words. One authority for the whole system: the writer of a
36471
36471
  * `Camera` device's slice (the orchestrator, D696) writes this SAME constant
36472
36472
  * in `autoClearAfterMs` while `detected: true` (never a camera's own clock —
@@ -40089,7 +40089,7 @@ var ReadGopBytesResultSchema = z.object({
40089
40089
  /**
40090
40090
  * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
40091
40091
  * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
40092
- * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
40092
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
40093
40093
  * a replay needs several seconds of native pixels, not one frame.
40094
40094
  *
40095
40095
  * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
@@ -43041,7 +43041,7 @@ var systemCapability = {
43041
43041
  *
43042
43042
  * This is the surface the operator asked for on 2026-08-28 (*"possiamo
43043
43043
  * armare questi errori intanto? Così al prossimo giro ricontrolliamo tutti
43044
- * questi punti"*). Before it, four live failure modes could only be counted
43044
+ * questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]). Before it, four live failure modes could only be counted
43045
43045
  * by grepping Loki and hand-correlating timestamps, which is exactly how a
43046
43046
  * 22% thumbnail gap and a 3-hour media blackout were diagnosed — twice.
43047
43047
  *
@@ -57863,7 +57863,7 @@ var PreviewTextField = z.string().max(200);
57863
57863
  * Whether the notification's preview is a STILL or a short animation.
57864
57864
  *
57865
57865
  * The operator's ask, verbatim: *"inviato come gif o video (come per le altre
57866
- * rule)"* — the other rules already offer an animated preview, and a ten-hour
57866
+ * rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
57867
57867
  * night reads better as three seconds of motion than as one frame of it. Both
57868
57868
  * modes get the SAME treatment (blurred frame, large centred title); `'gif'`
57869
57869
  * simply applies it to a dozen frames sampled across the render and assembles
@@ -3521,7 +3521,7 @@ function errMsg(err) {
3521
3521
  return String(err);
3522
3522
  }
3523
3523
  //#endregion
3524
- //#region ../types/dist/composition-43aqsZQj.mjs
3524
+ //#region ../types/dist/composition-D7ULvLdD.mjs
3525
3525
  var AUDIO_ENCODER_BY_CODEC = {
3526
3526
  opus: "libopus",
3527
3527
  aac: "aac",
@@ -3967,20 +3967,20 @@ function portable(target) {
3967
3967
  }
3968
3968
  portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
3969
3969
  /**
3970
- * LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
3971
- * valutatore puro del suo FRONTE.
3970
+ * THE table "which boolean of this device type counts as HIGH", and the
3971
+ * pure evaluator of its EDGE.
3972
3972
  *
3973
- * UNA tabella per tutti quelli che chiedono "questo device è ALTO?": il
3974
- * trigger `RecordingTriggers.sensorDeviceIds` del recorder, i marker dei
3975
- * sensori della post-analysis, il bridge camera-sensors dell'orchestratore e
3976
- * le sorgenti di un campanello composto (`doorbellFeatureSources`, D671).
3977
- * Una seconda copia divergerebbe alla prima cap aggiunta, e il sintomo — "il
3978
- * sensore fa suonare il campanello ma non registra" — è esattamente D62.
3973
+ * ONE table for everyone who asks "is this device HIGH?": the
3974
+ * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
3975
+ * sensor markers, the orchestrator's camera-sensors bridge and
3976
+ * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
3977
+ * A second copy would diverge at the first cap added, and the symptom — "the
3978
+ * sensor rings the doorbell but does not record" — is exactly D62.
3979
3979
  *
3980
- * ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
3981
- * due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
3982
- * regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
3983
- * booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
3980
+ * ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
3981
+ * two must not be unified: that one answers "what is the state WORD for a
3982
+ * rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
3983
+ * boolean's EDGE counts". Deliberately different vocabularies.
3984
3984
  */
3985
3985
  /**
3986
3986
  * Known binary / switch source caps → the boolean slice field whose
@@ -6149,22 +6149,22 @@ var CLASS_MAP_MACRO_TARGETS = [
6149
6149
  "package"
6150
6150
  ];
6151
6151
  /**
6152
- * Le macro classi di PRIMO LIVELLO: quelle che un object detector emette e che
6153
- * un operatore può selezionare.
6152
+ * The FIRST-LEVEL macro classes: those an object detector emits and that
6153
+ * an operator can select.
6154
6154
  *
6155
- * Sono le tre offerte dallo step `object-detection`
6155
+ * They are the three offered by the `object-detection` step
6156
6156
  * (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
6157
- * `enabledMacroClasses`). `package` sta in {@link CLASS_MAP_MACRO_TARGETS} e in
6158
- * `MACRO_LABELS` — è una macro vera — ma NON qui: appartiene allo step
6159
- * `package-detection`, la cui abilitazione è guidata dalle zone, e offrire la
6160
- * stessa parola due volte ha già fatto accendere a un operatore il proxy COCO
6157
+ * `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
6158
+ * `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
6159
+ * `package-detection`, whose enablement is driven by zones, and offering the
6160
+ * same word twice has already made an operator turn on the COCO proxy
6161
6161
  * (suitcase/backpack/handbag) lasciando spento il detector dedicato.
6162
6162
  *
6163
- * UNA lista. Prima di oggi le stesse tre erano scritte a mano nell'offerta
6164
- * dello step e una seconda volta come union `FirstLevelMacro`
6165
- * (`types/detection.ts`); una terza copia per il trigger di registrazione
6166
- * (`RecordingTriggers.objectClasses`) avrebbe reso invisibile la divergenza
6167
- * successiva.
6163
+ * ONE list. Before today the same three were hand-written in the step's offer
6164
+ * and a second time as the union `FirstLevelMacro`
6165
+ * (`types/detection.ts`); a third copy for the recording trigger
6166
+ * (`RecordingTriggers.objectClasses`) would have made the later divergence
6167
+ * invisible.
6168
6168
  */
6169
6169
  var FIRST_LEVEL_MACRO_CLASSES = [
6170
6170
  "person",
@@ -6229,17 +6229,17 @@ var RecordingStorageModeSchema = zod.z.enum([
6229
6229
  "on-device-decision"
6230
6230
  ]);
6231
6231
  /**
6232
- * Le macro classi che possono aprire una finestra di registrazione — le stesse
6233
- * tre offerte dallo step `object-detection`, da UNA lista
6232
+ * The macro classes that can open a recording window — the same
6233
+ * three offered by the `object-detection` step, from ONE list
6234
6234
  * ({@link FIRST_LEVEL_MACRO_CLASSES}).
6235
6235
  */
6236
6236
  var RecordingObjectTriggerClassSchema = zod.z.enum(FIRST_LEVEL_MACRO_CLASSES);
6237
6237
  /**
6238
- * True quando `values` non ripete un elemento.
6238
+ * True when `values` does not repeat an element.
6239
6239
  *
6240
- * Un duplicato non è innocuo: ogni voce di `objectClasses` / `sensorDeviceIds`
6241
- * diventa una SORGENTE in `bandTriggerSources`, e la stessa sorgente due volte
6242
- * conterebbe due volte le sue finestre in `segmentMissedByMs`.
6240
+ * A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
6241
+ * becomes a SOURCE in `bandTriggerSources`, and the same source twice
6242
+ * would count its windows twice in `segmentMissedByMs`.
6243
6243
  */
6244
6244
  var noDuplicates = (values) => new Set(values).size === values.length;
6245
6245
  /** Which detectors trigger an `events`-mode band. */
@@ -6247,34 +6247,34 @@ var RecordingTriggersSchema = zod.z.object({
6247
6247
  motion: zod.z.boolean().optional(),
6248
6248
  audioThresholdDbfs: zod.z.number().optional(),
6249
6249
  /**
6250
- * Le macro classi la cui detection apre una finestra. ASSENTE = la sorgente
6251
- * non è ascoltata; un array VUOTO è rifiutato, perché "banda events, trigger
6252
- * object acceso, nessuna classe" è la stessa forma "abilitata e non registra
6253
- * nulla, per sempre" contro cui è scritto `eventsBandCanEverDemand`.
6250
+ * The macro classes whose detection opens a window. ABSENT = the source
6251
+ * is not listened to; an EMPTY array is rejected, because "events band, object
6252
+ * trigger on, no class" is the same shape "enabled and records
6253
+ * nothing, forever" that `eventsBandCanEverDemand` is written against.
6254
6254
  *
6255
- * Il segnale letto è GIÀ FILTRATO: solo detection `source: 'pipeline'`, cioè
6256
- * quelle che hanno attraversato `enabledMacroClasses`, i
6257
- * `minConfidence<Macro>` e il full-frame guard. L'AI a bordo camera
6258
- * (`source: 'onboard'`) non attraversa nessuno di quei gate e NON apre
6259
- * finestre — vedi `recorder/object-trigger.ts`.
6255
+ * The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
6256
+ * those that went through `enabledMacroClasses`, the
6257
+ * `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
6258
+ * (`source: 'onboard'`) goes through none of those gates and does NOT open
6259
+ * windows — see `recorder/object-trigger.ts`.
6260
6260
  */
6261
6261
  objectClasses: zod.z.array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
6262
6262
  /**
6263
- * I device LINKED il cui FRONTE ALTO apre una finestra. Assente = la sorgente
6264
- * non è ascoltata; un array vuoto è rifiutato per la stessa ragione di
6263
+ * The LINKED devices whose RISING EDGE opens a window. Absent = the source
6264
+ * is not listened to; an empty array is rejected for the same reason as
6265
6265
  * `objectClasses`.
6266
6266
  *
6267
- * Sono id di device SORGENTE, non camere: la banda li nomina, quindi il
6268
- * percorso caldo (`DeviceStateChanged`, a ritmo di bus su tutta la flotta)
6269
- * non fa RPC. L'OFFERTA da cui l'operatore li sceglie è un'altra domanda, e
6270
- * si risolve con `deviceManager.getLinkedDevices` + `getBindingsBatch` per
6271
- * device (D12) — mai un elenco globale di cap.
6267
+ * These are SOURCE device ids, not cameras: the band names them, so the
6268
+ * hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
6269
+ * does no RPC. The OFFER from which the operator picks them is another question, and
6270
+ * is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
6271
+ * device (D12) — never a global list of caps.
6272
6272
  *
6273
- * Cosa vuol dire "alto" dipende dal TIPO di device e non è deciso qui:
6274
- * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) è LA tabella,
6275
- * la stessa del campanello composto (D671). Ed è il FRONTE, non
6276
- * il livello: un contatto trovato già aperto al riavvio del runner non fa
6277
- * registrare.
6273
+ * What "high" means depends on the device TYPE and is not decided here:
6274
+ * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
6275
+ * the same one as the composite doorbell (D671). And it is the EDGE, not
6276
+ * the level: a contact found already open at runner restart does not
6277
+ * record.
6278
6278
  */
6279
6279
  sensorDeviceIds: zod.z.array(zod.z.number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
6280
6280
  });
@@ -7545,7 +7545,7 @@ var DecoderSessionConfigSchema = zod.z.object({
7545
7545
  * - **VALUE** — at which level, for which scope, until when. That stays ONE
7546
7546
  * thing: the logging settings document on the `system` cap. Two authorities
7547
7547
  * over the values is the exact defect
7548
- * `docs/design/plans/2026-08-26-logging-per-componente.md` was written to
7548
+ * `docs/design/plans/2026-08-26-per-component-logging.md` was written to
7549
7549
  * remove; re-introducing it from the cure side would be grotesque.
7550
7550
  *
7551
7551
  * Nothing in this file reads a clock, an env var or a store. The registry is
@@ -13660,7 +13660,7 @@ var dataStoreProviderCapability = {
13660
13660
  *
13661
13661
  * ⚠ An earlier version of this comment blamed Zod stripping, and that
13662
13662
  * was wrong — corrected 2026-08-26 after the hop map
13663
- * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
13663
+ * (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
13664
13664
  * There is **no Zod parse at all** between the door and the engine: the
13665
13665
  * dispatcher forwards the payload verbatim and UDS carries it whole. A
13666
13666
  * field declared here reaches `SqliteSettingsBackend` either way.
@@ -15947,7 +15947,7 @@ var deviceManagerCapability = {
15947
15947
  * sources could be switched off without switching off the rest (D556, then
15948
15948
  * D555's re-key by source). The operator removed the whole idea the same
15949
15949
  * day: *"tutti i providers funzionano sempre, non serve
15950
- * disattivarli/attivarli … loro vivono lì"* (D557 amended, third). A
15950
+ * disattivarli/attivarli … loro vivono lì"* [all the providers always work, there is no need to deactivate/activate them … they live there] (D557 amended, third). A
15951
15951
  * collection cap's providers are a DERIVED set — every addon that provides
15952
15952
  * the cap for this device type, computed on every read and persisted
15953
15953
  * nowhere — so there is nothing here to activate, and a verb that accepted
@@ -16799,7 +16799,7 @@ var embeddingEncoderCapability = {
16799
16799
  * per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
16800
16800
  * ends in a log line, and a log line is the thing the operator asked to stop
16801
16801
  * needing: *"possiamo armare questi errori intanto? Così al prossimo giro
16802
- * ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
16802
+ * ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
16803
16803
  * hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
16804
16804
  * media blackout were both diagnosed. The counters stay; this is where they can
16805
16805
  * be READ.
@@ -23070,14 +23070,14 @@ var TrackSchema = zod.z.object({
23070
23070
  * `derive-returned-null tile=standin`,
23071
23071
  * `native-tile tile=native no-key-frame-at-close`, …) written at close and
23072
23072
  * CLEARED by the late-keyFrame upgrade when a native tile lands after all.
23073
- * The operator-facing answer to "perché manca l'immagine?" on a track whose
23073
+ * The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
23074
23074
  * tile is a face/plate stand-in, a raster crop, or an icon.
23075
23075
  *
23076
23076
  * **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
23077
23077
  * the TILE ranked below native, so a track whose thumbnail landed natively
23078
23078
  * while its key frame missed carried no reason at all — three of the four
23079
23079
  * `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
23080
- * that shape, and their "niente ultimo" had no cause anywhere on the row.
23080
+ * that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
23081
23081
  * The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
23082
23082
  * lastFrame copy source`), so its absence is now on this line whatever the
23083
23083
  * tile ended up being.
@@ -23164,7 +23164,7 @@ var MotionEventSchema = zod.z.object({
23164
23164
  /**
23165
23165
  * Ms offsets from `timestamp` (the episode's own first rising edge, so the
23166
23166
  * first entry is always `0`) of every genuine off→on transition the
23167
- * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
23167
+ * episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
23168
23168
  * push: a firmware source that keepalives at ~1 Hz for the whole burst
23169
23169
  * (Reolink, Hikvision) produces exactly one edge; a source that reports an
23170
23170
  * explicit `false` mid-episode and then resumes before the quiet window
@@ -30493,7 +30493,7 @@ var ClipPlaybackSchema = zod.z.object({
30493
30493
  * **One authorised yes is one wake.** `next-natural` — take the clip the next
30494
30494
  * time the camera is awake for its own reasons — is deliberately not a member:
30495
30495
  * it was proposed, it is free on the battery, and the operator declined it on
30496
- * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."*,
30496
+ * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
30497
30497
  * D558 "Considered and not taken").
30498
30498
  */
30499
30499
  var ClipWakeSchema = zod.z.enum(["authorised"]);
@@ -30738,7 +30738,7 @@ var videoclipsCapability = {
30738
30738
  * **It is a SECTION of the Recording tab, at the end of it — not a tab of
30739
30739
  * its own.** It shipped as a `clips` top-tab and the operator rejected the
30740
30740
  * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
30741
- * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
30741
+ * necessario, una nuova sezione alla fine per le clips"* [I would use the same recordings tab, there we already have everything necessary, a new section at the end for the clips]. The Recording tab
30742
30742
  * already holds the recorder's panel, the schedule bands and the unified
30743
30743
  * retention policy; footage the camera itself holds is the same question,
30744
30744
  * asked of a different store. `order: 100` puts it after all of them with
@@ -30799,7 +30799,7 @@ var videoclipsCapability = {
30799
30799
  * It replaced `sources?: string[]`, a VIEW filter over source ids that
30800
30800
  * assumed the answer was a fan-out over everything a camera has. The
30801
30801
  * operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
30802
- * solo"* — so the list is asked of one provider at a time and there is
30802
+ * solo"* [there is only one user] — so the list is asked of one provider at a time and there is
30803
30803
  * nothing to filter out of it.
30804
30804
  */
30805
30805
  provider: zod.z.string().min(1)
@@ -36466,7 +36466,7 @@ authKey: zod.z.string().optional() }), zod.z.object({
36466
36466
  */
36467
36467
  /**
36468
36468
  * How long after a camera's last rising edge `pipeline-analytics` closes the
36469
- * motion EPISODE row it kept open for it (D475) — "il delay della cap", in
36469
+ * motion EPISODE row it kept open for it (D475) — "il delay della cap" [the cap's delay], in
36470
36470
  * the operator's words. One authority for the whole system: the writer of a
36471
36471
  * `Camera` device's slice (the orchestrator, D696) writes this SAME constant
36472
36472
  * in `autoClearAfterMs` while `detected: true` (never a camera's own clock —
@@ -40089,7 +40089,7 @@ var ReadGopBytesResultSchema = zod.z.object({
40089
40089
  /**
40090
40090
  * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
40091
40091
  * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
40092
- * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
40092
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
40093
40093
  * a replay needs several seconds of native pixels, not one frame.
40094
40094
  *
40095
40095
  * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
@@ -43041,7 +43041,7 @@ var systemCapability = {
43041
43041
  *
43042
43042
  * This is the surface the operator asked for on 2026-08-28 (*"possiamo
43043
43043
  * armare questi errori intanto? Così al prossimo giro ricontrolliamo tutti
43044
- * questi punti"*). Before it, four live failure modes could only be counted
43044
+ * questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]). Before it, four live failure modes could only be counted
43045
43045
  * by grepping Loki and hand-correlating timestamps, which is exactly how a
43046
43046
  * 22% thumbnail gap and a 3-hour media blackout were diagnosed — twice.
43047
43047
  *
@@ -57863,7 +57863,7 @@ var PreviewTextField = zod.z.string().max(200);
57863
57863
  * Whether the notification's preview is a STILL or a short animation.
57864
57864
  *
57865
57865
  * The operator's ask, verbatim: *"inviato come gif o video (come per le altre
57866
- * rule)"* — the other rules already offer an animated preview, and a ten-hour
57866
+ * rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
57867
57867
  * night reads better as three seconds of motion than as one frame of it. Both
57868
57868
  * modes get the SAME treatment (blurred frame, large centred title); `'gif'`
57869
57869
  * simply applies it to a dozen frames sampled across the render and assembles
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-Dl2VFsPg.js");
3
+ const require_dist = require("./dist-Ex-rbzic.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_builtins_composer_composer_addon = require("./builtins/composer/composer.addon.js");
@@ -29,7 +29,7 @@ require("./builtins/system-config/index.js");
29
29
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
30
30
  const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-ey4mbofz.js");
31
31
  const require_tls$1 = require("./tls-D_wUeOTD.js");
32
- const require_child_cap_dispatch = require("./child-cap-dispatch-D_vavR92.js");
32
+ const require_child_cap_dispatch = require("./child-cap-dispatch-Cy56Y66E.js");
33
33
  const require_resource_monitor = require("./resource-monitor-DzNn_IZK.js");
34
34
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
35
35
  let zod = require("zod");
@@ -735,7 +735,7 @@ var LogRingBuffer = class {
735
735
  * the hub forwarder). It does NOT gate the in-memory ring buffer: the ring
736
736
  * keeps everything it has room for and prunes by level only under pressure,
737
737
  * which the plan
738
- * (`docs/design/plans/2026-08-26-logging-per-componente.md`) settles as the
738
+ * (`docs/design/plans/2026-08-26-per-component-logging.md`) settles as the
739
739
  * better policy — an admission level for the ring would make the log viewer go
740
740
  * blind exactly when an operator raises the level to quieten a disk.
741
741
  *
@@ -6989,7 +6989,7 @@ var CapabilityRegistry = class CapabilityRegistry {
6989
6989
  *
6990
6990
  * Filters by activation (the manifest's autoActivate) and by nothing else.
6991
6991
  * The per-device DENY set that used to filter here is gone with the switch
6992
- * it projected (2026-09-20): *"tutti i providers funzionano sempre"*. WHICH
6992
+ * it projected (2026-09-20): *"tutti i providers funzionano sempre"* [all the providers always work]. WHICH
6993
6993
  * providers a device has is now answered by its BINDINGS
6994
6994
  * (`device-bindings-store.ts` step 0), which is a different question from
6995
6995
  * which of them are registered and running — this one.