{ "status": "released", "productVersion": "3.22.0.20261002.2", "source": { "backend": "e3f12240c4a186a55ed2bc9a5afcb71902004a55", "backendBaseline": "179d4dae8c9400a773f7f9d92a397039c39ef572", "web": "56e51ea55dcc281ade91bd0e6438c5fc6a617c25", "webBaseline": "340c47f820a039d409ffcc4f464829acc973a171" }, "images": { "server-main": "sha256:6825def1b7bf252eee477b34d3ddc0317e691f0787ea3f300793c4d272a3b491", "watchtower": "sha256:6afd62a208687bb4840b3b8131e1461dee7033989e14e28b6d69082839eaf410", "updater": "sha256:bbaddb598618ceaaf6696f6c5fe19daf564d983039b70d36a4196cc4aaca385a", "web": "sha256:a287db622d13a706725520d3a9864f986b8854630d198fce3373a8e7f1cfe3b0", "ws-gateway": "sha256:a2b5fb67384c7f0eca7c7a768b5deacb4c0d2195dfbeb6e16ef40d6dc097bf25" }, "watchtowerVersion": "1.22.3", "acceptance": { "oldWatchtower": { "status": "passed", "beforeVersion": "3.22.0.20261002.1", "afterVersion": "3.22.0.20261002.2", "uiElapsedSeconds": 61, "details": [ "old backend jobApi=false", "real browser confirmation", "elapsed32s and restart message screenshot", "refresh resumes original update", "core images and health verified" ], "evidenceDirectory": "online-update-progress-20261002/acceptance" }, "newWatchtower": { "status": "passed", "beforeVersion": "3.22.0.20261002.1", "afterVersion": "3.22.0.20261002.2", "uiElapsedSeconds": 43, "jobId": "wt-91612f117537604c18fc41bf214d06a8b0aeaa4956b2c42aad738d657c5f369a", "details": [ "POST async update accepted and scan started", "SSE endpoint observed through public browser", "Mongo job stages persisted", "history confirms completion after main restart", "refresh resumes original task", "core images and health verified" ], "evidenceDirectory": "online-update-progress-20261002/acceptance" }, "managedUpdater": { "status": "passed", "beforeVersion": "3.22.0.20261002.1", "afterVersion": "3.22.0.20261002.2", "uiElapsedSeconds": 53, "jobId": "154b6781-dd24-434d-94a5-4bf59122c0bb", "failureRecoveryJobId": "d0f02915-1cbe-4063-94c6-e9d749aaf2d7", "failureRecoveryUiElapsedSeconds": 154, "details": [ "all six stages persisted with timestamps", "real browser confirmation and refresh recovery", "main service restart queries recover", "updater restart during intentional HTTP503 health failure resumes same task", "failed candidate rolled back to A image ids and A version", "new job then updates real formal B digests and healthy services" ], "evidenceDirectory": "online-update-progress-20261002/acceptance", "failureFixtureDigest": "sha256:deddc80bee5a4123dc62d1598a34660ad4f54b8f50f3968fbf4b1844b058e11f" } }, "production": { "host": "101.200.186.210", "mode": "legacy_watchtower", "status": "passed", "beforeVersion": "3.22.0.20260930.3", "afterVersion": "3.22.0.20261002.2", "backupPath": "/home/admin/easyai/data/deployment-backups/online-update-progress-20261002", "iceConfigUnchangedSha256": "1427d181c5d405278e7b9b099379679a91d408108b6737c6cff2ed978f88acc1", "health": { "main": "ok", "web": "ok", "gateway": "ok", "watchtower": "ok", "coreRestarts": 0 }, "interfaces": { "eventsWithUpdateToken": 401, "eventsWithIndependentToken": 200, "history": 200, "statusBeforeFirstScan": 204, "livez": 200, "readyz": 200, "startupz": 200, "hostPortPublished": false }, "publicLoginPage": "passed", "updaterInstalled": false }, "testBackup": "/root/easyai/update-backups/online-update-progress-20261002", "validation": [ { "check": "frontend real mounted components and full 30s HTTP regression", "passed": true, "durationSeconds": 49.42 }, { "check": "MongoDB 4.4 and real HTTP/SSE task integration plus existing backend tests", "passed": true, "durationSeconds": 2.21 }, { "check": "backend production compile", "passed": true, "durationSeconds": 21.02 }, { "check": "frontend production build", "passed": true, "durationSeconds": 441.82 }, { "check": "Bash and PowerShell security initialization and migration", "passed": true }, { "check": "bash scripts/test-security-env.sh", "exitCode": 0, "durationSeconds": 0.54 }, { "check": "bash scripts/test-update-env-migrations.sh", "exitCode": 0, "durationSeconds": 0.41 }, { "check": "bash scripts/test-deployment-public-url.sh", "exitCode": 0, "durationSeconds": 2.03 }, { "check": "pwsh -NoProfile -File scripts/Test-SecurityEnv.ps1", "exitCode": 0, "durationSeconds": 0.57 }, { "check": "python3 scripts/test-start-ps1-env.py", "exitCode": 0, "durationSeconds": 0.02 } ], "rollback": "Restore recorded immutable core image digests and Compose backup, preserve business volumes and data/update-state; synchronize Watchtower token configuration before restoring its image. Do not re-submit unresolved update jobs.", "latestPromotion": { "status": "passed", "allDigestsMatchCandidate": true }, "testRestore": { "status": "passed", "configFilesUnchanged": true, "version": "3.22.0.20260930.3", "businessVolumesAndUpdateStatePreserved": true }, "runtimeBase": { "server-main": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server@sha256:8493e5a4c82f6564d86925f4ab37061f6e6e3d9a6bb88db5fe5d25d3a7b7835b", "dependenciesMatchFormalBaseline": true }, "versionCatalog": { "defaultAddress": "https://openapi.51easyai.com", "observedVersion": "3.22.0.20260930.3", "status": "awaiting_user_scope_confirmation", "reason": "Version service is on a different production host from the explicitly requested 101.200.186.210" }, "releasedAt": "2026-10-02T19:45:00+08:00" }