The settings captions were essays — 2 097 words down to 973 #272

Merged
enricobuehler merged 1 commits from worktree-apple-settings-copy-trim into main 2026-08-16 20:17:32 +00:00
Owner

Every row in the Apple client's three settings surfaces carried its whole design rationale in the caption. Audio quality was the extreme: six dynamic variants, each with a bandwidth-gate rider and a surround rider bolted on, so 96 kHz on 5.1 rendered ninety-five words under one picker. The tvOS cluster caption for the same setting was a single 102-word paragraph, read from a sofa.

50 strings rewritten across five files: 2 097 → 973 user-facing words, −54%.

The rule

One clause of what the setting does, one of what it costs. Toggles land under ~12 words, pickers under ~16.

  • Numbers survive — "2.3 Mbps", "one refresh of latency", "20 Mbps" are the actionable half.
  • Rationale does not. It already lives in the code comment directly above each caption, in duplicate. That is its right home.
  • Pre-emptive troubleshooting goes"turn off if hosts behind a VPN look offline when they aren't" is a support answer, not a toggle subtitle.
  • Captions that restate the row's own label go"Live session stats in a corner overlay" under a row labelled Statistics overlay.
  • Real warnings stay, tightened. windowed_safe_present is the only setting whose wrong value can take down the whole machine, so its off-state still says "kernel-panic" and says it early.

Before / after

Before After
Audio quality (six variants + riders) 273 w 78 w
tvOS audio cluster caption 102 w 27 w
Echo cancellation 44 w 15 w
Forward controllers 43 w 15 w
Hold Select for guide 43 w 13 w

Three things worth knowing

The lossless gate riders moved to the section footer. They are gone from all five lossless rows and said once, in the Audio footer. That sentence — "Lossless falls back to Standard if the host or this device's output declines it." — is now the only thing keeping audioFormatCaption compliant with the design rule that the UI states the RESOLVED format, never the requested one. Its doc comment says so. Do not delete it without replacing it.

bitrateFooter loses its speed-test sentence entirely rather than being shortened. That string is tvOS-only and directed Apple TV users to a host card's context menu; tvOS has no context menus. A bug, not just length.

Seven console rows are now word-for-word with their touch-UI twins. The two surfaces had drifted into describing identical settings differently, which is how the divergence started.

Verification

swift build --target PunktfunkClient is clean on macOS, on arm64-apple-ios17.0 against the iPhoneOS SDK, and on arm64-apple-tvos17.0 against the AppleTVOS SDK — so the #if-gated iOS and tvOS branches are compiled rather than assumed. tvBody in particular carries three of the edited captions and neither of the other two builds reaches it.

347 tests pass, 0 failures. No test asserts any of these strings.

Scope

Apple only. Error and notice text is untouched — an error has to say what went wrong and what to do, which is a different job with a different budget.

The Linux GTK client was already writing at the right length and served as the reference; Android's echo-cancel wording is the phrasing all four clients now share. Android still owes the same pass on four strings (audio quality, forward controllers, controller type, and its touch-UI audio caption) — happy to follow up so all four clients read identically.

