Repository navigation
fix(next): retain Dock policy source through KVO teardown - #27385
Conversation
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on ff9bf65 to compare; do not merge until green; see lane-rules |
|
Owned by an agent session · session |
|
Bead |
88316b9 to
9c70d32
Compare
9c70d32 to
7f213fc
Compare
7f213fc to
4205a4e
Compare
4205a4e to
f33b509
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Found 6 test failures on Blacksmith runners: Failures
|
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40872205512 at eef18f1 failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40869443998 at 17d64ea failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
…Dock policy KVO fix) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40870120427 at 5f33ee4 failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40870378984 at 90e1666 failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40873692330 at 52fea2d failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
…e daemon-tests signal 11 fix #27385) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reds (#28036) * fix(cmux-next checks): clear the three base reds of the cmux-next checks job (package deps, crash ratchet) Package dependency lists sorted: CmuxNextAccounts' TeamInviteConsentWindow uses DemandTimer from CmuxNextWakeups (a0ee135); the target now declares it. Crash safety: six crash-ratchet rows rose on the tip. Each new hit is fixed in the code, not waived away: - cmux-tui-core unwrap 1149 -> 1150 (915bab1): the roster's agent_records read recovers a poisoned lock (PoisonError::into_inner), as its 340 siblings do. - CmuxNextSidebar dynamic_dispatch 3 -> 5 (f97775b): the disclosure chevron sets its turn as a typed CATransform3D, not by key-value coding. - MessagesLabHome index_subscript (banned) 0 -> 1 (6ac0d64): the row bitmap write takes its slot from out.checkedIndex on the same line again. - MessagesLabHome unchecked 14 -> 16 and unchecked.waived 1 -> 4 (6ac0d64): PaletteScope's main-thread slot, process palette and box table, and Fixture.baseGeneration, move from nonisolated(unsafe) statics into one OSAllocatedUnfairLock. Render workers read the process palette and the base generation while the main thread writes them, so this was a real data race. PaletteBox keeps @unchecked Sendable with a reviewed crash-allow (two lets set before publication): recorded with --record-waivers, waived 1 -> 2. - CmuxNextDesign unchecked.waived 3 -> 4 (17d64ea, #27385): the Dock policy observation keeps its object in an OSAllocatedUnfairLock (uncheckedState) instead of a hand-rolled @unchecked Sendable holder. Patches/ for Fixture, Transcript and WindowView regenerated with sync-messageslab.sh --write-patches (WindowView's patch was already stale on the tip); --check passes. The arch ratchet's global_mutable_statics falls by three; the one lock is a reviewed exception. Red on base b3587f5, green here: python3 scripts/cmux-next/crash_ratchet.py (6 rows), python3 scripts/cmux-next/check-package-dependency-lists.py (CI run on 49d2105). Sidebar-Look: no visual change * arch ratchet: the PaletteScope lock exception names its owner and expires 2026-11-13 * fix(home): PaletteBox's crash-allow names why it is not checked Sendable, its owner and its expiry (2026-11-13) A checked Sendable PaletteBox needs a Sendable FixtureTheme, and FixtureTheme.swift:28 holds a CGGradient, which the SDK does not mark Sendable: the fleet probe e72b1f95374d27da0c9f8e94 (scratch 78d5dd9) failed with "stored property 'gradient' ... contains non-Sendable type 'CGGradient'" (NSColor passed). The waiver stays, recorded as before.
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Starting notification observation could release
NSRunningApplication.currentwhile itsactivationPolicyKVO observer was still registered. This crashed the fork action test process with signal 11. The policy stream now retains its source until cancellation invalidates the observer, then releases it. The callback continues reading the policy directly from the observed object.The regression uses the production KVO bridge with a test-owned observable. It checks source retention after the caller releases it, policy delivery, and source release on consumer cancellation while the stream remains alive.
Validation:
e99abab9f1686afd420c4ed5reachedForkConversationTestsand crashed with signal 11 and the activation-policy observer warning.a516a911b4aadb7c4290b739compiled the package/tests and passedDockBadgeTests(4),DockBadgeObservationTests(1), andForkConversationTests(6), atc3df46547462cf072a46971ac9e8eceeca9133a3. Subsequent changes document the holder invariant and remove an unnecessary unsafe annotation from Foundation's Sendable KVO token; executable behavior is unchanged.f23076a23ee69a5be132ea147dadd476e175eac5: remote fast gates passed crash-ratchet comparison, prepush checks, and crash-class rules. Exact-head app compile and independent review are running.Risk: KVO ownership and cancellation ordering. The holder is initialized before publication and modified only by AsyncStream's once-only termination callback. The KVO token is invalidated before the source is released. No new production task or timer; the existing notification task owns stream consumption.
No capture: this corrects observer ownership and preserves the existing Dock badge appearance.
Agent session: agent session