2.5.4 #17
No reviewers
Labels
No labels
user-feedback
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Reference
rune/oai-swift!17
Loading…
Reference in a new issue
No description provided.
Delete branch "2.5.4"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Quite a few changes...
HeaderView and FooterView both hand-rolled the same anti-pattern — .background(.ultraThinMaterial) plus a manual hairline-border overlay to fake a system chrome bar. Replaced with .safeAreaBar(edge: .top)/ .safeAreaBar(edge: .bottom) on ChatView's main content, which gives a real system blur treatment and correctly reserves safe-area space for the scrollable message list (the previous VStack-stacking approach just visually sat the bars in the flow without adjusting scroll insets). InputBar stays in the regular VStack flow, not pulled into either safeAreaBar — it's a solid-surface text input area, not glass chrome, matching the existing plan's scope (Phase 2 was HeaderView/ FooterView/ChatView only). Verified .safeAreaBar's real signature against the SDK directly before using it: it's safeAreaBar(edge:alignment:spacing:content:), a required `edge:` label — the installed skill's own example code shows it called positionally (`.safeAreaBar(.bottom) { ... }`), which wouldn't actually compile. Confirmed both .top and .bottom (VerticalEdge cases) are real and available at the deployment target. Build, Release build (no warnings), and full test suite all clean.Rune corrected the previous fix: oAIApp.swift's .keyboardShortcut("?", modifiers: .command) binding was never broken — AppKit resolves both the required physical keys and the rendered glyph dynamically based on the Mac's active keyboard layout, so the same code genuinely plays out as ⌘? on an English layout and ⇧⌘? on Norwegian/German/Danish layouts. Hardcoding either spelling in the (English-only, non-localized) Help Book and HelpView's shortcuts list was only ever correct for some readers. Both docs now note the layout dependency instead of picking one spelling. Also added an entry for this shortcut to HelpView's in-app list, which didn't list it at all before.Completes the structural gap from project_roadmap_priorities: wrote a scanner covering Button(/.help(/Label(/Toggle(/Link(/SecureField(/ TextField(/CommandMenu(/Picker(/Menu(/NavigationLink(/Section(/.alert(/ .navigationTitle(/.confirmationDialog( literal call sites across all 108 Swift files, diffed against the catalog. Found 64 candidates; manually verified each against its actual source context (not just the extracted string) before classifying — 41 were genuine UI copy never localized (folder context menus, Apple Intelligence status badges, export menu, GitSync conflict/manual-fix sheet buttons, Node install sheet, stats section headers, etc.), 23 were correctly excluded per CLAUDE.md (TextField placeholders showing example URLs/ ports/paths, the 'safaridriver'/'Safari' external-MCP preset names, model-ID examples), and 1 ('Increment') was a scanner false positive — a Button(...) call inside MockData.swift's mock chat *content* string, not real UI. Also fixed a real manual-plural bug found along the way in CombineConversationsSheet.swift: "(\(count) messages)" hardcoded the English plural instead of using the project's inflect syntax — now ^[\(count) message](inflect: true), matching CLAUDE.md's stated plural convention.