@camstack/system 1.2.164 → 1.2.166

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 (68) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  14. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  15. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  16. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  18. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  19. package/dist/builtins/hub-forwarder/index.js +1 -1
  20. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  22. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  24. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  25. package/dist/builtins/local-network/local-network.addon.js +1 -1
  26. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  27. package/dist/builtins/loki-logging/index.js +1 -1
  28. package/dist/builtins/loki-logging/index.mjs +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  30. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  31. package/dist/builtins/platform-probe/index.js +1 -1
  32. package/dist/builtins/platform-probe/index.mjs +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  34. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  35. package/dist/builtins/snapshot/index.js +1 -1
  36. package/dist/builtins/snapshot/index.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/index.d.ts +1 -1
  40. package/dist/builtins/sqlite-storage/index.js +2 -0
  41. package/dist/builtins/sqlite-storage/index.mjs +2 -2
  42. package/dist/builtins/sqlite-storage/query-profiler.d.ts +21 -0
  43. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  44. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  45. package/dist/builtins/storage-orchestrator/location-occupancy.d.ts +19 -0
  46. package/dist/builtins/storage-orchestrator/storage-cleanup-coordinator.d.ts +68 -0
  47. package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +14 -0
  48. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +13 -8
  49. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +441 -100
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +443 -100
  51. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +11 -13
  52. package/dist/builtins/system-config/system-config.addon.js +1 -1
  53. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  54. package/dist/builtins/winston-logging/index.js +1 -1
  55. package/dist/builtins/winston-logging/index.mjs +1 -1
  56. package/dist/{dist-BhE8zNfY.js → dist-CFTKQGym.js} +185 -7
  57. package/dist/{dist-BpsHt11f.mjs → dist-Dw9cm1NS.mjs} +180 -8
  58. package/dist/index.js +2 -2
  59. package/dist/index.mjs +2 -2
  60. package/dist/kernel/deps/manifest-system-deps.d.ts +5 -2
  61. package/dist/kernel/deps/system-package-allowlist.d.ts +12 -0
  62. package/dist/kernel/deps/system-package-broker.d.ts +31 -0
  63. package/dist/kernel/deps/system-package-client.d.ts +9 -0
  64. package/dist/{manifest-system-deps-CJLqfJUs.js → manifest-system-deps-BIxY1Y5e.js} +140 -5
  65. package/dist/{manifest-system-deps-Bk_XLYbB.mjs → manifest-system-deps-DTz_zNQf.mjs} +142 -6
  66. package/dist/{retired-settings-keys-CqDbI-vK.js → retired-settings-keys-dehyu2N3.js} +1 -1
  67. package/dist/{retired-settings-keys-DLwieFXR.mjs → retired-settings-keys-diW1NmyP.mjs} +1 -1
  68. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_system_deps = require("./manifest-system-deps-CJLqfJUs.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-BIxY1Y5e.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Ct as resolveAddonClass, N as createUdsLoggerWithControl, P as LocalChildClient, Rt as RUNNER_RSS_BUDGET_ENV, St as installManifestNativeDeps, Zt as startRunnerHeapWatch, a as createUdsAddonContext, at as getWorkerNativeCapSnapshot, it as getWorkerNativeCapProvider, lt as validateProviderRegistrations, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, st as setWorkerNativeCapsChangeListener, t as installManifestSystemDeps } from "./manifest-system-deps-Bk_XLYbB.mjs";
1
+ import { Ct as resolveAddonClass, N as createUdsLoggerWithControl, P as LocalChildClient, Rt as RUNNER_RSS_BUDGET_ENV, St as installManifestNativeDeps, Zt as startRunnerHeapWatch, a as createUdsAddonContext, at as getWorkerNativeCapSnapshot, it as getWorkerNativeCapProvider, lt as validateProviderRegistrations, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, st as setWorkerNativeCapsChangeListener, t as installManifestSystemDeps } from "./manifest-system-deps-DTz_zNQf.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory, jt as errMsg, w as addonPagesCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Mt as errMsg, Nt as BaseAddon, T as addonPagesCapability, an as EventCategory } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { E as addonWidgetsCapability, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-BpsHt11f.mjs";
1
+ import { D as addonWidgetsCapability, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  //#region src/builtins/alerts/prune-policy.ts
8
8
  /**
9
9
  * Ids older than `cutoffMs`, oldest first.
@@ -1,4 +1,4 @@
1
- import { D as alertsCapability, Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg, n as AlertSchema } from "../../dist-BpsHt11f.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, O as alertsCapability, an as EventCategory, n as AlertSchema } from "../../dist-Dw9cm1NS.mjs";
2
2
  //#region src/builtins/alerts/prune-policy.ts
3
3
  /**
4
4
  * Ids older than `cutoffMs`, oldest first.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory, k as backupCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { A as backupCapability, Nt as BaseAddon, an as EventCategory } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -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-BhE8zNfY.js");
3
+ const require_dist = require("../../dist-CFTKQGym.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { F as coreBlockIdFromAddonId, I as coreBlocksCapability, Mt as BaseAddon, P as coreBlockAddonId, c as CoreBlockSchema, jt as errMsg, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-BpsHt11f.mjs";
1
+ import { F as coreBlockAddonId, I as coreBlockIdFromAddonId, L as coreBlocksCapability, Mt as errMsg, Nt as BaseAddon, c as CoreBlockSchema, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-CqDbI-vK.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-dehyu2N3.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,5 +1,5 @@
1
- import { B as deviceManagerCapability, G as enumerateItemArrayFields, H as deviceStatusCapability, It as DeviceFeature, K as enumerateSchemaFields, Lt as DeviceRole, M as buildStreamParamsConfigSchema, Mt as BaseAddon, Rt as DeviceType, V as deviceStateCapability, Vt as WELL_KNOWN_TAB_MAP, Xt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, d as DeviceStatusSchema, ft as parseStreamParamsFormPatch, in as EventCategory, jt as errMsg, rn as sleep, t as ALL_CAPABILITY_DEFINITIONS, ut as normalizeUnit, vt as runtimeStatePolicyFor, y as STREAM_PROFILE_META } from "../../dist-BpsHt11f.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-DLwieFXR.mjs";
1
+ import { H as deviceStateCapability, Ht as WELL_KNOWN_TAB_MAP, K as enumerateItemArrayFields, Lt as DeviceFeature, Mt as errMsg, N as buildStreamParamsConfigSchema, Nt as BaseAddon, Rt as DeviceRole, U as deviceStatusCapability, V as deviceManagerCapability, Zt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, an as EventCategory, d as DeviceStatusSchema, dt as normalizeUnit, in as sleep, pt as parseStreamParamsFormPatch, q as enumerateSchemaFields, t as ALL_CAPABILITY_DEFINITIONS, y as STREAM_PROFILE_META, yt as runtimeStatePolicyFor, zt as DeviceType } from "../../dist-Dw9cm1NS.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-diW1NmyP.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { A as bareAddonId, Gt as createEvent, Mt as BaseAddon, Rt as DeviceType, U as doorbellCapability, _ as SOURCE_DEVICE_TYPES, et as isSameAddonId, g as SOURCE_CAPS, in as EventCategory, jt as errMsg, q as evaluateSensorEdge, tt as isSourceCap } from "../../dist-BpsHt11f.mjs";
1
+ import { J as evaluateSensorEdge, Kt as createEvent, Mt as errMsg, Nt as BaseAddon, W as doorbellCapability, _ as SOURCE_DEVICE_TYPES, an as EventCategory, g as SOURCE_CAPS, j as bareAddonId, nt as isSourceCap, tt as isSameAddonId, zt as DeviceType } from "../../dist-Dw9cm1NS.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-BhE8zNfY.js");
3
+ const require_dist = require("../../dist-CFTKQGym.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-BpsHt11f.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-Dw9cm1NS.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  node_crypto = require_chunk.__toESM(node_crypto);
9
9
  let crypto$1 = require("crypto");
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { C as UserRecordSchema, Mt as BaseAddon, O as authProviderCapability, Ot as userManagementCapability, b as ScopedTokenSchema, r as ApiKeyRecordSchema } from "../../dist-BpsHt11f.mjs";
2
+ import { Nt as BaseAddon, b as ScopedTokenSchema, k as authProviderCapability, kt as userManagementCapability, r as ApiKeyRecordSchema, w as UserRecordSchema } from "../../dist-Dw9cm1NS.mjs";
3
3
  import * as crypto$2 from "node:crypto";
4
4
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
5
5
  import nodeCrypto from "crypto";
@@ -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-BhE8zNfY.js");
3
+ const require_dist = require("../../dist-CFTKQGym.js");
4
4
  const require_tls = require("../../tls-BxQlomxd.js");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, at as localNetworkCapability, in as EventCategory } from "../../dist-BpsHt11f.mjs";
1
+ import { Nt as BaseAddon, an as EventCategory, ot as localNetworkCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-DOTmtLCW.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  //#region src/builtins/loki-logging/loki-payload.ts
8
8
  /**
9
9
  * Loki rejects a label name that is not a valid Prometheus label
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  //#region src/builtins/loki-logging/loki-payload.ts
3
3
  /**
4
4
  * Loki rejects a label name that is not a valid Prometheus label
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_child_process = require("node:child_process");
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { Gt as createEvent, Mt as BaseAddon, X as foldSnapshotByFunction, gt as resolveBucketMs, ht as reducePoints, in as EventCategory, jt as errMsg, lt as metricsProviderCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, Z as foldSnapshotByFunction, _t as resolveBucketMs, an as EventCategory, gt as reducePoints, ut as metricsProviderCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Mt as BaseAddon, W as enumerateInferenceDevices, in as EventCategory, jt as errMsg, pt as platformProbeCapability, qt as emitReadiness, xt as scoreRuntimes } from "../../dist-BpsHt11f.mjs";
2
+ import { G as enumerateInferenceDevices, Jt as emitReadiness, Mt as errMsg, Nt as BaseAddon, St as scoreRuntimes, an as EventCategory, mt as platformProbeCapability } from "../../dist-Dw9cm1NS.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory } from "../../dist-BpsHt11f.mjs";
1
+ import { Nt as BaseAddon, an as EventCategory } from "../../dist-Dw9cm1NS.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { A as bareAddonId, Ct as snapshotCapability, Dt as streamQualityLabel, It as DeviceFeature, Mt as BaseAddon, Rt as DeviceType, Zt as nodePin, i as BatteryStatusSchema, in as EventCategory, j as batteryCapability, jt as errMsg, z as deriveBatteryPresence } from "../../dist-BpsHt11f.mjs";
1
+ import { B as deriveBatteryPresence, Lt as DeviceFeature, M as batteryCapability, Mt as errMsg, Nt as BaseAddon, Ot as streamQualityLabel, Qt as nodePin, an as EventCategory, i as BatteryStatusSchema, j as bareAddonId, wt as snapshotCapability, zt as DeviceType } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BhE8zNfY.js");
6
+ const require_dist = require("../../dist-CFTKQGym.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Et as storageProviderCapability, Mt as BaseAddon, Y as filesystemBrowseCapability } from "../../dist-BpsHt11f.mjs";
1
+ import { Dt as storageProviderCapability, Nt as BaseAddon, X as filesystemBrowseCapability } from "../../dist-Dw9cm1NS.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -4,7 +4,7 @@ export { DeviceStore } from './device-store.js';
4
4
  export { FilesystemStorageAddon, FilesystemStorageAddon as default, } from './filesystem-storage.addon.js';
5
5
  export { FilesystemStorageProvider } from './filesystem-storage-provider.js';
6
6
  export type { SqliteOpLabel, SqliteOpSample, SqliteOpStat } from './query-profiler.js';
7
- export { SQLITE_PROFILE_REPORT_FLOOR_MS, SQLITE_PROFILE_REPORT_INTERVAL_MS, SQLITE_PROFILE_TOP_N, SQLITE_SLOW_CALL_MS, SqliteOpProfiler, } from './query-profiler.js';
7
+ export { SQLITE_ENGINE_STORM_WALL_SHARE, SQLITE_PROFILE_REPORT_FLOOR_MS, SQLITE_PROFILE_REPORT_INTERVAL_MS, SQLITE_PROFILE_TOP_N, SQLITE_SLOW_CALL_MS, sqliteEngineStorm, SqliteOpProfiler, } from './query-profiler.js';
8
8
  export { SQLITE_JOURNAL_SIZE_LIMIT_BYTES, SQLITE_MMAP_CEILING_BYTES, SQLITE_MMAP_FLOOR_BYTES, SQLITE_PAGE_CACHE_CEILING_KIB, SQLITE_PAGE_CACHE_FLOOR_KIB, sqliteMmapSizeFor, sqlitePageCacheKibFor, } from './sqlite-pragmas.js';
9
9
  export { SqliteSettingsAddon } from './sqlite-settings.addon.js';
10
10
  export { SqliteSettingsBackend } from './sqlite-settings-backend.js';
@@ -57,6 +57,7 @@ exports.DeviceStore = DeviceStore;
57
57
  exports.DeviceStore$1 = DeviceStore;
58
58
  exports.FilesystemStorageAddon = require_builtins_sqlite_storage_filesystem_storage_addon.FilesystemStorageAddon;
59
59
  exports.FilesystemStorageProvider = require_builtins_sqlite_storage_filesystem_storage_addon.FilesystemStorageProvider;
60
+ exports.SQLITE_ENGINE_STORM_WALL_SHARE = require_builtins_sqlite_storage_sqlite_settings_addon.SQLITE_ENGINE_STORM_WALL_SHARE;
60
61
  exports.SQLITE_JOURNAL_SIZE_LIMIT_BYTES = require_builtins_sqlite_storage_sqlite_settings_addon.SQLITE_JOURNAL_SIZE_LIMIT_BYTES;
61
62
  exports.SQLITE_MMAP_CEILING_BYTES = require_builtins_sqlite_storage_sqlite_settings_addon.SQLITE_MMAP_CEILING_BYTES;
62
63
  exports.SQLITE_MMAP_FLOOR_BYTES = require_builtins_sqlite_storage_sqlite_settings_addon.SQLITE_MMAP_FLOOR_BYTES;
@@ -75,5 +76,6 @@ exports.WAL_IDLE_QUIET_MS = require_builtins_sqlite_storage_sqlite_settings_addo
75
76
  exports.WAL_MAINTENANCE_INTERVAL_MS = require_builtins_sqlite_storage_sqlite_settings_addon.WAL_MAINTENANCE_INTERVAL_MS;
76
77
  exports.WalMaintenance = require_builtins_sqlite_storage_sqlite_settings_addon.WalMaintenance;
77
78
  exports.default = require_builtins_sqlite_storage_filesystem_storage_addon.FilesystemStorageAddon;
79
+ exports.sqliteEngineStorm = require_builtins_sqlite_storage_sqlite_settings_addon.sqliteEngineStorm;
78
80
  exports.sqliteMmapSizeFor = require_builtins_sqlite_storage_sqlite_settings_addon.sqliteMmapSizeFor;
79
81
  exports.sqlitePageCacheKibFor = require_builtins_sqlite_storage_sqlite_settings_addon.sqlitePageCacheKibFor;
@@ -1,5 +1,5 @@
1
1
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./filesystem-storage.addon.mjs";
2
- import { SqliteSettingsAddon, _ as SQLITE_PROFILE_TOP_N, a as WalMaintenance, c as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, d as SQLITE_PAGE_CACHE_CEILING_KIB, f as SQLITE_PAGE_CACHE_FLOOR_KIB, g as SQLITE_PROFILE_REPORT_INTERVAL_MS, h as SQLITE_PROFILE_REPORT_FLOOR_MS, i as WAL_MAINTENANCE_INTERVAL_MS, l as SQLITE_MMAP_CEILING_BYTES, m as sqlitePageCacheKibFor, n as WAL_HIGH_WATER_BYTES, o as SqliteSettingsBackend, p as sqliteMmapSizeFor, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, u as SQLITE_MMAP_FLOOR_BYTES, v as SQLITE_SLOW_CALL_MS, y as SqliteOpProfiler } from "./sqlite-settings.addon.mjs";
2
+ import { SqliteSettingsAddon, _ as SQLITE_PROFILE_REPORT_INTERVAL_MS, a as WalMaintenance, b as SqliteOpProfiler, c as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, d as SQLITE_PAGE_CACHE_CEILING_KIB, f as SQLITE_PAGE_CACHE_FLOOR_KIB, g as SQLITE_PROFILE_REPORT_FLOOR_MS, h as SQLITE_ENGINE_STORM_WALL_SHARE, i as WAL_MAINTENANCE_INTERVAL_MS, l as SQLITE_MMAP_CEILING_BYTES, m as sqlitePageCacheKibFor, n as WAL_HIGH_WATER_BYTES, o as SqliteSettingsBackend, p as sqliteMmapSizeFor, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, u as SQLITE_MMAP_FLOOR_BYTES, v as SQLITE_PROFILE_TOP_N, x as sqliteEngineStorm, y as SQLITE_SLOW_CALL_MS } from "./sqlite-settings.addon.mjs";
3
3
  //#region src/builtins/sqlite-storage/config-store.ts
4
4
  var ConfigStore = class {
5
5
  db;
@@ -46,4 +46,4 @@ var DeviceStore = class {
46
46
  }
47
47
  };
48
48
  //#endregion
49
- export { ConfigStore, DeviceStore, FilesystemStorageAddon, FilesystemStorageAddon as default, FilesystemStorageProvider, SQLITE_JOURNAL_SIZE_LIMIT_BYTES, SQLITE_MMAP_CEILING_BYTES, SQLITE_MMAP_FLOOR_BYTES, SQLITE_PAGE_CACHE_CEILING_KIB, SQLITE_PAGE_CACHE_FLOOR_KIB, SQLITE_PROFILE_REPORT_FLOOR_MS, SQLITE_PROFILE_REPORT_INTERVAL_MS, SQLITE_PROFILE_TOP_N, SQLITE_SLOW_CALL_MS, SqliteOpProfiler, SqliteSettingsAddon, SqliteSettingsBackend, WAL_CHECKPOINT_BUSY_TIMEOUT_MS, WAL_HIGH_WATER_BYTES, WAL_IDLE_QUIET_MS, WAL_MAINTENANCE_INTERVAL_MS, WalMaintenance, sqliteMmapSizeFor, sqlitePageCacheKibFor };
49
+ export { ConfigStore, DeviceStore, FilesystemStorageAddon, FilesystemStorageAddon as default, FilesystemStorageProvider, SQLITE_ENGINE_STORM_WALL_SHARE, SQLITE_JOURNAL_SIZE_LIMIT_BYTES, SQLITE_MMAP_CEILING_BYTES, SQLITE_MMAP_FLOOR_BYTES, SQLITE_PAGE_CACHE_CEILING_KIB, SQLITE_PAGE_CACHE_FLOOR_KIB, SQLITE_PROFILE_REPORT_FLOOR_MS, SQLITE_PROFILE_REPORT_INTERVAL_MS, SQLITE_PROFILE_TOP_N, SQLITE_SLOW_CALL_MS, SqliteOpProfiler, SqliteSettingsAddon, SqliteSettingsBackend, WAL_CHECKPOINT_BUSY_TIMEOUT_MS, WAL_HIGH_WATER_BYTES, WAL_IDLE_QUIET_MS, WAL_MAINTENANCE_INTERVAL_MS, WalMaintenance, sqliteEngineStorm, sqliteMmapSizeFor, sqlitePageCacheKibFor };
@@ -133,6 +133,27 @@ export declare const SQLITE_PROFILE_REPORT_INTERVAL_MS = 60000;
133
133
  export declare const SQLITE_PROFILE_REPORT_FLOOR_MS = 250;
134
134
  /** Pairs named in one report line. Enough to see the shape, short enough to read. */
135
135
  export declare const SQLITE_PROFILE_TOP_N = 5;
136
+ /**
137
+ * Share of window wall-clock at which ONE shape is a storm, not a busy engine.
138
+ *
139
+ * Measured 2026-08-31: the OFFSET census on `pipeline-analytics:media` was
140
+ * 88.7 % of wall for six hours. A healthy bounded census (20 s budget in a
141
+ * 60 s window) is 33 % and must not warn. Half the loop is the line between
142
+ * "the engine is working" and "the cluster is queuing behind one query".
143
+ *
144
+ * Cap-usage rate cannot name this class — see `sqliteEngineStorm`.
145
+ */
146
+ export declare const SQLITE_ENGINE_STORM_WALL_SHARE = 0.5;
147
+ /**
148
+ * The dominating shape if it held {@link SQLITE_ENGINE_STORM_WALL_SHARE} of
149
+ * the window, otherwise `null`.
150
+ *
151
+ * Share is of WINDOW wall, not of busy time: an engine that is 90 % busy with
152
+ * ten equal shapes is healthy; one shape at 50 % of wall is the 2026-08-31
153
+ * store saturation regardless of what else ran. `stats` must already be
154
+ * busiest-first (as {@link SqliteOpProfiler.drain} returns them).
155
+ */
156
+ export declare function sqliteEngineStorm(stats: readonly SqliteOpStat[], windowMs: number): SqliteOpStat | null;
136
157
  export interface SqliteOpProfilerOptions {
137
158
  readonly logger: IScopedLogger;
138
159
  /** Injected for tests; production reads the wall clock. */
@@ -0,0 +1,19 @@
1
+ import { LocationOccupancy } from './storage-orchestrator.service.js';
2
+ /**
3
+ * Class → directories under `<root>/<camera>/`. Same map as the discard
4
+ * wipe (`DISCARD_SUBTREES` in the recorder / pipeline-analytics addons).
5
+ * Types not listed keep the legacy "any non-dot entry at the root" rule
6
+ * (backups, addon-data, …).
7
+ */
8
+ export declare const STORAGE_CLASS_SUBTREES: Readonly<Record<string, readonly string[]>>;
9
+ /**
10
+ * Occupancy of `basePath` for a location of `type`.
11
+ *
12
+ * - missing root → `empty` (nothing this delete can strand)
13
+ * - class-mapped type → occupied iff any `<camera>/<subtree>` has an entry
14
+ * - other types → occupied iff the root has a non-dot entry
15
+ */
16
+ export declare function probeLocalDirectoryOccupancy(input: {
17
+ readonly type: string;
18
+ readonly basePath: string;
19
+ }): Promise<LocationOccupancy>;
@@ -0,0 +1,68 @@
1
+ import { LedgerWalkInput, LedgerWalkReport, StorageCleanupInput, StorageCleanupJob } from '@camstack/types';
2
+ import { StorageOrchestratorService } from './storage-orchestrator.service.js';
3
+ export interface CleanupJobState {
4
+ get(): Promise<StorageCleanupJob | null>;
5
+ set(value: StorageCleanupJob | null): Promise<void>;
6
+ }
7
+ export interface OrphanAuditStart {
8
+ readonly started: boolean;
9
+ readonly alreadyRunning: boolean;
10
+ }
11
+ export interface OrphanAuditStatus {
12
+ readonly running: boolean;
13
+ readonly complete: boolean | null;
14
+ readonly totalReclaimed: number;
15
+ readonly totalBytesReclaimed: number;
16
+ readonly error: string | null;
17
+ }
18
+ export interface DebugMediaStart {
19
+ readonly started: boolean;
20
+ readonly alreadyRunning: boolean;
21
+ }
22
+ export interface DebugMediaStatus {
23
+ readonly running: boolean;
24
+ readonly totalReclaimed: number;
25
+ readonly totalBytesReclaimed: number;
26
+ readonly error: string | null;
27
+ }
28
+ export interface StorageCleanupParticipants {
29
+ startOrphan(restart: boolean): Promise<OrphanAuditStart>;
30
+ orphanStatus(): Promise<OrphanAuditStatus>;
31
+ startDebugMedia(): Promise<DebugMediaStart>;
32
+ debugMediaStatus(): Promise<DebugMediaStatus>;
33
+ walkLedger(input: LedgerWalkInput): Promise<LedgerWalkReport>;
34
+ }
35
+ export interface StorageCleanupCoordinatorDeps {
36
+ readonly locations: StorageOrchestratorService;
37
+ readonly state: CleanupJobState;
38
+ readonly participants: StorageCleanupParticipants;
39
+ readonly now: () => number;
40
+ readonly newId: () => string;
41
+ readonly sleep?: (ms: number) => Promise<void>;
42
+ readonly pollMs?: number;
43
+ }
44
+ /**
45
+ * One operator-facing cleanup of leftover analytics rows/blobs, optional
46
+ * debug media, and ghost ledger rows on frozen footage locations.
47
+ *
48
+ * Each addon call either returns immediately (start+poll) or is a bounded
49
+ * ledger walk. The HTTP caller never waits on the full pass.
50
+ */
51
+ export declare class StorageCleanupCoordinator {
52
+ private readonly deps;
53
+ private active;
54
+ private startReserved;
55
+ constructor(deps: StorageCleanupCoordinatorDeps);
56
+ start(input: StorageCleanupInput): Promise<string>;
57
+ status(jobId?: string): Promise<StorageCleanupJob | null>;
58
+ cancel(jobId: string): Promise<boolean>;
59
+ private run;
60
+ private reclaimOrphans;
61
+ private reclaimDebugMedia;
62
+ private forgetGhosts;
63
+ private waitUntilIdle;
64
+ private stopped;
65
+ private setPhase;
66
+ private finish;
67
+ private persist;
68
+ }
@@ -4,6 +4,10 @@ export interface MigrationState {
4
4
  get(): Promise<StorageMigrationJob | null>;
5
5
  set(value: StorageMigrationJob | null): Promise<void>;
6
6
  }
7
+ export interface MigrationHistoryState {
8
+ get(): Promise<readonly StorageMigrationJob[]>;
9
+ set(value: readonly StorageMigrationJob[]): Promise<void>;
10
+ }
7
11
  export interface LeaseParticipant {
8
12
  pause(leaseId: string): Promise<void>;
9
13
  resume(leaseId: string): Promise<void>;
@@ -59,6 +63,7 @@ export interface StorageMigrationParticipants {
59
63
  export interface StorageMigrationCoordinatorDeps {
60
64
  readonly locations: StorageOrchestratorService;
61
65
  readonly state: MigrationState;
66
+ readonly history?: MigrationHistoryState;
62
67
  readonly participants: StorageMigrationParticipants;
63
68
  readonly now: () => number;
64
69
  readonly newId: () => string;
@@ -96,6 +101,8 @@ export declare class StorageMigrationCoordinator {
96
101
  private deviceKey;
97
102
  start(input: StorageMigrationInput): Promise<string>;
98
103
  status(jobId?: string): Promise<StorageMigrationJob | null>;
104
+ /** Finished jobs, newest first, excluding the one `status` currently shows. */
105
+ history(): Promise<readonly StorageMigrationJob[]>;
99
106
  cancel(jobId: string): Promise<boolean>;
100
107
  /**
101
108
  * Every mover running right now, in both lanes — including the ones no
@@ -209,6 +216,13 @@ export declare class StorageMigrationCoordinator {
209
216
  private sealEventMedia;
210
217
  private waitForSeal;
211
218
  private verifyMoves;
219
+ /**
220
+ * After a from→to copy whose source was NOT the class default: stop new
221
+ * writes to `from`. The default is unchanged (that is the whole point of
222
+ * naming a non-default source). A location that is already disabled is
223
+ * left alone.
224
+ */
225
+ private freezeDrainedSources;
212
226
  /**
213
227
  * Arm one class's mover.
214
228
  *
@@ -7,6 +7,7 @@ export declare class StorageOrchestratorAddon extends BaseAddon<StorageOrchestra
7
7
  private pressureTimer;
8
8
  private pressureSweepInFlight;
9
9
  private migration;
10
+ private cleanup;
10
11
  /**
11
12
  * Cached `providerId → nodeLocal` snapshot (SP1). Backs the orchestrator's
12
13
  * synchronous `NodeLocalResolver` — `getProviderInfo()` is async, so we
@@ -114,11 +115,14 @@ export declare class StorageOrchestratorAddon extends BaseAddon<StorageOrchestra
114
115
  */
115
116
  private locationDeviceKey;
116
117
  /**
117
- * Does this location still hold anything? A SHALLOW `readdir` of its
118
- * `basePath` — one syscall, never a walk. `/recordings` holds one entry per
119
- * camera, so this is cheap on a volume with millions of segments, and a
120
- * `find`-style walk of a saturated recordings disk is precisely what must
121
- * not happen here.
118
+ * Does this location still hold anything of ITS class?
119
+ *
120
+ * Shared roots (`/recordings` hosting high + low + events) are scored by
121
+ * class subtree (`<camera>/high|mid`, `/low`, `/events`), not by a raw
122
+ * `readdir` of the root — camera dirs and `.camstack-location` would
123
+ * otherwise make every class look occupied. The walk stays shallow: one
124
+ * dirent per camera, then first-entry of the named subtree. A `find` of
125
+ * segments is precisely what must not happen here.
122
126
  *
123
127
  * **What it cannot see, stated rather than papered over:**
124
128
  *
@@ -127,9 +131,10 @@ export declare class StorageOrchestratorAddon extends BaseAddon<StorageOrchestra
127
131
  * `unknown`, never `empty`.
128
132
  * - A location with no `basePath` — same answer.
129
133
  * - The difference between "holds live footage" and "holds one stray
130
- * lock-file". It measures BYTES ON DISK, not durable rows, so it refuses
131
- * a location holding orphan files that no index names. That direction is
132
- * the safe one, and `force` is the escape hatch for it.
134
+ * lock-file". It measures ON-DISK entries of this class, not durable
135
+ * rows, so it refuses a location holding orphan files that no index
136
+ * names. That direction is the safe one, and `force` is the escape
137
+ * hatch for it.
133
138
  *
134
139
  * A missing root (`ENOENT`) is `empty`, not `unknown`: an unmounted disk and
135
140
  * a deleted directory are indistinguishable here, and if the record's own