@or3/cloud 0.1.65 → 0.1.66

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/README.md CHANGED
@@ -98,6 +98,11 @@ Update recovery reads the authenticated pre-update snapshot recorded in
98
98
  including its data and release assets, before clearing the pending operation.
99
99
  Legacy `adopt-source-*` directories are preserved outside managed backup
100
100
  retention and are not treated as authenticated restore points.
101
+ Backups from releases before authentication tags existed are also preserved:
102
+ `backup list` and retention skip `backup-*` entries with no `manifest.auth` and
103
+ print a warning. They do not sign, migrate, or delete those archives. An existing
104
+ but invalid tag remains an error; restore, recovery, and export still require
105
+ valid deployment authentication.
101
106
  Backup artifacts are allocated in that journal before archiving, fully
102
107
  revalidated before success is reported, and safely removed by `recover` if a
103
108
  hard interruption leaves an incomplete artifact. A standalone backup and a
package/dist/cli.mjs CHANGED
@@ -31,7 +31,7 @@ import { fileURLToPath } from "node:url";
31
31
  import { createGunzip } from "node:zlib";
32
32
  var execFile = promisify(execFileCallback);
33
33
  var PACKAGE_ROOT = resolve(fileURLToPath(new URL("../", import.meta.url)));
34
- var PACKAGE_VERSION = "0.1.65";
34
+ var PACKAGE_VERSION = "0.1.66";
35
35
  var IMAGE_REPOSITORY = "ghcr.io/saluana/or3-chat";
36
36
  var ASSET_ROOT = resolve(fileURLToPath(new URL("../assets/", import.meta.url)));
37
37
  var STATE_SCHEMA_VERSION = 1;
@@ -1843,6 +1843,14 @@ async function enumerateBackups(directory) {
1843
1843
  throw new Error(`Backup store contains an unexpected artifact ${join(backupsRoot, entry)}. Refusing to use it for retention; inspect or remove it explicitly.`);
1844
1844
  }
1845
1845
  const path = join(backupsRoot, entry);
1846
+ try {
1847
+ await lstat(join(path, "manifest.auth"));
1848
+ } catch (error) {
1849
+ if (error.code !== "ENOENT")
1850
+ throw error;
1851
+ console.warn(`Preserving unauthenticated backup ${entry}: no manifest.auth; excluded from managed backup listing and retention.`);
1852
+ continue;
1853
+ }
1846
1854
  const manifest = await readManifest(path, directory);
1847
1855
  if (manifest.backupId !== entry) {
1848
1856
  throw new Error(`Backup directory ${path} does not match manifest ID ${manifest.backupId}. Refusing to use it for retention.`);
@@ -2746,7 +2754,7 @@ async function backupListCommand(directory) {
2746
2754
  const loaded = await loadManaged(directory);
2747
2755
  const backups = await enumerateBackups(loaded.directory);
2748
2756
  if (backups.length === 0) {
2749
- console.log(`No backups exist yet for ${loaded.directory}. Run "npx @or3/cloud backup" to create one.`);
2757
+ console.log(`No authenticated backups are available for ${loaded.directory}. Run "npx @or3/cloud backup" to create one.`);
2750
2758
  return;
2751
2759
  }
2752
2760
  console.log(`OR3 Cloud backups for ${loaded.directory} (${backups.length}):`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@or3/cloud",
3
- "version": "0.1.65",
3
+ "version": "0.1.66",
4
4
  "description": "Install and operate the OR3 Cloud container distribution",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0",
@@ -18,9 +18,9 @@
18
18
  "or3Cloud": {
19
19
  "dashboardUpdateProtocol": 1,
20
20
  "dashboardUpdateMinimumSourceVersion": "0.1.40",
21
- "imageDigest": "sha256:cce2c2331419dbb2e2d0b17e0a7da0c9f3106b3c6dc30f680a6d9f145f0c6c6e",
22
- "operatorImageDigest": "sha256:b8732a186a6bcfbd47f93333b7ed90991b20f4dd569ec08aec509e9f21ab6561",
23
- "sourceRevision": "19b8889981b2f5f958c23679887a9a4bebd0f58c"
21
+ "imageDigest": "sha256:fbe393d371bcd2cfdcdd4e8295cbb61c6ec11bbedccf84b88042ff28b8155fb6",
22
+ "operatorImageDigest": "sha256:7eda3cab7508094bc51a43bb0c10924a806eb6127160cd6fccbd77a8fda99e7f",
23
+ "sourceRevision": "79691e3f6b14ac7555aba765aee794263583d503"
24
24
  },
25
25
  "files": [
26
26
  "dist",