Repository navigation
ci: attribution scores a lone suspect and reports app-host crashes apart - #14952
Conversation
The main-regression attribution blamed #14922, the only pull request in its range, for a test the app host crashed under. The crash had hit every full-suite run since 02:04Z under a different test. The only pull request in the range is now scored like any other and left unattributed, with the reason, when its diff reaches no suite. A changed string catalog entry counts as a changed string. A failure a restarted batch recorded is reported as the app host crashing while running it, with the crash message from the log or the diagnostics artifact to read, kept out of the bisect data, and pinged only when the diff reaches the suite. A crash the baseline or a skipped run already had is listed once as recurring and pings nobody. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (5)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
|
@coderabbitai review |
|
|
@coderabbitai review |
|
Review of #14952: every failure of a restarted batch was treated as the crash's, so a recurring crash hid genuine assertion failures from the table, the pings and the bisect data. Only the test the live log saw start and never finish is the crash's now; the rest stay regressions. A crash is recurring only when earlier runs showed every one of its signatures, and a new crash's victims go into the bisect data with a crash flag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@coderabbitai review |
|
|
Merge receipt for |
648d5c1 Add a Paste Last Screenshot action with an unbound shortcut (manaflow-ai#14955) ff61677 ci: avoid partial blobs in catch-up merges (manaflow-ai#15023) 4d0d112 ci: retry transient catch-up GraphQL failures (manaflow-ai#15021) 212e808 ci: attribution scores a lone suspect and reports app-host crashes apart (manaflow-ai#14952) 4cabdf4 test: settle the window before measuring the unread sidebar-row invalidation (manaflow-ai#14568) 12ec99b Add a release-media capture tool for changelog screenshots and clips (manaflow-ai#15010) ee2cda0 Backfill Unreleased changelog and draft next release cards (manaflow-ai#14999) be4adf8 Show a brief notice when Cmd+V fails on an oversized image or a timeout (manaflow-ai#14953) 23d22d7 ci: an owned pool the run starts on now beats an earlier one it queues on (manaflow-ai#14993) 05d0190 ci: catch-up posts once per head, says less, and merges inserted declarations (manaflow-ai#15018) 4ee4b21 ci: fail stalled Swift package tests instead of waiting out the job timeout (manaflow-ai#14997) 9ce512a merge-main: run local guards only when asked (manaflow-ai#15016) d60108a ci: clear test-e2e's fixed DerivedData with clear-dirs.sh (manaflow-ai#14994) 1d7895e ci: run the shell and CLI no-socket lanes in parallel (manaflow-ai#14990) 6e7d25f Honor macOS Differentiate Without Color, Increase Contrast and Reduce Transparency (manaflow-ai#14991) 966b355 Stop interrupting focused work: sidebar jumps, Computer Use focus steal, quit dialog on logout (manaflow-ai#14961) e1f1cb2 Strip control characters from feedback attachment filenames (manaflow-ai#14783) 0758c9f test: find the onboarding window the test presented, not a leftover (manaflow-ai#15015) b35c540 fix(spm): resolve GhosttyKit/GhosttyRuntimeTestStubs target name collisions (manaflow-ai#10569) ef33bed Map .purs artifacts to the Haskell highlight.js grammar (manaflow-ai#14202) e2a167a Highlight Elixir and Erlang files in the file editor (manaflow-ai#13732) 972c449 fix: wrap Linux browser download card label (manaflow-ai#11157) f563884 Add Aside to browser data import detection (manaflow-ai#13379) 091d0ea Add cmux send --paste and hint at it for large multi-line sends (manaflow-ai#14937) 3ffcdbb test(ios): keep folder-tap stat tests off the real 2 s deadline (manaflow-ai#15017) 68d3936 test: keep CmuxTerminal pasteboard tests off the cooperative pool (manaflow-ai#15006)
The main-regression attribution bot told #14922 that it broke
RecoverableMainWindowLifecycleTests/closingRecoveredWindowUsesNormalCloseFinalization()in main run 36307768440. #14922 changed two localized values and two web tests. The test did not regress: the app host aborted under it (Cannot form weak reference to instance ... NSKVONotifying_NSWindow, fixed by #14925), xcodebuild recorded the test in flight as failed, and the same crash had hit every full-suite run since 02:04Z under a different test each time.Three changes to
scripts/ci/main_regression_attribution.py:test_impact.py) or changes code or strings the suite names (reverse_test_impact.py). At score 0 the failure is listed as unattributed with the reason: the lone PR could not be diffed, changes nothing the app host loads, or does not reach the suite. A changed.xcstringsentry now counts as a changed string: its key and changed values are followed like a changed Swift literal (reverse_test_impact.literal_suites). Keep agent brand names untranslated; tighten changelog and env-rejection tests #14922's values (Codex,OpenCode) are under the 8-character minimum, so runningrank_inputson its merge commit scores 0 and gives "the only pull request in the range does not reach this suite".incomplete app-host run: app host restarted, only the test in flight at the restart is the crash's: it started in the live log and never finished. Swift Testing display names are mapped to functions from thecmuxTests/sources. When the log cannot name that test, the batch's failures with no failed line of their own count as the crash's only if there are exactly as many as unexplained restarts. Every other failure in the batch stays an ordinary regression. The victim is reported as "the app host crashed while running it". The crash signature is the objc, SwiftFatal erroror uncaught-exception message above the backtracer'sProgram crashedheader, with addresses masked. When the log has no message, the line names the shard'scmux-app-host-diagnostics-*artifact instead. A PR hears about a victim only when its diff reaches the suite."crash": true, so a crash from a PR the ranking missed still gets bisected;main_regression_bisect.pyqueues them like any other entry.The PR comment marker, the per-report caps and the
DATA_PREFIXpayload are unchanged; the payload'stestsgains the optionalcrashflag.workflow_guard_groups.pyroutes the three scripts the attribution test now loads to theciguard group.Verification
Current catch-up head
5c1c0ee93bc6f3c2b32d64fbad70666a853bcaf8passes 78 attribution/bisect tests, 31 reverse-impact tests and 66 local guard steps. Independent review found no concrete correctness defects. All required current-head checks passed (CI run). Catching up with main resolves the earlier stale registry failure; no new registry entry was needed.python3 tests/test_ci_main_regression_attribution.py: 41 passed. New cases replay the Keep agent brand names untranslated; tighten changelog and env-rejection tests #14922 shape from a cut-down copy of the shard 7 log: a lone PR outside the suite, the victim of a host restart, and a crash the baseline also had. The issue section lists the crash once as not new, keeps the victim out of the table and bisect data, and plans no comment. Other new cases cover a crashed batch with a plain failure (the plain one is attributed and bisected), display-name mapping, the strict recurrence rule, the signature fallbacks, the artifact pointer, a new crash that pings only a PR that edits the suite, and the string catalog reach.python3 tests/test_ci_main_regression_bisect.py(37, including a flagged crash entry being queued) andpython3 tests/test_ci_reverse_test_impact.py(31) pass.Cannot form weak reference to instance (0x*) of class NSKVONotifying_NSWindowand the artifactcmux-app-host-diagnostics-shard-7-run-1.🤖 Generated with Claude Code
Changelog
none
Summary by CodeRabbit