diff --git a/docs/PLAN.md b/docs/PLAN.md index f0459432..1fca2c74 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -231,6 +231,7 @@ Größe vor dem Start messen: `store.mjs` (570), `app.js` (504/527) und `store.t | MRP-REGEX-SCRIPTS | Paketregex in mrp-count und bench-weekly an #768 angleichen; Root-Disposition 09.10. | bestehender Owner `srv-mrp-regex-scripts` | MERGIFY-REPORT-REGEX/#768 | Server | B | Erledigt #782 (merged 2026-10-09T01:26:43Z); ersetzt: In Prüfung: Draft #782 | benannte Regex-Regressionen rot→grün, Zählerverträge erhalten, eigene prepush/Fremdreview und Root-Abnahme | 46800384 | | MATRIX-RECONCILE | Alle 27 Matrixzeilen mit datierten Belegen und offenen Resten abgleichen; Root-Disposition 09.10. | bestehender Owner `srv-matrix-reconcile` | bestehende Belege; Continuous bleibt aus | Server | C | Erledigt #781 (merged 2026-10-09T01:17:02Z); ersetzt: In Prüfung: Draft #781 | Anforderungen unverändert, kein erfundener Laufzeit-PASS; eigene prepush und Root-Abnahme | a6a28ae8 | | Z2-REVIEW-FOLLOWUPS-1 | Review-Folgepunkte gemäß Root-Disposition 09.10. bündeln und abgrenzen | Root bindet vorhandenen Owner | konkrete Findings, Dateien und Abnahme vor Dispatch binden | Server | nach Dateischnitt festlegen | Erledigt #800 (merged 2026-10-09T02:07:35Z, `15305c2e`); ersetzt: Geplant; kein neuer Worker aus PLAN-Eintrag | jeder Folgepunkt mit Quelle/Disposition; ≤ 300 ALL je Paket, keine erneute Abnahmebehauptung | PLAN-SYNC-0910b | +| DS-T-04 | Kompakte Suche behält ihren zugänglichen Namen (Design-Vertrauensfehler P1-c): `aria-label` am Suchknopf in `src/shell/header/CommandPalette.tsx` mit demselben Text wie die sichtbare Beschriftung | Implementierer · Claude; Root nimmt ab | Designsystem-Entscheidungen D1–D7 (`docs/decisions.md`) | Server | B | Erledigt: #1609; der Suchknopf heißt immer „Seiten und Befehle suchen“, auch wenn Text und Kürzel ausgeblendet sind | red-first `header.test.tsx` („search trigger keeps a permanent accessible name“); typecheck, contrast-check und prepush Exit 0; zwei Stufe-B-Reviews fremder Familien | – | | DS-X-02 | Additive Design-Skalen und Breakpoint-Konstante (Fabrik-Designsystem, Welle 0): Schrift-, Abstands-, Radius-, Höhen-, Ebenen- und Fokus-Token in `src/design/tokens.css`, `BREAKPOINTS` in `src/design/breakpoints.ts` | Implementierer · Claude; Root nimmt ab | Designsystem-Entscheidungen D1–D7 (`docs/decisions.md`) | Server | B | Erledigt: PR #1601; Tokens und Breakpoint-Konstante geliefert, Umstellung der Ansichten separat | `vitest run src/design` Exit 0; contrast-check grün; prepush Exit 0; zwei Stufe-B-Reviews fremder Familien | – | Historisch (08.10.); Quotenteil ersetzt durch AGENTS.md „Routing“, Reviewweg durch `docs/decisions.md` „Reviewer count per tier“ (beide Stand 15.10.): Routing-Freigabe Nutzer 08.10. ~21:25Z: Codex frei bis tatsächlich 98 % nutzen; diff --git a/src/shell/header/CommandPalette.tsx b/src/shell/header/CommandPalette.tsx index d4ac64a9..126c1fd3 100644 --- a/src/shell/header/CommandPalette.tsx +++ b/src/shell/header/CommandPalette.tsx @@ -26,6 +26,9 @@ const shortcutLabel = (): string => { return /mac|iphone|ipad/i.test(nav.userAgentData?.platform || nav.platform || "") ? "⌘ K" : "Strg K"; }; +// Also the button's aria-label: header.css hides the text and the shortcut as the search shrinks. +const SEARCH_LABEL = "Seiten und Befehle suchen"; + /** Search field in the header (Strg K / Cmd K) that opens the palette on the Sheet. */ export function CommandPalette() { const [open, setOpen] = useState(false); @@ -65,9 +68,9 @@ export function CommandPalette() { return ( <> - diff --git a/src/shell/header/header.test.tsx b/src/shell/header/header.test.tsx index ca8628de..c06afc39 100644 --- a/src/shell/header/header.test.tsx +++ b/src/shell/header/header.test.tsx @@ -82,6 +82,15 @@ describe("command palette details", () => { render(); expect(screen.getByRole("button", { name: /Seiten und Befehle suchen/ }).textContent).toContain("Strg K"); }); + + it("search trigger keeps a permanent accessible name", () => { + render(); + const trigger = screen.getByRole("button", { name: /Seiten und Befehle suchen/ }); + expect(trigger).toHaveAttribute("aria-label", "Seiten und Befehle suchen"); + // header.css hides the shortcut, then the text, as the search shrinks (container queries). + for (const part of trigger.querySelectorAll("span, kbd")) part.style.display = "none"; + expect(screen.getByRole("button", { name: "Seiten und Befehle suchen" })).toBe(trigger); + }); }); describe("command palette composition", () => {