Skip to content

feat(ui): migrate crash and bootstrap screens to design tokens (KR-01c) - #1552

Merged
mergify[bot] merged 2 commits into
mainfrom
codex/kr-01c-error-bootstrap
Oct 15, 2026
Merged

mergify[bot] merged 2 commits into
mainfrom
codex/kr-01c-error-bootstrap

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Startbildschirm und Absturzansicht verwenden jetzt das neue Designsystem.
Neuladen, Wiederholen und Fehlerdetails bleiben erhalten, die Hauptaktion erhält den Tastaturfokus.
Die lokalen Prüfungen und die Sichtprüfung in Hell und Dunkel sind bestanden; das unabhängige Review steht noch aus.

Report

KR-01c, tier B. Candidate 1c268e443a74de2661e296dca596ecb36df20d38, base 2305136fd283079d8fd82530c66b4e44a999a409. Six files, 124 additions + 29 deletions = 153 diff lines.

Change

  • Replace classic screen classes with one local CSS module using design tokens and the existing design-system Button. Import the necessary design styles so both components work outside the new shell too.
  • Move built-in German screen copy into the i18n dictionary. Preserve public props, callers, optional view labels, error details, loading announcements and retry/reload actions. Add a semantic crash heading and focus the reload button; preserve retry focus and reduced-motion handling.
  • No dependencies added. Classic CSS deletion remains in the later cleanup wave. These two components had no report action; the separate outer error-report boundary remains unchanged.

Evidence (Linux, 2026-10-15)

Command Exit Observation
npx --no-install vitest run src/components/ErrorBoundary.test.tsx src/components/BootstrapScreen.test.tsx before implementation 1 Two new tests failed on classic markup; five existing tests passed. Red test commit: 8ae5bfb9.
Same focused command after implementation 0 Seven tests passed.
npx --no-install vitest run src/components src/design src/i18n 0 420 tests, 73 files.
npm run typecheck 0 Type checks passed.
npm run build 0 Production build passed; existing large-chunk advisory remains.
node scripts/contrast-check.mjs 0 All 704 contrast pairs passed.
node scripts/ci/ratchet.mjs check 0 State-token count remains 191; no ratchet increased.
bash scripts/ci/red-first.sh 0 Both exact Test-First selectors are red/missing on the merge-base and green on the head.
git diff --check origin/main...HEAD 0 No whitespace errors.
bash scripts/ci/secret-scan.sh before each commit 0 No findings. Commit hooks also passed.
bash scripts/ci/gates.sh lane prepush (unpiped, own worktree) 0 Full lane passed on candidate; 2,273 Rust tests passed, seven skipped.
git push -u origin codex/kr-01c-error-bootstrap 0 Full prepush hook passed again: 1,424 frontend tests and 2,273 Rust tests passed.
git ls-remote origin codex/kr-01c-error-bootstrap 0 Remote head exactly matches the candidate SHA above.
node .pa/kr-01c-capture.mjs (local evidence harness) 0 Real components in isolated Vite/Chromium fixture; six captures, focus/design styles, keyboard retry and actual browser reload checked. No horizontal overflow at 320px. Server/browser closed before command exit.

Test boundary: rendered public React components; only browser window.location.reload is replaced in the unit test. Existing component tests remain. The isolated browser fixture additionally executes real reload and retry actions.

Screenshot observation

Inspected all six 1440×900 images in the external evidence directory kr-01c-shots: loading-light.png, loading-dark.png, retry-light.png, retry-dark.png, crash-light.png, crash-dark.png. Both themes show centered token-colored cards, readable headings and detail text, and a visible focus outline on the primary action. The loading state exposes no invented progress or retry action. Crash details wrap within the card. Captures use reduced motion. Images and the local harness are handover artifacts, not application files.

NICHT ABGEDECKT

  • Linux does not compile or run #[cfg(windows)] tests (including ConPTY/DPAPI/npm shim cases) or Windows Clippy arms. The Windows lane runs in the merge queue.
  • Seven Rust tests remain skipped by the existing configuration. External services were not verified.
  • Screenshots cover isolated real components, not a running native desktop app, Windows WebView, or the full application's routing. The production frontend build was run separately; the complete CI Linux workflow/browser smoke was not run locally.
  • The project-memory mirror and provider usage evidence were unavailable in this environment; no quota or runtime model claim is made.

Review and handover

Review: ausstehend (Stufe B). Root schedules one reviewer from a non-OpenAI family, then handles acceptance and merge queue. No independent review has been claimed, and this worker has not marked the PR ready or queued it.

Worker goal: checked implementation and draft handover for KR-01c, within the approved classic-UI-removal parent goal. Native goal tools were available (get_goal initially returned no goal; the bounded worker goal was created). Product acceptance, review and merge remain with Root. Remaining action: review this exact head, then integrate through the queue.

Review disposition (Root, round 1, 2026-10-15 15:57 MESZ) — head 1c268e4

