fix(copy): replace em-dashes in user-facing strings with commas/periods

Per the project's no-dashes feedback rule (see CORBEL-Main memory
feedback_no_dashes.md), em-dashes in user-visible copy are the single
biggest "AI wrote this" surface tell. Forty-two occurrences across ten
files: ten in SettingsPage's group descriptions and option labels
(audio device picker, vocabulary help, prompt placeholders, model
descriptions), four in FirstRunPage's setup steps, three in
DictationPage / FilesPage / Energy chip tooltips, plus the privacy
bullets ("100% offline, no Python required, no cloud, no accounts,
no telemetry"), the rejection toast, MicroSteps thumb labels, and the
shutdown ritual prompts.

Replacement rule: subordinate-clause em-dashes followed by lowercase
become commas; sentence-break em-dashes followed by capitals become
full stops. Code comments left intact.

One non-em-dash regression caught while reviewing: TasksPage's energy
filter "no selection" placeholder showed "—" as a literal label; the
script changed it to a comma which read as a UI bug. Replaced with
"Any" instead.
This commit is contained in:
2026-05-07 09:16:37 +01:00
parent 637ed89eac
commit 360e5457dc
10 changed files with 39 additions and 39 deletions

View File

@@ -54,7 +54,7 @@
let tooltip = $derived(
energy === null
? "Tag energy (click to set)"
: `Energy: ${labelFor(energy)} click to change`
: `Energy: ${labelFor(energy)}, click to change`
);
// Icon dimensions. `md` is the one used on the Tasks-page main rows;

View File

@@ -211,7 +211,7 @@
</button>
{#if rejectionReason}
<span class="text-[11px] text-warning" role="alert">
Couldn't bind that combo {rejectionReason}.
Couldn't bind that combo. {rejectionReason}.
</span>
{/if}
</div>

View File

@@ -263,8 +263,8 @@
class="opacity-0 group-hover:opacity-100 p-0.5 text-text-tertiary hover:text-success
{rating[step.id] === 1 ? '!opacity-100 text-success' : ''}"
onclick={() => recordThumb(step, 1)}
aria-label={rating[step.id] === 1 ? 'Remove thumbs up' : 'Thumbs up this is a good step'}
title="Thumbs up train the model on this style"
aria-label={rating[step.id] === 1 ? 'Remove thumbs up' : 'Thumbs up, this is a good step'}
title="Thumbs up, train the model on this style"
style={reduceMotion ? '' : 'transition: opacity var(--duration-ui), color var(--duration-ui)'}
>
<ThumbsUp size={10} aria-hidden="true" />
@@ -273,8 +273,8 @@
class="opacity-0 group-hover:opacity-100 p-0.5 text-text-tertiary hover:text-danger
{rating[step.id] === -1 ? '!opacity-100 text-danger' : ''}"
onclick={() => recordThumb(step, -1)}
aria-label={rating[step.id] === -1 ? 'Remove thumbs down' : 'Thumbs down this misses the mark'}
title="Thumbs down avoid this style"
aria-label={rating[step.id] === -1 ? 'Remove thumbs down' : 'Thumbs down, this misses the mark'}
title="Thumbs down, avoid this style"
style={reduceMotion ? '' : 'transition: opacity var(--duration-ui), color var(--duration-ui)'}
>
<ThumbsDown size={10} aria-hidden="true" />
@@ -283,7 +283,7 @@
class="opacity-0 group-hover:opacity-100 p-0.5 text-text-tertiary hover:text-accent"
onclick={() => startEdit(step)}
aria-label="Edit this step (the correction trains future suggestions)"
title="Edit this is the strongest training signal"
title="Edit, this is the strongest training signal"
style={reduceMotion ? '' : 'transition: opacity var(--duration-ui)'}
>
<Pencil size={10} aria-hidden="true" />