An unopenable repository fails loudly — the standing row, the paused surface, the honest heal
Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -237,6 +237,29 @@ enum GitRepository {
|
||||
|
||||
// MARK: Reads
|
||||
|
||||
/// **Whether libgit2 can open the repository at the board root at all** — the detection-time
|
||||
/// probe behind 06-history-undo.md ▸ Rules' corrupt-`.git` loud failure (ruled 2026-07-31):
|
||||
/// "a corrupt or unopenable repo never falls to mode none … the failure is **loud**".
|
||||
///
|
||||
/// It is deliberately the *same* call every read here already makes (`Repository.open`), so
|
||||
/// "unreadable" means exactly what it means to the rest of this file rather than being a second
|
||||
/// opinion about the same repository. `git_repository_open` validates the layout — `HEAD`,
|
||||
/// `objects/`, `refs/` — resolves a `gitdir:` pointer file, and refuses a repository whose
|
||||
/// format version or extensions it does not implement, which is why a SHA-256 repository lands
|
||||
/// here "by construction" (06 ▸ Repository hygiene: "an adopted SHA-256 repo the engine cannot
|
||||
/// open takes the corrupt-repo loud-failure path").
|
||||
///
|
||||
/// A board with no `.git` at all answers `false` too — there is no repository to read — but that
|
||||
/// is not a state any caller reaches: the probe runs only in mode `git`, which is exactly the
|
||||
/// mode a root `.git` defines.
|
||||
///
|
||||
/// Read-only, like everything in this section: opening a repository writes nothing, and a
|
||||
/// repository that fails to open has not been touched at all.
|
||||
nonisolated static func canOpen(at boardRoot: URL) -> Bool {
|
||||
guard BoardGitMode.hasGitEntry(at: boardRoot) else { return false }
|
||||
return (try? Repository.open(at: boardRoot)) != nil
|
||||
}
|
||||
|
||||
/// The current branch's short name, or `nil` when there is no repository at `boardRoot` or
|
||||
/// libgit2 cannot open it — the popover's read-only branch line (03-board-ui.md ▸ Board
|
||||
/// popover), and nothing more: branch switching and creation are a later card.
|
||||
|
||||
Reference in New Issue
Block a user