Repository navigation
Conversation
Since 2026-10-20 the KeyPathTests xctest process has trapped (signal 5) in LauncherStoreTransactionTests.testQueuedEditsMergeWithoutLosingOtherMappings. Every suite after it in the bundle, including OverlayLayerRevealPolicyTests and PreferencesServicePersistenceTests, never ran. CI stayed green because KEYPATH_ALLOW_TEST_RUNNER_CRASH_SUCCESS accepted any signal crash with zero parsed failures, though it exists for crashes after the tests finish. - run-tests-safe.sh: the allowance now applies only when every started test case and every .xctest bundle finished. Otherwise it names the interrupted test and fails. On any signal crash it prints the triggering thread from the newest xctest crash report. - FaviconFetcher: no network fetch under tests. That test is the only one whose launcher edit warms a URL favicon, which fetched a live favicon and drew it with AppKit on the headless CI daemon; this is the suspected trap. - Contract test for the allowance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Review (diff only) The change is sound: a mid-bundle crash can no longer pass as a teardown crash. Two things to check:
Minor: 🤖 Generated with Claude Code |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 80c56df14d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| print_crash_report_excerpt() { | ||
| # A runner started as a LaunchDaemon may report to /Library instead of the user's folder. | ||
| local dirs=("${ORIGINAL_HOME:-$HOME}/Library/Logs/DiagnosticReports" /Library/Logs/DiagnosticReports) report | ||
| report=$(find "${dirs[@]}" -maxdepth 1 -name 'xctest*.ips' -newermt "@$TEST_START_SECONDS" 2>/dev/null | sort | tail -n 1) |
There was a problem hiding this comment.
Make crash-report discovery tolerate missing directories
If either DiagnosticReports directory is absent or unreadable, this assignment returns a nonzero status and terminates the runner because the script enables set -euo pipefail. Bash's help set describes -e as “Exit immediately if a command exits with a non-zero status.” Both signal-crash branches call this function unconditionally, so an optional diagnostic lookup prevents the interrupted-test check and the explicitly enabled teardown-crash allowance from running, even if the other directory contains a usable report. Reproducing the extracted function with a nonexistent report directory exits before the fallback message. Filter out unavailable directories or explicitly tolerate discovery errors so missing diagnostics cannot determine the test result.
Useful? React with 👍 / 👎.
|
Local evidence (MacBook Air, interactive GUI session), 2026-10-25. This is the full suite on current master
So the trap doesn't reproduce in a logged-in GUI session with the same test. That fits the headless-runner explanation, where the URL favicon fetch and AppKit drawing happen under the system LaunchDaemon, but it doesn't prove it. The CI run with this PR remains the real check. 🤖 Generated with Claude Code |
Root cause
Since 2026-10-20 (between run 39469912007 at 17:53Z, clean, and run 39509801293 at 22:40Z), the
KeyPathTestsxctest process traps with signal 5 every run inLauncherStoreTransactionTests.testQueuedEditsMergeWithoutLosingOtherMappings.OverlayLayerRevealPolicyTestsandPreferencesServicePersistenceTestsfrom Overlay setting: show when a layer is active #1337.KEYPATH_ALLOW_TEST_RUNNER_CRASH_SUCCESS=1passes any signal crash with zero parsed failures. Run 40119737918 loggedAllowed SwiftPM-wrapped test runner signal crash after 3201 parsed passes. The allowance was meant for crashes after the tests finish, not in the middle.Changes
Scripts/run-tests-safe.sh:.xctestbundle finished. Otherwise it fails and names the interrupted test..ipsreport (user and/LibraryDiagnosticReports).Interrupted test: -[KeyPathTests.LauncherStoreTransactionTests testQueuedEditsMergeWithoutLosingOtherMappings], and the clean 39342659139 log passes.FaviconFetcher: no network fetch under tests.DeploymentScriptContractTests.Verification
Not yet run in CI. Both self-hosted runners (
keypath-mini,keypath-mini-2) are offline, because the mini has been off the tailnet since about 2026-10-24.Test Suite 'OverlayLayerRevealPolicyTests' passedandTest Suite 'PreferencesServicePersistenceTests' passedlines appear.The local review gate couldn't authenticate, so the remote review gate is selected. Don't merge until GitHub
claude-reviewpasses and the CI evidence above is in.🤖 Generated with Claude Code