The tier axis comes out of the git stack — compose unconditional, postures mode-driven
HistoryStore.compose(boardRoot📒) returns non-optional and runs for every session — the nil the gate produced was the only nil it ever had. makeHistoryProvider is a one-axis decision: git-mode boards bind the git provider, everything else native, in every tier; Session.tier stays recorded, dormant. BoardGitSection shrinks to the four mode postures (.absent and .proPointer die, BoardGitNote and the .git probe with them); every board carries all three popover tabs (BoardInfoTab.available retired); the titlebar branch shows on any git-mode board; the settings sheet and card History section stop reading tier. InertGitTests is repurposed as UntouchedGitTests — the file layer still never opens .git, now load-bearing for mode-none boards. The accessibility audit reaches the settings sheet at last: the fixture board hosts it in every tier, so the free-fixture disabled-row test becomes an open-and-audit test. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -113,8 +113,9 @@ struct BoardWindowHost: View {
|
||||
/// following walk builds (`BoardRepairRun`, `EchoLedger.adopt`).
|
||||
///
|
||||
/// It cannot live anywhere else: the repairs run before a store exists and the receipts have to
|
||||
/// reach that store's ledger before `beginSession` composes Pro's committer, or the app's own
|
||||
/// repair commits as `Lanework External`. Cleared once adopted.
|
||||
/// reach that store's ledger before `beginSession` composes a git board's committer, or the app's
|
||||
/// own repair commits as `Lanework External`. (Pro's committer, until 12-editions.md ▸ PIVOT
|
||||
/// 2026-08-07 made it every git board's.) Cleared once adopted.
|
||||
@State private var repairLedger: EchoLedger?
|
||||
|
||||
@State private var phase: Phase = .opening
|
||||
@@ -396,7 +397,8 @@ struct BoardWindowHost: View {
|
||||
|
||||
// **The repair's receipts, into the board's own ledger — before the session composes**
|
||||
// (01: "On Pro boards the repairs drop heal-marked receipts and commit separately as one
|
||||
// repair commit"). `beginSession` is where Pro's committer is built and started, and the
|
||||
// repair commit" — every git board's since 12-editions.md ▸ PIVOT 2026-08-07, the sentence
|
||||
// otherwise unchanged). `beginSession` is where that committer is built and started, and the
|
||||
// committer harvests the ledger it is handed; receipts adopted after that line would be
|
||||
// receipts the repair commit never sees, and the app's own repair would be authored
|
||||
// `Lanework External`.
|
||||
@@ -730,31 +732,34 @@ struct BoardWindowHost: View {
|
||||
// load rather than at attach because it carries the store; the controller installs it once,
|
||||
// whichever of the two arrives second.
|
||||
//
|
||||
// The tier and the git state come from the **session**, which `start()` began a moment ago,
|
||||
// rather than from the entitlement or the disk: a board's popover must describe the board as
|
||||
// it opened (12-editions.md ▸ The entitlement, "an open board finishes with the provider it
|
||||
// composed"; 06-history-undo.md ▸ Rules, mode is an open-time fact). A `nil` session cannot
|
||||
// happen on this path — `beginSession` precedes `configureWindow` — and reads as the free
|
||||
// tier's posture, which is the harmless direction.
|
||||
// The git state comes from the **session**, which `start()` began a moment ago, rather than
|
||||
// from the entitlement or the disk: a board's popover must describe the board as it opened
|
||||
// (12-editions.md ▸ The entitlement, "an open board finishes with the provider it composed";
|
||||
// 06-history-undo.md ▸ Rules, mode is an open-time fact). A `nil` session cannot happen on
|
||||
// this path — `beginSession` precedes `configureWindow` — and reads as a board with no
|
||||
// repository, which is the harmless direction.
|
||||
//
|
||||
// **The tier is no longer passed down** (12 ▸ PIVOT 2026-08-07): git is tier-independent, so
|
||||
// every one of these surfaces reads the board's mode and nothing else. `BoardSession.tier`
|
||||
// still exists and is still recorded — it just has no git-facing consumer here.
|
||||
let session = appModel.session(for: ref)
|
||||
// The settings sheet's two doors validate on the same pair, so they are adopted here rather
|
||||
// The settings sheet's two doors validate on the same fact, so it is adopted here rather
|
||||
// than read again somewhere else: the popover's Board Settings… row and Board ▸ Board
|
||||
// Settings… must never disagree about whether this board has setup to show
|
||||
// (`BoardSettingsAvailability`). The mode *inside* the git state stays live — add-git flipping
|
||||
// it re-resolves the sheet's sections and both doors, which is the one mid-session transition
|
||||
// 06 sanctions.
|
||||
boardSettings.adopt(tier: session?.tier ?? .free, git: session?.git)
|
||||
boardSettings.adopt(git: session?.git)
|
||||
windowController.installTitlebarAccessory(
|
||||
boardInfoTitlebarAccessory(
|
||||
store: store,
|
||||
recents: appModel.styleRecents,
|
||||
tier: session?.tier ?? .free,
|
||||
git: session?.git,
|
||||
presentation: boardInfo,
|
||||
settings: boardSettings
|
||||
)
|
||||
)
|
||||
// The widget above now says the board's name (and, on a git-mode Pro board, its branch)
|
||||
// The widget above now says the board's name (and, on a git-mode board, its branch)
|
||||
// itself, so the system title display would only repeat it — the card-window seam
|
||||
// (`CardWindowHost.configureWindow`, `HostedWindowController.hideTitle`), applied here for
|
||||
// the same reason. `.navigationTitle(windowTitle)` a few lines up in `body` is untouched —
|
||||
|
||||
Reference in New Issue
Block a user