Build the style, details, and actions sidebar sections
The sidebar completes: the shared style editor gains a second anchor — StyleEditorLayout carries the geometry (the popover keeps its settled 268/14/7/8 untouched as the default; the sidebar packs columns to its width with no inner scroller) while every well, the batch display, the arrow grammar, and the one applyStyle bracket stay the shared component's. The card anchor is fixed, not tracking: the target is this card, and the fate walk retires the window when the card goes. Details renders every unknown frontmatter key read-only in file order — Card.document already carried them — showing the author's own bytes where the raw span is a value and the engine's rendering for block scalars and empties; reserved enhanced-schema keys are ordinary unknowns, and no keys means no section. Actions: Delete rides the same tombstone bytes as Backspace and drop-on-trash through a one-line seam, says nothing about selection, and lets the fate walk dismiss; Reveal in Finder resolves through the attachment scope so the two paths cannot disagree. History reserves its m7 slot without drawing a header no base board can honor. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -2462,6 +2462,34 @@ public final class BoardStore {
|
||||
tombstone(folders)
|
||||
}
|
||||
|
||||
/// **The card window's Actions ▸ Delete** (05-card-window.md ▸ Actions: "Delete — tombstones the
|
||||
/// card … the window then dismisses itself").
|
||||
///
|
||||
/// The write is `tombstone(_:)`, so a card deleted from its own window is byte-indistinguishable
|
||||
/// from one deleted with ⌫ on the board or dropped on the trash lane — one write op, one bracket,
|
||||
/// one set of stamps. What differs is the same thing that differs for the drag, and for its
|
||||
/// reason: **it says nothing about the selection.** ⌫ moves the board's selection to the deleted
|
||||
/// card's successor sibling because the rule exists to make a repeated keystroke walk down a lane;
|
||||
/// a button in another window has no such continuation, and the card it deletes need not be
|
||||
/// selected on the board at all — picking a successor here would re-point a selection that never
|
||||
/// lost anything. The ordinary reload does the rest: a live-side selection ejects a member that
|
||||
/// flips to tombstoned, as the vanish it is.
|
||||
///
|
||||
/// **It does not dismiss the window either**, and must not: the window's dismissal is a *fate*
|
||||
/// re-derived from every snapshot (`CardWindowHost.cardWindowFate`), so the tombstone this writes
|
||||
/// comes back through the watcher and the fate walk takes the window down — the same path an
|
||||
/// agent's or another window's delete takes. A second dismissal from here would be a second rule
|
||||
/// able to disagree with the first.
|
||||
///
|
||||
/// A vanished or already-tombstoned card resolves to no path and writes nothing, `delete(_:)`'s
|
||||
/// rule; liveness is ancestor-walked, so a card under a tombstoned lane is gone too — and its
|
||||
/// window is already dismissing.
|
||||
public func deleteCard(_ id: ItemID) {
|
||||
let folders = TrashModel.paths(of: [id], on: .live, in: snapshot).map { $0.folder(under: rootURL) }
|
||||
guard !folders.isEmpty else { return }
|
||||
tombstone(folders)
|
||||
}
|
||||
|
||||
/// The tombstone write itself — **one `performWrite` bracket, whatever the set's size and
|
||||
/// whichever gesture asked** (DRAG-REORDER.md § The drop commits; the style batch's rule).
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user