R32 — yes | sdkmanager under pipefail can report a successful install as failure #41

Closed
opened 2026-08-23 03:44:54 +00:00 by JMR-dev · 1 comment
JMR-dev commented 2026-08-23 03:44:54 +00:00 (Migrated from github.com)

Finding R32 from the overnight max-effort review (Fable lead, Opus sub-agents). Full report: scratchpad/overnight/REVIEW.md.

R32 — yes | sdkmanager under pipefail can report a successful install as failure

severity: low
verdict: PLAUSIBLE
where: tools/local-emulator/run-e2e.sh:133 (main) / :202 (branch)
scenario: With pipefail, sdkmanager exiting 0 closes the pipe, yes dies SIGPIPE (141), pipeline reports 141 -> "FAILED to install" for a package that installed. Newly load-bearing: the branch adds two packages no existing checkout has, making the install path the normal path.
evidence: Shell semantics; timing-dependent, not executed.
fix: sdkmanager --install "$pkg" < /dev/null with licences accepted separately, or ignore the left-hand status.
risk: Licence handling can hang a fresh SDK; test on a machine with an uninstalled image.


Cut: below — held for manual review: product decision, CI/workflow, hardware, or PLAUSIBLE verdict.

🤖 Generated with Claude Code

_Finding **R32** from the overnight max-effort review (Fable lead, Opus sub-agents). Full report: `scratchpad/overnight/REVIEW.md`._ ### R32 — yes | sdkmanager under pipefail can report a successful install as failure severity: low verdict: PLAUSIBLE where: tools/local-emulator/run-e2e.sh:133 (main) / :202 (branch) scenario: With pipefail, sdkmanager exiting 0 closes the pipe, yes dies SIGPIPE (141), pipeline reports 141 -> "FAILED to install" for a package that installed. Newly load-bearing: the branch adds two packages no existing checkout has, making the install path the normal path. evidence: Shell semantics; timing-dependent, not executed. fix: sdkmanager --install "$pkg" < /dev/null with licences accepted separately, or ignore the left-hand status. risk: Licence handling can hang a fresh SDK; test on a machine with an uninstalled image. --- **Cut:** `below` — held for manual review: product decision, CI/workflow, hardware, or PLAUSIBLE verdict. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
JMR-dev commented 2026-08-23 04:19:13 +00:00 (Migrated from github.com)

Upgraded from PLAUSIBLE to CONFIRMED — reproduced directly.

The emulator-tooling stream built a stub harness and demonstrated it: yes | sdkmanager … under set -o pipefail returns 141 (yes killed by SIGPIPE) even when sdkmanager itself exits 0. ensure_avd therefore printed "FAILED to install" for a successful install.

Because pipefail takes the last non-zero status, this should bite nearly every install — and tools/api-37-emulator makes the install path the normal path, so the blast radius grew tonight.

Still held for manual review, on a different ground than before. It is no longer uncertain; it is unverifiable here. The fix has to handle sdkmanager's licence prompt, and validating that needs a machine with the image uninstalled — this one has every image already installed, so a green run would prove nothing.

Labels updated: plausible → confirmed. Cut unchanged (backlog).

**Upgraded from PLAUSIBLE to CONFIRMED — reproduced directly.** The emulator-tooling stream built a stub harness and demonstrated it: `yes | sdkmanager …` under `set -o pipefail` returns **141** (`yes` killed by SIGPIPE) even when `sdkmanager` itself exits 0. `ensure_avd` therefore printed "FAILED to install" for a **successful** install. Because `pipefail` takes the last non-zero status, this should bite **nearly every install** — and `tools/api-37-emulator` makes the install path the normal path, so the blast radius grew tonight. **Still held for manual review**, on a different ground than before. It is no longer uncertain; it is unverifiable *here*. The fix has to handle sdkmanager's licence prompt, and validating that needs a machine with the image uninstalled — this one has every image already installed, so a green run would prove nothing. Labels updated: `plausible` → `confirmed`. Cut unchanged (`backlog`).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMediaConverter#41