@ouro.bot/cli 0.1.0-alpha.803 → 0.1.0-alpha.804

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/changelog.json CHANGED
@@ -1,6 +1,12 @@
1
1
  {
2
2
  "_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
3
3
  "versions": [
4
+ {
5
+ "version": "0.1.0-alpha.804",
6
+ "changes": [
7
+ "Complete safe Sanctuary rollback work before reporting container cleanup failure."
8
+ ]
9
+ },
4
10
  {
5
11
  "version": "0.1.0-alpha.803",
6
12
  "changes": [
@@ -2285,6 +2285,8 @@ ouro-butler-rollback
2285
2285
  :
2286
2286
  else
2287
2287
  PRODUCTION_PREPARATION_STATUS=$?
2288
+ PRODUCTION_PREPARATION_CLEANUP_STATUS=0
2289
+ PRODUCTION_PREPARATION_RECOVERY_SAFE=true
2288
2290
  /usr/local/bin/node "$STAGED_DOCKERMAN_TRANSACTION" verify-jellyfin >/dev/null
2289
2291
  if docker container inspect ouro-butler >/dev/null 2>&1; then
2290
2292
  if docker container inspect ouro-butler-rollback >/dev/null 2>&1; then
@@ -2293,13 +2295,20 @@ ouro-butler-rollback
2293
2295
  test "$CURRENT_ROLLBACK_IMAGE_ID" = "$ROLLBACK_IMAGE_ID"
2294
2296
  docker rm --force ouro-butler-rollback >/dev/null 2>&1 || true
2295
2297
  fi
2296
- ! docker container inspect ouro-butler-rollback >/dev/null 2>&1 || exit 1
2298
+ if docker container inspect ouro-butler-rollback >/dev/null 2>&1; then
2299
+ PRODUCTION_PREPARATION_CLEANUP_STATUS=1
2300
+ if test "$(docker inspect --format '{{.State.Running}}' ouro-butler-rollback)" != false; then
2301
+ PRODUCTION_PREPARATION_RECOVERY_SAFE=false
2302
+ fi
2303
+ fi
2297
2304
  rollback_sanctuary_bundle_if_pending "$IMAGE_ID"
2298
- assert_update_source "$ROLLBACK_IMAGE_ID" "$AUDIT_RUNNER_IMAGE_ID"
2299
- start_only_butler_for_recovery
2300
- wait_butler_ready ouro-butler
2301
- enable_butler_autostart
2302
- finalize_sanctuary_bundle_rollback_if_retained "$IMAGE_ID"
2305
+ if test "$PRODUCTION_PREPARATION_RECOVERY_SAFE" = true; then
2306
+ assert_update_source "$ROLLBACK_IMAGE_ID" "$AUDIT_RUNNER_IMAGE_ID"
2307
+ start_only_butler_for_recovery
2308
+ wait_butler_ready ouro-butler
2309
+ enable_butler_autostart
2310
+ finalize_sanctuary_bundle_rollback_if_retained "$IMAGE_ID"
2311
+ fi
2303
2312
  elif docker container inspect ouro-butler-rollback >/dev/null 2>&1; then
2304
2313
  docker stop ouro-butler-rollback >/dev/null 2>&1 || true
2305
2314
  test "$(docker inspect --format '{{.Image}}' ouro-butler-rollback)" = "$ROLLBACK_IMAGE_ID"
@@ -2312,14 +2321,17 @@ ouro-butler-rollback
2312
2321
  finalize_sanctuary_bundle_rollback_if_retained "$IMAGE_ID"
2313
2322
  fi
2314
2323
  /usr/local/bin/node "$STAGED_DOCKERMAN_TRANSACTION" rollback >/dev/null
2324
+ if test "$PRODUCTION_PREPARATION_CLEANUP_STATUS" -ne 0; then
2325
+ exit "$PRODUCTION_PREPARATION_CLEANUP_STATUS"
2326
+ fi
2315
2327
  (exit "$PRODUCTION_PREPARATION_STATUS")
2316
2328
  fi
2317
- Preparation failure therefore either restores the still-named exact production after removing any stale rollback, or renames the exact stopped rollback back. Both paths revalidate and start the old container, wait within the fixed bound, restore production-only autostart atomically, and return the original failure.
2329
+ Preparation failure therefore either restores the still-named exact production after attempting to remove any stale rollback, or renames the exact stopped rollback back. Both safe paths revalidate and start the old container, wait within the fixed bound, restore production-only autostart atomically, and return the original failure. If stale rollback removal fails, restore production only when the leftover is proven stopped; otherwise leave both containers untouched, roll back the journals, and return the cleanup failure for repair.
2318
2330
  If neither exact container can be found, the failure returns with Butler autostart disabled.
2319
2331
  Do not start a target-image daemon between the production rename and final production activation. The exact-image static audit, download-queue readiness, and vault-backed Telegram identity check have already passed before autostart or live-container changes.
2320
2332
  Provider and complete daemon readiness are exercised only by the transactional production activation below. Its failure arm restores and revalidates the exact prior production, so a disposable daemon cannot reconcile or claim live external-event state before cutover.
2321
2333
  Create and activate production from the same exact image ID and exact authority in one explicit conditional so `set -eu` cannot exit before rollback. Only a successful create, effective audit, start, stopped-rollback assertion, and bounded readiness wait may enable production autostart.
2322
- On failure, capture the activation status, remove only a partially created new production container, restore and audit the stopped rollback against its exact old image ID, prove it ready, restore production-only autostart atomically, and return the original failure:
2334
+ On failure, capture the activation status, remove only a partially created new production container, restore and audit the stopped rollback against its exact old image ID, prove it ready, restore production-only autostart atomically, and return the original failure. If the partial target cannot be removed, preserve its matching target bundle and retained migration receipt, roll back the DockerMan journal without attempting the colliding rename, then return the cleanup failure:
2323
2335
  if test "$(inspect_registry_manifest_digest "$VERSION_IMAGE")" = "$MANIFEST_DIGEST" \
2324
2336
  && test "$(docker image inspect --format '{{.Id}}' "$VERSION_IMAGE")" = "$IMAGE_ID" \
2325
2337
  && docker create --pull=never --name ouro-butler --network host --restart unless-stopped --user 10001:10001 \
@@ -2341,6 +2353,7 @@ ouro-butler-rollback
2341
2353
  :
2342
2354
  else
2343
2355
  PRODUCTION_ACTIVATION_STATUS=$?
2356
+ PRODUCTION_ACTIVATION_CLEANUP_STATUS=0
2344
2357
  /usr/local/bin/node "$STAGED_DOCKERMAN_TRANSACTION" verify-jellyfin >/dev/null
2345
2358
  if docker container inspect ouro-butler >/dev/null 2>&1; then
2346
2359
  docker stop ouro-butler >/dev/null 2>&1 || true
@@ -2348,17 +2361,24 @@ ouro-butler-rollback
2348
2361
  test "$PARTIAL_PRODUCTION_IMAGE_ID" = "$IMAGE_ID"
2349
2362
  docker rm --force ouro-butler >/dev/null 2>&1 || true
2350
2363
  fi
2351
- ! docker container inspect ouro-butler >/dev/null 2>&1 || exit 1
2352
- CURRENT_ROLLBACK_IMAGE_ID=$(docker inspect --format '{{.Image}}' ouro-butler-rollback)
2353
- test "$CURRENT_ROLLBACK_IMAGE_ID" = "$ROLLBACK_IMAGE_ID"
2354
- migrate_sanctuary_package_managed_bundle "$IMAGE_ID" rollback
2355
- docker rename ouro-butler-rollback ouro-butler
2356
- assert_update_source "$ROLLBACK_IMAGE_ID" "$AUDIT_RUNNER_IMAGE_ID"
2357
- start_only_butler_for_recovery
2358
- wait_butler_ready ouro-butler
2359
- enable_butler_autostart
2360
- migrate_sanctuary_package_managed_bundle "$IMAGE_ID" finalize-rollback
2364
+ if docker container inspect ouro-butler >/dev/null 2>&1; then
2365
+ PRODUCTION_ACTIVATION_CLEANUP_STATUS=1
2366
+ fi
2367
+ if test "$PRODUCTION_ACTIVATION_CLEANUP_STATUS" -eq 0; then
2368
+ CURRENT_ROLLBACK_IMAGE_ID=$(docker inspect --format '{{.Image}}' ouro-butler-rollback)
2369
+ test "$CURRENT_ROLLBACK_IMAGE_ID" = "$ROLLBACK_IMAGE_ID"
2370
+ migrate_sanctuary_package_managed_bundle "$IMAGE_ID" rollback
2371
+ docker rename ouro-butler-rollback ouro-butler
2372
+ assert_update_source "$ROLLBACK_IMAGE_ID" "$AUDIT_RUNNER_IMAGE_ID"
2373
+ start_only_butler_for_recovery
2374
+ wait_butler_ready ouro-butler
2375
+ enable_butler_autostart
2376
+ migrate_sanctuary_package_managed_bundle "$IMAGE_ID" finalize-rollback
2377
+ fi
2361
2378
  /usr/local/bin/node "$STAGED_DOCKERMAN_TRANSACTION" rollback >/dev/null
2379
+ if test "$PRODUCTION_ACTIVATION_CLEANUP_STATUS" -ne 0; then
2380
+ exit "$PRODUCTION_ACTIVATION_CLEANUP_STATUS"
2381
+ fi
2362
2382
  (exit "$PRODUCTION_ACTIVATION_STATUS")
2363
2383
  fi
2364
2384
  migrate_sanctuary_package_managed_bundle "$IMAGE_ID" commit
@@ -1,5 +1,5 @@
1
1
  {
2
- "runtimeVersion": "0.1.0-alpha.803",
2
+ "runtimeVersion": "0.1.0-alpha.804",
3
3
  "bundleSchemaVersion": 3,
4
4
  "lastUpdated": "2026-09-03T00:00:00.000Z"
5
5
  }
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0"?>
2
2
  <Container version="2">
3
3
  <Name>ouro-butler</Name>
4
- <Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.803</Repository>
4
+ <Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.804</Repository>
5
5
  <Registry>https://github.com/ourostack/ouroboros/pkgs/container/ouroboros-butler</Registry>
6
6
  <Network>host</Network>
7
7
  <Shell>sh</Shell>
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.803",
3
+ "version": "0.1.0-alpha.804",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@ouro.bot/cli",
9
- "version": "0.1.0-alpha.803",
9
+ "version": "0.1.0-alpha.804",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.78.0",
12
12
  "@azure/identity": "^4.13.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.803",
3
+ "version": "0.1.0-alpha.804",
4
4
  "engines": {
5
5
  "node": ">=22"
6
6
  },