Realign code with the 2026-07-31 rulings

The trash sorts by modified descending — the arrival rank mint retires
(Ranks.isOrderedForTrash one comparator, loader + merged order agree;
the legacy deleted: migration stamps modified from the tombstone
timestamp where parseable; delete undo steps validate existence-only;
agent guide v8). Trash selection goes kind-blind — ranges, marquee,
Select All, and the successor walk sweep both kinds; the guard moves to
the exits (mixed-payload drop refusal, copy/cut validation). The copy
stamping preflight widens back to comment depth (load-scoped posture —
the board always loads, the gesture refuses whole). Fixes a latent
no-op: trashed-lane drag restore never fired (DragSession.beginLanes
hard-coded the board container).

2403 tests in 413 suites green.

Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
This commit is contained in:
2026-07-31 18:35:07 -04:00
parent 542ab169a3
commit bec75e4282
37 changed files with 1200 additions and 551 deletions
+18
View File
@@ -687,6 +687,24 @@ struct AgentGuideContentTests {
#expect(content.contains("the trash is the recoverable path for both"))
}
/// **v8: the arrival rank is retired** (08-agent-integration.md's own line, re-ruled 2026-07-31:
/// "move the card **or lane** folder into `<root>/.trash/` and restamp `modified` (the trash
/// sorts newest-first by that stamp no rank to mint)"). The guide has to teach the *stamp* as
/// the position and to leave `order` alone and, just as load-bearing, it must no longer teach
/// the rank formula: an agent still computing "smallest `order` minus 1024" would be writing a
/// key the app now deliberately preserves for the restore.
@Test("v8 teaches the stamp as the trash's order, and the rank formula is gone")
func v8TrashOrderingVocabularyIsPresent() {
let content = AgentGuide.content
#expect(content.contains("sorts by `modified`, newest first**"))
#expect(content.contains("the stamp is also the position"))
#expect(content.contains("there is no rank to mint"))
#expect(content.contains("leave `order` exactly as it is"))
// The retired formula, in the two spellings the v7 literal used.
#expect(!content.contains("smallest `order` already in `.trash/`"))
#expect(!content.contains("Arrivals go on top"))
}
/// The pathfinder's guide taught `media/` and tombstone deletes; both are retired
/// (01-storage-format.md Changes from the pathfinder schema; Deletion). The one legitimate
/// mention of `deleted:` is the warning never to write it.