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:
@@ -554,10 +554,12 @@ struct CommentUndoTests {
|
||||
let path = commentPath(CommentIdent.one, inCard: card)
|
||||
try fixture.item(path, commentText())
|
||||
|
||||
#expect(HistoryStaleness.isCurrent([.present(fixture.url(path))]))
|
||||
#expect(HistoryStaleness.isCurrent([.absent(fixture.url("\(card)/comments/.draft"))]))
|
||||
// Path anchors resolve to themselves — the resolver a caller with no board hands in
|
||||
// (`HistoryAnchor.literalPath`); the card-anchored halves are `CardSessionUndoTests`'.
|
||||
#expect(HistoryStaleness.isCurrent([.present(fixture.url(path))], resolvedBy: \.literalPath))
|
||||
#expect(HistoryStaleness.isCurrent([.absent(fixture.url("\(card)/comments/.draft"))], resolvedBy: \.literalPath))
|
||||
try FileManager.default.removeItem(at: fixture.url(path))
|
||||
#expect(!HistoryStaleness.isCurrent([.present(fixture.url(path))]))
|
||||
#expect(!HistoryStaleness.isCurrent([.present(fixture.url(path))], resolvedBy: \.literalPath))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user