The popover/sheet split reverses — settings fold into the Git tab, the widget stacks name over branch

The titlebar widget becomes a two-line identity block: the board glyph at
22pt spanning both lines, the title over the branch (git-mode only, smaller
and secondary), the em-dash retired. New Branch… returns to the switch menu
behind a divider, revealing an inline name field — the pre-split shape. The
board settings sheet retires whole: add-git and commit identity render
inline in the Git tab's postures (BoardGitSetup.swift), the availability
rule collapses into BoardGitSetupSection.resolve, and Board ▸ Board
Settings… leaves the menu bar. Where 07's remote/credential setup surfaces
land is deliberately left open — filed on the Redesign board.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-08-07 21:48:02 -04:00
parent 99ebb69a1d
commit 7414fc8400
22 changed files with 884 additions and 1259 deletions
+17 -48
View File
@@ -7,20 +7,28 @@ import XCTest
/// > runs in UI tests over every surface board (trash shown and hidden), card window (Preview, Edit,
/// > raw source), welcome, template chooser, board popover, board settings sheet.
///
/// The last of those is **one surface shorter than the design's sentence** since 2026-08-07: the
/// board settings sheet retired that day (03-board-ui.md Board settings sheet, marked retired
/// the 2026-07-31 popover/sheet split reversed), and everything it held now renders inside the board
/// popover's Git tab. So the popover's own audit is where those controls are looked at, and the
/// every-surface claim is satisfied by there being one surface fewer rather than by a test skipping
/// one.
///
/// One test per surface, one audit call each. `performAccessibilityAudit` audits **the app's
/// currently displayed UI** rather than a subtree, so each test's job is entirely navigation: get the
/// surface on screen, then let the audit look at whatever is there.
///
/// ### The board settings sheet is reachable since the 2026-08-07 pivot
/// ### The settings sheet's audit, and where it went
///
/// The sheet was Pro-only, and this suite could not reach it: the fixture launch had no tier
/// control, and a `--ui-test-pro` launch argument was rejected as a subscription bypass anyone could
/// type into Terminal (`UITestLaunch` ships in the app binary on purpose). Since the pivot
/// (12-editions.md PIVOT 2026-08-07 git left the paywall), `BoardSettingsAvailability` asks only
/// the board's mode, the fixture board is mode `none`, and the sheet opens for the audit like any
/// other surface the deferral to the manual VoiceOver pass is retired with the gate. The
/// no-bypass objection stands as precedent for whatever the next split gates. See
/// `testBoardSettingsSheetOpensFromTheMenuAndAudits`.
/// The sheet was Pro-only and this suite could not reach it: the fixture launch had no tier control,
/// and a `--ui-test-pro` launch argument was rejected as a subscription bypass anyone could type
/// into Terminal (`UITestLaunch` ships in the app binary on purpose). The 2026-08-07 pivot
/// (12-editions.md PIVOT 2026-08-07 git left the paywall) made it reachable and it gained a test
/// here; the **reversal later the same day retired the sheet outright**, and the test with it. What
/// remains is the precedent the no-bypass objection stands for whatever the next split gates and
/// one live consequence for this file: the surfaces that sheet held are now the board popover's Git
/// tab, which `testBoardInfoPopover` opens onto its Info tab. Auditing the Git tab specifically wants
/// a click on the popover's segmented strip and is a card of its own, filed rather than faked here.
///
/// ### No waiving
///
@@ -199,43 +207,4 @@ final class AccessibilityAuditTests: XCTestCase {
)
try app.performAccessibilityAudit()
}
// MARK: - The board settings sheet
/// **The settings sheet's audit**, reachable since the 2026-08-07 pivot (this file's header):
/// the fixture board is mode `none`, `BoardSettingsAvailability` asks only the mode, so the menu
/// row opens the sheet add-git's home (03-board-ui.md Board settings sheet) and the audit
/// looks at the sheet itself rather than deferring to the manual VoiceOver pass.
@MainActor
func testBoardSettingsSheetOpensFromTheMenuAndAudits() throws {
let app = XCUIApplication.launchedWithFixtureBoard()
let bar = app.menuBars.firstMatch
let boardMenu = bar.menuBarItems["Board"]
XCTAssertTrue(
boardMenu.waitForExistence(timeout: XCUIApplication.uiTimeout),
"the Board menu is missing from the menu bar"
)
boardMenu.click()
let row = bar.menuItems["Board Settings…"]
XCTAssertTrue(
row.waitForExistence(timeout: XCUIApplication.uiTimeout),
"Board ▸ Board Settings… is missing — the row ships in every mode that can host the sheet"
)
XCTAssertTrue(
row.isEnabled,
"a mode-none board hosts the sheet (add-git's home) — the pivot retired the tier gate that disabled this row"
)
row.click()
let sheet = app.sheets.firstMatch
XCTAssertTrue(
sheet.waitForExistence(timeout: XCUIApplication.uiTimeout),
"the Board Settings sheet did not present from its menu row"
)
try app.performAccessibilityAudit()
app.typeKey(.escape, modifierFlags: [])
}
}