fix(repo-appearance): seed appearance synchronously and curate presets
Two user-facing bugs and one tooling-quality fix.
**Bug 1+2 — appearance race on Settings reopen.**
Previously appearance was loaded from `@Shared(.repositoryAppearances)`
inside `RepositorySettingsFeature.task`, which sits behind an async
`gitClient.isBareRepository` await for git repos. The Settings UI
rendered with `.empty` appearance during that window, so:
- clicking a color before the load completed wrote `{icon: nil,
color: x}` and wiped the previously-saved icon (Bug 1)
- the color picker briefly showed "No color" selected for a repo
that did have a saved color (Bug 2)
Fix: read `@Shared(.repositoryAppearances)[repository.id]` synchronously
in `AppFeature` when constructing the `RepositorySettingsFeature.State`
— the same pattern settings/userSettings already use. The State is
correct from frame zero, eliminating the race. Removed the redundant
`appearanceLoaded` send from `.task` since there's no scenario where
appearance changes externally to this Settings window (unlike settings,
which can be touched from other windows during the git probe).
Two new regression tests pin the behavior:
- `selectingRepositorySeedsAppearanceSynchronously` (AppFeature) —
selecting a repo whose appearance is in @Shared produces a State
with that appearance, no subsequent action required.
- `pickingColorKeepsExistingIcon` / `pickingIconKeepsExistingColor`
(Reducer) — partial mutations preserve the other field.
**Bug 3 — `rocket.fill` rendered as a blank tile.**
SF Symbols ships `rocket` but no `.fill` variant; the picker showed an
invisible cell. Curate the preset list to symbols verified available
since SF Symbols 1–2 (macOS 11–12) baseline. New
`RepositoryIconPresetsTests` runs every entry through
`NSImage(systemSymbolName:)` so a future bad name is caught at CI
rather than in the picker.
**Bug 4 — picker had 36 entries, leaving the bottom row half-empty.**
Curated list now has exactly 40, organized: folders/containers (8) →
docs/books (6) → tags/markers (3) → tools/dev (8) → network (4) →
art (2) → nature/symbols (9). Pinned with a count test.