Build the end-to-end UI test pass
The golden-path XCUITest suite, adapted to current rulings where the card body had gone stale: trash flows follow the materialized-trash grammar (no Put Back, restore is drag or cut/paste out), git flows are pro-m1 scope and skipped, and fixtures extend m11's in-container --ui-test-fixture-board mechanism (the sandbox forbids the card's --open-board path handoff) with exact-match variant flags: standard (the three-lane audit board), large (8 lanes x 40 cards for masonry/reflow), malformed (BoardWriter-built board with one card's index.md overwritten to unterminated YAML, opened through the ORDINARY path so the failure is the loader's own). EndToEndFlowTests: create card/lane, inline rename, coordinate drag across lanes, cut/paste, undo/redo of a move, delete-to-trash / show-trash / restore-by-cut-paste / Empty Trash confirm - all asserting on lane accessibility labels. FailFastLaunchTests: welcome appears, no board window ever, a welcome row carries the loader's sentence naming the file; byte-fidelity of the malformed board pinned unconditionally in KanbanTests plus an identically-refused relaunch. Performance: launch metric plus explicit wall-clock gates (30s launch / 5s Show Trash on 320 cards) since XCTest baselines don't travel. Powerbox panels (template save panel, Duplicate fallback, Open) are documented as manual in EndToEndVerification.md, not faked. The smoke test now launches on the standard fixture (it launched bare before, opening the developer's real boards); README's everyday test command scopes to -only-testing:KanbanTests. Suite compiles on both schemes (build-for-testing verified); flows await a real display + automation permission to execute - run instructions in KanbanUITests/EndToEndVerification.md. +8 unit tests; 1669 green both schemes. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -100,20 +100,27 @@ struct RestoreBootstrapView: View {
|
||||
}
|
||||
}
|
||||
|
||||
/// The audit suite's board: built here, opened through the same `openBoard` every other path
|
||||
/// uses, so it registers, bookmarks and titles itself exactly like a board the user opened.
|
||||
/// The UI suites' board: built here, opened through the same `openBoard` every other path uses,
|
||||
/// so it registers, bookmarks and titles itself exactly like a board the user opened.
|
||||
///
|
||||
/// **A failure lands on welcome as an ordinary launch failure**, with the fixture's own path on
|
||||
/// it. That is deliberate: a suite whose fixture failed to build would otherwise audit an empty
|
||||
/// screen and pass, which is the one outcome an accessibility gate must never produce.
|
||||
/// **Which board is the launch arguments' to say** (`UITestLaunch.variant`), and this method does
|
||||
/// not care: the malformed variant is built and opened exactly like the other two, and its
|
||||
/// failure arrives one layer down as the *loader's* — a board window that records fail-fast's own
|
||||
/// sentence and dismisses itself (`BoardWindowHost.start`). Special-casing it here would replace
|
||||
/// the sentence under test with a sentence about the fixture.
|
||||
///
|
||||
/// **A failure to *build* lands on welcome as an ordinary launch failure**, with the fixture's own
|
||||
/// path on it. That is deliberate: a suite whose fixture failed to build would otherwise audit an
|
||||
/// empty screen and pass, which is the one outcome an accessibility gate must never produce.
|
||||
private func openFixtureBoard() {
|
||||
let variant = UITestLaunch.variant
|
||||
do {
|
||||
let url = try UITestLaunch.materializeFixtureBoard()
|
||||
let url = try UITestLaunch.materializeFixtureBoard(variant)
|
||||
appModel.openBoard(at: url)
|
||||
} catch {
|
||||
Self.logger.error("the UI-test fixture board could not be built: \(error.localizedDescription, privacy: .public)")
|
||||
appModel.recordLaunchFailure(
|
||||
path: UITestLaunch.fixtureBoardURL.path,
|
||||
path: UITestLaunch.fixtureBoardURL(for: variant).path,
|
||||
message: "The UI-test fixture board could not be built: \(error.localizedDescription)"
|
||||
)
|
||||
appModel.showWelcome()
|
||||
|
||||
Reference in New Issue
Block a user