Tier B; author OpenAI (Codex). Reviewers: Anthropic claude-sonnet-5-5 (APPROVE) and Google gemini-3.8-flash (APPROVE, no findings).

ID Source Sev Finding Disposition
R1552-A1 Claude low Nested view boundaries render h1 + autoFocus on Reload Follow-up: h2 for nested boundaries in KLASSIK-RAUS wave 3 (classic App.tsx view slots disappear then).
R1552-A2 Claude low Opaque design ground inside a classic view slot Accepted as is (recorded under NICHT ABGEDECKT); classic shell leaves the app.
R1552-A3 Claude low .bootstrap-* / .error-boundary* rules in styles.css now unused Follow-up: KLASSIK-RAUS CSS removal (series 16, ratchet).

No high or medium finding. review-ok bound to 1c268e4 once CI is green at this head.

Test-First: src/components/BootstrapScreen.test.tsx::uses design controls without classic classes across loading and retry
Test-First: src/components/ErrorBoundary.test.tsx::uses a focused design reload control and preserves crash details
@Cuarroc
Cuarroc marked this pull request as ready for review October 15, 2026 13:56
@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 15, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T14:00:34.282453Z 1c268e4 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1c268e443a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<main className="bootstrap-screen">
<section className="bootstrap-card" role="alert" aria-labelledby="bootstrap-title">
<span className="bootstrap-mark" aria-hidden="true">
<main className={styles.screen}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Lass den Bootstrap-Bildschirm beide Grid-Spalten überspannen

Solange bootstrapReady falsch ist, ist dieses <main> direktes Kind von .app, deren Grid weiterhin aus der 248-px-Seitenleiste und der Inhaltsfläche besteht. Durch den Austausch von .bootstrap-screen entfällt dessen grid-column: 1 / -1; der Lade- beziehungsweise Fehlerbildschirm wird daher automatisch nur in der ersten Spalte platziert, statt das Fenster auszufüllen. Verwende für den Bootstrap-Fall zusätzlich eine modulare Klasse, die beide Spalten überspannt.

Useful? React with 👍 / 👎.

flex: 1;
width: 100%;
min-width: 0;
min-height: 100%;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Begrenze die eingebettete Fehlerfläche auf den Restplatz

Wenn eine der ansichtsspezifischen Error Boundaries in App.tsx auslöst, ist diese Fläche ein Flex-Element unter der mindestens 38 px hohen .viewbar. min-height: 100% zwingt sie trotzdem auf die volle Höhe von .main, sodass sie zusammen mit der Viewbar über das Fenster hinausragt; da body zugleich overflow: hidden verwendet, werden der untere Teil und bei kleinen Fenstern beziehungsweise langen Fehlermeldungen auch der Scrollbereich abgeschnitten. Für eingebettete Boundaries sollte die Fläche mit min-height: 0 nur den verbleibenden Flex-Platz belegen; ein eigener Fullscreen-Modifikator kann den Bootstrap-Fall abdecken.

Useful? React with 👍 / 👎.

</button>
<div className={styles.screen} role="alert">
<section className={styles.card}>
<h1 className={styles.title}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verwende für eingebettete Abstürze keine zweite H1

Bei jeder mit label versehenen View-Boundary bleibt die Seitenleiste samt bestehender Seitenüberschrift <h1 className="sidebar-brand">ProjectA</h1> sichtbar. Der neue Fallback fügt in diesem Fall eine zweite H1 für die abgestürzte Teilansicht ein und verletzt damit die bereits getestete Überschriftenhierarchie der klassischen Oberfläche; Screenreader erhalten zwei konkurrierende Seitenüberschriften. Rendere für gelabelte, eingebettete Boundaries eine H2 und behalte H1 nur für den app-weiten Fallback ohne label.

Useful? React with 👍 / 👎.

@Cuarroc

Cuarroc commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Root auto-queue: head 1c268e4 unchanged since review-ok, all checks green. @Mergifyio queue

@mergify mergify Bot added the queued label Oct 15, 2026
@mergify
mergify Bot merged commit c348a0c into main Oct 15, 2026
20 checks passed
@mergify

mergify Bot commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

This pull request spent 10 minutes 23 seconds in the queue, including 9 minutes 47 seconds running CI.

Required conditions to merge
  • check-success = gates (linux)
  • check-success = gates (windows)
  • check-success = red-first
  • github-review-approved [🛡 GitHub repository ruleset rule main-pr-required-checks]
  • label != do-not-merge
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (linux)
    • check-neutral = @github-actions/gates (linux)
    • check-skipped = @github-actions/gates (linux)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (windows)
    • check-neutral = @github-actions/gates (windows)
    • check-skipped = @github-actions/gates (windows)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/red-first
    • check-neutral = @github-actions/red-first
    • check-skipped = @github-actions/red-first
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
    • check-success = @mergify/Mergify Merge Protections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-ok Pipeline: review disposition complete, no open high finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant