# Memoria UX review · 12 September 2026

## MemoriaWorkspace.swift

1. **Medium: give desktop results enough reading width.** The original narrow
   sidebar wrapped snippets excessively. Split-view width hints alone were
   ignored in the actual Mac render; a Mac-only minimum frame now enforces
   280 points, with a 340-point ideal. The compact Answer action fits clearly.

   Before: column min 220 / ideal 260.
   After: column min 280 / ideal 340, plus `.frame(minWidth: 280, idealWidth: 340)`
   on Mac. iPhone keeps the native compact navigation layout.

2. **Medium: remove internal indexing details.** Passage 0 and similar ordinals
   offered no useful navigation. Results now show a named source type, readable
   snippet and source number. An explicit results section separates matches
   from the Answer action. Result accessibility combines the row's description.

   Before: `Source [1] · Passage 0`
   After: `Source 1`, with source type and snippet above.

3. **Medium: anchor answers to the current search.** The generic slogan is
   replaced by the query and a clear answer purpose. Before searching, a native
   ContentUnavailableView explains how to start. A stable thinking indicator
   stays visible while permission rechecks temporarily clear results. Sources
   have a divider, document labels and 44-point minimum tap areas.

4. **Medium: prove source navigation in compact and split layouts.** The
   selected passage text has a detail-only `sourcePassage` identifier. Tests
   assert its existence and exact body rather than matching the sidebar snippet.
   Only compact navigation expects a Source navigation bar. The final test
   scopes its tap to the sidebar result cell: on iPad the same title also
   appears as the search-query heading, so a global text selector was ambiguous.

## AddNoteView.swift

**Medium: label the editable note body for assistive technology.**

Before: `TextEditor(text: $bodyText)`
After: `TextEditor(text: $bodyText).accessibilityLabel("Note")`

Priority addressed: result readability and navigation, then contextual answers,
progress feedback and editor accessibility.

## Method and validation

Applied `swiftui-pro` design, accessibility and navigation references, plus
`swiftui-native-component-design` semantics/control/accessibility guidance.
Reviewed actual SwiftUI renders on Mac, iPhone and iPad; checked light mode and
accessibility-large Dynamic Type in dark mode on iPhone. Real forms/navigation
are exercised through the isolated authenticated Go fixture and XCTest.
No backend, auth, model retrieval or permission behavior changed.

Independent reviewer: `/root/canary_release_review`, dispatched as `gpt-6-astra`
with high reasoning; runtime identity not independently verified. Screenshots
and source corrections were reviewed independently. Full VoiceOver walkthrough,
localization and every accessibility size remain hands-on acceptance work.

Final independent review approved. The scoped iPad test passed (15.496 seconds
XCTest; 38.230 seconds complete fixture). The reviewer removed only the result
cell tap: detail-only sourcePassage assertions failed as intended. The test was
restored byte-for-byte to the passing version, then this mutation comment was
added. The mutation's XCTest suite finished with the intended failures, but its
xcodebuild watcher hung during teardown and was terminated; that watcher is not
claimed as a completed normal test run. Evidence: `/tmp/memoria-ux-scoped-clean.log`
and `/tmp/memoria-ux-scoped-mutation.log`.
