[1.48.0] — 2026-05-18
WS2 #8 + #22 — pipeline: focus-trapped confirm + preview a11y.
🐛 Fixes
fix(a11y): pipeline UI.confirm() + live preview region—- #8 all three
#/pipelineactions used nativeconfirm()(auto-dismissed in embeds, not focus-trapped): the preview-pane Delete, the per-row✕delete, and "Evaluate first". All now route through the focus-trappedUI.confirm()(v1.44.0 infra) — the two deletesdanger:true(Cancel-default), "Evaluate first"danger:false. - #22
previewPanehad no live role and a fetch failure was stuffed intopreviewBodyso it rendered as a misleading<pre>"preview". It's nowrole="region" aria-live="polite"with anaria-label; failures set a separatepreviewErrorand render a distinctrole="alert"block.previewErroris cleared on (re)select and when the active row is deleted.
- #8 all three
- No native
confirm()remains inpipeline.js.
🌐 i18n
- 4 new keys × 8 locales —
pipe.confirmDelTitle,pipe.previewError,pipe.evaluateAllTitle,pipe.previewRegion.i18n-coveragegate green.
🧪 Tests
test: tests/pipeline-confirm-preview.test.mjs— 5 cases (no native confirm, ≥3 UI.confirm with correct danger flags, labelled live region, distinct alert + state-clear, 4 i18n keys ×8). 672 → 677. Playwright-verified: preview role=region/aria-live, row-delete opens a focus-trapped modal (focus on Cancel), 0 console errors.
Verification
$ npm run test:ci
# 677 / 677 · ✓ no .also( leftovers · ✓ CHANGELOG parity: all 8 locales at v1.48.0