import Foundation /// The boards navigation stack's value-based routes: board list → lanes → cards → card detail. /// /// **Board-relative IDs only, never a model value.** Every screen this drives re-reads its subject /// from `session.snapshot` on each body evaluation (see `BoardScreen`/`LaneScreen`/ /// `CardDetailScreen`), so a route only has to say *where* to look, not *what was there* — a write /// that lands while a screen is on top of the stack is picked up automatically, and a route never /// goes stale the way a captured `Lane`/`Card` value would. enum BoardRoute: Hashable { /// The lane list for the board at `boardRoot`. case lanes(boardRoot: URL) /// The card list for one lane. case cards(boardRoot: URL, laneID: ItemID) /// The editor for one card. case card(boardRoot: URL, laneID: ItemID, cardID: ItemID) }