Realign code with the 2026-07-29 findings-resolution rulings
Nine rulings land as code. Reorders don't stamp — one container-change predicate (WriteOperation.rewritesOrderOnly): within-container reorders and the renumber rescale rewrite only order, while cross-lane, cross-board, and trash moves stamp modified and clear modified-by; no trash special case exists, and the m8 undo inverses conform through the same seam. Copies are transactions: the root-strict/nested-lenient split retires for a whole-subtree stampability preflight that refuses loudly naming the offender, and every item-level copy severs remote/remote-state at every level (whole-board forks carry them verbatim). Paste refuses, never degrades: the embedded-index.md materialization and its loss row retire; a missing staged snapshot produces nothing and posts an error-tone one-shot named from manifest metadata. Coerce-tier fallbacks log through the Defect stream with path context attached loader-side. Displacement is level-uniform: a file squatting attachments inside a card heals by the same rename ladder as board-root squatters; comments stays tolerated. Delete Immediately joins card and lane context menus as Delete's ⌥-alternate with its own VO custom action, routed through an explicit container so the menu target outranks standing selection. Agent guide v7 teaches the stamp discipline and the card-level attachments claim, and sheds two stale v6 lines (lanes trash now; kind is taught). Verified conformant, unchanged: edition-aware Undo/Redo disable, trash marquee full-height backdrop. Both schemes 1854 tests / 318 suites green; verify-editions 30/30. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -647,6 +647,25 @@ struct AgentGuideContentTests {
|
||||
#expect(content.contains("schema: 1"))
|
||||
}
|
||||
|
||||
/// v7's list, 08 ▸ The agent guide's "v7 additionally teaches" bullet: the refined
|
||||
/// stamp-discipline predicate (01-storage-format.md ▸ `modified`'s scope, ruled 2026-07-29,
|
||||
/// refined 2026-07-30) and the card-level `attachments` claimed name (01-storage-format.md
|
||||
/// § Fractal layout ▸ Rules, "level-uniform"). Each pin is a phrase an agent reading the guide
|
||||
/// would actually see, not a paraphrase — so a wording rewrite that silently drops the rule
|
||||
/// fails here instead of shipping quietly.
|
||||
@Test("v7 teaches the stamp-discipline predicate and the attachments claimed name")
|
||||
func v7VocabularyIsPresent() {
|
||||
let content = AgentGuide.content
|
||||
// The predicate itself: one rule, not a trash special case.
|
||||
#expect(content.contains("a move that changes an item's container"))
|
||||
#expect(content.contains("rewrites only `order`"))
|
||||
#expect(content.contains("into/out of `.trash/`"))
|
||||
#expect(content.contains("The trash move isn't an exception"))
|
||||
// The attachments claimed name: don't squat the folder's name with a file.
|
||||
#expect(content.contains("The name `attachments` itself belongs to that folder"))
|
||||
#expect(content.contains("*file* called `attachments` in a card"))
|
||||
}
|
||||
|
||||
/// 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.
|
||||
@@ -656,5 +675,10 @@ struct AgentGuideContentTests {
|
||||
#expect(!content.contains("media/"))
|
||||
#expect(!content.contains("tombstone"))
|
||||
#expect(content.contains("Never write a `deleted:` key"))
|
||||
// The 2026-07-29 rule was first named "moves-don't-stamp"; the 2026-07-30 refinement
|
||||
// retired that framing (container changes stamp, the trash move included) — the guide
|
||||
// must never teach the superseded shape of the rule.
|
||||
#expect(!content.contains("moves don't stamp"))
|
||||
#expect(!content.contains("moves-don't-stamp"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user