Remove the face carousel — one card presentation
03's resettlement reverses the pathfinder carry-over: the selection-keyed dual presentation proved undesirable, so a card has one presentation — selection changes styling, never geometry, and the masonry never reflows on click. Deleted the carousel view (page dots, glass underlay, scroll-tick monitor), the QuickLook thumbnail cache (sole consumer), the pure paging/suppression rules, and the sole-selected animation key — Motion now keys transactions on the search query and the drop proposal only. The attachment chip stays as the face's whole attachment story; viewing media is the card window's job. No carousel state had leaked beyond the view layer. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -26,11 +26,10 @@ import os
|
||||
///
|
||||
/// **The one read inside a card folder** is `attachmentNames(in:)`: a single flat listing of
|
||||
/// `attachments/`, feeding `Card.attachments`. It is a *names* read and nothing more — it never
|
||||
/// opens a file, never descends, never warns, and degrades to `[]` on any failure. Two board-
|
||||
/// window surfaces need it before a card window exists (the face's paperclip indicator and the
|
||||
/// sole-selected card's carousel — 03-board-ui.md § Card face), and the snapshot is where they
|
||||
/// read from. Everything else about a card folder's contents remains outside this loader's
|
||||
/// business.
|
||||
/// opens a file, never descends, never warns, and degrades to `[]` on any failure. The board
|
||||
/// window's face needs it before a card window exists (the quiet paperclip indicator —
|
||||
/// 03-board-ui.md § Card face), and the snapshot is where it reads from. Everything else about a
|
||||
/// card folder's contents remains outside this loader's business.
|
||||
///
|
||||
/// Symlinks: a lane/card candidate that is itself a symlink is treated as a stray and never
|
||||
/// followed, whether it points to a file or a directory — this loader does not resolve
|
||||
@@ -195,8 +194,8 @@ public enum BoardLoader: Sendable {
|
||||
/// stance the level walk takes).
|
||||
///
|
||||
/// **Finder order** (`localizedStandardCompare`), so `"shot 2.png"` sorts before
|
||||
/// `"shot 10.png"`: the order has to be stable across loads for the face carousel's pages and
|
||||
/// its dots, and where it is already the sidebar's order it may as well be the same one.
|
||||
/// `"shot 10.png"`: the order has to be stable across loads, and where it is already the
|
||||
/// sidebar's order it may as well be the same one.
|
||||
///
|
||||
/// Failure is silent: an unlistable directory yields `[]`. Fail-fast is reserved for
|
||||
/// structure (01-storage-format.md § Malformed input), and this field decorates a card — a
|
||||
|
||||
@@ -180,12 +180,12 @@ public struct Card: Identifiable, Sendable, Equatable {
|
||||
/// empty when it has one that couldn't be listed — the field is cosmetic, so a
|
||||
/// directory-listing race degrades to "nothing to show" rather than failing a load.
|
||||
///
|
||||
/// Names, not URLs: the two board-window consumers only need to know *whether*, *how many*,
|
||||
/// and in *what order* — the face's quiet paperclip indicator (03-board-ui.md § Card face)
|
||||
/// and the sole-selected card's attachment carousel. The card window's sidebar does its own
|
||||
/// listing through `BoardWriter.listAttachments`, since it acts on the files rather than
|
||||
/// showing them; that call answers through the very same enumeration
|
||||
/// (`BoardLoader.attachmentNames(in:)`), so the two surfaces agree by construction.
|
||||
/// Names, not URLs: the board-window consumer only needs to know *whether*, *how many*, and
|
||||
/// in *what order* — the face's quiet paperclip indicator (03-board-ui.md § Card face). The
|
||||
/// card window's sidebar does its own listing through `BoardWriter.listAttachments`, since it
|
||||
/// acts on the files rather than showing them; that call answers through the very same
|
||||
/// enumeration (`BoardLoader.attachmentNames(in:)`), so the two surfaces agree by
|
||||
/// construction.
|
||||
///
|
||||
/// Freshness is the watcher's, by construction: it reloads on any change anywhere under the
|
||||
/// board root, so an attachment added in Finder rebuilds the snapshot exactly like an edited
|
||||
|
||||
@@ -1125,8 +1125,8 @@ public enum BoardWriter: Sendable {
|
||||
/// disturbs anything inside it, subfolders included.
|
||||
///
|
||||
/// The listing itself is `BoardLoader.attachmentNames(in:)`, which is also what fills
|
||||
/// `Card.attachments` for the board window's face indicator and carousel. **One function, so
|
||||
/// the sidebar and the face can never disagree** about a card's attachments or their order.
|
||||
/// `Card.attachments` for the board window's face indicator. **One function, so the sidebar
|
||||
/// and the face can never disagree** about a card's attachments or their order.
|
||||
/// What this call adds over that one is the card-folder guard and this API's error
|
||||
/// vocabulary — the difference between a surface that *acts* on the files and two that
|
||||
/// merely show them.
|
||||
|
||||
Reference in New Issue
Block a user