Memoize the reload parse and short-circuit value-equal snapshots
The loader gains a ParseMemo — the previous walk's parsed documents keyed by root-relative path, trusted on the git-index heuristic (mtime + size, no hashing) and passed as an input so the loader stays stateless. A hit skips exactly one file read; schema, order, coercions, dedupe, and every directory listing run fresh, so memoized and cold walks are output- identical (golden-corpus equivalence suite). Entries record only past the schema gate, so a defect can never be answered from the memo. The store skips the snapshot assignment wholesale when the fresh model is value-equal — no @Observable churn, no render pass, no snapshotGeneration bump — and a new landedReloads counter carries walk-completion for the three consumers whose subject is the walk, not the snapshot: the card window's comment thread, the comment search index, and the auto-committer's covering gate (which now counts a completed walk as covering even when nothing changed). Warnings and defects move on their own equality; failed reloads bump neither counter. An injectable ParseCounter makes the single-file-echo claim a test. Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
This commit is contained in:
@@ -162,6 +162,13 @@ struct FileDropTarget: Equatable, Sendable {
|
||||
/// app-mediated echo is normally next, and a foreign one that lands first re-grounds everything
|
||||
/// anyway.
|
||||
///
|
||||
/// It watches `BoardStore.snapshotGeneration`, which since 2026-07-31 does not move for a reload whose
|
||||
/// tree came back value-equal, and that is the right counter rather than a hazard: a hold is only ever
|
||||
/// armed by a drop whose write actually rearranged something — every drop path refuses a no-op
|
||||
/// arrangement *before* it opens a write bracket (`BoardStore.moveCards`, `moveLanes`, `moveLane`) —
|
||||
/// so a drop that would land value-equal never writes and never reloads, and its hold is the
|
||||
/// watchdog's to retire exactly as it was before the skip existed.
|
||||
///
|
||||
/// The `timeout` is the same guarantee the drag session's watchdog gives the drag itself: a write
|
||||
/// that was refused outright (a read-only board) produces no reload at all, and an overlay with no
|
||||
/// hand-off coming must still dissolve and let the snapshot be the authority again.
|
||||
|
||||
Reference in New Issue
Block a user