Files
amethyst/.claude/skills/android-expert
Claude f94fbe25b1 refactor: put the moved UI in the documented commons layout and fix the audit findings
A review of this branch against commons/ARCHITECTURE.md found the first
moves had kept the app's layer-first paths (commons.ui.screen.loggedIn.<x>)
and put headless code under ui.*. Everything now follows the documented
taxonomy:

  - Feature UI lives in <feature>/ui, named after its quartz package:
    nip51Lists/ui (bookmark groups, people lists, follow packs, interest
    sets), nip52Calendar/ui, nip34Git/ui, nip64Chess/ui, nip23LongContent/ui,
    nip28PublicChat/ui, nip29RelayGroups/ui, nip17Dm/ui, nip56Reports/ui,
    nip72ModCommunities/ui, nipC0CodeSnippets/ui, nipCCGeocaching/ui,
    nipACWebRtcCalls/ui, and concern names where quartz has no NIP (chats,
    marmot, concord, ephemChat, buzz, birdstar, music, cashu, onchain,
    browser, napplet, profile, mediaServers, relays, qrcode, scheduledposts,
    account/ui/login|signup). commons.ui.screen is gone.
  - Nothing under ui.* remains in the commons module. The Route catalog and
    BookmarkType go to model/navigation and model/nip51Lists; the headless
    composer state (AudienceSelection, SplitBuilder, IZapRaiser) to
    model/composer; classifyScannedPayload to qrcode; the scheduled-post
    parsers split out of ScheduledPostMedia into commons scheduledposts,
    leaving only MediaThumbnail in commonsUI. The CLI can now reach them.
  - ARCHITECTURE.md documents ui/feeds and ui/navigation as cross-cutting
    areas and lists the new feature packages.

Duplicates removed:
  - AddButton/RemoveButton existed twice in commonsUI; the unused
    ui/components pair (hard-coded English) is replaced by the localized
    one, which now lives in ui/components/ActionButtons.kt.
  - desktop's own UserDisplayNameLayout was an unused copy of the shared
    one; deleted.
  - Colors.kt merged into Color.kt: empty section headers dropped,
    LightPurple (= Purple200, unused) removed, DefaultPrimary (= Primary80)
    replaced at its one desktop call site.

isLight:
  - The fallback for non-Amethyst backgrounds (desktop's palette, audio
    rooms whose theme overrides the background) is now memoized for the
    last background seen, so those screens pay for luminance() once per
    background instead of on every themed-color read. The comment said
    "single reference comparison", which was no longer true; rewritten.
  - IsLightTest covers both Amethyst schemes across accents, desktop's
    #121212 / #F2F2F7 ramps, themed-room backgrounds and the memo.
  - Behaviour note: NestThemedScope rooms with a dark background used to
    count as light (anything not pure black did), so their gray text,
    placeholders and borders took the light-theme values. They now follow
    the room background's luminance.

Also:
  - Baseline profile: the entries for every class this branch moved
    (theme facades, the Theme.kt members that became AmethystColorScheme /
    MarkdownStyle, routes, the moved composables) are rewritten to the new
    class names so ART still AOT-compiles them. The profile has older stale
    entries from earlier migrations (datasource assemblers, LocalCache,
    okhttp) that need a real regeneration on a device.
  - Two inline fully-qualified Route references in the nests lobby use the
    import instead.
  - GitStatusPill's KDoc said the index read "stays native"; it no longer
    does.
  - The android-expert skill and its navigation reference point to the new
    Route/INav/theme locations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168wY9t7i9NC5u3svyMxEz6
2026-09-23 19:33:50 +00:00
..
2025-12-30 15:18:48 +02:00