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:
@@ -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: [])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user