The board settings sheet — setup leaves the popover for a home a stray click can't dismiss
The popover/sheet split lands: a board-scoped, titled, sectioned sheet on the board window hosts everything setup-shaped, opened from the popover's Board Settings… row and the new Board ▸ Board Settings… menu row. The three existing setup controls relocate — add-git (whose noteFormVisible lines now make the sheet the form-anchored failure surface), branch creation (a standing field; create-and-switch runs the identical settle sequence), and the commit-identity fields (the 2s visibility-scoped poll rides with them). The popover keeps the daily face and its postures; its Pro/mode-none section becomes header + door (.addGit renamed .noRepository). Availability is derived from the section inventory (Pro + mode none or git), so pro-m2's sections can't drift from the doors; the sheet's fields join the caret-chord disable set. The audit suite pins what the free fixture can reach; the sheet's own audit is manual until a tier override is ruled. Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
This commit is contained in:
@@ -47,21 +47,23 @@ struct BoardGitSectionTests {
|
||||
#expect(BoardGitSection.resolve(tier: .free, mode: .none, hasGitDirectory: true) == .proPointer)
|
||||
}
|
||||
|
||||
@Test("Pro: mode none offers add-git, git mode shows the branch")
|
||||
@Test("Pro: mode none has no repository to describe, git mode shows the branch")
|
||||
func proFollowsTheMode() {
|
||||
#expect(BoardGitSection.resolve(tier: .pro, mode: .none, hasGitDirectory: false) == .addGit)
|
||||
#expect(BoardGitSection.resolve(tier: .pro, mode: .none, hasGitDirectory: false) == .noRepository)
|
||||
#expect(BoardGitSection.resolve(tier: .pro, mode: .git, hasGitDirectory: true) == .branch)
|
||||
}
|
||||
|
||||
@Test("A repo-nested board explains itself — the add-git action is absent, not disabled")
|
||||
@Test("A repo-nested board explains itself — setup is absent, not disabled")
|
||||
func repoNestedExplainsRatherThanDisables() {
|
||||
let section = BoardGitSection.resolve(tier: .pro, mode: .repoNested, hasGitDirectory: false)
|
||||
|
||||
// The design is insistent here: "not a hidden 'add git' but a short explanation … the option
|
||||
// is absent because it *can't* apply, and the UI should teach that rather than look broken"
|
||||
// (06 ▸ Rules). A `.addGit` that rendered disabled would satisfy neither half.
|
||||
// (06 ▸ Rules). A posture that rendered a disabled setup control would satisfy neither half —
|
||||
// and since the 2026-07-31 split the same sentence is what keeps the settings sheet itself
|
||||
// out of reach on such a board (`BoardSettingsAvailabilityTests`).
|
||||
#expect(section == .repoNested)
|
||||
#expect(section != .addGit)
|
||||
#expect(section != .noRepository)
|
||||
}
|
||||
|
||||
@Test("Every posture is reachable, and none of them is two postures")
|
||||
|
||||
Reference in New Issue
Block a user