The seams unbind — the provider is always native, and the git stack compiles dead
Step 4 of strategy/01-git-excision.md, the entangled one: AppModel's makeHistoryProvider collapses to the native provider (the seam stays injectable per the reversibility posture), the session's git state and its wiring go (wireGitUndo, wireBranchSwitching, the card-session staging threading), BoardStore sheds commitSeam and the identity-history ranker (the loader's nil-safe rung now tops out at birth date — today's no-git behavior), SessionSettleGate keeps the gate and inherits the path utility it borrowed, BoardRegistry drops the persisted operation stamp (decode-safe), and the git banner family leaves BannerCenter with its announcer and accessibility phrases. One missed harvest tie severed (the narrator's root subject is its own now). Nothing outside Kanban/Git/ references the stack — proven by sweep. 2,855 tests green. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -244,21 +244,6 @@ public enum BoardAnnouncer {
|
||||
public var breakageBefore: BoardLoadFailure?
|
||||
public var breakageAfter: BoardLoadFailure?
|
||||
|
||||
/// **The unreadable-repository condition before and after** (06-history-undo.md ▸ Rules,
|
||||
/// ruled 2026-07-31: the standing breakage-class banner, "announced per
|
||||
/// 10-accessibility.md"). Booleans rather than a payload for the row's own reason — the
|
||||
/// sentence is fixed — and a pair rather than a single flag for the lock's: what is
|
||||
/// announced is the *transition*, in either direction.
|
||||
///
|
||||
/// No reload ever sets these. The condition is detected at board open and healed by the
|
||||
/// paused engine's own re-read, neither of which is a reload — so its producer is
|
||||
/// `BoardStore.noteRepositoryUnreadable(_:)`, exactly as the writability probe's lock is
|
||||
/// `announceLockChange(from:)`'s. They live on this value anyway because the ladder is where
|
||||
/// "one sentence, chosen by precedence" is decided, and a second announcer would be a second
|
||||
/// voice.
|
||||
public var repositoryUnreadableBefore = false
|
||||
public var repositoryUnreadableAfter = false
|
||||
|
||||
public init() {}
|
||||
}
|
||||
|
||||
@@ -319,14 +304,6 @@ public enum BoardAnnouncer {
|
||||
if let breakage = facts.breakageAfter, breakage != facts.breakageBefore {
|
||||
return AccessibilityPhrases.bannerLabel(tone: .error, headline: BannerCenter.headline(for: breakage))
|
||||
}
|
||||
// Last of the raised conditions, matching the strip's own precedence: the two above it
|
||||
// describe the board's files, this one describes the history over them.
|
||||
if facts.repositoryUnreadableAfter, !facts.repositoryUnreadableBefore {
|
||||
return AccessibilityPhrases.bannerLabel(
|
||||
tone: .error,
|
||||
headline: BannerCenter.repositoryUnreadableMessage
|
||||
)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -339,9 +316,6 @@ public enum BoardAnnouncer {
|
||||
if facts.breakageBefore != nil, facts.breakageAfter == nil {
|
||||
return AccessibilityPhrases.reloadBreakageCleared
|
||||
}
|
||||
if facts.repositoryUnreadableBefore, !facts.repositoryUnreadableAfter {
|
||||
return AccessibilityPhrases.repositoryUnreadableCleared
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user