Build the welcome screen
The welcome window becomes the real thing: Xcode-style, hidden title bar with background drag, branding and actions left, recents right — rows carrying the board symbol, name, location, and the registry's cached lane/card counts (stamped at close, never a scan at welcome time), sorted by last opened. Launch failures surface row-level per 02: a failure joins its recents row as a warning caption, an unresolvable bookmark renders unavailable with Forget its one affordance, and only a failure with no row to carry it falls back to a compact list; a board opening again heals its row. New Board (Opt-Cmd-N) opens the Pages-style template chooser — shipped with the single Basic template and the m9 seams marked — flowing through the save panel into createBoard/createLane and straight into a board window. Open Recent gains its submenu with Clear Menu (byte-identical to forgetting every row, pinned by test), and File > Duplicate forks the frontmost board to a Finder-style copy sibling: pending work flushes first through the close flush's step two alone (sessions stay open — 09's stated exception), every GUID and tombstone carries (the whole-board carve-out from copies-remint), and the copy opens in its own window while the original stays put. 36 new tests. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -198,7 +198,13 @@ public struct CloseFlushCoordinator {
|
||||
|
||||
/// Step 2. The store's pipeline, then the editor saves, then the pending commit — 02's order,
|
||||
/// stated once.
|
||||
private func flushPendingWork() async {
|
||||
///
|
||||
/// **Callable on its own**, which is the one place the sequence is entered part-way: File ▸
|
||||
/// Duplicate needs pending work on disk before it copies but must leave the session standing
|
||||
/// (09-templates.md ▸ Save as Template's stated exception — "sessions staying open"). It reaches
|
||||
/// this step through `AppModel.flushPendingWork(for:)` rather than re-listing the three flushes,
|
||||
/// so their order still has one definition.
|
||||
public func flushPendingWork() async {
|
||||
await storeFlush()
|
||||
await editorFlush?()
|
||||
await committerFlush?()
|
||||
|
||||
Reference in New Issue
Block a user