Surprise gap from the post-sweep sanity check — `ui.rs` had a
substantial set of TUI-rendered strings that the previous two
sweep passes didn't cover. Caught by grepping for capitalised
literals in `ui.rs` after running the binary smoke check.
## Migrated
- **modal.*** — load picker title / empty state / path
prompt; rebuild confirm title / "Continue?" prompt.
(modal.path_entry's title comes from `save.*` since it's
the save / save-as dialog.)
- **save.*** — `save` no-op hint, modal titles for
Save / Save as, modal prompt body.
- **status.*** — status bar `Project:` label and the
`(no project)` placeholder.
- **panel.*** — `Tables` panel title, `(none yet)`
placeholder for empty tables, `(no active hint)`
placeholder for the hint panel.
- **shortcut.*** — the bottom-bar keyboard hint labels
(submit, confirm, cancel, yes, no, load, select,
browse_path, back_to_list, switch, advanced_once,
cancel_one_shot, quit). Each is a translatable label
paired with a key name (Enter / Esc / Ctrl-C / etc.) at
the call site. Keystroke names are deliberately left as
literals — translating them would mean retraining users
away from what their keyboard says.
The `push_shortcut` closure's parameter type changed from
`&'static str` to `&str` so it accepts the catalog-returned
String.
## Deliberately left
- **Echo prefix tags**: `[simple] `, `[advanced] `,
`[system] `, `[error] `. Their column widths are
hardcoded into the wrap-width calculation in
`render_output_panel`; translating them would silently
break alignment. Worth a follow-up pass if a future locale
needs different prefixes (would need `mode.label()` and
the echo-tag widths to live behind a single locale-aware
function).
- **Mode labels**: `SIMPLE` / `ADVANCED` / `Advanced:`
rendered in the input panel border. Same alignment
reasoning as the echo tags — also they're keywords (the
user types `mode simple` to switch), so translating the
display label without translating the command word would
be confusing. Left as is.
- **Visual decoration**: `[Y]`, `[N]`, `[TEMP] `, `>`
cursor markers, `█` cursor block, `↑↓` arrow glyph,
`›` selection marker. Universal symbols / labels rather
than translatable prose.
## Catalog totals
The catalog now has ~170 entries across 16 categories.
`tests/engine_vocabulary_audit` passes — no engine
vocabulary leaks anywhere user-reachable.
## Tally
610 tests passing (no change — pure refactor with
identical-output catalog substitutions). Clippy clean
with nursery lints. Release builds at 7.8 MB.
ADR-0019 §9 is now genuinely complete.