Migrates the eleven remaining files that `i18next/no-literal-string` flagged
outside `app/office`, `app/demo` and the task-create surfaces owned by #2326:
the session prepare panel, the onboarding agents step, the host system-metrics
readout, the system-health issues dialog, the shared panel search bar, the
mermaid diagram block, the settings agent card, both release-notes surfaces,
and the shared data-table pair.
Findings drop 884 -> 826 (-58) and the guard allowlist grows 442 -> 453, file
by file rather than by directory since every one of these directories still
holds un-migrated files.
Defects repaired beyond the codemod's output:
- `data-table-pagination.tsx` rendered `{count} results` as a bare JSX
fragment, invisible to both plural gates. It is now one interpolated key
with `_one`/`_other`, as are the health-dialog issue count and the
release-notes "N new releases" helper.
- Two mixed literal+expression blocks were half-converted, rendering
identically in English while being structurally untranslatable. Both were
rebuilt as a single message.
- The codemod re-sorted `settings.json` into `localeCompare` order and
re-encoded every non-ASCII character to `\uXXXX` under a comment claiming it
matched the existing files. No catalog is stored escaped and only `common`
is in that order, so both halves were reverted; all four catalogs are
additions-only.
- Copy in default parameters and plain helpers is invisible to the lint rule,
so `Search…`, the six prepare-panel header labels, the setup-script step name
and error, the metric labels, `lastUpdatedText` and `buildDescription` were
migrated by hand.
`task:preparingEnvironment` was already taken by #2326 holding "Preparing
environment" without the ellipsis this surface renders, so the prepare panel
uses `preparingEnvironmentEllipsis` rather than silently changing its copy.
Units, wire ids, the `{workspaceId}` URL token, the `"ellipsis"` page sentinel
and every mermaid theme/CSS value stay English as protocol.
* fix(web): make mermaid sanitizer quote-aware and detect parens in bracket labels
Two diagrams failed to render because sanitizeMermaidCode injected nested
quotes into already-quoted labels and missed parens-as-stadium-opener inside
bracket labels. Skip ranges already inside `"..."` (recomputed between
passes) and add `(`/`)` to the bracket-pass trigger set.
* refactor(web): drop dead text.startsWith('"') guards in mermaid sanitizer
The regex character classes [^\]"], [^|"], [^)"] already exclude `"`,
so the guards were unreachable.
* fix(web): stop unterminated quote bleeding across lines in mermaid sanitizer
findQuotedRanges now stops scanning at newline; an unterminated `"` is
discarded rather than paired with a `"` on a later line where it would
silently suppress sanitization of unrelated content. Add tests for the
cross-line guard and for a bracket-with-parens adjacent to a real
stadium node on the same line.
* fix(web): replace mermaid bomb-icon error flood with toast notifications
mermaid.render() called without a container leaves orphaned error
elements (with bomb icons) in document.body on parse failures. Clean up
these orphans after every render and show an error toast instead.
* fix(web): address PR review — prevent toast flooding, include error detail, add hook tests
- Add latestRenderId guard in TipTap MermaidNodeView to skip stale
renders, preventing toast spam on every keystroke
- Include mermaid error message in toast description via CustomEvent detail
- Add useMermaidErrorToast hook tests (event listener + cleanup)
* style(web): format mermaid-error-toast test with prettier
* fix(web): include error message in MermaidBlock toast description