• Onebox v33.17.2
    Release / build-and-release (push) Failing after 24m9s
    Stable

    philkunz released this 2026-10-14 21:44:40 +00:00 | 2 commits to main since this release

    2026-10-14 - 33.17.2

    Fixes

    • Pin the platform Corestore 32.2.7 by its multi-platform image index code.foss.global/serve.zone/corestore@sha256:73ebbfecc33f52022249bbbbdaef331c31b8bfaf3cd2de23cf58b874ef821334 (linux/amd64 and linux/arm64), moved from 32.2.5 (sha256:a6a702f04320e15198a16a309dd939af927d3bcd74d14d92b0ce3f44526a3e7d) in ts/platform-images.ts, and declare it as oneboxCorestorePinnedRelease 32.2.7. Corestore 32.2.7 is a maintenance release of the 32.2 line that serves object storage from @lossless.org/objectstorage 10.7.1 instead of 10.3.1 (through 32.2.6, which brought 10.7.0): reads no longer queue behind bucket listings. A listing held the engine-wide object gate while it walked and sorted the whole bucket, so every GET and HEAD on every bucket waited for it; a listing now holds a per-bucket gate that blocks only writes to the bucket it lists, the engine-wide object migration gate is held only for the legacy-layout reconciliation before the walk, and the walk covers only the keys its prefix and cursor reach. On central this removes the 6–25 s registry read stalls that pushed Cloudly deploy preflights past their deadlines. Through 10.7.0 workloads also get CopyObject read authorization on the source, durable staged writes, UploadPartCopy and disabled Nagle's algorithm (Corestore 32.2.6 changelog). The NoSQLDB engine stays 10.10.0 and the object layout is unchanged, so 32.2.5 to 32.2.7 adds no one-way step: 32.2.5 serves a pool 32.2.7 wrote, and the movers' restore to 32.2.5 holds. One rollback condition applies: a write of a new key that a crash interrupts leaves a staged directory in .smartstorage/staging/v1/ that 32.2.5's objectstorage 10.3.1 refuses at startup, so start and stop 32.2.7 once before rolling back to 32.2.5; if 32.2.7 cannot start, back up the root first, then remove only the *.object.tmp.leaf directories there, which hold payloads that were never published (Corestore 32.2.6 changelog). A completed engine conversion keeps running the image its journal names, so after the binary upgrade it still runs 32.2.5 until onebox migration corestore-engine --replace-completed-target-image moves it, and a native owner until --replace-native-target-image does; both admit 32.2.5 to 32.2.7 as a newer release of the same major, read from both images' release labels; the 32.2.7 index states 32.2.7 in its org.opencontainers.image.version and version labels on both platforms. An owner still on 32.2.4 or earlier crosses the one-way first start of NoSQLDB 10.10.0 with this move as it did with 32.2.5, so take a block-level snapshot of its Corestore volume with the services stopped first. The completed-target replacement test now runs the move from the 32.2.5 index with this release's own pin, and the backup exclusion tests run against objectstorage 10.7.1, the engine of the pinned Corestore. The change adds no startup data migration.

    Maintenance

    • release tooling: @git.zone/tstest 8.0.0, @git.zone/tsbundle 3.3.0 (pnpm 12.10.1 and @types/node 26.6.4 stay: pnpm 12.11.2 and @types/node 26.6.5 are younger than the 7-day release-age rule; @git.zone/tsdeno stays 1.15.0 until the binary moves from Deno to a Node single executable application, owner decision 2026-10-14)
    Downloads
  • Onebox v33.17.1
    Release / build-and-release (push) Failing after 25m30s
    Stable

    philkunz released this 2026-10-14 09:59:44 +00:00 | 6 commits to main since this release

    2026-10-14 - 33.17.1

    Fixes

    • A backup applies the backup-exclusion declaration the App Store catalog makes for the image the service runs, not only the one its installed version declares. 33.17.0 applied an upgrade target's declaration only when the target pinned the installed image digest, and the installed snapshot's otherwise; a service installed from a version that predates its app's declaration (Cloudly 1.28.3, which declares nothing, while 1.28.5 pins the identical image and declares runtime-logs/) was exported in full before an upgrade to a version on another image, so a bucket holding more than 100,000 log objects refused the pre-upgrade backup and blocked the upgrade. Whether data is non-backup data is a property of the app's code, so a backup now applies, in order: the upgrade target's declaration when it pins the installed image digest (unchanged); the declaration of the active catalog's versions of the app that pin exactly the installed image digest and are not withdrawn and interpretable by this Onebox, the newest by semver when they declare differently (never merged; opaque branch versions that disagree are not ordered, so none of them applies); a version on that image that needs App Store features this Onebox does not support (the feature gate of the install-target judgement) or whose storage config it cannot normalize is skipped and named in the record, never failing the backup; the installed snapshot's declaration; otherwise none, a full export with the reason recorded, as before. The backup row and snapshot tag dataExclusion and the onebox backup create line name the basis, e.g. declared by cloudly@1.28.5 for the installed image sha256:… of cloudly@1.28.3 in App Store catalog revision 12; the newest of 2 catalog versions on that image, which declare differently (cloudly@1.28.5, cloudly@1.28.3), applies; the upgrade target cloudly@1.29.1 runs another image digest. Restores are unchanged, and the feature id stays storage.object-storage.backup-exclusions.
    Downloads
  • Onebox v33.17.0
    Release / build-and-release (push) Failing after 12m19s
    Stable

    philkunz released this 2026-10-14 00:42:17 +00:00 | 9 commits to main since this release

    2026-10-14 - 33.17.0

    Features

    • Backups leave out the object-storage data an App Store version declares as non-backup data (backupExclusions, @serve.zone/interfaces 32.56.0), such as Cloudly's workload logs under runtime-logs/: a restore brings back state, not past logs. The declaration is read from the installed template snapshot, normalized by @serve.zone/appstore 33.6.0, and legacy-s3 names the service's one Corestore bucket. The bucket is listed with Delimiter='/', skipping a declared prefix without listing anything under it, so an excluded subtree costs one entry of its parent's listing on an objectstorage that walks the whole bucket for every list request; the 100,000-object and 16 MiB manifest caps count included objects only. Every bucket is now listed before the archive ingest starts, so the ingest's idle timeout never waits on a listing, and closing the backup manager (daemon shutdown) aborts that listing. The bucket manifest names the prefixes in excludedKeyPrefixes (written only when something was left out, so a backup without exclusions keeps the shape earlier releases restore); the backup row and snapshot tag dataExclusion record which version's declaration applied and why, and onebox backup import derives the same record from the imported bucket manifests (origin: 'import'); a restore logs the prefixes it does not restore and deletes nothing. An App Store service without a snapshot of its version is exported in full, with the reason recorded. onebox backup create <service> --upgrade-target <version> takes a backup for an upgrade and applies the target version's declaration when the target pins the installed version's image digest, the installed version's otherwise. Onebox advertises storage.object-storage.backup-exclusions, so catalog versions that declare exclusions become installable and upgradable; the exclusion applies to the legacy-s3 platform-resource bucket, and services with named object-storage requests stay refused for backup. The canonical storage handoff of @serve.zone/appstore 33.6.0 carries backupExclusions; a handoff a service or a backup saved before it has none, which Onebox reads as no declaration, so existing services and earlier backups keep validating.

    Fixes

    • A backup whose ContainerArchive ingest is aborted fails by name instead of ending the daemon. When an item's socket fell silent, ContainerArchive destroyed the item's stream with Ingest timed out after 300000ms without socket activity; the bundle passed that on to its tar pack, which destroyed the entry waiting in it with the same error. Entries added from bytes in memory (addBytes, such as an S3 bucket's manifest.json, a Valkey export or a Corestore receipt), directory and link entries, and the documents of a backup's OCI image layout had no listener on that entry stream, so the error was an uncaught exception: onebox backup create lost the daemon (exit 1, systemd restart) and the CLI saw Onebox control socket closed without a response. Every such entry now goes through one function (addTarEntry) that listens on it and rejects with the error, so the backup fails with it and the daemon keeps running. The same class of unheard stream errors is closed on the other backup and restore paths: a bundle stopped before anything read it (a download export refused by staging, or whose output file exists), an image layer opened after its layout was destroyed (now closed), an image archive that ends inside a skipped entry, a download export's output file (now opened and its header written through a file handle), restore streams that were opened before their directory was created, and the MariaDB and ClickHouse restore inputs, which are now opened when the restore reads them.

    Maintenance

    • release tooling: pnpm 12.10.1 (@git.zone/tsdeno stays 1.15.0: its 2.x migration ships as its own release, owner decision 2026-10-13)
    Downloads
  • Onebox v33.16.1
    Release / build-and-release (push) Failing after 16m51s
    Stable

    philkunz released this 2026-10-13 15:25:26 +00:00 | 14 commits to main since this release

    2026-10-13 - 33.16.1

    Fixes

    • Pin the platform Corestore 32.2.5 by its multi-platform image index code.foss.global/serve.zone/corestore@sha256:a6a702f04320e15198a16a309dd939af927d3bcd74d14d92b0ce3f44526a3e7d (linux/amd64 and linux/arm64), moved from 32.2.4 (sha256:5934215cc86c5b1d79fce5040a03341d7114abd00bc71329f255e76efc158aaf) in ts/platform-images.ts, and declare it as oneboxCorestorePinnedRelease 32.2.5. Corestore 32.2.5 is a maintenance release of the 32.2 line that moves @lossless.org/nosqldb from 10.6.1 to 10.10.0: a workload that dies inside a transaction no longer locks its successor out of new collections until its session expires (EFENCE_BUSY on create), and the engine spends far less CPU per command and at rest. A completed engine conversion keeps running the image its journal names, so after the binary upgrade it still runs 32.2.4 until onebox migration corestore-engine --replace-completed-target-image moves it, and a native owner until --replace-native-target-image does; both admit 32.2.4 to 32.2.5 as a newer release of the same major, read from both images' release labels; the 32.2.5 index states 32.2.5 in its org.opencontainers.image.version and version labels on both platforms. The completed-target replacement test now runs that move from the 32.2.4 index with this release's own pin. The move is one-way: NoSQLDB 10.10.0 opens a root 32.2.4 wrote in place, but once it has written, an engine before NoSQLDB 10.9 may not open that root again (Corestore 32.2.5 changelog), so take a block-level snapshot of the Corestore volume with the services stopped before the move. The change adds no startup data migration.

    Maintenance

    • release tooling: @git.zone/tstest 7.2.1, pnpm 12.10.0
    Downloads
  • Onebox v33.15.1
    Release / build-and-release (push) Failing after 31m56s
    Stable

    philkunz released this 2026-10-08 20:12:01 +00:00 | 23 commits to main since this release

    2026-10-08 - 33.15.1

    Fixes

    • An App Store upgrade of a hosted app with platform OIDC enabled before 33.15.0 is no longer refused with Disable platform OIDC before upgrading across an OIDC contract change when the target keeps the same OIDC contract (seen on onebox appstore upgrade cloudly 1.27.0 → 1.28.0). The registration keeps the roles and environment variable names in the member order the template was written in; the verified catalog 33.15.0 reads carries the same contract in canonical (sorted) member order, and the check compared the two as JSON text. It now compares the contract itself (getPlatformOidcContractKey): independent of member order and of role order (role ids are unique; tokens carry them sorted), every member still compared, the redirect path normalized the same way on both sides. A removed, added or renamed role, a changed role label or description, a renamed or swapped environment variable, another redirect path or another client authentication method is still refused.
    Downloads
  • Onebox v33.15.0
    Release / build-and-release (push) Failing after 27m34s
    Stable

    philkunz released this 2026-10-08 16:47:19 +00:00 | 25 commits to main since this release

    2026-10-08 - 33.15.0

    Features

    • The App Store catalog is loaded at runtime instead of being compiled into the binary: Onebox reads the Ed25519-signed catalog envelope @serve.zone/appstore 33.0.0 publishes in its npm package, through the package's timer-free loader, from the registries of the database setting appStoreCatalogRegistries (validated with @serve.zone/interfaces' validateAppStoreCatalogRegistries; an invalid stored list fails the load by name; empty = the npm registry), and verifies it against the catalog key it ships (ts/appstore-catalog-trust.ts). An App Store template update therefore needs an appstore release only, never an Onebox release. One owner (AppStoreCatalogRuntime) holds it: start() returns at once, restores the stored catalog (verified again) and loads in the background after the platform services; it refreshes 15 minutes after a load and backs off from 1 to 30 minutes after failures, with one timer, and stops (aborting a load in flight) before the database closes.
    • The catalog is stored in chunks: a pointer plus chunks named by the envelope text's SHA-256, written chunks first, then the pointer (read at write time and fenced on its digests and revision), then the chunks it no longer names; a read checks the joined text against its digest. A stored catalog is never replaced by an older revision or by another catalog of the same revision; the same catalog re-signed replaces it. A failed cleanup after the pointer moved is logged and finished by the next write.
    • While no catalog is active, App Store install and upgrade are refused with APPSTORE_CATALOG_UNAVAILABLE (retryable, with the cause), and a hosted app's upgrade status is unknown with the reason as its blocker. Install and upgrade targets are judged by judgeAppStoreCatalogInstallTarget for consumer onebox. New API requests getAppStoreCatalogStatus, refreshAppStoreCatalog and importAppStoreCatalog, and CLI onebox appstore status | refresh | import --stdin | registries [set <url>… | reset]; an operator import is verified like a loaded catalog and bounded at 16 MiB (maximumAppStoreCatalogEnvelopeBytes, shared by the CLI and the API). The App Store page shows the unavailable reason and retries with a catalog refresh.
    • A service installed from the App Store keeps the template it runs as a snapshot (appStoreTemplate), written in the same update as install and upgrade; when a catalog activates, every service of a listed version without one gets it (fenced on the template id and version, under the service lock, one service failing does not stop the others). Admin role checks, hosted-app OIDC and the offline Corestore credential capture read the snapshot, never the live catalog.

    Upgrade Notes

    • Removed: the bundled catalog, the App Store resolver with its source/baseUrl, the download-and-run of template migration scripts, and the silent empty listing when the catalog source failed. Point a host at another catalog registry with onebox appstore registries set <url>.
    • App Store services installed before 33.15.0 carry no template snapshot until a catalog that lists their installed version activates once after the upgrade. Until then hosted-app OIDC, the admin role checks, the hosted-app upgrade state and the offline onebox corestore-engine refuse those services by name. With registry access this is the first load after the start; on a host without registry access set a reachable registry (onebox appstore registries set <url>) or import a catalog (onebox appstore import --stdin). Start 33.15.0 once with a catalog before running corestore-engine. A service whose installed version is no longer listed in the catalog gets no snapshot.
    • Dependencies: @serve.zone/appstore 32.27.0 → 33.0.0 and @serve.zone/interfaces 32.42.0 → 32.53.0 in package.json, pnpm-lock.yaml and deno.lock; deno.lock gains modern-tar@0.8.5 (MIT, through @serve.zone/appstore), listed in the binary's third-party notices.

    Maintenance

    • Release tooling: @git.zone/tsbuild 6.0.0 → 6.0.2 (the type packages default to types: ["*"] when no tsconfig names them; Onebox's tsconfig names node, so nothing changes) and @git.zone/tsrun 3.0.2 → 3.0.3 (dependency source maps stay unread; needs Node.js 22.14 or newer). @types/node stays at 26.6.3 until 26.6.4 is seven days old (2026-10-08 22:39 UTC), pnpm stays at 12.8.2, and @git.zone/tsdeno stays on 1.x (2.0.0 is its own migration). The tooling bump leaves deno.lock unchanged (it holds no dev tooling).
    Downloads
  • Onebox v33.14.0
    Release / build-and-release (push) Failing after 22m47s
    Stable

    philkunz released this 2026-10-08 12:19:48 +00:00 | 29 commits to main since this release

    2026-10-08 - 33.14.0

    Features

    • Bundle the Cloudly App Store template 1.27.0 for Cloudly 33.17.3 through @serve.zone/appstore 32.27.0, moved from 32.26.0 in package.json, pnpm-lock.yaml and the binary's deno.lock. Onebox reads the App Store from the catalog this package bundles, so onebox appstore upgrade cloudly --version 1.27.0 needs this release. The template pins the Cloudly 33.17.3 image index code.foss.global/serve.zone/cloudly@sha256:700bb723fef408a6bf8079f643f9990247bffe6541403fd421d064ba8128a447 and keeps minOneboxVersion 33.8.0, so Onebox 33.7.0 and earlier still refuse the upgrade with App requires Onebox >= 33.8.0; current version is <version>. 1.27.0 differs from 1.26.0 only in the image and changelog. Cloudly 33.17.3 moves the data version from 0.28.0 to 0.30.0 through the data steps route-claim-absent-owners (0.29.0), which removes the stored nulls of absent owners from every route claim, and bounded-runtime-history (0.30.0), which deletes every archived deployment record: after the upgrade only the pre-upgrade backup keeps those records. The steps have no inverse and every Cloudly before 33.17.3 refuses the 0.30.0 data (DOWNGRADE_NOT_SUPPORTED), so every upgrade runs a data step at Cloudly's first start; an upgrade from 1.25.0 through 1.20.0 first runs the 0.25.0 to 0.28.0 steps and one from 1.19.0 or earlier runtime-log-attempts before them. Stop Cloudly and take a verified backup (onebox backup create cloudly) before upgrading; a rollback is onebox backup restore <backup-id> of that backup. The template keeps breaking, migrationRequired, backupBeforeUpgrade and requiresManualReview; Onebox enforces only minOneboxVersion; the other flags and the template changelog are the operator's. The App Store upgrade test now prepares the 1.27.0 upgrade from installs of 1.2.1 through 1.26.0 on Onebox 33.8.0, checks that 1.27.0 differs from 1.26.0 only in its image and changelog, and checks that Onebox 33.7.0 refuses it from 1.19.0 with that exact message. App Store 32.27.0 keeps @serve.zone/interfaces 32.42.0, so no other serve.zone package moves. deno.lock was re-resolved from https://registry.npmjs.org/ after a build and changes only the App Store entry, pinned by SHA-512. In pnpm-lock.yaml only the App Store entry changes, pinned by SHA-512.

    Maintenance

    • Release tooling: @git.zone/tsbuild 5.1.2 → 6.0.0 (TypeScript 7, 7.1.0-dev.20260928.1; the tsconfig uses none of the options TypeScript 7 removed). @types/node stays at 26.6.3 until 26.6.4 is seven days old; @git.zone/tsdeno stays on 1.x.
    Downloads
  • Onebox v33.13.0
    Release / build-and-release (push) Failing after 19m23s
    Stable

    philkunz released this 2026-10-07 14:59:10 +00:00 | 32 commits to main since this release

    2026-10-07 - 33.13.0

    Features

    • Bundle the Cloudly App Store template 1.26.0 for Cloudly 33.17.1 through @serve.zone/appstore 32.26.0, moved from 32.25.0 in package.json, pnpm-lock.yaml and the binary's deno.lock. Onebox reads the App Store from the catalog this package bundles, so onebox appstore upgrade cloudly --version 1.26.0 needs this release. The template pins the Cloudly 33.17.1 image index code.foss.global/serve.zone/cloudly@sha256:41ec10edac38281acd084c1e034bbd090a0f684a31d467b25c8787ab73d75fc5 and keeps minOneboxVersion 33.8.0, so Onebox 33.7.0 and earlier still refuse the upgrade with App requires Onebox >= 33.8.0; current version is <version>. 1.26.0 differs from 1.25.0 only in the image and changelog. Cloudly 33.17.0, which template 1.25.0 pins, crash-looped at its first start on a database holding Pallet-era nodes: its first data step cluster-node-hostname-intent (0.25.0 → 0.26.0) was refused before its first write, because it used the node and cluster models, which startup has not prepared while it runs the data steps. Cloudly 33.17.1 runs that step on the stored documents directly. The migration ledger does not advance past a failed step, so a 1.25.0 install whose first start failed stayed at data version 0.25.0 and upgrades to 1.26.0 normally. Cloudly 33.17.1 keeps the data steps of 33.17.0 from 0.25.0 to 0.28.0 (cluster-node-hostname-intent, deployment-operation-route-evidence, service-secret-target-predecessor), so every upgrade runs a data step at Cloudly's first start, which every Cloudly before 33.17.0 refuses (DOWNGRADE_NOT_SUPPORTED); an upgrade from 1.19.0 or earlier first runs runtime-log-attempts. Stop Cloudly and take a verified backup (onebox backup create cloudly) before upgrading; a rollback is onebox backup restore <backup-id> of that backup. Onebox enforces only minOneboxVersion; the other flags and the template changelog are the operator's. The App Store upgrade test now prepares the 1.26.0 upgrade from installs of 1.2.1 through 1.25.0 on Onebox 33.8.0, checks that 1.26.0 differs from 1.25.0 only in its image and changelog, and checks that Onebox 33.7.0 refuses it from 1.19.0 with that exact message. App Store 32.26.0 keeps @serve.zone/interfaces 32.42.0, so no other serve.zone package moves. deno.lock was re-resolved from https://registry.npmjs.org/ after a build and changes only the App Store entry, pinned by SHA-512. In pnpm-lock.yaml only the App Store entry changes, pinned by SHA-512.
    Downloads
  • Onebox v33.12.0
    Release / build-and-release (push) Failing after 25m9s
    Stable

    philkunz released this 2026-10-07 11:10:07 +00:00 | 34 commits to main since this release

    2026-10-07 - 33.12.0

    Features

    • Bundle the Cloudly App Store template 1.25.0 for Cloudly 33.17.0 through @serve.zone/appstore 32.25.0, moved from 32.24.0 in package.json, pnpm-lock.yaml and the binary's deno.lock. Onebox reads the App Store from the catalog this package bundles, so onebox appstore upgrade cloudly --version 1.25.0 needs this release. The template pins the Cloudly 33.17.0 image index code.foss.global/serve.zone/cloudly@sha256:177269c8044604f70c0a5c045479b36222876685a2b8bde70ee76e43e4568ab7 and keeps minOneboxVersion 33.8.0, so Onebox 33.7.0 and earlier still refuse the upgrade with App requires Onebox >= 33.8.0; current version is <version>. 1.25.0 differs from 1.24.0 only in the image and changelog. Cloudly 33.17.0 moves the data version from 0.25.0 to 0.28.0 through the forward-only steps cluster-node-hostname-intent, deployment-operation-route-evidence and service-secret-target-predecessor, so every upgrade, from 1.24.0 too, runs a data step at Cloudly's first start, which every Cloudly before 33.17.0 refuses (DOWNGRADE_NOT_SUPPORTED); an upgrade from 1.19.0 or earlier first runs runtime-log-attempts. Stop Cloudly and take a verified backup (onebox backup create cloudly) before upgrading; a rollback is onebox backup restore <backup-id> of that backup. Cloudly 33.17.0 lets a legacy import reserve: Cloudly 33.16.0 refused every tsdeploy import-legacy reserve ROUTE_UNAVAILABLE, and an import now takes over its legacy service's route claims while the cluster ingress keeps serving them. Cloudly also owns a node's hostname (setClusterNodeHostname, resetClusterNodeHostname, cloudly-worker-<name> by default) and routes a Pallet service by node id, so a rename moves no traffic; a routeless deployment records its empty route evidence when it succeeds; a cluster's designated ingress service cannot be deleted while designated; and a deleted service's secret target state goes with its row. Onebox enforces only minOneboxVersion; the other flags and the template changelog are the operator's. The App Store upgrade test now prepares the 1.25.0 upgrade from installs of 1.2.1 through 1.24.0 on Onebox 33.8.0, checks that 1.25.0 differs from 1.24.0 only in its image and changelog, and checks that Onebox 33.7.0 refuses it from 1.19.0 with that exact message. App Store 32.25.0 keeps @serve.zone/interfaces 32.42.0, so no other serve.zone package moves. deno.lock was re-resolved from https://registry.npmjs.org/ after a build and changes only the App Store entry, pinned by SHA-512. In pnpm-lock.yaml only the App Store entry changes, pinned by SHA-512.

    Maintenance

    • Release tooling: pnpm 12.8.1 → 12.8.2. @types/node stays at 26.6.3 until 26.6.4 is seven days old (2026-10-08 22:39 UTC); the @git.zone tools are current and tsdeno stays on its 1.x line.
    Downloads
  • Onebox v33.11.0
    Release / build-and-release (push) Failing after 13m18s
    Stable

    philkunz released this 2026-10-07 01:46:37 +00:00 | 37 commits to main since this release

    2026-10-07 - 33.11.0

    Features

    • Bundle the Cloudly App Store template 1.24.0 for Cloudly 33.16.0 through @serve.zone/appstore 32.24.0, moved from 32.23.0 in package.json, pnpm-lock.yaml and the binary's deno.lock. Onebox reads the App Store from the catalog this package bundles, so onebox appstore upgrade cloudly --version 1.24.0 needs this release. The template pins the Cloudly 33.16.0 image index code.foss.global/serve.zone/cloudly@sha256:d326dd0b5c195cb54b6688e6b82234ae3dfe517a8d3d57f532d9421a523c5763 and keeps minOneboxVersion 33.8.0, so Onebox 33.7.0 and earlier still refuse the upgrade with App requires Onebox >= 33.8.0; current version is <version>. 1.24.0 differs from 1.23.0 only in the image and changelog. Cloudly 33.16.0 keeps the data version 0.25.0, so an upgrade from 1.23.0, 1.22.0, 1.21.0 or 1.20.0 runs no data step; an upgrade from 1.19.0 or earlier still runs the forward-only step runtime-log-attempts at Cloudly's first start, which every Cloudly before 33.15.0 refuses (DOWNGRADE_NOT_SUPPORTED), so stop Cloudly and take a verified backup (onebox backup create cloudly) before upgrading, and a rollback is onebox backup restore <backup-id> of that backup. Cloudly 33.16.0 lets an administrator capture a legacy service's runtime attestation from a host observation (hostObservation): the capture needed a Coreflow session, which legacy hosts never have, and was always refused as LEGACY_ATTESTATION_RUNTIME_UNAVAILABLE. Cloudly now judges the observation, read at most 15 minutes before the capture, against the one root every replica runs, which its legacy tag need not still name, and its registry prune keeps an attested root until an import consumes it or the legacy service is retired; Cloudly 33.15.0 to 33.15.3 neither accept such an attestation for an import nor protect its root. Onebox enforces only minOneboxVersion; the other flags and the template changelog are the operator's. The App Store upgrade test now prepares the 1.24.0 upgrade from installs of 1.2.1 through 1.23.0 on Onebox 33.8.0, checks that 1.24.0 differs from 1.23.0 only in its image and changelog, and checks that Onebox 33.7.0 refuses it from 1.19.0 with that exact message. App Store 32.24.0 keeps @serve.zone/interfaces 32.42.0, so no other serve.zone package moves. deno.lock was re-resolved from https://registry.npmjs.org/ after a build and changes only the App Store entry, pinned by SHA-512. In pnpm-lock.yaml only the App Store entry changes, pinned by SHA-512.

    Maintenance

    • Release tooling: @git.zone/tstest 7.1.0 → 7.2.0; the lockfile drops the older duplicate copies of @git.zone/tsbundle 3.1.3, @push.rocks/smartspawn 3.0.4, @push.rocks/qenv 8.1.1, @push.rocks/smartconfig 6.2.5 and @push.rocks/smartshell 4.2.0 (their newer versions stay; build tooling only, deno.lock unchanged). @git.zone/tsdeno stays at 1.x (2.0.0 is its own migration). pnpm stays at 12.8.1 until 12.8.2 is seven days old (2026-10-07 01:15 UTC); @types/node stays at 26.6.3 until 26.6.4 is seven days old (2026-10-08 22:39 UTC).
    Downloads