Realign undo with the evening rulings — repo-nested and identity anchors
Repo-nested boards bind native undo in every tier (25d2513): the no-undo case is gone, makeHistoryProvider answers git or native, and the native path provably never touches the enclosing repository's .git. Session undo steps anchor by card identity, never by path (9119aa1): HistoryAnchor carries the card UUID (plus comment/draft vocabulary) and apply-time validation resolves the current folder via the same both-container walk writeCardBody uses — a board-side lane or trash move no longer stales the coarse close step, while a genuine field collision still skips it whole. 2448 tests in 423 suites green. Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
This commit is contained in:
@@ -61,14 +61,17 @@ public final class BoardUndoManager: UndoManager {
|
||||
///
|
||||
/// ### `nil` is a board with **no undo provider**, and it is a real state
|
||||
///
|
||||
/// A **repo-nested** board under Pro gets no provider at all, and since the re-ruling of
|
||||
/// 2026-07-31 it is the only board that does: "the pair disabled only on repo-nested boards,
|
||||
/// under locks, and on empty stacks — the provider follows the board, so gitless boards bind
|
||||
/// 13-native-undo.md's native stack in **every** tier" (03-board-ui.md ▸ Toolbar ▸ Catalog;
|
||||
/// 06-history-undo.md ▸ Rules). Every question below answers the empty way, so the Edit menu's
|
||||
/// rows, the toolbar pair, and ⌘Z itself go quiet together, through the same validation path a
|
||||
/// lock uses. Modelling it as an absent substrate rather than as a substrate that always says no
|
||||
/// is the honest shape: there is nothing there, and nothing can accidentally accumulate in it.
|
||||
/// **No board the app composes is one any more** (re-ruled 2026-07-31, twice): "the pair disabled
|
||||
/// only under locks and on empty stacks — the provider follows the board, so boards without
|
||||
/// app-managed git — repo-nested included — bind 13-native-undo.md's native stack in **every**
|
||||
/// tier" (03-board-ui.md ▸ Toolbar ▸ Catalog). The repo-nested board was the last holder of this
|
||||
/// state and no longer is: that rule was about *git*, and this stack never touches git.
|
||||
///
|
||||
/// The state stays modelled because the seam still admits it — a test binds a substrate-less
|
||||
/// session through `AppModel.makeHistoryProvider` — and because an absent substrate is the honest
|
||||
/// shape for one: every question below answers the empty way, so the Edit menu's rows, the
|
||||
/// toolbar pair, and ⌘Z itself go quiet together through the same validation path a lock uses,
|
||||
/// and nothing can accidentally accumulate in a stack that is not there.
|
||||
///
|
||||
/// ### Settable, for exactly one event
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user