feat(requests): list and start page lead with the next work decision - #95
Conversation
…the list The list should lead with customer and need for review (#77). The summary uses the review page's rules - a shared correction helper now serves loadReview, the export values and the summary, so list and detail cannot drift. A page of 50 rows costs three queries. Refs #77 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tion; start page shows the next step The request list led with attempts, last error and next retry and scrolled sideways at 1280 px (#77). Rows now start with the customer, the need for review (same count as the detail page) and the next work decision; the diagnosis moves into an expandable details element per row. The start page names the next step: open reviews, failed requests, or the prepared sample when nothing is open. Refs #77 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…for list and start page Two notes on #77 from the live test: the review page showed the canonical unit 'pcs' to German clerks and repeated 'Freigegeben – der Export ist eingeplant.' right after an approval. The unit now reads 'Stk.' (stored value and correction input stay canonical for the ERP); the approved callout is skipped while the action's own message shows. The sample E2E now checks the start page's next step and that the list row leads with customer, need for review and next action without sideways scrolling at 1280 px. Refs #77 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The list row now also holds the "Prüfen: <subject>" link (#77), so a substring match on the subject resolved to two links (strict mode violation in CI). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… diagnosis - E2E measures the scrolling .table-wrap itself; the page can never overflow because the wrap scrolls, so the old check could not fail. - Each diagnosis disclosure names its request (visually hidden, like the action links) and the E2E opens one by keyboard. - "alles belegt" only when nothing is uncertain and nothing is missing. - Recognised unit reads "Stk." in the panel too; the unit correction says it takes the ERP abbreviation (pcs), so "Stk." is not stored by accident. - Start page fallback says "nothing waits for your review" instead of "no open work": a NEW request with an open duplicate decision is counted once processed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Frischer Review (unabhängiger Subagent, liest nur, Stand
|
| # | Befund | Umsetzung |
|---|---|---|
| 1 | Strict-mode-Verstoß im E2E | 1757755: alle Klicks auf den Betreff-Link mit exact: true (auch review-smoke/line-items-smoke, dort ist derselbe Wettlauf möglich, sobald die Anfrage in REVIEW ist). CI-Lauf 36444771942 grün, 3/3 E2E |
| 2 | 1280-px-Prüfung kann nicht fehlschlagen | f289e19: E2E misst scrollWidth - clientWidth am .table-wrap (Test-ID requests-table-wrap) |
| 3 | Diagnose ohne Test und ohne Bezug | f289e19: Summary „Details zu “ (Betreff visually-hidden), E2E fokussiert die Summary, öffnet sie mit Enter und prüft „Versuche“ |
| 4 | „alles belegt“ neben „fehlt“ | f289e19: Pille nur bei 0 unsicheren und 0 fehlenden Angaben |
| 5 | „Stk.“ vs. „pcs“ im Korrekturfeld | f289e19: „erkannt:“ zeigt ebenfalls „Stk.“, unter der Einheiten-Korrektur steht „Einheit als ERP-Kürzel: pcs (= Stk.), mm, cm, m, kg oder t.“ Normalisierung als Folge-Issue #96 |
| 6 | Startseite „Keine offene Arbeit“ | f289e19: bewusst ausgeschlossen, Text jetzt „Nichts wartet auf Ihre Prüfung – …“. Ein NEW-Request mit offenem Duplikat wird nach der Verarbeitung als REVIEW oder ERROR gezählt, die Entscheidung bietet die Liste an |
|
Manueller Prüfnachweis nach dem Deploy (Showcase, Produktion
|
Warum
Fixes #77 · Showcase-Review 2026-09-27, P2 (Epic #19)
Arbeitsstand
Was ist passiert (Klartext)
Die Anfragenliste zeigte bisher vor allem Technik: Versuche, letzten Fehler, nächsten Termin – und sie war so breit, dass man seitlich scrollen musste. Jetzt beginnt jede Zeile mit dem, was man zum Arbeiten braucht: dem Kunden, wie viele Werte zu prüfen sind (dieselbe Zahl wie auf der Detailseite) und der nächsten Aktion, etwa „Prüfen“ oder „Duplikat entscheiden“. Die technischen Angaben stecken in einem aufklappbaren „Details“ je Zeile. Die Startseite sagt oben, was als Nächstes zu tun ist – und führt zum vorbereiteten Musterfall, wenn gerade nichts offen ist. Auf der Detailseite heißt die Einheit jetzt „Stk.“ statt „pcs“, und nach dem Freigeben erscheint die Bestätigung nur noch einmal.
Plan-Pflicht (SYSTEM.md §4)
Impact Manifest
review(summary.ts:summarizeReview, gemeinsame Korrektur-Hilfsfunktionen;listReviewSummaries),extraction(latestRunsWithFields),requests(findSampleForVisitors),app(Liste, Startseite, Detailseite, CSS). Keine neue Abhängigkeit.loadReviewundcurrentLineItemValuesnutzen jetzt die gemeinsame Korrektur-Regel (applicableCorrection) – gleiches Verhalten, eine Stelle.summarizeReview(5 Fälle inkl. Korrektur vor/nach dem Lauf),nextAction(13 Fälle),displayValue(8 Fälle). Integration – Zusammenfassung stimmt für echte Daten mitloadReviewüberein. E2E – Startseite zeigt den nächsten Schritt; Listenzeile des Musterfalls mit Kunde, Prüfbedarf, „Prüfen“; kein Querscrollen bei 1280 px..requests-tablehattemin-width: 1080pxbei 8 Spalten;mainist bei 1280 px höchstens 1224 px breit; die Detailseite zähltuncertain+unverifiedohne korrigierte Werte; Positionskorrekturen vor einem neueren Lauf gelten nicht (feat(review): line items and all formats in the review UI #25).Geändert
src/features/review/summary.ts(+ Test, neu):summarizeReview,correctionKey,applicableCorrection,latestCorrectionssrc/features/review/review.ts,index.ts: gemeinsame Korrektur-Regel;listReviewSummariessrc/features/extraction/repository.ts,index.ts:latestRunsWithFields(DISTINCT ON)src/features/requests/repository.ts,index.ts:findSampleForVisitorssrc/app/requests/row-view.ts(+ Test):nextActionsrc/app/requests/page.tsx,src/app/components.css: neue Spalten, Diagnose als<details>,min-width760 pxsrc/app/page.tsx,src/app/globals.css: „Nächster Schritt“src/app/requests/[id]/value-label.ts(+ Test, neu),[id]/page.tsx: „Stk.“; keine doppelte Freigabe-Meldungtests/integration/review.test.ts: Zusammenfassung = Detailseite;tests/e2e/sample-smoke.spec.ts: Startseite, Listenzeile, 1280 pxCHANGELOG.mdNachweis (SYSTEM.md §11)
verify:changed: grün –summary.test.ts5/5 (zuerst rot: Modul fehlte),row-view.test.ts16/16 (zuerst rot:nextActionfehlte),value-label.test.ts8/8 (zuerst rot);vitest src/features/review14/14;typecheck,lint(0 Fehler),depcruise(Exit 0)verify: grün – CI-Lauf 36447368074 (check, Kopff289e19): Unit 278/278, Integration 144/144 gegen Postgres + S3 (inkl. „Zusammenfassung = Detailseite“), depcruise, build, audit; AI-Service 452 passed (lokal ist Docker aus)verify:full/ E2E-Spec: grün – derselbe Lauf, Labelverify-full: E2E 3/3;sample-smokeprüft Startseite, Listenzeile, kein Überlauf im Tabellen-Container bei 1280 px, Diagnose per Tastatur geöffnetDoku-Entscheidung (genau eine)
[Unreleased](sichtbares Feature oder Verhalten – im selben PR, nie „später"): Changed-Eintrag feat(requests): list and start page lead with the next work decision #77Entferntes oder Umbenanntes:
docs/+ README gegrept, Treffer bereinigt: Spalten „Versuche/Letzter Fehler/Nächster Versuch/Duplikat“ der Liste – indocs/nicht beschriebenDateigrößen und neue Bausteine (SYSTEM.md §7)
Dateien über 500 Zeilen im Diff (Ausnahmen: generierter Code, Lockfiles, Fixtures, Migrationen, Schemas, Ressourcen, Doku, Konfiguration):
Über 800 Zeilen mit neuer Fachlogik oder über 1000 Zeilen (P1/P2): nicht betroffen
Neue Shared-Komponente, Utility-Datei, Adapter oder fachlicher Service:
needsAttention,currentCorrections,currentFieldValues,requestRowView); gefunden: die Korrektur-Regel stand zweimal inreview.ts(Detailseite, Positionswerte) – sie ist jetzt eine gemeinsame Funktion insummary.ts, die auch die Liste nutzt;needsAttention(App-Schicht) zählt dasselbe wiesummarizeReviewSubagent-Einsätze
Risiken / offene Punkte
🤖 Generated with Claude Code