Every row in the Apple client's three settings surfaces carried its whole design rationale in the caption. **Audio quality** was the extreme: six dynamic variants, each with a bandwidth-gate rider and a surround rider bolted on, so 96 kHz on 5.1 rendered ninety-five words under one picker. The tvOS cluster caption for the same setting was a single **102-word paragraph**, read from a sofa. 50 strings rewritten across five files: **2 097 → 973 user-facing words, −54%**. ## The rule One clause of what the setting does, one of what it costs. Toggles land under ~12 words, pickers under ~16. - **Numbers survive** — "2.3 Mbps", "one refresh of latency", "20 Mbps" are the actionable half. - **Rationale does not.** It already lives in the code comment directly above each caption, in duplicate. That is its right home. - **Pre-emptive troubleshooting goes** — *"turn off if hosts behind a VPN look offline when they aren't"* is a support answer, not a toggle subtitle. - **Captions that restate the row's own label go** — *"Live session stats in a corner overlay"* under a row labelled **Statistics overlay**. - **Real warnings stay, tightened.** `windowed_safe_present` is the only setting whose wrong value can take down the whole machine, so its off-state still says "kernel-panic" and says it early. ### Before / after | | Before | After | |---|---:|---:| | Audio quality (six variants + riders) | 273 w | 78 w | | tvOS audio cluster caption | 102 w | 27 w | | Echo cancellation | 44 w | 15 w | | Forward controllers | 43 w | 15 w | | Hold Select for guide | 43 w | 13 w | ## Three things worth knowing **The lossless gate riders moved to the section footer.** They are gone from all five lossless rows and said once, in the Audio footer. That sentence — *"Lossless falls back to Standard if the host or this device's output declines it."* — is now the only thing keeping `audioFormatCaption` compliant with the design rule that **the UI states the RESOLVED format, never the requested one**. Its doc comment says so. Do not delete it without replacing it. **`bitrateFooter` loses its speed-test sentence entirely** rather than being shortened. That string is tvOS-only and directed Apple TV users to a host card's context menu; tvOS has no context menus. A bug, not just length. **Seven console rows are now word-for-word with their touch-UI twins.** The two surfaces had drifted into describing identical settings differently, which is how the divergence started. ## Verification `swift build --target PunktfunkClient` is clean on **macOS**, on **`arm64-apple-ios17.0`** against the iPhoneOS SDK, and on **`arm64-apple-tvos17.0`** against the AppleTVOS SDK — so the `#if`-gated iOS and tvOS branches are compiled rather than assumed. `tvBody` in particular carries three of the edited captions and neither of the other two builds reaches it. **347 tests pass, 0 failures.** No test asserts any of these strings. ## Scope Apple only. Error and notice text is untouched — an error has to say what went wrong and what to do, which is a different job with a different budget. The **Linux GTK client was already writing at the right length** and served as the reference; Android's echo-cancel wording is the phrasing all four clients now share. **Android still owes the same pass** on four strings (audio quality, forward controllers, controller type, and its touch-UI audio caption) — happy to follow up so all four clients read identically.
enricobuehler added 1 commit 2026-08-16 20:05:09 +00:00
refactor(apple): the settings captions were essays — 2 097 words down to 973
apple / swift (pull_request) Successful in 2m4s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
ci / web (pull_request) Successful in 1m5s
ci / rust-arm64 (pull_request) Successful in 1m35s
ci / bun-nix (pull_request) Successful in 38s
ci / docs-site (pull_request) Successful in 1m41s
ci / rust (pull_request) Successful in 5m15s
d1a9456e1c
Every row in the Apple client's three settings surfaces carried its whole
design rationale in the caption. "Audio quality" was the extreme: six dynamic
variants, each with a bandwidth-gate rider and a surround rider bolted on, so
96 kHz on 5.1 rendered ninety-five words under one picker. The tvOS cluster
caption for the same setting was a single 102-word paragraph, read from a sofa.

The rule applied throughout: one clause of what the setting does, one of what
it costs. Numbers survive — "2.3 Mbps", "one refresh of latency", "20 Mbps" are
the actionable half. The rationale does not; it already lives in the code
comment directly above each caption, which is its right home. Pre-emptive
troubleshooting ("turn off if hosts behind a VPN look offline when they
aren't") goes too — that is a support answer, not a toggle subtitle.

Three things worth knowing:

- The lossless gate riders are gone from all five rows and said ONCE in the
  Audio section footer instead. That footer sentence is now the only thing
  keeping `audioFormatCaption` honest about the design's rule — the picker must
  never read as a promise of the RESOLVED format — so its doc comment says so.
  Do not drop it without replacing it.

- `bitrateFooter` loses its speed-test sentence entirely rather than being
  shortened. That string is tvOS-only and directed Apple TV users to a host
  card's context menu; tvOS has no context menus. A bug, not just length.

- Seven console rows are now word-for-word with their touch-UI twins. The two
  surfaces had drifted into describing identical settings differently, which is
  how the divergence started in the first place.

Safe windowed presentation is trimmed conservatively — it is the only setting
whose wrong value can take down the whole machine, so the off-state keeps
"kernel-panic" and keeps it early.

Verified: `swift build --target PunktfunkClient` clean on macOS, and on
arm64-apple-ios17.0 and arm64-apple-tvos17.0 against their own SDKs, so the
#if-gated iOS and tvOS branches are covered rather than assumed. 347 tests pass.
enricobuehler merged commit c52b3c4736 into main 2026-08-16 20:17:32 +00:00
enricobuehler deleted branch worktree-apple-settings-copy-trim 2026-08-16 20:17:33 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#272