32 KiB
Domain Slices Backlog
Stand: 2026-03-31
Dieses Backlog gruppiert die offenen Arbeiten nach fachlichen/domänischen Blöcken statt nach Dateien. Die Schätzungen sind Restaufwand auf Basis des aktuellen Worktrees und können sich nach Befund leicht ändern.
Aktuell geschnittene Domänenslices: 7
Grobe Gesamtdauer über alle noch offenen Slices: 25-41h
Statuslegende
in_progress: wird aktiv bearbeitetready: fachlich geschnitten, kann als nächster Block umgesetzt werdenblocked: fachlich bekannt, aber aktuell von anderem Slice abhängigdone: abgeschlossen und validiert
Offene Slices
| # | Slice | Status | Restaufwand | Kernziel |
|---|---|---|---|---|
| 1 | Timeline Interaction, Overlays, Hover, SSE-State | in_progress | 6-10h | Stabile Timeline ohne Render-/Overlay-/Drag-Artefakte, auch bei View-Wechseln und Live-Updates |
| 2 | Holiday/Vacation Correctness and Explainability | in_progress | 1-3h | Feiertage und Urlaube konsistent in Timeline, Chargeability, Forecasts, Assistant und UI-Erklärungen |
| 3 | Assistant Parity, Policy Auto-Exposure, Advanced Queries | in_progress | 5-8h | Assistant kennt und nutzt denselben Berechtigungs- und Datenraum wie der Nutzer, inkl. komplexer Queries |
| 4 | Reports, Templates/Blueprints, Export Completeness | in_progress | 4-6h | Report Builder mit speicherbaren Vorlagen und vollständigen Exportgrößen wie SAH und Bezugsfaktoren |
| 5 | Notifications, Tasks, Broadcasts, Reminder Reliability | in_progress | 3-5h | Robuste Inbox-/Broadcast-/Reminder-Flows ohne leere Fanout- oder Persistenzkanten |
| 6 | Dashboard, Widgets, Explainability, First-Load Stability | in_progress | 4-6h | Dashboard zuverlässig ladbar, Widgets kompakt, nachvollziehbar und per Detail-Toggle kontrollierbar |
| 7 | DB Safety, Env Loading, Migration/Seed Discipline, Naming Cleanup | in_progress | 2-4h | Keine Raw-Prisma/Env-Fallen, kein versehentliches Seeding, keine operativen planarchy-Reste |
Umsetzungshinweise
- Slice 1 ist der größte technische Risikoblock und beeinflusst direkt wahrnehmbare UX.
- Slice 2 und 3 hängen fachlich teilweise zusammen, können nach Slice 1 parallelisiert werden.
- Slice 4 profitiert von Slice 2, weil Feiertags-/Urlaubslogik als Export- und Reportgröße sichtbar werden muss.
- Slice 7 bleibt als Guardrail-Block parallel im Hintergrund wichtig, sollte aber keine Produktarbeit blockieren.
Arbeitsliste
- Slice 1: Timeline Interaction, Overlays, Hover, SSE-State
- Slice 2: Holiday/Vacation Correctness and Explainability
- Slice 3: Assistant Parity, Policy Auto-Exposure, Advanced Queries
- Slice 4: Reports, Templates/Blueprints, Export Completeness
- Slice 5: Notifications, Tasks, Broadcasts, Reminder Reliability
- Slice 6: Dashboard, Widgets, Explainability, First-Load Stability
- Slice 7: DB Safety, Env Loading, Migration/Seed Discipline, Naming Cleanup
Abhaklog
- Assistant-Testlandschaft entlang echter Domänengrenzen weiter zerlegt und vollständig grün validiert
- Staffing Read Pipeline Split: gemeinsame holiday-/absence-aware Capacity-Zusammenfassung aus
staffing-suggestions-read.tsundstaffing-best-project-resource.tsinstaffing-capacity-summary.tsextrahiert und gegen fokussierte Staffing-/Assistant-Regressionen validiert - Vacation Read Separation: Holiday-/Deduction-Preview-Shaping aus
vacation-read.tsinvacation-read-support.tsextrahiert und gegen Vacation-Auth-/Router-Regressionen validiert - Slice 1: Timeline Interaction, Overlays, Hover, SSE-State
Fortschritt:
Live
cellWidthRefstatt stale Snapshot im Drag-Pfad verdrahtet. Projekt-Drag zentralisiert finalisiert, sodass MouseUp/Canvas-Up nicht mehr parallel mutieren.document-Listener für Projekt-Drag, Allocation-Drag und Multi-Select werden beim Unmount sauber entfernt. Timeline-Popovers schließen bei Scroll/Resize nicht mehr sofort, sondern bleiben stabil sichtbar. Query-Refresh wird pro aktivem Timeline-Kontext statt nur einmal pro Mount erzwungen. Session-Loading und SSE-Reconnect werden gehärtet, damit erste Route-Loads nicht in einem leeren Zwischenzustand hängen bleiben. Vacation-SSE und lokale Planning-Invalidierung laden jetzt auchvacation.listnach, damit Urlaubsbalken ohne Reload konsistent bleiben. Allocation-Handles und Move-Flächen stoppen jetztmousedownsauber, damit Resource-/Project-Row-Canvases nicht parallel Range-Selektion starten. - Slice 2: Holiday/Vacation Correctness and Explainability
Fortschritt:
Vacation-Deduction-Snapshots werden im UI bereits in
MyVacationsClienterklärt. Dieselbe Ableitung wird jetzt auch im Vacation-Kalender per Hover-Tooltip genutzt. Holiday-Editor-Vorschau zeigt jetzt Scope-/Source-Zusammenfassung plus aufgeloeste Feiertage mit Scope.entitlement.getBalanceDetail, Assistant-Toolget_vacation_balanceundBalanceCardnutzen jetzt denselben holiday-/deduction-aware Explainability-Pfad inkl. Vacation-Breakdown, Holiday-Basis und ausgeschlossenen Feiertagen. Fokussierte Validierung für Entitlement-/Assistant-Balance und Web-Typecheck ist grün; Alt-Snapshots respektieren weiter persistiertedeductedDays, während fehlende Snapshots wieder korrekt auf kanonische Feiertagsauflösung zurückfallen. Entitlement-Jahresübersicht, Assistant-get_entitlement_summaryund die Manager-Übersicht tragen jetzt auchcountryCode,countryName,federalStateundmetroCityName, damit regionale Feiertagsunterschiede als Bezugsgröße sichtbar bleiben. Assistant-run_reportliefert fürresource_monthjetzt zusätzlich einen Explainability-Block mit Holiday-/Absence-/Location-Basis, fehlenden empfohlenen Bezugsgrößen und Interpretationshinweisen zur SAH-Ableitung. Chargeability-Detailpfad und Assistant-get_chargeability_reporttragen jetzt ebenfalls einen Explainability-Block mit Ortsbezug, Herleitungsfeldern, Formeln und aktiven Filtern, damit dieselbe SAH-/Holiday-/Absence-Logik auch im Forecast-Readmodel transparent ist. Chargeability-Frontend zeigt dieselbe Berechnungsbasis jetzt kompakt an; der Excel-Export enthält zusätzlich ein Explainability-Sheet mit Formeln, Filtern und Bezugsgrößen. Budget-Forecast-Readmodel, Dashboard-Detail und Assistant-get_budget_forecasttragen jetzt ebenfalls eine kompakte Burn-Herleitung mit Base-vs-Adjusted-Burn, Holiday-/Absence-Abzügen, Holiday-aware-vs-Fallback-Assignments und Anzahl der Kalenderkontexte; das Widget zeigt diese Herleitung nur im Detailmodus an. Project-Health-Readmodel, Dashboard-Detail und Assistant-get_project_healthtragen jetzt ebenfalls eine explizite Budget-Herleitung mit Base-vs-Adjusted-Spend, Holiday-/Absence-Abzügen, Holiday-aware-vs-Fallback-Assignments und Kalenderkontexten; das Widget zeigt diese Basis nur im Detailmodus an. Nächster Fokus: verbleibende Forecast-/Widget-Parität derselben Ableitungen schließen. - Slice 3: Assistant Parity, Policy Auto-Exposure, Advanced Queries
Fortschritt:
Tool-Sichtbarkeit und Laufzeit-Guarding auf gemeinsame Registry-/Access-Metadaten gezogen.
Estimate-Tools tragen jetzt explizite Rollen-/Permission-/Cost-Metadaten statt impliziter Alt-Policy.
Fokussierte Assistant-Policy-Regressionstests laufen gegen dieselbe zentrale Quelle.
Tool-Selektion priorisiert Holiday-/Vacation-/Entitlement- sowie Dashboard-/Report-Anfragen jetzt gezielter, damit diese Tools unter dem OpenAI-128-Limit erhalten bleiben.
Top-Level-Chat-/Approval-/Prompt-Orchestrierung ist jetzt in
assistant-procedure-support.tsundassistant-system-prompt.tsextrahiert; API-Typecheck plus fokussierte Assistant-Suite laufen wieder grün. Produktive AI-Fallbacks, Admin-UI-Platzhalter und Settings-Default im Frontend zeigen jetzt konsistentgpt-5.4statt altergpt-4o-mini-Defaults; die fokussierte Assistant-/Settings-/Insights-Suite dafür ist grün validiert. - Slice 4: Reports, Templates/Blueprints, Export Completeness
Fokus:
Report-Templates/Blueprints, SAH-/Bezugsgrößen-Vollständigkeit und Export-Parität zur UI weiterziehen.
Fortschritt:
Report Builder exponiert Template-Beschreibung und Shared-Status jetzt auch im Frontend statt nur im Backend-Vertrag.
Gespeicherter Template-Status vs. lokal geänderte Builder-Konfiguration wird jetzt explizit angezeigt, damit lokale Draft-Änderungen nicht mehr wie persistierte Vorlagen wirken.
Duplicate-Template-Saves werden jetzt fachlich als
CONFLICTmit verständlicher Meldung statt als roher DB-Fehler zurückgegeben.resource_month-Explainability ist jetzt im gemeinsamen Report-Pfad statt nur im Assistant-Sonderfall verdrahtet; der Builder zeigt dieselbe Holiday-/Absence-/SAH-Basis kompakt im Result-Header an.resource_month-Exporte laufen jetzt als XLSX mit separatem Explainability-Sheet, damit SAH-/Kalender-/Feiertagslogik im Export nachvollziehbar bleibt ohne Logik in Excel neu aufzubauen. Derresource_month-Blueprint-/Preset-Katalog kommt jetzt aus einem gemeinsamen Backend-Vertrag inklusive Runtime-Output-Schema statt aus lokalem Frontend-Hardcode; fokussierte Router-/Typecheck-Validierung dafür ist grün.resource,projectundassignmenttragen jetzt zusätzliche Bezugsgrößen wie Blueprint, Client Unit, Enterprise ID, Value Score, Shoring-/Onshore-Felder sowie Resource-/Project-Kontext an Assignments in den Report-Spaltenkatalog. Nächster Fokus: verbleibende Report-/Export-Vollständigkeit an echten Nutzerflows prüfen, insbesondere Frontend-/Export-Verhalten außerhalb vonresource_month. - Slice 5: Notifications, Tasks, Broadcasts, Reminder Reliability
Fortschritt:
Notification-/Reminder-/Webhook-Testtrio ist grün validiert.
Zukünftige Scheduled Broadcasts mit Task-/Approval-Metadaten werden jetzt hart abgewiesen, damit
taskAction/dueDatenicht still verloren gehen. Broadcast-Fanout mappt jetzt auch verlorenesourceId-/Sender-Referenzen stabil auf fachlicheNOT_FOUND-Fehler statt rohe FK-Fehler. Nicht-terminale Task-Statuswechsel bereinigen jetztcompletedAt/completedBydeterministisch, damit wiedergeöffnete Tasks fachlich und technisch konsistent bleiben. Wiederkehrende Reminder ziehennextRemindAtnach Downtime jetzt direkt auf den ersten Termin nachnowvor, damit überfällige Serien-Erinnerungen nicht auf jedem Scheduler-Tick erneut feuern. Task-Reassignment mappt fehlendeassigneeId-Referenzen jetzt über den gemeinsamen Notification-Fehlerpfad stabil aufNOT_FOUND, statt rohe FK-Fehler aus dem Core-Router nach oben zu reichen. Immediate Broadcasts werden jetzt ohne$transactionhart abgewiesen, damit es keinen nicht-atomaren Fan-out-Fallback mit Teilpersistenz mehr gibt. Broadcast-Fanout gegen fehlende Empfänger ist jetzt ebenfalls fokussiert abgesichert:userId-FK-Verlust im Recipient-Create mappt stabil auf fachlichesNOT_FOUND, ohne Broadcast-Finalisierung, SSE oder E-Mail-Nebenwirkungen. Direkte Router-Writes fürnotification.createundnotification.createTasknutzen jetzt denselben kontextsensitiven Notification-Fehlerpfad wie Assistant/Broadcast, sodass fehlende Recipient-/Sender-Referenzen als fachlicheNOT_FOUND-Fehler statt rohe Prisma-FKs herauskommen.executeTaskActionblockt jetzt auchDISMISSEDals terminalen Zustand und läuft nur noch transaktional, damit Domain-Aktion und Task-Abschluss nicht mehr auseinanderlaufen; die Assistant-Test-Helpers spiegeln denselben Transaction-Contract jetzt ebenfalls. Reminder-Updates und -Deletes sind jetzt auch gegen Missing-/Wrong-Owner-Fälle fokussiert regressionsgesichert, damit die fachlicheNOT_FOUND-Oberfläche stabil bleibt.assignTaskfängt jetzt auch den Read-then-Update-Race auf gelöschte Tasks sauber als fachlichesNOT_FOUNDab; Missing-Task- und Wrong-Category-Pfade sind auf Router-Ebene zusätzlich abgesichert. Nächster Fokus: verbleibende Persistenz-/Broadcast-Kanten schließen. - Slice 6: Dashboard, Widgets, Explainability, First-Load Stability
Fortschritt:
Peak Times komprimiert die Summary-Leiste jetzt in drei kompakte Pills statt großer redundanter Karten.
Zusatztexte und Erklärinfos bleiben dort jetzt konsequent hinter dem Details-Toggle.
Budget Forecast reduziert Summary-Helfertexte und sekundäre Zeilendetails jetzt ebenfalls sauber bei
Details off. Dashboard-Layout-Hydration überschreibt beim First Load lokale Nutzeraktionen nicht mehr, wenn DB-Layout und erste Interaktion race-condition-artig aufeinandertreffen; fokussierte Hook-/Widget-Tests dafür sind grün. Top-Value-Ressourcen tragen jetzt auchcountryNamedurch Readmodel, API-Detailpfad und Widget-Lokationsanzeige, damit Kalender-/Feiertagsbezug nicht nur als Kürzel sichtbar ist. Top-Value trägt jetzt zusätzlichvalueScoreBreakdownundvalueScoreUpdatedAtbis in API-/Assistant-Detailpfade und Widget-Hover durch, damit die Score-Herleitung nachvollziehbar bleibt ohne den Default-View mit Text zu überladen. Peak Times trägt jetzt pro PeriodecalendarContextCountplus kompaktecalendarLocationsaus dem Application-Layer bis in Widget-Hover, Detailpanel undget_dashboard_detail, damit regionale Feiertags-/Standortbasis auch für Auslastungsspitzen sichtbar bleibt. - Slice 7: DB Safety, Env Loading, Migration/Seed Discipline, Naming Cleanup
Fortschritt:
Repo-Wrapper für Env-Laden sind gesetzt; aktuelle Assistant-, Import/Export- und Insights-Tests sowie der Web-Typecheck laufen grün.
Operative Altspuren
planarchykommen derzeit noch über einen Symlink-Pfad und einzelne Logs/Artefakte hinein und werden weiter bereinigt.pnpm db:prisma -- ...prüft jetzt für destruktive oder schemawirksame Prisma-Kommandos hart, dassDATABASE_URLwirklich aufcapakrakenzeigt; falsche Ziele wieplanarchywerden vor jedem Prisma-Zugriff blockiert. Aktive Worker: Worker A: Slice 5 Notification-/Broadcast-Persistenzkanten. Worker B: Slice 2 Holiday-/Vacation-Explainability in Forecast-/Widget-Parität. Lokal: Slice 1 Timeline-Stabilität, Slice 3 Assistant-Parity, Slice 7 DB-/Env-Guardrails und Naming-Cleanup.
Validierter Stand
- Assistant-Regressionen:
8fokussierte Testdateien,36Tests grün. - Assistant-/Settings-/Insights-/AI-Defaults:
8fokussierte Testdateien,30Tests grün. - Web-Typecheck:
pnpm --filter @capakraken/web exec tsc -p tsconfig.typecheck.json --noEmitgrün. - Timeline/SSE-Regressionen:
pnpm --filter @capakraken/api exec vitest run src/__tests__/timeline-router.test.ts src/__tests__/sse-subscription-policy.test.tsgrün (15Tests). - Dashboard WidgetContainer:
pnpm --filter @capakraken/web exec vitest run src/components/dashboard/WidgetContainer.test.tsxgrün (2Tests). - Insights Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/insights-router.test.ts src/__tests__/insights-procedure-support.test.tsgrün (9Tests). - Country Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/country-router.test.ts src/__tests__/country-procedure-support.test.ts src/__tests__/country-support.test.tsgrün (12Tests). - Holiday Calendar Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/holiday-calendar-router.test.ts src/__tests__/holiday-calendar-router-auth.test.ts src/__tests__/holiday-calendar-procedure-support.test.ts src/__tests__/holiday-calendar-support.test.ts src/__tests__/holiday-calendar-write-support.test.tsgrün (26Tests). - Dispo Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/dispo-router.test.ts src/__tests__/dispo-procedure-support.test.ts src/__tests__/dispo-management-support.test.tsgrün (10Tests). - Org Unit + Import/Export Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/org-unit-router.test.ts src/__tests__/org-unit-procedure-support.test.ts src/__tests__/org-unit-support.test.ts src/__tests__/import-export-router.test.ts src/__tests__/import-export-procedure-support.test.tsgrün (19Tests). - Estimate Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/estimate-router.test.tsgrün (45Tests). - Import/Export Procedure Support:
pnpm --filter @capakraken/api exec vitest run src/__tests__/import-export-procedure-support.test.tsgrün (5Tests). - Assistant Tool Selection:
pnpm --filter @capakraken/api exec vitest run src/__tests__/assistant-tool-selection.test.tsgrün (3Tests). - Assistant Split Regression Runner:
pnpm --filter @capakraken/api test:assistant-splitals explizite Fünf-Batch-Regression plus API-Typecheck etabliert; deckt jetzt auchexport_projects_csv, Holiday-Resolution-Fehlerpfade undget_timeline_holiday_overlaysab. - Assistant Report Read:
pnpm --filter @capakraken/api exec vitest run src/__tests__/assistant-tools-report-read.test.tsgrün (3Tests). - Report Router:
pnpm --filter @capakraken/api exec vitest run src/__tests__/report-router.test.tsgrün (8Tests). - Report Explainability/Export Parity:
pnpm --filter @capakraken/api exec vitest run src/__tests__/report-router.test.ts src/__tests__/assistant-tools-report-read.test.tsgrün (11Tests),pnpm --filter @capakraken/web exec vitest run src/components/reports/reportBuilderExplainability.test.tsgrün (2Tests). - Report Blueprint Catalog Contract:
pnpm --filter @capakraken/api exec vitest run src/__tests__/report-router.test.tsgrün (9Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün,pnpm --filter @capakraken/web exec vitest run src/components/reports/reportBuilderExplainability.test.tsgrün (2Tests). - Report Column Coverage Expansion:
pnpm --filter @capakraken/api exec vitest run src/__tests__/report-router.test.tsgrün (11Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün. - Chargeability Report Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/chargeability-report-router.test.ts src/__tests__/assistant-tools-chargeability-report.test.tsgrün (7Tests). - Notification Router + Reminder Scheduler:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-router.test.ts src/__tests__/reminder-scheduler.test.tsgrün (41Tests). - Project Health Explainability:
pnpm --filter @capakraken/application exec vitest run src/__tests__/dashboard.test.ts -t "excludes regional public holidays from project health budget usage"grün (1Test),pnpm --filter @capakraken/api exec vitest run src/__tests__/dashboard-router.test.ts -t "getProjectHealthDetail"grün (1Test),pnpm --filter @capakraken/api exec vitest run src/__tests__/assistant-tools-dashboard-project-health.test.tsgrün (1Test). - Dashboard Top Value Country Context:
pnpm --filter @capakraken/api exec vitest run src/__tests__/dashboard-procedure-support.test.ts src/__tests__/dashboard-router.test.tsgrün (19Tests). - Dashboard Top Value Explainability:
pnpm --filter @capakraken/application exec vitest run src/__tests__/dashboard.test.ts -t "enforces visible-role filtering for top value resources"grün (1Test),pnpm --filter @capakraken/api exec vitest run src/__tests__/dashboard-procedure-support.test.ts src/__tests__/dashboard-router.test.ts src/__tests__/assistant-tools-dashboard-detail.test.tsgrün (20Tests),pnpm --filter @capakraken/web exec vitest run src/components/dashboard/widgets/TopValueWidget.test.tsxgrün (1Test). - Peak Times Calendar Explainability:
pnpm --filter @capakraken/application exec vitest run src/__tests__/dashboard.test.ts -t "peak times"grün (4Tests aktiv,17geskippt),pnpm --filter @capakraken/web exec vitest run src/components/dashboard/widgets/PeakTimesWidget.test.tsxgrün (1Test),pnpm --filter @capakraken/api exec vitest run src/__tests__/dashboard-procedure-support.test.ts src/__tests__/assistant-tools-dashboard-detail.test.tsgrün (4Tests). - Notification Task Reopen Reliability:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-router.test.tsgrün (37Tests). - Notification Task Assignment Reference Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-procedure-support.test.ts src/__tests__/notification-router.test.tsgrün (46Tests). - Notification Immediate Broadcast Transaction Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-router.test.tsgrün (40Tests). - Notification Broadcast Recipient Reference Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-procedure-support.test.ts src/__tests__/notification-router.test.tsgrün (49Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün. - Notification Direct Create/CreateTask Reference Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-procedure-support.test.ts src/__tests__/notification-router.test.ts src/__tests__/assistant-tools-notification-create-errors.test.ts src/__tests__/assistant-tools-task-create-errors.test.tsgrün (60Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün. - Notification Task Action Transaction Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-router.test.ts src/__tests__/assistant-tools-task-action-guards.test.ts src/__tests__/assistant-tools-task-action-execution.test.ts src/__tests__/assistant-tools-task-action-assignment-errors.test.ts src/__tests__/assistant-tools-task-action-vacation-errors.test.tsgrün (56Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün. - Notification Reminder Ownership + AssignTask Race Guard:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-router.test.tsgrün (51Tests),pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün. - Notification Support + Assistant Router:
pnpm --filter @capakraken/api exec vitest run src/__tests__/notification-procedure-support.test.ts src/__tests__/notification-router.test.ts src/__tests__/notification-router-auth.test.ts src/__tests__/assistant-router.test.ts src/__tests__/assistant-router-auth.test.ts src/__tests__/assistant-chat-loop.test.ts src/__tests__/assistant-chat-response.test.ts src/__tests__/assistant-tool-selection.test.ts src/__tests__/assistant-approvals.test.ts src/__tests__/assistant-procedure-support.test.tsgrün (74Tests). - Assistant Broadcast Validation:
pnpm --filter @capakraken/api exec vitest run src/__tests__/assistant-tools-broadcast-send-validation-errors.test.tsgrün (3Tests). - Staffing Read Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/staffing-router.test.ts src/__tests__/assistant-tools-holiday-staffing-suggestions.test.ts src/__tests__/assistant-tools-advanced-resource-ranking.test.tsgrün (32Tests). - Vacation Read Slice:
pnpm --filter @capakraken/api exec vitest run src/__tests__/vacation-router.test.ts src/__tests__/vacation-router-auth.test.tsgrün (58Tests). - API-Typecheck:
pnpm --filter @capakraken/api exec tsc -p tsconfig.json --noEmit --pretty falsegrün.
API Router Slice Inventory
Diese Liste ist die vollständige Arbeitsinventur für den aktuellen Architektur-Track
packages/api/src/router.
Ziel ist nicht eine inhaltliche Neuschreibung, sondern dünne Top-Level-Router:
Zod/Input, Permission-Wiring und Orchestrierung wandern in gezielte *-procedure-support.ts
oder benachbarte Support-Module, Verhalten und öffentliche Contracts bleiben stabil.
Status
done: bereits sauber extrahiert oder als dünner Kompositionsrouter erreichtready_now: sinnvoller nächster Slice ohne bekannte Blockerlater: fachlich sinnvoll, aber größer oder stärker querliegendmonitor: aktuell dünn genug; nur anfassen, wenn dort neue Logik wächstexcluded_for_now: bewusst aus dem aktuellen Batch ausgenommen
Vollständige Router-Liste
| Router | Status | Priorität | Sinnvolle Slices |
|---|---|---|---|
allocation.ts |
done | - | Aggregator bereits dünn; nur Support-Module weiter pflegen |
assistant.ts |
done | - | top-level chat, approval payloads und system prompt in Support-Module extrahiert |
audit-log.ts |
monitor | 4 | Optional: list/detail reads und filter-building trennen, falls Auth/Wiring wächst |
blueprint.ts |
done | - | summary/list reads, identifier reads, CRUD, role-preset mutation und global-field procedures in blueprint-procedure-support.ts extrahiert |
calculation-rules.ts |
monitor | 4 | Aktuell klein; nur bei zusätzlicher Write-/Audit-Logik extrahieren |
chargeability-report.ts |
excluded_for_now | - | Bewusst zurückgestellt; erst nach Freigabe des geblockten Bereichs |
client.ts |
done | - | list/tree reads, identifier reads, CRUD/deactivate und sort-order batch mutation in client-procedure-support.ts extrahiert |
comment.ts |
done | - | Bereits in comment-procedure-support.ts ausgelagert |
computation-graph.ts |
monitor | 4 | Bereits Kompositionsrouter; nur bei zusätzlicher Orchestrierung weiter schneiden |
country.ts |
done | - | list/identifier reads, country CRUD, metro-city CRUD |
dashboard.ts |
excluded_for_now | - | Bewusst zurückgestellt; hoher Querschnitt und paralleler Scope |
dispo.ts |
done | - | workbook input schemas, staging/validation, staged-read procedures, resolve/commit/cancel mutations |
effort-rule.ts |
done | - | list/detail reads, CRUD/default toggle, preview und apply-rules mutation in effort-rule-procedure-support.ts extrahiert |
entitlement.ts |
excluded_for_now | - | Bewusst zurückgestellt; größerer Fachblock |
estimate.ts |
done | - | commercial reads, demand line writes, phasing, version workflow, aggregate read models |
experience-multiplier.ts |
done | - | list/detail reads, CRUD/default toggle, preview und apply-rules mutation in experience-multiplier-procedure-support.ts extrahiert |
holiday-calendar.ts |
done | - | calendar CRUD, entry CRUD; catalog/resolution reads sind schon separat |
import-export.ts |
done | - | export reads, import preview/validation, file-bound orchestration |
insights.ts |
done | - | anomaly/summary reads, cached narrative read, AI narrative mutation |
management-level.ts |
done | - | group reads/writes, level writes/delete und Audit-Orchestrierung in management-level-procedure-support.ts extrahiert |
notification.ts |
later | 3 | Top-Level ist tragbar; nächster sinnvoller Schritt ist die weitere Zerlegung von notification-procedure-support.ts |
org-unit.ts |
done | - | list/tree reads, identifier reads, CRUD/deactivate |
project.ts |
monitor | 4 | Bereits stark komponiert; optional nur list und getById separat ziehen |
rate-card.ts |
done | - | list/detail/match reads, card CRUD, line CRUD und replace-lines in rate-card-procedure-support.ts extrahiert |
report.ts |
done | - | Bereits in report-template-procedure-support.ts ausgelagert |
resource.ts |
monitor | 4 | Top-Level dünn; tieferliegende Shared-Read-Module sind separat zu betrachten |
role.ts |
done | - | Bereits in role-procedure-support.ts ausgelagert |
scenario.ts |
done | - | Bereits in scenario-procedure-support.ts ausgelagert |
settings.ts |
done | - | Bereits in settings-procedure-support.ts ausgelagert |
staffing.ts |
done | - | Aggregator bereits dünn |
system-role-config.ts |
monitor | 4 | Klein genug; nur bei wachsender Audit-/Validation-Logik schneiden |
timeline.ts |
done | - | Bereits auf dünnen Aggregator umgestellt |
user.ts |
excluded_for_now | - | Bewusst zurückgestellt; hoher Querschnitt und paralleler Scope |
utilization-category.ts |
monitor | 4 | Klein genug; nur bei zusätzlicher Komplexität schneiden |
vacation.ts |
done | - | Bereits auf dünnen Aggregator umgestellt |
webhook.ts |
monitor | 4 | Noch tragbar; optional später read/write separation |
Empfohlene Reihenfolge
- Phase-2-Hotspots mit
Vacation Read Separation - Phase-2-Hotspots mit
Staffing Read Pipeline Split notification.tsvia weiterer Zerlegung vonnotification-procedure-support.tsentitlement.tsnach Abschluss der Holiday-/Vacation-Paritätdashboard.tsnur bei erneutem Wachstum im API-Routeruser.tsnur, falls dort wieder Top-Level-Orchestrierung anwächst
Phase 2: Tieferliegende Hotspots Hinter Bereits Dünnen Routern
Diese Slices betreffen nicht mehr primär den Top-Level-Router, sondern große Read-/Procedure-Module im selben Architektur-Track. Sie sind sinnvoll, sobald der aktuelle Router-Arbeitsvorrat abgearbeitet ist.
| Slice | Priorität | Betroffene Module | Ziel |
|---|---|---|---|
| Allocation Mutation Decomposition | 1 | allocation-assignment-procedures.ts |
Assignment-Transaktionen, Audit, Events, Webhooks und Budget-Folgelogik weiter trennen |
| Vacation Read Separation | 1 | vacation-read.ts, vacation-management-procedures.ts |
Ownership, Anonymisierung, Holiday-Preview und Query-Varianten sauberer schneiden |
| Resource Shared Read Decomposition | 1 | resource-read-shared.ts, resource-summary-read-procedure-support.ts, resource-identifier-read.ts |
Summary-/Detail-Selects, Identifier-Selects und Mapper aus resource-read-shared.ts in fokussierte Helper extrahieren; oeffentliche Read-Vertraege stabil halten |
| Estimate Write Router Slimming | 1 | estimate.ts plus benachbarte Estimate-Module |
Write-Orchestrierung, version workflow und error translation aus dem Router ziehen |
| Staffing Read Pipeline Split | 1 | staffing-suggestions-read.ts, staffing-capacity-read.ts, staffing-best-project-resource.ts |
gemeinsame Load-/Ranking-/Response-Pipeline extrahieren |
| Report Engine by Execution Mode | 2 | report-query-engine.ts, report-query-config.ts |
generische Reports, resource_month-Sonderfall und Exportpfade klar trennen |
| Computation Graph Read Model Split | 2 | computation-graph-resource.ts, computation-graph-project.ts |
Snapshot-Building, Forecasting und Graph-Assembly entkoppeln |
Explizit Ausgeschlossen Im Aktuellen Batch
packages/api/src/router/assistant-tools.tspackages/api/src/router/assistant-tools/*packages/api/src/router/chargeability-report.tspackages/api/src/router/dashboard.tspackages/api/src/router/entitlement.tspackages/api/src/router/notification.tspackages/api/src/router/resource-summary-read.tspackages/api/src/router/user.tspackages/api/src/__tests__/timeline-router.test.tspackages/api/src/__tests__/vacation-router.test.ts
Bereits Erledigte Router-Slices In Dieser Serie
timeline: read schemas, holiday/project/allocation/shift support extrahiertvacation: create procedures extrahiertcomment: comment procedures extrahiertscenario: scenario procedures extrahiertreport: report template procedures extrahiertrole: role write procedures extrahiertsettings: settings procedures extrahiertrate-card: rate-card procedures extrahierteffort-rule: effort-rule procedures extrahiertexperience-multiplier: experience-multiplier procedures extrahiertmanagement-level: management-level procedures extrahiertblueprint: blueprint procedures extrahiertclient: client procedures extrahiertcountry: read-/write-procedures incountry-procedure-support.tsvalidiertholiday-calendar: write-procedures inholiday-calendar-procedure-support.tsvalidiertdispo: staged import/read/write procedures indispo-procedure-support.tsvalidiertimport-export: file-bound orchestration inimport-export-procedure-support.tsvalidiertinsights: procedure support und nullable-settings-Haertung validiertorg-unit: read-/write-procedures inorg-unit-procedure-support.tsvalidiertestimate: write/orchestration, rate lookup und Fehlertranslation inestimate-procedure-support.tsvalidiertassistant: chat-/approval-/prompt orchestration inassistant-procedure-support.tsundassistant-system-prompt.tsvalidiert