The paper agrees with the code — guide v11, README, DESIGN re-rulings, and the adjudicated sweep
Step 7 of strategy/01-git-excision.md, the companions. The agent guide bumps to v11: the Git section teaches repo-resident etiquette alone (stage only your own paths, commit your own changes, leave app-maintained files to the app) — existing boards heal to the new text on next open. README re-anchors: the four git feature bullets out, tiers say the complete Mac experience is free, and one bullet states the format's git-friendliness promise. The changelog drops the never-shipped git entries. DESIGN re-rules: 06 retired with Undo routing migrated to 13 (now the sole substrate's doc, seam kept open), 07 retired as written pending the ops-service workstream, 14 retired as superseded record, 12 carries the second pivot note, the index reflects all of it; the charter gets a pointer note (the anchors' full re-ruling stays with the user). InertGitTests renames to GitAgnosticStorageTests — the excision restores its original claim app-wide. And the sweep: ~70 comment sites across 36 files adjudicated against the keeper list, every present-tense description of the excised machinery made past tense or repointed, keepers untouched. 2,707 tests green. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -215,7 +215,9 @@ private struct BannerRowView: View {
|
||||
switch control {
|
||||
case let .cancel(cancel):
|
||||
// Cancel appears on safe copies only (02, settled): it means "remove the partial copy,
|
||||
// nothing lost". Git brackets pass no closure and therefore get no button.
|
||||
// nothing lost". Wholesale brackets that pass no closure get no button — once git's,
|
||||
// before the excision (`strategy/01-git-excision.md`, 2026-08-08); no caller passes one
|
||||
// today.
|
||||
Button(control.label, action: cancel)
|
||||
.buttonStyle(.link)
|
||||
.font(.callout)
|
||||
|
||||
@@ -93,11 +93,13 @@ extension BoardStore {
|
||||
/// broader lockdown that already covers these two items.
|
||||
/// - **The board popover's fields** are covered by disabling while the popover is open at all —
|
||||
/// coarser than per-field focus, but it is a configuration surface (04's carve-out) and no lane
|
||||
/// move belongs under it. That clause covers **every** configuration field the app has again since
|
||||
/// move belongs under it. That clause covered **every** configuration field the app had since
|
||||
/// 2026-08-07: the 2026-07-31 split moved most of them to a board settings sheet, whose flag this
|
||||
/// function read as a third disjunct, and the reversal brought them back — branch creation, commit
|
||||
/// identity, and pro-m2's remote URL and credentials all live in the popover's Git tab, under the
|
||||
/// popover's own open-at-all rule.
|
||||
/// function read as a third disjunct, and the reversal brought them back under the popover's own
|
||||
/// open-at-all rule — branch creation, commit identity, and pro-m2's remote URL and credentials
|
||||
/// among them, all in the popover's Git tab at the time. The Git tab itself retired with
|
||||
/// app-managed git (`strategy/01-git-excision.md`, 2026-08-08); the popover's open-at-all rule
|
||||
/// now guards only `BoardInfoTabView`'s ordinary fields.
|
||||
/// - **The search field** is per-focus and exact (`BoardSearchPresentation.isFocused`), which it has
|
||||
/// to be: the field's own rule is that board commands *stay enabled* while it holds the keyboard
|
||||
/// (04 § Search), so these two are the narrow exception to it and nothing coarser would do.
|
||||
|
||||
@@ -43,9 +43,10 @@ extension NSToolbarItem.Identifier {
|
||||
/// `windowWillReturnUndoManager` hands back the session's `BoardUndoManager`, and both therefore
|
||||
/// enable exactly when that board has a step to cross and no read-only lock stands
|
||||
/// (13-native-undo.md ▸ Rules). **Every board has undo in every tier**, so there is no tier-shaped
|
||||
/// disablement to write: 03's parenthetical about boards without undo is 06's *git* substrate, which
|
||||
/// a board binds by being in git mode — on any tier since 12-editions.md ▸ PIVOT 2026-08-07, and
|
||||
/// under a Pro subscription before it.
|
||||
/// disablement to write: 03's parenthetical about boards without undo was 06's *git* substrate,
|
||||
/// which a board once bound by being in git mode — on any tier since 12-editions.md ▸ PIVOT
|
||||
/// 2026-08-07, and under a Pro subscription before it, until app-managed git left the app entirely
|
||||
/// (`strategy/01-git-excision.md`, 2026-08-08) and there stopped being a substrate to bind.
|
||||
///
|
||||
/// Their labels are the design's one exception to the menu-title rule: `NSUndoManager` rewrites the
|
||||
/// *menu* titles as the stack changes ("Undo Move Card"), which a toolbar label does not track, so
|
||||
|
||||
@@ -75,9 +75,9 @@ public final class CardBodyPresentation {
|
||||
/// is the type every path that *enters* Edit already holds, so attaching the announcement to the
|
||||
/// flip makes "always" true by construction rather than by three call sites remembering.
|
||||
///
|
||||
/// Filled in by the window with its edit session's `beginEditSession()`. Its consumer is pro-m1's
|
||||
/// auto-committer, which stages around the card's folder for as long as the session stands
|
||||
/// (06-history-undo.md ▸ Rules ▸ Auto-commit).
|
||||
/// Filled in by the window with its edit session's `beginEditSession()`. Its original second
|
||||
/// consumer — the auto-committer's stage-around — left with the git excision (2026-08-08,
|
||||
/// strategy/01-git-excision.md); the session bookkeeping it drives is its own reason now.
|
||||
public var beginEdits: (() -> Void)?
|
||||
|
||||
/// Whether the opening rule has already run for this window.
|
||||
@@ -97,7 +97,7 @@ public final class CardBodyPresentation {
|
||||
hasOpened = true
|
||||
mode = CardBodyMode.opening(body: body)
|
||||
// A card that opened straight into Edit because its body was empty is in a session exactly
|
||||
// like one the user pressed ⌘E in, and the committer has to stage around it either way.
|
||||
// like one the user pressed ⌘E in, and the session bookkeeping applies either way.
|
||||
if mode == .edit { beginEdits?() }
|
||||
return mode
|
||||
}
|
||||
|
||||
@@ -146,8 +146,8 @@ public final class CommentEditSession {
|
||||
/// **Save, or ⌘↩** — the session's commit point (05 ▸ The comments column). Flushes and ends.
|
||||
///
|
||||
/// A named call rather than a bare `flush()` for `CardBodyEditSession.endEditSession()`'s reason:
|
||||
/// this is the boundary a Pro auto-commit coalesces on, one commit per session and never per save
|
||||
/// tick (06-history-undo.md ▸ Rules ▸ Auto-commit).
|
||||
/// this is the session's one settlement boundary — the excised auto-committer coalesced on it
|
||||
/// (one commit per session, never per save tick), and any future history consumer would too.
|
||||
@discardableResult
|
||||
public func commit() -> Bool {
|
||||
guard !hasEnded else { return false }
|
||||
|
||||
Reference in New Issue
Block a user