[Runtime release] Preserve failed WebUI installer command status across retries #54

Closed
opened 2026-09-08 03:30:53 +02:00 by zemion · 1 comment
Owner

Found during the 0.1.45 release preparation, while reviewing the legacy runtime WebUI installer. This path is not used by the strict disposable Git-release verification or signed catalog verification. Runtime publication is already held by #52.

In tools/release/install-webui-release-dependencies.sh, retry() assigns status=$? after an if command with no else. When the attempted command fails, the if compound command returns zero, so three failed attempts can incorrectly return success. A bounded shell-only reproduction of the exact helper with false as the command and sleep stubbed out confirmed exit 0. No npm install, Git clone, application, delivery or runtime mutation was involved in the reproduction.

Acceptance:

  • Capture the attempted command exit status in its failure branch and return the final nonzero value after exhausting retries.
  • Preserve successful early termination and bounded backoff.
  • Add isolated regression tests for immediate success, success on a later attempt, and exhaustion preserving a distinctive nonzero exit code. Tests should not sleep or access the network.
  • Verify callers stop on failure under set -e; update the owning installer runbook.
  • Before lifting the runtime hold, separately review the historical legacy-peer-deps workaround against the now-repaired package facades. Do not use a peer-dependency bypass for strict release verification.

No policy decision is needed for the exit-status repair. It remains a follow-up to the frozen source/package release candidate, not a claim that an affected runtime was published.

Found during the 0.1.45 release preparation, while reviewing the legacy runtime WebUI installer. This path is not used by the strict disposable Git-release verification or signed catalog verification. Runtime publication is already held by #52. In tools/release/install-webui-release-dependencies.sh, retry() assigns status=$? after an if command with no else. When the attempted command fails, the if compound command returns zero, so three failed attempts can incorrectly return success. A bounded shell-only reproduction of the exact helper with false as the command and sleep stubbed out confirmed exit 0. No npm install, Git clone, application, delivery or runtime mutation was involved in the reproduction. Acceptance: - Capture the attempted command exit status in its failure branch and return the final nonzero value after exhausting retries. - Preserve successful early termination and bounded backoff. - Add isolated regression tests for immediate success, success on a later attempt, and exhaustion preserving a distinctive nonzero exit code. Tests should not sleep or access the network. - Verify callers stop on failure under set -e; update the owning installer runbook. - Before lifting the runtime hold, separately review the historical legacy-peer-deps workaround against the now-repaired package facades. Do not use a peer-dependency bypass for strict release verification. No policy decision is needed for the exit-status repair. It remains a follow-up to the frozen source/package release candidate, not a claim that an affected runtime was published.
Author
Owner

Implemented, verified and pushed — 2026-09-08

Available on remote main in commit 9554657bb513. This is an unreleased follow-up, not part of the frozen 0.1.45 package composition. No version or tag changed; no runtime, database or live-provider operation was performed.

The retry helper now captures the attempted command's status in its failure branch, returns the final nonzero status on exhaustion, and preserves early success and bounded 10/20-second backoff. The actual installer is exercised at all three retry call sites by 12 isolated stage/scenario combinations; no network, real sleep or real npm cache mutation is involved. Tests prove caller termination under set -e and were demonstrated to fail before the fix.

The regression is wired into check-focused.sh and the installer CI workflow. EN/DE operator guidance documents partial-work behavior, troubleshooting and the unchanged runtime hold. The combined installer/deployment suite passed 48 tests on Python 3.12 and 3.13; three documentation checks also passed. The complete workspace focused gate passed, including 63 production WebUI module combinations and 213 browser cases.

Closing the exit-status repair. The historical --legacy-peer-deps review and runtime-image remediation remain prerequisites under #52; this does not lift that hold or claim strict dependency verification uses this legacy installer. Gitea dependency audit 1435 and installer CI 1436 passed for this exact commit, including the new retry-test step. The broader security audit is tracked separately in 1437; this closure does not assert its completion or a security certification.

<!-- govoplan-small-fix-closure-20260908-v1 --> ## Implemented, verified and pushed — 2026-09-08 Available on remote `main` in [commit `9554657bb513`](https://git.add-ideas.de/GovOPlaN/govoplan/commit/9554657bb513e410bcf2e193bb4d766aec2a374e). This is an **unreleased follow-up**, not part of the frozen 0.1.45 package composition. No version or tag changed; no runtime, database or live-provider operation was performed. The retry helper now captures the attempted command's status in its failure branch, returns the final nonzero status on exhaustion, and preserves early success and bounded 10/20-second backoff. The actual installer is exercised at all three retry call sites by 12 isolated stage/scenario combinations; no network, real sleep or real npm cache mutation is involved. Tests prove caller termination under `set -e` and were demonstrated to fail before the fix. The regression is wired into `check-focused.sh` and the installer CI workflow. EN/DE operator guidance documents partial-work behavior, troubleshooting and the unchanged runtime hold. The combined installer/deployment suite passed 48 tests on Python 3.12 and 3.13; three documentation checks also passed. The complete workspace focused gate passed, including 63 production WebUI module combinations and 213 browser cases. Closing the exit-status repair. The historical `--legacy-peer-deps` review and runtime-image remediation remain prerequisites under #52; this does not lift that hold or claim strict dependency verification uses this legacy installer. Gitea dependency audit [1435](https://git.add-ideas.de/GovOPlaN/govoplan/actions/runs/1435) and installer CI [1436](https://git.add-ideas.de/GovOPlaN/govoplan/actions/runs/1436) passed for this exact commit, including the new retry-test step. The broader security audit is tracked separately in [1437](https://git.add-ideas.de/GovOPlaN/govoplan/actions/runs/1437); this closure does not assert its completion or a security certification.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan#54