ISSUE-20260923-13 — bounded open retry handback
Completed 2026-09-23 23:07 EDT on rdmsm4x, isolated handoff branch
codex/open-600-retry-20260923, starting at
dd0b69a2f5089fc5f31875fd2ea4b443ee0b4434.
Commits and reasons
6da7d83—fix(release): retry open to tolerate stale LaunchServices records. Explicit path:script/build_and_run.sh. Preserve the immediate initial open, then retry on any nonzero exit up to three times after 0.5, 1, and 2 seconds (four calls maximum). Log each attempt, exit status, and combined stdout/stderr. Preserve the final failing exit status and explain the likely LaunchServices -600 stale-process cause. Header identifies ISSUE-20260923-13, 2026-09-23 gate run 4.45a3286—test(release): prove open retries recover and fail closed. Explicit path: executableTests/ScriptTests/open_app_retry_test.sh. Extract only the actual open_app function. A test-only Bash function named/usr/bin/openforwards to a private PATH stub; production retains its absolute executable path. Stop and sleep are stubbed. Assert call count, one stop call, exact delay ordering, diagnostics, recovery, and permanent-failure propagation.
Verification
bash -n script/build_and_run.sh— exit 0.bash -n Tests/ScriptTests/open_app_retry_test.sh— exit 0.bash Tests/ScriptTests/open_app_retry_test.sh— exit 0, 2 controls passed.git diff --check— exit 0.- Reviewed base-to-HEAD diff: only the header and open_app changed in the build script. stop_running_app, kill semantics, path-anchored process matching, metadata equality, gitDirty, and architecture checks are unchanged.
- Neither release script was run. No real app was launched or stopped by the test; no dist/ access. No Standard/trust-chain files changed. No Swift source files added. Swift suites and live release QA were not run for this bounded shell-only lane.
- No push. No integration, deployment, or real LaunchServices recovery is claimed.
Actual policy-test output
--- fail_twice (exit 0) ---
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 1/4)
open attempt 1/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Retrying open in 0.5 seconds
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 2/4)
open attempt 2/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Retrying open in 1 seconds
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 3/4)
stub open succeeded
returned successfully
PASS: fail_twice
--- always_fail (exit 7) ---
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 1/4)
open attempt 1/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Retrying open in 0.5 seconds
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 2/4)
open attempt 2/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Retrying open in 1 seconds
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 3/4)
open attempt 3/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Retrying open in 2 seconds
Opening /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app (attempt 4/4)
open attempt 4/4 failed (exit 7): _LSOpenURLsWithCompletionHandler() failed with error -600.
Failed to open /private/tmp/rtty-open-retry-test.PnBoS7/Not A Real App.app after 4 attempts (3 retries). LaunchServices error -600 can mean it still holds the stopped app's dead process record.
PASS: always_fail
PASS: 2 controls; no real app launched; no dist/ access
Handoff boundaries
The stage 8 re-open in qa_release.sh is unchanged, as requested scope covers build_and_run.sh open_app only. The three specified delays are three retries after the initial attempt, not three total calls. No implementation questions remain.
The handoff repository owns these changes; the Claude lead retains integration and release ownership. Reversal is by reverting the two commits, not altering a live app. The original implementation remains in the base commit above.
Durable record: this HANDBACK.md contains the complete change and
verification record. Apple Notes record saved in the rdmsm4x folder as
rdmsm4x-changelog-20260923-2307-rtty-open-retry (note
p76968). Archive:
/Users/richh/dev/LLM/Claude/changelogs/rdmsm4x-changelog-20260923-2307-rtty-open-retry.md.
The inbox read reported a sandbox denial updating its seen marker; no
acknowledgement is claimed.