Skip to content

fix(datagrid): the filter bar, the pane menu's name, and the three red suites on main - #3044

Merged
datlechin merged 5 commits into
mainfrom
fix/main-ci-failures
Sep 22, 2026
Merged

datlechin merged 5 commits into
mainfrom
fix/main-ci-failures

Conversation

@datlechin

Copy link
Copy Markdown
Member

main has been red since 2026-09-20. Five separate failures, one per commit here.

The filter bar opened empty (#3026)

FilterPanelView draws coordinator.selectedTabFilterState, which lives on QueryTabManager.tabs, but the view only observed coordinator. It got away with that because it also carried two closure properties, and a closure is never equal to another one, so SwiftUI re-evaluated body on every parent render. #3026 removed those two closures. SwiftUI can now compare the view's own stored properties, finds them unchanged and skips body.

So the row onAppear adds reached the model and never reached the screen. Measured with OSLog on a sample-database launch: PANEL onAppear filters=0 columns=3 visible=true, COORD addFilter done count=1, and the rendered bar holding Clear and Apply with no row between them and no enable-all checkbox in the header.

The user-facing shape: ⌘⇧F opens an empty filter bar with nothing to type into, focus stays in the object list, and the filter text becomes type-select there. Typing ArtistId IS NOT NULL over Album selects Artist and opens it.

The fix names the store the view actually renders.

The trailing pane's commands menu had no name (#3041)

trailing-pane-menu published AppKit's fallback name for an unnamed pull-down: "More" locally and the empty string on the CI runner, for the same build. The ellipsis draws no text, so that was the only name VoiceOver had for Inspector Options, Assistant Options and History Options.

Measured on macOS 27, four placements in order: .labelStyle(.iconOnly) on the Label, the same style on the Menu, .accessibilityLabel inside the label closure (how ResultSetMenu names its pull-down), and .accessibilityLabel on the Menu. None of them reach it. .accessibilityElement does, and it has to be .contain: .ignore names the button and takes the menu's own items out of the tree with it, so nothing can reach Fields or JSON.

Both regressions are in unreleased code, so they fold into the existing [Unreleased] entries rather than adding "Fixed" lines.

Three tests and a workflow

DefaultSortInitialQueryTests asserted that the unsorted first-load path leaves the query byte-identical. #3026 made prepareTableTabFirstLoad rebuild the browse query unconditionally, which is deliberate and what the two sibling tests already assert. The assertions now check the invariant the test names: no ORDER BY, not sorting, the live page size.

CooperativePoolBlockingTests budgeted 0.9s of wall clock for activeProcessorCount + 4 blockers sleeping 300ms each. On the runner that measures libdispatch bringing worker threads up one at a time, not the shape under test: 2.00s and 2.26s on two failing runs, with the concurrency high-water mark at the full blockerCount both times. The peak is the whole property, so the clock goes.

iOS Tests failed 3 of the last 12 runs with Failed to launch app ... (ipc/mig) server died on a second simulator clone. Every test in every run, passing and failing, executed on "Clone 1 of iPhone 17 Pro": the extra clone only booted, and booting a second iOS 26 simulator on a 3-core runner is what killed it. -parallel-testing-enabled NO costs nothing and removes the failure mode.

Verification

Run locally against a sample database, on macOS 26.6.2 with Xcode 26.4.1.

Suite Before After
DefaultSortInitialQueryTests 14/16 16/16
CooperativePoolBlockingTests 1/2 2/2
FilterBarReturnUITests 0/2 2/2
FilterPersistenceUITests 0/1 1/1
TrailingPaneSurfaceUITests 1/3 3/3

swiftlint --strict clean on every changed Swift file, actionlint clean on the workflow.

@datlechin
datlechin merged commit 81f1bfe into main Sep 22, 2026
11 of 13 checks passed
@datlechin
datlechin deleted the fix/main-ci-failures branch September 22, 2026 06:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant