Taktano — Timesheet
Arbeitszeit am Code, versioniert (Everything-as-Code). Kanonische Quelle. Gespiegelt in
der Agenten-Memory timesheet, die daran erinnert, diese Datei zu pflegen.
Management-Summary (Gesamt-Stand)
Kernaussage. Nach ≈ 256.6 h seit Tracking-Beginn (14.06.2026) steht ein tragfähiges Vor-MVP (
v0.156.0): das Redesign „Flusslinie/Modernist" ist IA-komplett (Shell-Top-Bar + Voll-IA 4A–4E: Verwaltung · Fluss · Team · Aufräumen inkl. Chronik/Audit-Panel), die Metrik-Persistenz liefert alle fünf Review-Trend-KPIs (inkl. Termintreue · Ø Durchlaufzeit), und die Offline-Resilienz kann den lokalen Stand bewusst verwerfen + komplett neu synchronisieren. Weg → MVP1.0.0. Stand: 2026-07-26.
- Wo stehen wir? Vor-MVP
0.x, aktuellv0.156.0. Der Kern trägt: Taktung/Reihenfolge- Optimierung (Scheduler + CP-SAT, TS-Fallback), Echtzeit-Cockpit (Live-DO + WebSocket, 15+ Workspaces), Stammdaten-CRUD (Mitarbeiter · Skills · Prozesse · Buchten · Taxonomie · Schichten, persistiert + Tenant-Vorlage), Kosten/Audit (D1, OP-COST-1/2, OP-AUDIT-1), Foto/QS (R2, Vier-Augen-Gate). Vom Redesign „Flusslinie/Modernist" (OP-REDESIGN-1) sind Screens/Farbe/Layout fertig (Token → Screens → Farbsystem → Ink-Gantt → Layout-Features 3d-20…3d-28 inkl. Akten-Cockpit- Drawer · Annahme-Overlay · Fluss-Auswahl-Panel · Warn-Entkopplung · Review-Sicht · QS-Modal); die Shell-IA ist durch (IA-komplett): Rail → 62px-Top-Bar (4A) + Verwaltung (4B) + Fluss (4C) + Team (4D) + Aufräumen 3-Wege-Split & Chronik/Audit-Panel (4E) ✅ — kein „folgt"-Platzhalter mehr. Neu: Metrik-Persistenz (erste DO-SQLite-Runtime-Tabelle) → echte Review- Trend-KPIs (alle fünf: Auslastung · FPY · Nacharbeitsquote · Termintreue · Ø Durchlaufzeit) + Audit-Lesepfad (OP-AUDIT-1 Slice 3,GET /audit/liste). Backlog: 190 OP(s) — 152 offen/in Arbeit · 38 erledigt (docs/betrieb/Offene-Punkte.md). - Was steht an? (1) Weg zum MVP
1.0.0: Auth/Mandantenfähigkeit (OP-TENANT), Seed-Ablösung-Rest, Vest-POC/Pilot (OP-PILOT-1) · (2) OP-AI-6 (Struktur-Vorlagen je Textfeld → KI-Neuformulierung, drkv-Standard-Kandidat) · (3) Persistenz-Pilot-Kern (D5-3: bestehende State-Klasse Blob → DO-SQLite). - Investierte Zeit gesamt: ≈ 256.6 h seit 14.06.2026 — kuratiert bis KW26 (100.6 h) + Aggregat KW27–30 (≈ 156.0 h, dedupliziert) = 256.6 h. Untergrenze (Rückblick aus Commit-Clustern rekonstruiert; +~30 min/Session Nachlauf + reine Konversation nicht enthalten). Aufschlüsselung je KW direkt unten, je Session in der präzisen Tabelle. Beteiligte durchgängig MK + Claude (KI-Pair-Programming).
Protokoll (verbindlich, jede Session)
- Session-ID = sprechend, repo- & branch-abgeleitet (OP-PM-2 / OP-PM-3, kollisionsfrei): Statt
einer fortlaufenden Zahl (die parallele Branches kollidieren ließ — beide griffen „die nächste
Nummer", union-Merge erzeugte Duplikate → Hand-Umnummerierung) trägt jede neue Session als
ID
<repo>-<Datum>-<branch-slug>(z. B.taktano-2026-06-28-comments-image-support-caix8o). Der Repository-Name als Präfix (OP-PM-3) macht die ID repo-übergreifend eindeutig und auf einen Blick zuordenbar (welches Repo); Datum + Branch-Slug bleiben git-weit eindeutig → die ID kann nicht kollidieren, der union-Merge konkateniert nur, kein Umnummerieren mehr. Sprechend (Repo sagt wo, Datum sagt wann, Slug sagt was) und chronologisch sortierbar. Bestand bleibt: die alten Zahl-IDs (Session 0…52) und die früheren<Datum>-<branch-slug>-IDs (ohne Repo-Präfix) werden nicht rückwirkend umgeschrieben; die Repo-Präfix-Umstellung gilt ab hier für neue Sessions. - Start & Stop jeder Session erfassen (Wall-Clock via
date; zu Turn-Beginn prüfen). - Nachlaufzeit: Session-Stop = letzter Commit + 30 min (Wrap-up/Review nach dem letzten Commit), sofern der User keinen genaueren Stop nennt.
- Claude-Code-Interaktionen zählen mit: projektbezogene Konversation hier (Planung, Klärung, Doku, Reviews, Verifikation) ist Arbeitszeit — auch ohne resultierenden Commit. Eine Session kann also länger sein als ihre Commit-Spanne (oder ganz ohne Commit bestehen). Nicht-projektbezogenes zählt nicht.
- Gap-Regel: sind seit der letzten Interaktion > 1 Stunde vergangen → den User fragen, bis wann die letzte Session lief, diesen Stop eintragen und eine neue Session starten.
- Ehrlichkeit & Vorrang: reine Denkzeit ist nicht exakt messbar. Rückblick-Werte (vor Einführung) sind aus Git-Commit-Clustern rekonstruiert (Break > 3 h) → Untergrenze ohne Nachlauf/Konversation (real höher). Angaben des Users haben Vorrang.
- Datei am Session-Ende aktualisieren (Stop + Dauer + Σ).
- Verdichtungen je PR/Session mitziehen (verbindlich): die laufende KW-Zeile in der
„Management-Summary (wöchentlich)" (Aufwand + Schwerpunkte der Woche) und die Management-Summary
(Gesamt-Stand) oben (Stand · Anstehendes · investierte Zeit gesamt) — nicht nur die Einzel-Session.
Bei neuer KW: neue KW-Zeile + die wöchentliche Mermaid-
bar-Reihe fortschreiben (die zweitebar-Reihe ist ein fixer KW26-Tages-Snapshot — nur ergänzen, wenn bewusst eine eigene Tagesgrafik je KW gepflegt wird). - Wer gearbeitet hat (Beteiligte): je Session festhalten, wer die Arbeit
geleistet hat. Bisher durchgängig M. Kirchhof (Product Owner / Operator, drkv) im
KI-Pair-Programming mit Claude Code (der Operator steuert/entscheidet/reviewt, der
Agent baut). Spalte „Wer" in der Session-Tabelle; kommen weitere Personen hinzu,
werden sie dort namentlich geführt (Kürzel + Rolle). Default, wenn nichts vermerkt:
MK + Claude.
Management-Summary (wöchentlich)
Verdichtete Sicht für die Steuerung — Aufwand, Schwerpunkte und Liefer-/Versionsstand je Kalenderwoche (ISO-KW). Detail je Session in der Tabelle darunter. Stunden gerundet; Sessions über Tagesgrenzen sind dem Start-Tag zugeordnet (daher kleine Rundungsdiffs zur Σ). Beteiligte durchgängig: MK + Claude (KI-Pair-Programming, s. Protokoll).
| KW (ISO) | Zeitraum | Aufwand | Schwerpunkte | Stand Ende KW (Version/Build) | Wer |
|---|---|---|---|---|---|
| ≤ KW24 | bis 2026-06-20 | ~30.6 h | Rückblick (rekonstruiert aus Commit-Clustern, Untergrenze): Scheduler/CP-SAT-Grundlagen, Cockpit/Workspaces, Datenmodell. | Vor-MVP 0.x | MK + Claude |
| KW25 | 2026-06-15–21 | ~10.3 h | Zahlen-/Dauer-Konsistenz (Slice A, #122) — eine Wahrheit für Dauern/Abgeleitetes. | 0.x | MK + Claude |
| KW26 | 2026-06-22–28 | ~59.7 h | Way-of-Working & Governance (Versionierung/SBOM/Compliance/Risiko/Logging · Docs-Struktur/Landkarte OP-DOCS-8 · Doku-Site Start-/Team-Seite · Doku-Konsistenz-Check OP-DOCS-9) · Stammdaten-/Prozess-Editoren (OP-R1/OP-R3: Mitarbeiter·Skills·Teilschritte·Leistungen) · Flow-Refactor Phasen first-class + Klärfälle (OP-R3-1) · Kosten/Audit (OP-COST-1/2, OP-AUDIT-1, D1) · Foto-Upload R2 + Kompression (OP-R4) · Bildbewertung/Pre-Upload-Schutz (OP-QS-2) · Gantt Zoom + Heute-Linie (OP-R8) · Skill-Progression/Akademie (OP-R1-3) · R7-Zuweisungs-Invariante · Crystal-Bar Touch-Fix + Doku (OP-R9-12). | 0.14.2 / Build 19 | MK + Claude |
| KW27 | 2026-06-29–07-05 | ≈59.7 h† | Governance-Werkzeug & echte Kosten — OP-Management-Gold-Standard (ops/<ID>.md + gen-ops, OP-DOCS-11/12) · echte LLM-Kosten (OP-COST-2: Mistral-/Anthropic-Billing-Pull) · Wettbewerbs-/Markt-Analyse (OP-COMPETE-1/OP-MARKET-1) · Feedback-Kanal (OP-FEEDBACK-1/2) · Observability/Logging (OP-OBS-1/OP-LOG-1) · SBOM/Security · Glossar. | ~0.5x | MK + Claude |
| KW28 | 2026-07-06–12 | ≈38.1 h† | Doku-UX & Vertrieb — Doku-UX-Konzept (OP-DOCS-13) · Big-Bang-OP-Migration nach ops/ (OP-DOCS-11) · UX-/Prozess-Review → OP-UX-7 · Vertrieb/Markt (OP-VERTRIEB-1/2/3 · OP-MARKET-2) · Akademie · Textbausteine/Diktat (OP-TEXTBLOCK-1/OP-DIKTAT-1) · Onboarding/Auth-Groundwork. | ~0.8x | MK + Claude |
| KW29 | 2026-07-13–19 | ≈21.9 h† | Operative Slices & Repo-Struktur — nested CLAUDE.md-Split (3 Stacks) · Architektur-Übersicht + SBOM-Fundstelle · Umparken (OP-UMPARK-1…4) · Konflikt-Erkennung fehlende Ressource (OP-R8-1) · Schritt-/Feld-Editor (OP-STEP-1/OP-EDIT-1) · Schicht-Katalog (OP-SCHICHT-1) · Alarm (OP-ALERT-1/2) · Vier-Augen-QS (OP-QS-6). | ~0.85→0.12x | MK + Claude |
| KW30 (laufend) | 2026-07-20–26 | ≈36.7 h† | Redesign „Flusslinie/Modernist" (OP-REDESIGN-1) UI-komplett — voller Design-System-/Marken-Ersatz in Phasen: Token-Layer → 4-Orte-Shell/IA → Screens → Farbsystem (Cyan+ws-Rainbow → Ink/Rot) → Ink-Gantt → net-new Layout-Features (3-TN-Karten · Heute-Streifen · Akten-Cockpit-Drawer · Annahme-Overlay · Fluss-Auswahl-Panel · Warn-Entkopplung · Review-Sicht · QS-Modal), 3d-1…3d-28 · Metrik-Persistenz (erste DO-SQLite-Runtime-Tabelle → Review-Trend-KPIs) · OP-AI-6 (Struktur-Vorlagen je Textfeld → KI-Neuformulierung) erfasst · Verbindungs-Wiederherstellung (Offline-PWA) · Voll-IA-Top-Bar 4A–4E ✅ (IA-komplett): Rail→Top-Bar (4A) · Verwaltung (4B) · Fluss (4C) · Team (4D) · Aufräumen 3-Wege-Split & Chronik/Audit-Panel (4E) · Metrik-Trends Termintreue + Ø Durchlaufzeit (5 Review-KPIs) · Top-Bar-Menü prototype-treu („⋯"→Verwaltung + ⚙-Popover) · OP-AUTH-1 A-1 (Rollen-/Fähigkeits-Naht darf(conn,…), + CodeRabbit-Nachzug) · Offline-Resilienz (Schema-Broadcast + „↻ Neu synchronisieren": Offline-Stand verwerfen + Voll-Resync, OP-OFFLINE-1; + CodeRabbit-Nachzug: Cache-SCHEMA-Bump · clear()/Erreichbarkeits-Fehler ehrlich) · ⚙-Menü-Aufräumen („Auf Kurs %"-Statuszeile raus) · OP-AUTH-1 A-1.5 (Rollen-Auswahl im Menü [interim self-declared] + KOSTEN_ADMIN_EMAILS-Allowlist entfernt) · Timesheet-Management-Summaries. | 0.156.0 | MK + Claude |
† KW27–30-Aufwand = Aggregat aus den Einzelzeilen (dedupliziert nach Session-ID; s. „Sessions"-Tabelle/Prosa unten = maßgeblich). Wegen des Union-Merge-Verfahrens (OP-PM-2) bleiben nach der byte-Glättung gelegentlich near-Dubletten → die KW-Summe ist vorläufig/gerundet, nicht auf die Minute belastbar. Versions-Spalte KW27–29 ist ein Richtwert (exakt je PR im CHANGELOG.md; die 0.x-MINOR-Zahl kann >100 sein, z. B. 0.85 < 0.130).
Lesart: KW26/KW27 sind die dominanten Bauwochen (je ≈ 60 h — Governance/Kern bzw. Werkzeug/Kosten), danach flacht der Aufwand ab (KW28 ≈ 38 h, KW29 ≈ 22 h, KW30 ≈ 30 h laufend) bei zunehmend fokussierter Slice-Arbeit (Umparken/Editoren, dann der Flusslinie-Redesign). Die KW26-Tagesgrafik unten bleibt als Referenz-Snapshot der Hochlastwoche. Die Grafiken sind Mermaid (
xychart-beta), also versioniert/diff-bar (keine Binär-Charts).Pflege (verbindlich, je PR/Session): neue Session → Zeile in der präzisen Tabelle und die laufende KW-Zeile oben (Aufwand + Schwerpunkte) fortschreiben; bei neuer KW eine neue KW-Zeile + die wöchentliche
bar-Reihe ergänzen (die KW26-Tagesgrafik ist ein fixer Snapshot); die Management-Summary (Gesamt-Stand) oben (Stand · Anstehendes · investierte Zeit) bei jedem PR mitziehen.
Sessions (Start/Stop) — präzise
ID-Spalte: neue Sessions tragen die sprechende, repo- & branch-abgeleitete ID
<repo>-<Datum>-<branch-slug>(OP-PM-3, kollisionsfrei, s. Protokoll); die Alt-Sessions behalten ihre fortlaufende Zahl (0…52) bzw. die frühere<Datum>-<branch-slug>-ID ohne Repo-Präfix (nicht rückwirkend umgeschrieben).
| Session-ID | Start | Stop | Dauer | Schwerpunkt |
|---|---|---|---|---|
| 0 | 2026-06-21 ~14:16 | 2026-06-22 00:36 | ~10.3 h¹ | Zahlen-/Dauer-Konsistenz (Slice A, PR #122) |
| 1 | 2026-06-22 07:58 | 2026-06-22 19:49 | ~11.8 h² | Timesheet-/Way-of-Work-Doku · 3b Gantt-Direktverschiebung (Pin-Batch) · Doku-Auto-Deploy (strict + Version-Footer) + GitBook-Entscheidung · App-Worker-CD · Gantt-Ausfallzeiten · Solver-Version/Build + Fallback-Hinweis (OP-DEPLOY-2) · Solver-Auto-Deploy Fly (OP-DEPLOY-1, Token-Guard) · Pin-Konflikt-Feedback-Fix · Zielprofil „Termintreue" · OP-OPT-4 (Doku) · CP-SAT-Vertiefung Slice 1 Indoor-Trocknung-Pflicht + Slice 2 Folierbucht-Überlauf |
| 2 | 2026-06-22 20:10 | 2026-06-22 21:10 | ~1.0 h³ | Way-of-Working: Branch nach Merge löschen + Doku-Pflicht je PR/Merge (HANDOFF+Timesheet) · OP-AI-4 In-App-Assistent: Park + Design-Doc + Entscheidung (vorschlagend) + Slices 1–3 (Insights-Engine read-only + Self-Test/CI · DO-Anbindung live im Broadcast · Angular-Panel „Lage auf einen Blick") |
| 8 | 2026-06-23 ~06:30 | 2026-06-23 ~07:40 | ~0.9 h⁹ | Abwesenheiten/Soft-Blocks + Schicht-Art (OP-R8-11 Mitarbeiter-Teil; Folge-OP OP-OPT-7): von-bis-Dialog mit Härtegrad (fest/Wunschfrei) × Reichweite (ganzer Tag/Schichten), schicht-granulare Verfügbarkeit (abwesenheitIntervalle), Wunschfrei-Gantt-Band, Schicht-Art regulaer/standard/ueberlauf. Self-Test test:ausfall erweitert; Server-Typecheck + Smoke + Client-Build + No-Hex grün. Doku (Lastenheft §4.4/§4.4a, HANDOFF, CHANGELOG). Way-of-Working: neue Guideline „Feature-Branches regelmäßig gegen main". |
| 4 | 2026-06-23 ~07:25 | 2026-06-23 ~08:20 | ~0.9 h⁵ | Mitarbeiter-Leistung & Erfahrung + Ausbildung als Helfer + QS-Mangel (PR #163, OP-R1-2/OP-QS-1): pures Modul operativ/leistung.ts (Leistungsnachweis/Mangel/Statistik/XP) + Self-Test test:leistung (CI) · Modell (helferIds, Ist-Zeit-Stempel, maengel, setzeHelfer) · Server-Verdrahtung (teilschritt.setHelfer/qs.mangelErfassen, Leistungsnachweise, abgeleitete Karten-Statistik/XP, Demo-Historie) · Client (Karte XP+Statistik, Aufträge-Helferzuteilung, QS-Mangelformular) · Doku (Lastenheft §4.9.1/§6.4.1/§6.5 + OPs, HANDOFF, CHANGELOG). Follow-up gleicher Branch: Ausbildungsziele je Mitarbeiter → abgeleitete Helfer-Vorschläge (frei × passender offener Schritt) + penaltyfreies Abziehen (G-2-Ausnahme); Editor in der Karte, 🎓 im Auftrag; Self-Test um Vorschlags-Logik erweitert. Alle Server-Tests + Client-Build + No-Hex-Gate grün. Kein Solver-Redeploy. |
| 6 | 2026-06-23 ~08:30 | 2026-06-23 ~16:40 | ~1.6 h⁷ | #163 gemergt (PR + Merge nach main, Branch via Auto-Delete weg) · neuer Branch claude/op-r1-2-helfer-verfuegbarkeit. OP-R1-2 #6: Helfer-Vorschlag prüft echte Verfügbarkeit zur Schritt-Zeit (mitarbeiterAvailability, verfuegbarBei-Callback). Weiter (OP-R1-2 + neue OP-R3-3): güteklassen-gewichtete XP · anteilige Helfer-XP bei Unterbrechung/Verspätung (lernanteil, TeilschrittInstanz.unterbrochen) · Niveau-Aufstieg-Vorschlag (niveauVorschlaege + Karten-Button) · Unterbrechung/Übernahme in der Prozessdefinition (Teilschritt.unterbrechung/uebernahme erlaubt/vermeiden/verboten; verboten hart auf Preemption). test:leistung stark erweitert (Anteil/Güteklasse/Niveau). Voller Server-Test-Lauf + Client-Build + No-Hex grün; kein Solver-Redeploy. Doku (Lastenheft §4.6/§6.5/OP-R1-2/OP-R3-3, HANDOFF, CHANGELOG, operativmodell). |
| 3 | 2026-06-22 21:10 | 2026-06-23 06:00 | ~1.6 h⁴ | OP-R1-1 Mitarbeiter-/Skill-CRUD + Modell-Zusammenführung (PR #160): Mitarbeiter kanonisch für UI und Solver; Phasen A–E (Anzeige-CRUD · Persistenz/Migration · CRUD am echten Modell + UI · Solver-Verdrahtung + Self-Test test:eligibility) + Schicht-/Abwesenheits-Editor; Entscheidungen vorab geklärt (kanonisch · Abteilung+Rolle · Verfügbarkeit ableiten · Phase C fokussiert). + Light/Dark-Mode (OP-R9-9, PR #159): Light-Token-Set aus tokens.json generiert ($extensions.taktano.light; Staleness-Check block-bewusst) · ThemeService (light/dark/system, persistiert, prefers-color-scheme) · No-Flash-Skript · Sidebar-Toggle · Komponenten auf Tokens · zweifach auf neues main rebased + gemergt. main-Merges/Konflikt-Auflösungen (#157/#160/#159); CHANGELOG+Timesheet nachgezogen |
| 5 | 2026-06-23 ~12:50 | 2026-06-23 ~16:40 | ~3.3 h⁶ | Auth/Billing/Markteintritt-EU — Strategie + Entscheidungen (reines B2B): Optionen aufgezeigt (In-App-Feedback+Chatbot = OP-AI-4 · Giscus vs. Worker-Proxy · Clerk vs. Better Auth vs. WorkOS · RevenueCat · Stripe-Alternativen Mollie/GoCardless/MoR · DE→DACH→EU mit E-Rechnung/VAT/Multi-Currency) → festgehalten: SevDesk als Rechnungs-/Mahnwesen-SoR · Better Auth (EU-self-host) · zahlungs-gesteuerter Zugang (Stufenmodell Banner→eingeschränkt→gesperrt, fail-open, Audit) in docs/Billing-Zugang.md + OP-BILLING-1/ACCESS-1/I18N-1 (#164); SevDesk-Integration zurückgestellt (#165). Way-of-Working: „Branch laufend auf main aktuell halten" (#166/#167). Davor in derselben Konversation, im Wall-Clock paralleler Sessions (nicht erneut gezählt, s. ⁶): Audit-Trail+CHANGELOG (#153) · Sidebar-Aufklappen+Gruppierung (#158, ersetzt #154) · „Plan ändern"-Fokus-Modus (#155) · 30-s-Ping-Bugfix (#156) · Konflikt-Navigation (#152) gebaut/gemergt + Changelog-Nachtrag (#161). |
| 7 | 2026-06-23 ~14:55 | 2026-06-23 ~17:25 | ~0.8 h⁸ | Gantt-Task Tooltip + Detail-Fly-in + Aktions-Hub (OP-R8-16, PR #171): Hover-Tooltip (Konflikt-betont) + rechts einschwebendes Detail-Panel mit Fakten/Teilschritten + Aktions-Hub (Lifecycle · Vorziehen vorschlagen · ⏱ Verzögerung melden — reaktiviert das verwaiste meldeVerzoegerung · Umparken · Hofplan/Konflikt). Block-A11y (role/tabindex/Enter), Entwurfs-/Touch-Unterdrückung, live-Auftrag/Auto-Close. Folge #172 (gleicher Strang): Panel workspace-übergreifend geteilt (umbenannt gantt-task-panel→auftrag-detail-panel.component.ts) + auf der Aufträge-Fortschritts-Leiste verdrahtet (Schritt-Klick → fokussiertes Fly-in). Nur Tokens (No-Hex grün), ng build dev+prod grün; #171 gemergt, #172 PR. Reiner Client-Pfad, kein Server-/Solver-Change. |
| 9 | 2026-06-23 ~17:05 | 2026-06-23 ~17:50 | ~0.4 h¹⁰ | Skill-Katalog: Beschreibung (F02) editierbar (#174, rundet den OP-R1-1-Phase-C-Editor ab): Client-only — Katalog-Dialog + Anlege-Formular um ein Beschreibungs-Feld ergänzt (setzeSkillBeschreibung, createSkill(name, beschreibung)); das Feld war server-/service-/DTO-seitig (inkl. Broadcast) längst durchgereicht, nur ohne UI. ng build (prod) + No-Hex grün; kein Solver-Redeploy. |
| 10 | 2026-06-23 ~17:50 | 2026-06-23 ~18:50 | ~1.0 h¹¹ | Prozessschritt-Skill-Anforderungen editierbar (#175, OP-R3-3-Teil): Teilschritte im DO persistiert (Voll-Persist wie OP-R1-1, schemaVersion 9) + Handler teilschritt.setSkillAnforderung; seed-statische Maps (TS_SKILL/tsById in buildProzessKatalog/engpassSkills) auf den persistierten Stand umgestellt (teilschrittSkill); pure operativ/prozess.ts + Self-Test test:prozess (CI). Neuer Client-Workspace „Prozesse" (Skill-Picker · ★-Niveau · Personen-Stepper, geteilte Bausteine dedupliziert) + Route/Rail + 9. Workspace-Farbe --tk-ws-processes (tokens.json→tokens.css regeneriert + build.mjs NAME-Map). Server-Typecheck + test:prozess/eligibility/spike/solve + ng build (prod) + No-Hex + tokens-Staleness grün; kein Solver-Redeploy. Doku: Lastenheft §4.6/OP-R3-3, HANDOFF (+ veraltete read-only-Zeile korrigiert), WORKSPACES.md/DESIGN_TOKENS.md, CHANGELOG. |
| 11 | 2026-06-23 ~18:31 | 2026-06-23 ~19:10 | ~0.5 h¹² | Prozessschritt-Eigenschaften editierbar (#176, OP-R3-3-Forts.): Dauer · Cool-down (+indoor) · optional · parallel · mehrtägig · Bucht-Typen · Unterbrechung/Übernahme-Regel je Teilschritt. Pure setzeTeilschrittFelder + Handler teilschritt.update; restliche seed-statische Teilschritt-Maps (TS_REQUIRED_TYPES→toAuftragDTO-Param, optional-Map, Preemption-tsById) auf persistierten Stand; ProzessSchrittDTO+Felder, Taxonomie ARBEITSPLATZ_TYPEN; „Prozesse"-Editor um Schritt-Eigenschaften erweitert; test:prozess um Feld-Validierung. Server-Typecheck + test:prozess/operativ/replan/eligibility + ng build (prod) + No-Hex grün; kein Solver-Redeploy. Doku: CHANGELOG #176, HANDOFF, Lastenheft OP-R3-3, WORKSPACES.md. |
| 29 | 2026-06-24 ~05:50 | 2026-06-24 ~07:00 | ~1.1 h²⁹ | Flow-Analyse Auftrags-Flow (reine Doku, Branch claude/workflow-reservation-pickup-6m2q37): Nutzer-Eindruck „Flow Reservierung→…→Abholung nicht intuitiv" aus Daten-/Prozess-/UX-Sicht geprüft (3 parallele Explore-Agenten + Code-Gegenlesen). Befund: drei nicht deckungsgleiche „Flows" + Vermischung zweier orthogonaler Achsen (Lifecycle/Reservierung vs. fachliche Phase), Anlieferung≠Annahme kollabiert, QS doppelt modelliert, Aufbereitung/Produktion-Heuristik fragil. Neues Dokument docs/Flow-Analyse.md (Befund + Zielbild „Phasen first-class") + Audit-Trail (HANDOFF/Lastenheft OP-R3-1+§5.1/Sanity-Checkliste/CHANGELOG). Entscheidung: Zielbild empfohlen, Umsetzung noch nicht beschlossen (migrationspflichtig). Keine Code-Änderung. |
| 30 | 2026-06-25 ~17:00 | 2026-06-26 ~13:00 | ~5.5 h³⁰ | Flow-Refactor-Plan + PR 1–7 + PR #194 (OP-R3-1, Branch claude/workflow-reservation-pickup-6m2q37): docs/Flow-Refactor-Plan.md + inkrementelle Umsetzung — PR1 Phase-Tag am Teilschritt + Migration · PR2 Annahme als Doku-Schritt (nicht solver-geplant) · PR3 aktuellePhase + AuftragDTO.phase · PR4 UI liest Phase (Flow-Band ohne Heuristik, kontrolliert↔Abholung-Bug, gemeinsame phase.ts) · PR5 QS-Freigabe/Abholung/Nachkontrolle entzerrt · PR6 Klärfälle (abbrechen/abgebrochen + Klärfall-Kontext + Skill „Klärung") · PR7 Pflicht-Doku-Gate je Schrittabschluss. Abschluss: zwei main-Abgleiche (Merge, Konflikte CHANGELOG/Timesheet/leitstand.ts SCHEMA_VERSION→14) + lokale Verifikation (typecheck · alle Self-Tests · ng build · No-Hex · Laufzeit-Probe) + PR #194. Kein Solver-Redeploy. |
| 12 | 2026-06-23 ~19:27 | 2026-06-23 ~20:50 | ~1.1 h¹³ | Leistungs-Prozess-Editor (#177, OP-R3-3-Editor komplett): leistungen im DO persistiert (Voll-Persist, schemaVersion 10) + schedulerInput/buildProzessKatalog aus State; pure setzeLeistungFelder/setzeLeistungProzess + Handler leistung.update/leistung.setProzess; ProzessDTO+status, ProzessSchrittDTO+dauerOverrideMin. „Prozesse"-Workspace mit Tab Teilschritte↔Leistungen; Leistungen-Tab: Stammfelder + Komposition (Reorder/Picker/Abhängigkeit/Override/+−). test:prozess um Leistungs-Logik erweitert. Server-Typecheck + test:prozess/operativ/spike/solve/eligibility + ng build (prod) + No-Hex grün; kein Solver-Redeploy. Doku: CHANGELOG #177, HANDOFF, Lastenheft OP-R3-3, WORKSPACES.md. |
| 13 | 2026-06-23 ~20:30 | 2026-06-23 ~21:15 | ~0.5 h¹⁴ | Eingriffsregeln am Preemption-Hebel (#178, OP-R3-3 server-seitig abgeschlossen): Architektur-Befund (Solver splittet/preemptet nicht · Preemption manuell · Resume behält Crew) → Durchsetzung am Hebel statt im Solver. unterbrechung: vermeiden → „erlaubt vor vermeiden" gereiht + ⚠-Hinweis; uebernahme verboten/vermeiden → Hinweis. Pure preemptionHinweis/preemptionUnterbrechungsRang + test:preemption erweitert; HebelDTO.warnung server+client; Anzeige in conflicts.component. Server-Typecheck + test:preemption/prozess/spike + ng build (prod) + No-Hex grün; kein Solver-Redeploy. Doku: CHANGELOG #178, HANDOFF (+ Eingriffsregeln-Zeile), Lastenheft §4.6/OP-R3-3. |
| 14 | 2026-06-23 ~21:15 | 2026-06-23 ~21:45 | ~0.5 h¹⁵ | OP-OPT-7 Slice 1: Wunschfrei-Pönale (Solver-Anbindung weicher Soft-Blocks): Explore-Mapping Solver/Objective → Pönale in CP-SAT (model.py, Überlapp-Minuten je zugewiesenem Schritt, only_enforce_if(on)) und TS-Fallback (objective.ts wunschfreiMin/istBesser + schedule.ts Kandidaten-Reihung frei→Wunsch→genehmigt). Abstufung Abwesenheit.genehmigt (×100 = quasi-hart) + Editor-Toggle; geteilter Helper weicheBloecke; Payload employees[].softBlocks. python model.py + test:ausfall erweitert. Server-Typecheck + alle Self-Tests + ng build (prod) + No-Hex grün. Deploy: fly-deploy.yml auto (Merge→main). Doku: CHANGELOG #179, HANDOFF OP-OPT-7/OP-R8-11, Lastenheft §4.4a/F05. |
| 15 | 2026-06-23 ~21:45 | 2026-06-23 ~22:50 | ~1.0 h¹⁶ | OP-OPT-7 Slice 2: Bereitschaft-Hybrid (Explore-Mapping Vorschlag/Bereitschaft-Surfaces → Bau): ueberlauf-Schichten zählen nicht mehr zur Default-Verfügbarkeit (mitarbeiterAvailability includeUeberlauf; „nie still"); Variante berechnePlaene(…, bereitschaft=true) öffnet sie (ueberlaufFenster als Soft-Block BEREITSCHAFT_POENALE_PRO_MIN=5, Ordnung 2<5<200) und erzeugt bei Gewinn (Termin gerettet ODER früher — Nutzer-Wahl „auch bei Zeitgewinn") einen bestätigungspflichtigen VorschlagAktion-bereitschaft mit Effekt-Vorschau (bereitschaftGezogen); Übernehmen rechnet/schreibt den Plan, nie automatisch. Kein Solver-Redeploy (Pönale aus #179 trägt das Soft-Block-Fenster); Feed recommendations rendert generisch. test:bereitschaft + CI; Server-Typecheck + alle Self-Tests + ng build (prod) + No-Hex grün. Doku: CHANGELOG #180, HANDOFF OP-OPT-7, Lastenheft §4.4a/F05. |
| 16 | 2026-06-24 ~06:20 | 2026-06-24 ~07:10 | ~0.8 h¹⁷ | Projekt-Konventionen & Governance (#181): #180 finalisiert (Create/Merge/Cleanup) + OP-AUDIT-1-Mapping (Bau folgt) → Versionierung (SemVer, MVP=1.0.0, Build-Nummer; server/src/version.ts, sichtbar in UI-Toolbar + DO-Boot-Log) · SBOM (CycloneDX npm run sbom + CI-Job sbom, OP-SBOM-1) · Compliance/Zertifizierung (docs/Compliance.md; TÜV/ISO/Security, DE/AT/CH, proaktives Flagging, OP-COMPLIANCE-1) · Risikoregister (docs/Risikoregister.md, 10 Risiken) · Log-Handling (OP-LOG-1). CLAUDE.md §Versionierung/§Compliance/Tiefenquellen + HANDOFF (3 OPs). Server-Typecheck + ng build (prod) + No-Hex grün; kein Solver-Redeploy. |
| 17 | 2026-06-24 ~12:00 | 2026-06-24 ~12:25 | ~0.4 h¹⁸ | OP-AUDIT-1: Audit-Log-Architektur festgezurrt (#182, Design-PR, kein Code — Nutzer-Wahl „erst Architektur"): docs/Audit-Log.md — Speicher-Entscheidung D1 (EU) statt DO-Blob (Hybrid, append-only), D1-Schema-Entwurf (audit_entries INSERT-only + Indizes), Event-Katalog (typisiert, Akteur/Auslöser), „nicht reverse-engineerbar"-Sicht/Suche (rollenbasiert, kein Existenz-/Count-/Timing-Oracle, OP-SEC-1), Retention + PII-Scrubbing (DSGVO), DO→D1-Schreibpfad, Build-Slices (Fairness/Zugang → breit → Panel/Rollen/Suche). HANDOFF OP-AUDIT-1-Eintrag + CLAUDE.md Tiefenquellen. Kein Code/Solver-Redeploy. |
| 18 | 2026-06-24 ~16:30 | 2026-06-24 ~17:40 | ~1.0 h¹⁹ | OP-AUDIT-1 Slice 1: Abwesenheits-/Wunschfrei-Historie → OP-OPT-7-Fairness (#183, erster Bau nach Design #182; Nutzer-Wahl „Slice 1 bauen"; Version 0.1.0→0.2.0, Build 2). Explore-Mapping des DO-/Abwesenheits-Pfads → append-only AbwesenheitHistorieEintrag[] im DO (schemaVersion 11 + idempotenter Backfill aus aktuellen Abwesenheiten), protokolliereAbwesenheit an employee.addAbwesenheit/removeAbwesenheit (Entfernen = Gegen-Eintrag, nie löschen); abgeleitete OP-OPT-7-Fairness als pure, selbst-getestete fairnessAusHistorie (operativ/fairness.ts, D-2) → FairnessDTO an Employee, in der Mitarbeiter-Karte sichtbar (nur --tk-*). Interim im DO-Blob (§8-Hinweis), D1-Umzug später. Self-Test test:fairness (+ CI). Server-Typecheck + test:fairness + Smoke (spike/operativ/replan) + ng build (prod) + No-Hex grün; kein Solver-Redeploy. Doku: docs/Audit-Log.md (Status+§8), HANDOFF (OP-AUDIT-1), CHANGELOG, Timesheet. |
| 19 | 2026-06-25 ~10:20 | 2026-06-25 ~11:35 | ~1.0 h²⁰ | OP-AUDIT-1 D1-Verdrahtung (deploy-sicher, dormant) + OP-COST-1 erfasst (#184, Version 0.2.1/Build 3; Nutzer-Wahl „D1-Verdrahtung"). Infra-Befund: ein [[d1_databases]]-Binding würde wrangler deploy (Merge→main) brechen, falls die DB fehlt/nicht erreichbar → bewusst deploy-sicher: Schema migrations/0001_audit_entries.sql (audit_entries, ausloeser statt trigger), Env.DB? optional, guarded Dual-Write d1InsertAudit (Blob + D1, fire-and-forget) + idempotenter d1BackfillFromBlob — dormant, bis das Binding existiert (No-op ohne DB). Blob bleibt Quelle der synchronen Fairness (Lese-Umstellung = Folge). Aktivierung offen (DB provisionieren EU weur + Binding + migrations apply + CI-Token-D1-Rechte → §7). Zusätzlich neuer OP-COST-1 (Kosten-Dashboard) erfasst. Server-Typecheck + test:fairness + Smoke + No-Hex grün; kein Solver-Redeploy, kein Deploy-Risiko. Doku: docs/Audit-Log.md §7/§8/Status, HANDOFF (OP-AUDIT-1 + OP-COST-1), CHANGELOG. |
| 20 | 2026-06-25 ~11:35 | 2026-06-25 ~12:00 | ~0.4 h²¹ | OP-AUDIT-1: #184 gemergt + D1-Audit-DB provisioniert/migriert (Binding zurückgestellt) (#185, Nutzer-Wahl „DB anlegen, Binding später"; kein Code → kein Version-/Build-Bump, Präzedenz #182). #184 nach grünem CI gemergt (dormant/deploy-sicher) + Branch/Main aufgeräumt. D1-DB taktano-audit (EU weur, database_id 6a080ffd-…) via MCP d1_database_create angelegt + Migration 0001_audit_entries.sql (audit_entries + 4 Indizes) angewandt + per sqlite_master-Query verifiziert. Binding NICHT gesetzt (wrangler.toml unangetastet → null Deploy-Risiko); zwei Go-Live-Vorbedingungen (Konto-Match + CI-Token-D1-Rechte) in §7 festgehalten. Doku: docs/Audit-Log.md (Status/§7/§8), HANDOFF (OP-AUDIT-1), CHANGELOG (#185 + #184 auf 06-25 umsortiert), Timesheet (Session 20 + Summe-Rollup 18–20). Kein Solver-Redeploy. |
| 21 | 2026-06-25 ~12:00 | 2026-06-25 ~12:25 | ~0.4 h²² | OP-AUDIT-1: D1-Audit-Binding gesetzt — Dual-Write live (#186, Version 0.2.2/Build 4, PATCH; Nutzer-Wahl „Go"). Beide Go-Live-Vorbedingungen (§7.4) nutzerseitig bestätigt — (a) per MCP verbundenes CF-Konto = Deploy-Konto (CLOUDFLARE_ACCOUNT_ID), (b) CI-CLOUDFLARE_API_TOKEN mit D1-Recht → [[d1_databases]]-Binding (DB → taktano-audit, database_id 6a080ffd-…, migrations_dir) in server/wrangler.toml gesetzt. Beim Merge auf main deployt der strikte CD-Job (ci.yml) den Worker mit DB-Binding → env.DB gesetzt → guarded Dual-Write + Backfill (#184) live; Migration 0001 remote bereits angewandt + idempotent (IF NOT EXISTS), wrangler deploy apply-t keine D1-Migrationen → kein Doppel-Apply. Feature-Branch sauber von aktuellem main neu aufgesetzt (Squash-Artefakt der alten Branch verworfen). Doku: wrangler.toml, version.ts, docs/Audit-Log.md §7, HANDOFF (OP-AUDIT-1), CHANGELOG, docs/Compliance.md. Kein Solver-Redeploy. |
| 22 | 2026-06-25 ~12:25 | 2026-06-25 ~12:55 | ~0.5 h²³ | OP-COST-1: Kosten-Dashboard-Architektur festgezurrt (#187, Design-only — kein Code/kein Bump, Präzedenz #182; Nutzer-Wahl „aufnehmen" → Scope beide Sichten getrennt, Tiefe erst Design). Neue Doku docs/Kosten.md: A betriebswirtschaftlich (Arbeits-/Materialkosten + Marge je Auftrag/Leistung, Soll-Ist) · B Infra-/Cloud-Spend (Ops). Arbeitskosten abgeleitet aus vorhandenen Leistungsnachweise.istMin (R1-2) × Stundensatz-Stammdaten je Abteilung (neu, G-1); Material konsumiert OP-R10-1, Umsatz/Marge aus OP-R7-6/SevDesk; derived nie speichern (D-2); Rollen-Gate hängt an OP-AUTH-1, Stammdaten-Änderungen als OP-AUDIT-1-Event. Slices: A1 Arbeitskosten (baubar jetzt) · A2 Material (gated R10-1) · A3 Marge+Dashboard (gated R7-6) · B1 Infra. Split (Nutzer-Wahl „split"): eigener Branch claude/op-cost-1-design, getrennt von Audit-Binding-PR #186. Doku: docs/Kosten.md, HANDOFF (OP-COST-1), CLAUDE.md (Tiefenquellen), Risikoregister (RISK-11/12), CHANGELOG. Kein Solver-Redeploy. |
| 23 | 2026-06-25 ~12:55 | 2026-06-25 ~14:00 | ~1.0 h²⁴ | PRs #186/#187 erstellt + gemergt + OP-R1-3 erfasst + Design festgezurrt (#188). Audit-Binding-PR #186 gemergt → live deployed (CD grün ~13:23, wrangler deploy mit DB-Binding erfolgreich → Dual-Write live); Cost-Design-PR #187 gemergt (Rebase auf main + Konfliktauflösung CHANGELOG/Timesheet — beide Sessions/Einträge zusammengeführt, Summe 72.3). Beide Branches lokal gelöscht (remote-Delete env-blockiert — wie die übrigen Alt-Branches; GitHub-Auto-Delete empfohlen). Neuer OP-R1-3 (Nutzer): niveau-gezielte Ausbildungsziele + XP-Schwellen je Stern-Stufe + begründete Beförderung (OP-AUDIT-1) + „beförderungsreif"-Todo (MA-Karte/Übersicht) + Akademie-Vorbereitung; offene Frage (Beförderung „zählt nicht"/„weitere XP") mit Vorschlag. Design docs/Akademie.md (Datenmodell/XP-Schwellen/Beförderungs-Flow/Slices). Doku: docs/Akademie.md (neu), HANDOFF (OP-R1-3), CLAUDE.md (Tiefenquellen), CHANGELOG (#188). Kein Code/Solver-Redeploy. |
| 24 | 2026-06-25 ~14:00 | 2026-06-25 ~15:00 | ~1.0 h²⁵ | OP-R1-3 Slice 1 gebaut: Skill-Niveau-Progression (#189, Version 0.3.0/Build 5, MINOR). ausbildungsZiele → {skillId, zielNiveau} (Migration v12, ★-Editor, „nur nicht erreichte"); per-Skill-XP (erfahrungspunkteProSkill) + XP-Schwellen (XP_SCHWELLE_NIVEAU, Konstanten); niveauVorschlaege XP-gegatet (Schwelle + Qualitäts-Gate), MA-Karte zeigt XP-Fortschritt. Reuse des bestehenden Vorschlags-Pfads statt Parallel-Engine; Beförderungs-Begründung/Audit/Übersicht = Slice 2. Touch-Point-Recon via Explore-Subagent. Server-Typecheck + test:progression (neu) + test:leistung + ng build (prod) grün; CI ergänzt. Doku: docs/Akademie.md (Status), HANDOFF (OP-R1-3), CHANGELOG (#189). Kein Solver-Redeploy. |
| 25 | 2026-06-25 ~15:00 | 2026-06-25 ~15:50 | ~0.8 h²⁶ | OP-R1-3 Slice 2 gebaut: begründungspflichtige Beförderung + Audit-Historie (#190, Version 0.4.0/Build 6, MINOR). setSkillNiveau mit Pflicht-Grund (Kategorie + Notiz) → „Anheben" öffnet Begründungs-Dialog; neue append-only befoerderungsHistorie (BefoerderungEintrag wer·wann·von→auf·Grund, Muster wie #183) + jüngste Beförderungen als Audit-Spur auf der MA-Karte. Manager-Aktionen vertagen/verwerfen + Übersicht = Slice 3. Server-Typecheck + test:progression/test:leistung + ng build (prod) grün. Doku: docs/Akademie.md, HANDOFF (OP-R1-3), CHANGELOG (#190). Kein Solver-Redeploy. |
| 26 | 2026-06-25 ~15:50 | 2026-06-25 ~16:25 | ~0.5 h²⁷ | Zwei Gantt-OPs erfasst: Heute-Linie + Zoom (#191, Backlog/Doku-only — kein Code/kein Version-/Build-Bump). OP-R8-17 vertikale „Jetzt"-Linie über alle Gantt-Zeilen (was läuft jetzt / überfällig); OP-R8-18 Zeit-Zoom (Stunden↔Tage↔Wochen + Tag/Woche/Monat-Presets), je mit offenen Klärungen (Live-Tick/Styling bzw. Zoom-Stufen/Anker/Performance). Parallel zur Slice-2-PR #190 erfasst → bei der Merge-Orchestrierung beider Branches die kumulativen Doku-Konflikte (CHANGELOG/HANDOFF, „beide behalten, neueste zuerst") aufgelöst. Doku: HANDOFF (OP-R8-17/18), CHANGELOG (#191). Kein Code/Solver-Redeploy. |
| 27 | 2026-06-25 ~21:00 | 2026-06-25 ~22:40 | ~1.5 h | OP-COST-1 Slice B1: Infra-/Cloud-Kosten gebaut + PR #192 (Version 0.4.0→0.5.0 MINOR/Build 7; Nutzer-Wahl „Slice B1" → „pr + merge"; Start geschätzt — >1 h nach Session 26). Explore-Mapping (Server-State/Broadcast/Gate · Client-Workspace · Design-Tokens) → Bau: pure server/src/kosten/infra.ts (InfraKostenPosten Cent-Fakten + abgeleitete infraKostenAuswertung, D-2) + Self-Test test:kosten (CI); DO infraKostenPosten (schemaVersion 13) + infraKosten.*-Actions; Per-Connection-Gate (kein Leak): Worker injiziert die verifizierte Access-E-Mail → DO filtert Infra-Kosten je Verbindung über Allowlist KOSTEN_ADMIN_EMAILS (fail-closed Prod sobald Access-Vars gesetzt; lokal sichtbar); Client-Service + Workspace pages/costs.component.ts (Tab Infra) + Route + admin-gegateter Nav; Token --tk-ws-costs. WS-Upgrade-Live-Check (wrangler dev: HTTP 101 + State + Gate) + Screenshot. Merge main ×3 (parallele PRs #189/#190 OP-R1-3 + #191 Gantt-OPs → Version 0.5.0/Build 7, schemaVersion 13 entkoppelt; kumulative Doku-Konflikte CHANGELOG/HANDOFF/Timesheet gelöst). PR #192 erstellt (Sicherheits-Flag Prod-Gate), CI grün. Sicherheits-Flag: Owner-only-Gate nur scharf, wenn ACCESS_*+KOSTEN_ADMIN_EMAILS produktiv gesetzt — sonst interim für alle Access-Nutzer sichtbar. Doku: docs/Kosten.md, HANDOFF, CHANGELOG (#192), DESIGN_TOKENS/WORKSPACES, Risikoregister, Compliance, README. Kein Solver-Redeploy. |
| 28 | 2026-06-26 ~08:00 | 2026-06-26 ~09:00 | ~1.0 h²⁸ | Gantt: Zeit-Zoom (OP-R8-18) + Heute-Linie/Echtzeit-Überfälligkeit (OP-R8-17) (#193, Version 0.6.0/Build 8, MINOR; Nutzer-Wahl „Gantt: Heute-Linie + Zoom"). Befund: die JETZT-Linie existierte bereits (Dark-Cockpit) → nicht neu gebaut, sondern die fehlende „läuft spät"-Hälfte ergänzt (Amber-Ring „⏰" für geplant-Schritte links der Linie, hell+dunkel) + zoom-fest gemacht. Zoom: fixer SCALE → scale-Signal über die ganze Zeit-Geometrie; Presets Std/Tag/Woche/Monat + Feinzoom −/+; Anker=Mitte; adaptive Achsen-/Heatmap-Dichte (keine DOM-Flut). Reiner Client-Pfad (nur version.ts bumpt). ng build (prod) + No-Hex-Gate + Server-Typecheck grün. Doku: HANDOFF (OP-R8-17/18 → gebaut), CHANGELOG (#193). Kein Server-/Solver-Redeploy. |
| 31 | 2026-06-26 ~12:00 | 2026-06-26 ~12:35 | ~0.5 h³¹ | Update-from-main + PR #193 + Merge + Deploy (Wrap-up der Gantt-OPs; kein Code → kein Bump). Nach >1 h Gap zu Session 28 (Gap-Regel) eigene Session: origin/main eingepflegt (parallele OP-COST-1 B1 #192) → Versions-Kollision (beide 0.5.0/Build 7) aufgelöst (Gantt → 0.6.0/Build 8), kumulative Doku-Konflikte (CHANGELOG/HANDOFF/Timesheet) „beide behalten" gelöst + Summe konsolidiert; Gates auf dem Merge grün (tsc/test:kosten/ng build/No-Hex/tokens); PR #193 via MCP erstellt + squash-gemergt, CD-Deploy b9a3ad3 grün verifiziert; lokale Branches aufgeräumt (Remote-Delete env-blockiert → Repo-Auto-Delete empfohlen). Enthält diesen Timesheet-Nachtrag (#195). Kein Solver-Redeploy. |
| 32 | 2026-06-26 ~13:15 | 2026-06-26 ~13:35 | ~0.4 h³² | Bugfix: linke Rail-Sidebar scrollt bei niedrigem Fenster (#197, Version 0.7.1/Build 10, PATCH; Nutzer-Report). Icon-Rail (shell.component.ts, OP-R9-12) war h-screen+overflow-hidden → Nav-Items/Status liefen bei niedrigem Fenster über, nicht scrollbar (aufgeklappt verschärft durch Cluster-Titel). Fix: <nav> als scrollbare Zone (flex-1 min-h-0 overflow-y-auto, overflow-x-hidden behält Label-Clipping), Logo+Status fixiert (shrink-0), dezenter token-gefärbter Scrollbalken. ng build (prod) + No-Hex grün (Browser-Augenschein offen). Reiner Client-Pfad, kein Solver-Redeploy. |
| 33 | 2026-06-26 ~14:30 | 2026-06-26 ~15:30 | ~1.0 h | PR #192 gemergt (live) + Way-of-Working-Guideline + OP-COST-1 Follow-up #196 (Doku/Konfig, kein Code; Zeiten geschätzt — Vormittags-Block #192-Merge+Guideline ~10:00–10:15 [5cda87d/087b59a/dbbd62b] eingefaltet, >1 h Gap). #192 (Slice B1) über die GitHub-API gemergt (squash) → CD grün → live deployed; WS-Upgrade vorab live verifiziert. Nutzer-Anweisung „generell GitHub-API" → in docs/agents.md §7 + CLAUDE.md verankert (via API direkt auf main). Follow-up-PR #196 (Doku/Konfig): Sicht-A-Design (Stundensatz je Abteilung + MA-Override + Von-Bis-Gültigkeit, Berechnung nur im Report) · Prod-Gate-Aktivierungs-Runbook (Kosten.md §12) + wrangler.toml-Cleanup (Allowlist → Secret) · neu OP-COST-2 (Infra via Provider-APIs) + OP-EXPORT-1 (Reports mit Diagramm + PDF/CSV/Excel); main-Abgleich (Doku-Konflikte CHANGELOG/HANDOFF/Timesheet „beide behalten" gelöst) + Squash-Merge. Kein Solver-Redeploy. |
| 34 | 2026-06-26 ~15:30 | 2026-06-26 ~16:15 | ~0.5 h | Prod-Gate: interim für alle freigeschaltet + OP-COST-3 (Pre-Prod-Requirement) (#198, Doku/Konfig, kein Code). Nach „Prod-Gate scharf schalten" die Aktivierungs-PR vorbereitet (ACCESS_TEAM_DOMAIN=drkv-com.cloudflareaccess.com + AUD aus dem Nutzer-Setup; bare-Hostname/iss-Format + app-weites Lockout-Risiko im Worker leitstand.ts:3114–3146 verifiziert) → Nutzer-Entscheidung: Kosten erstmal für alle freischalten, Scharf-schaltung als OP/Pre-Prod-Requirement festhalten. Umgesetzt: ACCESS_* bleiben leer (kostenAdminFuer→true = alle sichtbar), neu OP-COST-3 (HANDOFF), RISK-12 „mitigiert"→„offen (interim akzeptiert)", docs/Kosten.md §12 Status-Callout + bereitliegende Werte, wrangler.toml-Kommentar. Kein Solver-Redeploy. |
| 35 | 2026-06-26 ~16:30 | 2026-06-26 ~17:15 | ~0.6 h | Infra-Kosten-Änderungen protokolliert (#200, Version 0.9.0/Build 12, MINOR; Nutzer „im Log festhalten, wenn die Infra-Kosten aktualisiert wurden"). Jede `infraKosten.hinzufuegen |
| 36 | 2026-06-26 ~17:30 | 2026-06-26 ~18:45 | ~1.3 h | R2-Foto-Upload live + Client-Bild-Kompression + volle Auflösung im Hintergrund (#199 Merge/Deploy-Verifikation + neue PR, Version 0.9.0 → 0.11.0/Build 14, MINOR). Erst PR #199 (OP-R4-3 Foto-Perspektiven + R2-Upload + Gate) nach grünem CI gemergt und Deploy-Job auf main verifiziert (wrangler deploy mit aktivem [[r2_buckets]]-Binding FOTOS/taktano-fotos EU erfolgreich → CI-Token hat R2-Edit-Recht, kein Revert nötig, Foto-Upload live). Dann OP-R4-1: (a) Client-Kompression — foto-kompression.ts komprimiereFoto() (Downscale 1600 px + JPEG q0.82 via createImageBitmap+<canvas>, EXIF; best-effort/Fallback aufs Original) vor dem Upload; (b) volle Auflösung optional im Hintergrund (Nutzer-Wunsch) — Toggle archiviert das Original fire-and-forget zusätzlich (variante=original, eigener Key-Pfad, 30 MB), FotoAttachment.originalR2Key + Message foto.original, Korrelation über client-generierte Foto-ID (idempotentes foto.registriert), „HQ"-Badge am Thumbnail. Server-typecheck + test:prozess + operativ + ng build + No-Hex grün; lokale Miniflare-R2-Probe (komprimiert + Original → originalR2Key im DTO + Download) grün. Kein Solver-Redeploy. Doku: HANDOFF (OP-R4-1/OP-R4-3), docs/Lastenheft.md (OP-R4-1/OP-R4-3), CHANGELOG, Timesheet (Session 36). |
| 2026-06-26-seed-0-audit-purge | 2026-06-26 ~19:00 | 2026-06-26 ~20:15 | ~1.3 h | OP-SEED-1 / OP-TENANT: Seed-Audit + Datenbestand-Purge + Tenant-Vorlage-Fundament (Branch claude/seed-usage-audit-frsx52, Version 0.11.0 → 0.12.0/Build 15, MINOR). Audit „wo werden noch Seeds verwendet?" (nur serverseitig; Buchten/Taxonomie/Schichten noch hart am Seed, Demo-/Spike-Skripte bleiben). Gebaut: baueState(kategorien) als einzige Seeding-Stelle der Tenant-Vorlage vest-automotive (Boot-Default = Voll-Seed, regressionsfrei); Admin-Kommando admin.purge (admin-gegated wie Kosten, interim bis OP-AUTH-1) mit einzeln wählbaren Seed-Kategorien; Flag demoHistorieGeseedet unterdrückt Demo-Nachseeden nach Purge (additiv, keine Migration); neuer Workspace /administration (Cluster „System") mit Gefahrenzone (Preset-Schnellwahl + Tipp-Bestätigung LÖSCHEN). Entscheidungen (empfohlene Defaults — interaktive Rückfrage scheiterte am Permission-Stream): D1 alle Kategorien wählbar · D2 Default „Leeres Gerüst" · D3 Tenant „Fundament + OP". ⚠ Proaktiv geflaggt: Purge destruktiv/irreversibel → vor Prod Export/Backup (OP-EXPORT-1) + Purge-Audit-Event (OP-AUDIT-1) + Rollen-Gate (OP-AUTH-1). Server-Typecheck + operativ + test:prozess + ng build + No-Hex grün. Reiner Server+Client-Pfad, kein Solver-Redeploy. Doku: neu docs/Seed-Abloese-Plan.md, HANDOFF (OP-SEED-1 + OP-TENANT), CHANGELOG, Timesheet (Session 37). |
| 2026-06-26-seed-1-arbeitsplaetze | 2026-06-26 ~20:15 | 2026-06-26 ~21:30 | ~1.3 h | S-SEED-1: Arbeitsplätze/Buchten persistiert + editierbar + neuer OP-BACKUP-1 (Branch claude/seed-usage-audit-frsx52, Version 0.12.0 → 0.13.0/Build 16, MINOR). arbeitsplaetze (R2) in den DO-State (persistiert + onStart-Backfill + in baueState/Purge); BELEGUNG_SLOTS → Instanz-Getter belegungSlots; ressourcenDTO().bays + schedulerInput() lesen aus dem State statt Seed; CRUD arbeitsplatz.create|update|remove (validiert); Arbeitsplatz-Editor in /administration (Name/Typ/Kapazität/Status/Skills/Ausstattung); Snapshot + Service-Typen erweitert. Entscheidungen: R2-arbeitsplaetze persistiert (nicht das separate UI-bays-Board) · Typ-/Ausstattungs-Taxonomie bleibt Seed bis S-SEED-2 · Sperren nur read-only Zähler (Editor Folge) · CRUD ungated wie übrige Stammdaten (Nav admin-gegated). Neuer OP-BACKUP-1 (Nutzer): Backup & Restore möglichst Point-in-Time, Rollback-Punkt über das Audit-Log, Audit-Log bleibt append-only/nicht-mitgerollt (Rollback = neues Event) — Designfragen in HANDOFF §4. Server-Typecheck + spike/operativ/replan/solve/test:teilplan/test:prozess + ng build + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Seed-Abloese-Plan.md (S-SEED-1 ✅), HANDOFF (OP-SEED-1 + OP-BACKUP-1), CHANGELOG, Timesheet (Session 38). |
| 2026-06-26-seed-2-taxonomie | 2026-06-26 ~21:30 | 2026-06-26 ~22:50 | ~1.3 h | S-SEED-2: Taxonomien (G-1) persistiert + admin-editierbar (Branch claude/seed-usage-audit-frsx52, Version 0.13.0 → 0.14.0/Build 17, MINOR). taxonomy (Abteilungen/Arbeitsplatz-/Abwesenheits-/Sperre-Typen/Ausstattung/Leistung-Kategorien) in den DO-State (persistiert + Backfill + in baueState/Purge); ~11 Modul-Konstanten → Instanz-Getter über state.taxonomy; toAuftragDTO/buildProzessKatalog/bauBelegungSlots bekommen Taxonomie/Label-Map als Parameter; schedulerInput() reicht taxonomy durch. CRUD taxonomie.create|update|remove (Label + Soft-Deaktivierung; hartes Löschen nur unreferenziert via taxonomieInUse); generischer Taxonomie-Editor in /administration (6 Arten × Werte). Entscheidungen: logik-tragende Scheduler-Label-Regex (Parkplatz/Indoor) bleiben fix, Editor warnt · kind/id unveränderlich · Löschen-vs-Deaktivieren · Mangel-Kategorien separat (Folge) · CRUD ungated wie übrige Stammdaten. Server-Typecheck + spike/operativ/replan/solve/test:teilplan/test:prozess + ng build + No-Hex grün. Kein Solver-Redeploy. ➡ Nach S-SEED-1+2 berührt kein Produktivpfad mehr den Seed direkt (Buchten+Taxonomie). Doku: docs/Seed-Abloese-Plan.md (S-SEED-2 ✅), HANDOFF (OP-SEED-1), CHANGELOG, Timesheet (Session 39). |
| 2026-06-26-seed-3-schichten | 2026-06-26 ~22:50 | 2026-06-27 ~00:10 | ~1.3 h | S-SEED-3: Schicht-Katalog (R1-S2) persistiert + admin-editierbar (Branch claude/seed-usage-audit-frsx52, Version 0.14.0 → 0.15.0/Build 18, MINOR). schichten in den DO-State (persistiert + Backfill + in baueState/Purge); SCHICHTEN/SCHICHT_DTOS/SCHICHT_IDS → Instanz-Getter schichtenMap/schichtDtos/schichtIds; schedulerInput() reicht schichten durch (Verfügbarkeit/Ausfall). CRUD schicht.create|update|remove (Name + Wochentage + Zeit-Slots HH:mm validiert start<ende, art, Soft-Deaktivierung; hartes Löschen nur unzugewiesen via schichtInUse); Schicht-Editor in /administration (Wochentag-Picker, variable Zeit-Slots type=time, Art). Zwei DTO-Sichten (kompakt für Zuweisung, roh für Editor). Entscheidungen: logik-tragend = Wochentage/Zeitfenster steuern Solver-Verfügbarkeit (Format fix, Werte editierbar) · Löschen-vs-Deaktivieren · CRUD ungated wie übrige Stammdaten. ➡ Meilenstein: nach S-SEED-1/2/3 liest kein Produktivpfad mehr vestAutomotiveSeed.{arbeitsplaetze,taxonomy,schichten} direkt. Server-Typecheck + spike/operativ/replan/solve/test:teilplan/test:prozess + ng build + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Seed-Abloese-Plan.md (S-SEED-3 ✅), HANDOFF (OP-SEED-1), CHANGELOG, Timesheet (Session 40). |
| 2026-06-27-seed-4-tenant | 2026-06-27 ~00:10 | 2026-06-27 ~01:10 | ~1.0 h | S-SEED-4: Seed → benannte Tenant-Vorlage extrahiert (Branch claude/seed-usage-audit-frsx52, Version 0.15.0 → 0.16.0/Build 19, MINOR). Stammdaten per git mv von server/src/model/seed.ts → server/src/tenants/vest-automotive.ts; neuer Typ TenantVorlage (tenants/types.ts) + Wrapper vestAutomotive + Registry tenants/index.ts (aktiveTenantVorlage()); leitstand.ts bezieht die Vorlage über die Registry (interne vestAutomotiveSeed = AKTIVE_TENANT.daten, Referenzen unverändert); model/seed.ts = dünner Re-Export-Shim (Demo-/Spike-Imports unverändert). Entscheidungen: Shim statt ~11 Demo-Imports umbauen (niedriges Risiko, Runtime-Pfad nutzt Registry) · Name lokal beibehalten (keine Churn) · MINOR (neue Abstraktion, verhaltensgleich). ➡ Seed kein impliziter Laufzeit-Default mehr → Fundament für OP-TENANT; verbleibt nur S-SEED-5 (Drizzle, OP-DATA-1). Server-Typecheck (inkl. Demos via Shim) + spike/operativ/replan/solve/test:teilplan/test:prozess + ng build + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Seed-Abloese-Plan.md (S-SEED-4 ✅), HANDOFF (OP-SEED-1/OP-TENANT), CHANGELOG, Timesheet (Session 41). |
| 2026-06-27-seed-5-persistenz-docs | 2026-06-27 ~01:10 | 2026-06-27 ~02:00 | ~0.8 h | Design-Docs: S-SEED-5/OP-DATA-1 (Persistenz) + OP-BACKUP-1 (Backup/Restore) (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Version-/Build-Bump, Präzedenz #182/#185). Nutzer „1, dann 2". (1) docs/Persistenz.md: DO-Blob vs. DO-SQLite vs. D1; Drizzle als Single Source + generierte Migrationen + CI-Gate; ⮕ E-DATA-1; Slices D5-1…D5-4. (2) docs/Backup-Restore.md: Snapshot vs. PITR (DO-SQLite-natives PITR als stärkster Hebel, an OP-DATA-1 gekoppelt); Restore-Punkt via Audit-Timeline; Audit-Log bleibt append-only/nicht mitgerollt (Restore = state.restore-Event); B5-1 Pre-Purge-Snapshot als Sofort-Netz; ⮕ E-BACKUP-1/2/3. Registriert in CLAUDE.md (Tiefenquellen) + HANDOFF §4 (OP-DATA-1 neu, OP-BACKUP-1 ausgearbeitet) + Seed-Abloese-Plan (S-SEED-5). Kein Code, keine Gates/Solver berührt. Doku: Persistenz.md, Backup-Restore.md, CLAUDE.md, HANDOFF, CHANGELOG, Timesheet (Session 42). |
| 37 | 2026-06-26 ~18:45 | 2026-06-26 ~20:00 | ~1.2 h | OP-COST-2 Slice 1: GitHub als Infra-Kosten-Provider (projekt-bezogener Auto-Pull) (#202, Version 0.11.0→0.12.0/Build 15, MINOR; Nutzer „zeige auch die projekt-bezogenen Kosten von GitHub an"). Vorab: #200-Deploy nach ~45-min-Actions-Runner-Ausfall per Re-Run live verifiziert (Attempt 5 grün; Ausfall war Infra, kein Budget) + GitHub-Kosten geprüft (kein Billing-Endpoint im MCP → Actions-Usage gezogen: Free-Kontingent, ~€0). Gebaut: Modell quelle/quelleRef (optional, kein schemaVersion-Bump); pure server/src/kosten/github-billing.ts (Enhanced-Billing-Usage → Monatsposten, Repo-gefiltert „projekt-bezogen", Self-Test test:kosten); DO pullGithubKosten() dormant-guarded (No-op ohne GITHUB_BILLING_TOKEN-Secret) + idempotenter infraKostenUpsert + OP-AUDIT-1-Pull-Event; on-demand Admin-Action infraKosten.pullGithub + Client-Button „↻ GitHub ziehen" + API-Badge; wrangler.toml GITHUB_BILLING_ORG/REPO-[vars] + Token-Secret-Doku. tsc + test:kosten/prozess + operativ + ng build (prod) + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Kosten.md §4, HANDOFF (OP-COST-2), CHANGELOG (#202). |
| 38 | 2026-06-26 ~20:00 | 2026-06-26 ~20:15 | ~0.2 h | OP-COST-4 erfasst: GitHub-Token-Aktivierung als Pre-Prod-Requirement (#203, Doku, kein Code). Nutzer „Aktivierung des GitHub-Tokens als OP erfassen": der dormant GitHub-Kosten-Pull (OP-COST-2 #202) braucht das Secret GITHUB_BILLING_TOKEN (Billing-Read) → als OP-COST-4 (Go-Live-Vorbedingung, analog OP-COST-3) in HANDOFF §4 + docs/Kosten.md §4-Querverweis festgehalten. Kein Solver-Redeploy. Doku: HANDOFF, docs/Kosten.md §4, CHANGELOG (#203). |
| 39 | 2026-06-26 ~20:15 | 2026-06-26 ~21:00 | ~0.7 h | R7-Invariante „ohne Zuweisung kein in_arbeit" (Branch claude/order-assignment-requirement-4bbw4g, Version 0.12.0→0.13.0/Build 16, MINOR; Nutzer „ohne zuweisung kann ein auftrag nicht in arbeit sein"). Gebaut: pure hatZuweisung(auftrag) + Guard in transition (jeder Übergang nach in_arbeit = starten/fortsetzen verlangt ≥1 produktiven Mitarbeiter; Helfer/Annahme zählen nicht), erlaubteAktionen(status, auftrag?) blendet Start-Aktion ohne Zuweisung aus; Server-DTO hatZuweisung + auftrag.starten-Handler-Guard; Client-Badge „⚠ Zuweisung nötig" (Orders/Detail-Panel/Belegungs-Wareneingang, „▶ Aufbereiten starten" deaktiviert). Kein schemaVersion-Bump (additiv). tsc + operativ-Selbsttest (neuer Zuweisungs-Abschnitt) + ng build (prod) + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Lastenheft.md §5.1 (R7), HANDOFF (R7-Zeile + §3), CHANGELOG, Timesheet (Session 39). |
| 40 | 2026-06-26 ~21:00 | 2026-06-26 ~22:30 | ~1.2 h | Docs-Struktur optimiert: Doku-Landkarte + physische Unterordner-Gliederung (Branch claude/docs-structure-optimization-99n0mf, OP-DOCS-8 ✅; Doku/Kommentar-only → kein Bump, Präzedenz #182/#185/#188). Teil 1: kategorisierter Einstieg docs/README.md (je „wann lesen"/OP-Bezug + Session-Start-Reihenfolge + True-North + ID-System) — GitHub-Index und Docusaurus-Startseite der bisher index-losen Site. Teil 2 (Nutzer „Ja" auf den größeren Umbau): alle 17 Docs per git mv (History bewahrt) in 5 Unterordner fachlich/·architektur/·betrieb/·konventionen/·produkt/ (docs/README.md bleibt Index), je _category_.json (Label+Position) → autogenerated-Sidebar gruppiert. Referenzen nachgezogen: alle klickbaren ](…md)-Links (49, per Python-Resolver-Skript gegen existierende Dateien geprüft → grün) + aktive docs/<name>.md-Pfade in HANDOFF/CLAUDE/README/design/ + 10 Code-Kommentar-Stellen; append-only Logs (CHANGELOG + alte Timesheet-Einträge) bewusst unverändert (historische Code-Span-Prosa, kein 404). Entscheidungen: 1-Datei-Ordner für agents/Produkt (Tree 1:1 zu Landkarte); _category_.json statt manueller Sidebar/front-matter. Verifikation: 49/49 Links resolvbar, JSON valide; Docusaurus-Build in reiner Doku-Session nicht ausführbar (kein node_modules in docs-site/) → beim nächsten Site-Deploy gegenprüfen (onBrokenMarkdownLinks: 'ignore' deckt ab). Folge: publizierte URLs /docs/<name>→/docs/<ordner>/<name> (interne Site, unkritisch). Kein Solver-Redeploy. Doku: docs/README.md, docs/*/_category_.json (neu), HANDOFF (§2 + OP-DOCS-8), CLAUDE.md, README.md, CHANGELOG. |
| 41 | 2026-06-27 ~09:15 | 2026-06-27 ~09:35 | ~0.3 h | OP-DOCS-8: PR #205 erstellt + gemergt + Wrap-up (neuer Tag, Übernacht-Gap zu Session 40 — deren Stop 06-26 geschätzt, Nutzer-Korrektur willkommen). Branch-Vollständigkeit geprüft (clean, 0/0 zu Remote, 2 voraus/0 hinter main) → PR #205 via GitHub-API erstellt; „(PR folgt)" im CHANGELOG auf #205-Link gesetzt (Commit 77dd77a); CI grün (Server-typecheck · Client-Build · Solver · SBOM · Design/No-Hex; Deploy auf PR korrekt geskippt) → squash-gemergt (1636724). Build-Verifikation (vorher nicht möglich): docs-deploy.yml-Lauf #75 auf dem Merge-Commit grün → Docusaurus baut & deployt die neue Unterordner-Struktur sauber. Lokal main gezogen + Link-Resolver 49/49 grün; Feature-Branch lokal gelöscht (Remote-Delete env-blockiert HTTP 403 → GitHub-Auto-Delete/manuell). CodeRabbit-Bot: nur „rate limited"/„head changed", keine Findings. Doku: HANDOFF (§2 + OP-DOCS-8 Build-Verifikation), Timesheet (Session 41). Kein Solver-Redeploy. |
| 42 | 2026-06-27 ~09:40 | 2026-06-27 ~10:15 | ~0.6 h | Doku-Site: Start-Seite als Produkt-Übersicht + Team-Seite (Branch claude/docs-startseite-produktuebersicht, Doku-Site-only/kein Bump; Nutzer-Wünsche). Start-Seite (src/pages/index.js) von dünner Doku-Verlinkung → Produkt-Übersicht (Positionierung · Herzstück Taktung-Optimierung „KI schlägt vor, Mensch entscheidet" · drei True-North-Leitfragen als Karten · Werthebel-Karten · Buttons), gespiegelt aus produkt/Produkt-und-Marketing.md; Reorg-Link-Regression behoben (/docs/Lastenheft→/docs/fachlich/Lastenheft). Team-Seite (src/pages/team.js + Navbar „Team"): Dominik May (Fachmann/Gallionsfigur/Netzwerk) · Mitarbeiter v. Dominik (Prozess-Opt./Daily Challenges, Name offen) · Holger Queckenstedt (Business/Finance) · Dr. Michael Kirchhof (IT/Betrieb) — mit Portrait-Avataren (Platzhalter + foto-Slot static/img/team/) + To-do-Sektion (Rollen/Titel schärfen · Fotos · Name). npm run build grün (beide Seiten kompilieren; Restwarnungen vorbestehend/dual-kontextuell). Kein Hex (Theme-CSS-Variablen). Kein Solver-Redeploy. Doku: docs-site/src/pages/{index,team}.js, docusaurus.config.js, static/img/team/README.md, HANDOFF §2, CHANGELOG, Timesheet (Session 42). |
| 43 | 2026-06-27 ~10:15 | 2026-06-27 ~10:40 | ~0.4 h | Doku-Site-Seiten: CodeRabbit-Review-Handling + PR #206 gemergt + Wrap-up (Doku-Site-only/kein Bump). PR #206 erstellt; CodeRabbit (Pro) Review mit 3 Inline-Punkten bewertet: (1) CHANGELOG „(PR folgt)" → #206-Link gefixt (valide, Commit c0e1e4e); (2) „To-dos von der Team-Seite entfernen" abgelehnt — Nutzer wollte die To-dos ausdrücklich auf der Seite, zusätzlich in HANDOFF §2 geparkt; (3) Anführungszeichen-„Fix" abgelehnt — Repo-Konvention ist „…" gerade (per Skript geprüft: 856× gerade, 0× geschweift), CodeRabbits Vorschlag würde Inkonsistenz erzeugen. Docstring-Coverage-Warnung (nicht-blockierend) bewusst ignoriert. CI grün → squash-gemergt (32f5a49); main gezogen; Feature-Branch lokal gelöscht (Remote-Delete env-blockiert); docs-deploy (Build live) verifiziert. Doku: HANDOFF §2 (auf main + offene Team-To-dos), Timesheet (Session 43). Kein Solver-Redeploy. |
| 44 | 2026-06-26 ~17:25 | 2026-06-27 ~12:05 | ~4.3 h | OP-QS-2: Optionen (B-1–B-4) + Phase 1a gebaut (Branch claude/auto-image-rating-options-4upp3q). Doku-Teil: Nutzer-Frage „welche Optionen für eine automatische Bildbewertung?" → Codebase-Recherche + Optionen-Doku docs/Bildbewertung.md (B-1 Qualitäts-Gate · B-2 fachliche Bewertung, 6 Optionen A–F [A Claude Vision liegt im Stack · F Hybrid empfohlen], Compliance-Flagging DE/AT/CH); B-3 PII vor Upload on-device erkennen/verpixeln (§4a); B-4 NSFW-Check → blocken (§4b). Bau-Teil (auf „go", v0.8.0/Build 11 MINOR): On-Device-Pre-Upload-Gate — reiner DOM-freier Kern client/.../bild/upload-gate.ts (B-1 Laplace-Schärfe/Helligkeit/Größe · B-3 verpixele auf Kopie · B-4 entscheideGate Priorität NSFW>Qualität>PII>ok · Detektor-Naht) + Angular-Komponente (manuelle Markierung + Verpixeln, Upload nur nicht-blockiert, nur Blob raus, Tokens-only) + Demo /bild-schutz (nicht im Rail) + Self-Test npm run test:bildgate (14 Asserts) + CI. Entscheidung: Heavy ML-Deps (TF.js/NSFWJS/BlazeFace) bewusst nicht gezogen → Naht + manuelle Markierung; Auto-Erkennung = Folge-Slice. Verifiziert: test:bildgate · ng build (prod) · No-Hex grün. Reiner Client — kein Server-/Solver-Change (nur version.ts). Auto-Erkennungs-Slice: Optionen §7a → Nutzer-Entscheidung ①+Ⓐ (self-host first-party; Gesichter+NSFW jetzt, Kennzeichen manuell; ⊘ Auto-Kennzeichen Ⓑ offen) → Phase 1b gebaut (dormant, v0.9.0/Build 12): Adapter modelle.config.ts/pii-mediapipe/nsfw-nsfwjs/detektoren.ts füllen die Naht, Runtime-Self-Host via bundler-verborgenem Import (keine npm-Dep, Lazy-Chunks ~0,8 kB), deploy-sicher dormant bis Asset-Hosting; ng build/test:bildgate/No-Hex grün (Laufzeit-Inferenz/Hosting = Deploy-Schritt). + Aktivierung vorbereitet (v0.9.1/Build 13): MODELLE_BASIS_URL-Runtime-Override (window.__TAKTANO_MODELLE_URL__, ohne Rebuild) + R2-Runbook §7b (Bucket/Asset-Pfade/Custom-Domain/CORS/Verifikation); Bucket bewusst nicht per MCP angelegt (keine EU-Jurisdiktion setzbar → Operator --jurisdiction eu; Konto erreichbar, 0 Buckets). + Worker-Injection verdrahtet (v0.9.2/Build 14): Env.MODELLE_BASIS_URL+wrangler.toml-Var; Worker-fetch injiziert window.__TAKTANO_MODELLE_URL__ per HTMLRewriter in den SPA-<head> (env-escaped, dormant wenn leer) → Aktivierung = nur Var setzen + deploy; Server-typecheck grün. + Privacy-Verschärfung (Nutzer 06-27, v0.9.3/Build 15): taktano-models privat → Worker liefert Modelle aus privatem R2-Binding unter /models/* (same-origin, Access, kein CORS; Binding auskommentiert=dormant), MODELLE_BASIS_URL="/models"; CI-Privacy-Gate scripts/check-r2-private.mjs blockiert Deploy bei öffentlichem taktano-models/taktano-fotos (CF-API, EU-Jurisdiktion; fail-soft ohne R2-Read). Cloudflare-MCP-Grenze (keine EU-Bucket-Sicht) festgehalten. Server-typecheck/Gate-Dry-Run/ng build/No-Hex grün. + Upload-Skript (v0.9.4/Build 16): scripts/upload-models.sh (npm→esbuild-Bundle→.tflite→wrangler r2 object put); Asset-Set empirisch verifiziert (MediaPipe vision_bundle+wasm(6)+.tflite[200]; nsfwjs = EIN ~40-MB-Bundle mit eingebautem Modell); nsfw-nsfwjs.adapter.ts auf ein Bundle+load() korrigiert. bash -n/ng build/No-Hex grün; Upload+Browser-Laufzeit Operator-Schritt. + Warnung+Improvement (v0.9.5/Build 17): AutoStatus (aus/aktiv/fehler) → Gate warnt sichtbar (⚠-Banner), wenn Auto-Erkennung konfiguriert aber nicht ladbar (Binding nicht einkommentiert/404/Load-Fehler); Detektor-Fehler blockieren nie. Improvement „schlankeres tfjs-Backend/kleineres nsfwjs-Bundle (~40 MB)" als OP-QS-2-Folgepunkt festgehalten. ng build/test:bildgate/No-Hex grün. Audit-Trail: docs/Bildbewertung.md (§Status/§7/§7a/§7b), HANDOFF, CHANGELOG, Timesheet. Eigene Session nach >1 h Gap zu Session 34. |
| 45 | 2026-06-27 ~12:05 | 2026-06-27 ~12:25 | ~0.3 h | Bugfix: Foto-Schutz zeigte das gewählte Bild nicht an (Branch claude/fix-foto-upload-anzeige, v0.14.1/Build 18 PATCH; Nutzer-Report „Foto ausgewählt, dann passiert nichts"). Ursache: onDatei() griff auf this.canvas.nativeElement zu, bevor geladen=true → Canvas (im @else) noch nicht im DOM → this.canvas undefined → Exception, Bild nie gezeichnet. Fix: erst geladen.set(true) + ChangeDetectorRef.detectChanges(), dann zeichnen; + Input-Reset (gleiche Datei erneut wählbar). Im echten Browser verifiziert (Chromium/Playwright headless: Datei gesetzt → Canvas 800px + Befund). ng build/No-Hex grün. Reiner Client. |
| 46 | 2026-06-27 ~10:50 | 2026-06-27 ~13:25 | ~1.9 h | iPad-Bugfix Crystal-Bar + Doku/Guideline-Block (Branch claude/ipad-sidebar-close-iq2iob, Version 0.14.1→0.14.2/Build 19, PATCH). (a) iPad-Fix (Nutzer „kann die Bar links nicht mehr schließen"): Aufklappen hing rein an :hover/:focus-within (Maus-Konzept) → auf Touch „klebt" der Zustand, kein Schließen. Fix pointer-abhängig: Proximity-Reveal nur Feinzeiger (@media hover:hover and pointer:fine); expliziter .railwrap.is-open (Signal expanded()); Touch-Toggle ☰/✕ (nur Grobzeiger); token-Backdrop .tk-railscrim; Auto-Einklappen an NavigationEnd; a11y Hintergrund inert bei offenem Overlay (CodeRabbit). (b) Crystal-Bar-Doku: Begriff Crystal-Bar (Glossar docs/fachlich/Lastenheft.md §13 + design/WORKSPACES.md) + 3 reale Screenshots (Chromium/Playwright, pointer/hover-Emulation) in design/assets/crystal-bar/ mit Regionen-Legende; Verify-Punkt (OP-R9-12, am iPad zu prüfen). (c) Timesheet zeigt wer gearbeitet hat (Beteiligte) + wöchentliche Management-Summary + 2 Mermaid-Grafiken (KW/Tag). (d) OP-PM-1 (Jira-Sync später) erfasst. (e) OP-DOCS-9 Doku-Konsistenz-Check: Guidelines (CLAUDE.md + docs/konventionen/agents.md §5.1/§6.5), SessionStart-Hook (scripts/session-start-hook.sh + .claude/settings.json), CI-Skript scripts/check-doc-consistency.sh + Job doc-consistency (warnt, blockt nicht; read-only Token-Scope per CodeRabbit). ng build (prod) + No-Hex + check-doc-consistency grün; Mermaid-Charts validiert; PR #207, main viermal eingemergt (#205/#206/#208/#209), CodeRabbit-Review bearbeitet. Reiner Client-/Doku-/Tooling-Pfad, kein Server-/Solver-Change. Doku: HANDOFF (OP-R9-12/OP-PM-1/OP-DOCS-9), docs/fachlich/Lastenheft.md §13, WORKSPACES, CHANGELOG, Timesheet (Session 46). |
| 47 | 2026-06-27 ~13:25 | 2026-06-27 ~13:55 | ~0.5 h | OP-PM-2: Merge-Churn entschärft (union-Merge · Auto-Build-Nummer · Log-Hygiene) (Branch claude/merge-churn-mitigation, Tooling/Doku, APP_VERSION unverändert 0.14.2). Reaktion auf das 4-fache main-Nachziehen bei #207 (Nutzer „1+2+3" + „Logs regelmäßig checken/glätten, dokumentieren"). (1) .gitattributes merge=union für CHANGELOG/HANDOFF/Timesheet. (2) Build-Nummer auto aus Git-Commit-Count: server/src/build-number.ts + scripts/stamp-build.mjs + predeploy-Hook + Deploy-Checkout fetch-depth: 0; version.ts re-exportiert nur noch APP_BUILD, manuell bleibt allein APP_VERSION (Umstellung Build 19 → Commit-Count 165). (4) Log-Hygiene verbindlich (agents.md §6.6/§5.1, CLAUDE.md) + check-doc-consistency.sh flaggt Marker-Reste/doppelte Session-Nummern/doppelte CHANGELOG-Zeilen. (3) offen: Repo-Setting Merge-Queue/Auto-Merge (Empfehlung dokumentiert). OP-R9-12-Verify vom Nutzer geschlossen („ist ok"). stamp-build(165) + Server-typecheck + check-doc-consistency + ng build grün. Doku: CLAUDE.md, agents.md, .gitattributes, scripts, HANDOFF (OP-PM-2), CHANGELOG, Timesheet (Session 47). Kein Solver-Redeploy. |
| 49 | 2026-06-27 ~14:10 | 2026-06-27 ~14:35 | ~0.4 h | Foto-Schutz: Touch/Pencil-Markierung am iPad + ehrliche Befund-Box (Branch claude/fix-touch-markierung-befund, v0.14.3 (Auto-Build, OP-PM-2) PATCH; zwei Nutzer-Reports am Gerät). (1) Touch/Pencil-Zeichnen ging nicht → touch-action:none beim Markieren + setPointerCapture + preventDefault + pointercancel. (2) grüne „Freigegeben"-Box war irreführend, wenn Auto-Erkennung nicht lief (Gesichter ungeprüft) → bei Status ok + Auto inaktiv + nicht verpixelt amber „Bitte prüfen" mit Hinweis „nicht automatisch geprüft". Im Browser verifiziert (Chromium/Playwright: Touch-PointerEvent-Drag erzeugt Markierung; Befund „Bitte prüfen"); ng build/No-Hex grün. Reiner Client. |
| 52 | 2026-06-27 ~14:35 | 2026-06-27 ~14:55 | ~0.3 h | Bugfix: Foto-Schutz — erneutes Markieren nach Verpixeln (Branch claude/fix-mehrfach-markieren, v0.14.4 PATCH; Nutzer-Report iPad „neues Markieren geht nach erstem Verpixeln nicht mehr"). Ursache: verpixelt-Flag blieb true und blockte als Guard in boxenProzent/syncOffeneBoxen/analysiere alle neuen Markierungen. Fix: 3 Guards entfernt + nach Verpixeln Boxen-Listen geleert (eingebrannt). Im Browser verifiziert (markieren→verpixeln→erneut markieren ok); ng build/No-Hex grün. Reiner Client. |
| 2026-06-27-sprechende-session-ids | 2026-06-27 ~14:55 | 2026-06-27 ~15:40 | ~0.6 h | #217-Finalisierung (CodeRabbit) + sprechende Session-IDs (OP-PM-2) (Branch claude/sprechende-session-ids, Doku/Tooling-only → kein Bump). (a) #217 abgeschlossen: zwei CodeRabbit-Befunde adressiert — syncOffeneBoxen() direkt nach autoTreffer.set() in analysiere() (offeneBoxen-Spiegel bleibt nach Detektor-Lauf synchron) + CHANGELOG „(PR folgt)"→[#217]/Session-Verweis 50→52; CI grün, squash-gemergt. (b) Nutzer-Wunsch „Session-ID sprechend gestalten → weniger Konflikte": die fortlaufende Zahl-ID kollidierte bei parallelen Branches (beide „nächste Nummer" → union-Merge-Duplikate → Hand-Umnummerierung). Umstellung auf branch-abgeleitete ID <Datum>-<branch-slug> (git-weit eindeutig → kollisionsfrei, union-Merge konkateniert nur); Alt-Sessions 0…52 bleiben. Doku: Timesheet-Protokoll/Tabellenkopf, agents.md §6.6, CLAUDE.md, session-start-hook.sh, check-doc-consistency.sh (Dublettencheck generalisiert). Erste Session mit der neuen ID (Dogfooding). |
| 2026-06-27-doku-meisterwerk-northstar | 2026-06-27 ~17:40 | 2026-06-27 ~18:05 | ~0.4 h | North Star erweitert: „Dokumentation als Meisterwerk" (zielgruppen-gerecht · pyramidal · visuell) (Branch claude/branch-ahead-review-pr-uyr096, Doku-only → kein Bump). Nutzer-Wunsch, das North-Star-Set um ein Doku-Qualitätsprinzip zu erweitern. Gebaut: neues Leitprinzip in CLAUDE.md (Doku als Liefergegenstand · pyramidal/Minto · sieben Zielgruppen · visuell wo es trägt) + True-North-Halbsatz; docs/zielgruppen/Lesepfade.md von 4→7 Zielgruppen (DevOps · CISO/Security · Customer Service) inkl. Lesepfaden, Glossar-Begriffen und einer Mermaid-Rollen-Landkarte. Entscheidung: Prinzip in CLAUDE.md (Guiding-Principles-Heimat), Rollen-Detail in Lesepfade (keine Duplizierung); keine Links auf noch-ungemergte #225-Docs. Verifikation: check-doc-consistency.sh grün (keine toten Links). |
| taktano-2026-06-28-comments-image-support-caix8o | 2026-06-28 ~07:30 | 2026-06-28 ~08:30 | ~1.0 h | Inhaltliche Doku-Vorgaben am Kommentar (OP-R4-3, F16) + Session-ID-Repo-Präfix (OP-PM-3) (Branch claude/comments-image-support-caix8o, Version 0.40.2→0.41.0/Build auto, MINOR). Audit ergab: Bild-Anzeige, Foto-Mindestanzahl je Perspektive und der Pflicht-Kommentar sind bereits gebaut (geteiltes Detail-Panel-Gate, alle Kommentar-Einstiege laufen hindurch). Neu gebaut: Teilschritt.dokuAspekte: string[] (F16) — kuratierter inhaltlicher Leitfaden „Worauf eingehen?", end-to-end durchgestochen (types.ts + Helper dokuAspekte, setzeTeilschrittFelder-Patch, TeilschrittDTO server+client, toAuftragDTO/buildProzessKatalog/snapshot, Anzeige im Kommentar-Gate über dem Eingabefeld); Seed-Beispiele an Annahme/Aufbereitung/Folierung/QM + Ergebnis-Foto-Pflicht an der Endkontrolle; test:prozess um F16-Abschnitt erweitert. Roadmap (additiv, auf demselben Doku-Modell) als Design-Doc docs/architektur/Doku-und-Kommentare.md: Diktat (OP-DIKTAT-1), Textbausteine (OP-TEXTBLOCK-1), Mehrsprachigkeit (OP-I18N-1), KI-Plausibilität (OP-AI-2), Auftrags-Abschluss-Notiz (OP-ABSCHLUSS-1, Nutzer-Frage 07-01). Nutzer-Wunsch (neuer OP-PM-3): Timesheet-Session-IDs ab jetzt mit Repository-Präfix <repo>-<Datum>-<branch-slug> (Timesheet-Protokoll/Kopf, agents.md §6.6, CLAUDE.md; erste Session mit der neuen ID = Dogfooding). Verifiziert: Server-Typecheck + test:prozess/operativ + ng build (prod) grün. Kein Solver-Redeploy. Doku: docs/architektur/Doku-und-Kommentare.md (neu), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-27-branch-ahead-review-pr | 2026-06-27 ~15:45 | 2026-06-27 ~17:40 | ~1.9 h | Branch-Review (alle ahead-Branches) + Seed-Ablösung-PR #225 auf main rebased + CodeRabbit-Findings adressiert (Branch claude/seed-usage-audit-frsx52, v0.15.0 MINOR — von main@0.14.4). (a) Alle ~37 Branches geprüft (ahead/behind, History-Rewrite-bereinigt): nur seed-usage-audit trug substanziellen, noch nicht in main gelandeten Code → PR #225 eröffnet; Rest gemergt/überholt. (b) PR #225 auf aktuelles main gemergt: Konflikte aufgelöst (version.ts 0.15.0+Build-Mechanik · auftrag.starten R7-Guard + dynamische belegungSlots · Seed-CRUD + GitHub-Pull · app.routes/shell Administration+Bild-Schutz); die 3 neuen Docs (Seed-Abloese-Plan/Persistenz/Backup-Restore) in die OP-DOCS-8-Struktur docs/architektur/ eingepasst + Querverweise nachgezogen; Logs union-gemergt + Session-ID-Kollision (37–42) auf sprechende Branch-IDs geglättet (OP-PM-2). (c) CodeRabbit-Review (9 Funde) adressiert: server-seitiges Gate aller Stammdaten-CRUD-Nachrichten (Critical) · keine Actor-PII im Laufzeit-console (Purge) · taxonomieInUse zählt abwesenheitHistorie · arbeitsplatz.remove blockt referenzierte Slots · taxonomie.update schützt Parkplatz-Semantik (G-1) · Client: ngModel→Signal-Bindungen ([ngModel]+(ngModelChange)) · Purge-Erfolg erst nach Server-Ack (kein Fire-and-forget) · logik-tragende Taxonomie-Einträge im Editor nicht umbenennbar/löschbar; 1 Fund (doppeltes BelegungSlot) als False-Positive begründet (eine Deklaration, tsc grün). Verifikation: server typecheck + Self-Tests (spike/operativ/replan/solve/teilplan/prozess) + client ng build (prod) + No-Hex + Doc-Consistency grün. Kein Solver-Redeploy. |
| 2026-06-27-concurrent-prs-merges | 2026-06-27 ~15:45 | 2026-06-27 ~17:35 | ~1.8 h | OP-PM-2: Log-Glätter + PR-Abarbeitung + GitHub-union-Befund/Auto-Sync (Branch claude/concurrent-prs-merges-efkkvw, CI/Tooling/Doku-only → kein Bump). Nutzer-Aufgabe „we need to handle concurrent prs and merges". (a) Log-Glätter scripts/smooth-logs.mjs (npm run smooth-logs / :check) — entfernt byte-identische Duplikate automatisch (CHANGELOG · Timesheet-Session-Zeilen), meldet nur Mehrdeutiges (Konflikt-Marker · gleiche Session-ID mit abweichendem Inhalt), sortiert nicht um; verdrahtet in server/package.json, check-doc-consistency.sh-Hinweis, agents.md §6.6, CLAUDE.md, session-start-hook. (b) Repo-Settings (§6.7) per MCP geprüft: delete_branch_on_merge/main-Protection/Squash ✅; auto-merge/Squash-only/Code-Scanning nicht MCP-lesbar → an Nutzer gemeldet. (c) Offene PRs: #213 (upload-artifact 4→7) + #214 (ortools-Floor) squash-gemergt (CI-Gate grün; #214 lokal auf main gehoben); #220 (Glossar) der parallelen Session belassen. (d) Befund: GitHub mergt server-seitig nicht mit merge=union (422 trotz lokal sauberem Merge) → dokumentiert (.gitattributes, agents.md §6.6 Maßnahme 5, HANDOFF OP-PM-2 Pkt 7) + Workflow .github/workflows/sync-pr-logs.yml (lokaler union-Merge + smooth-logs + Push per /sync-logs-Kommentar/workflow_dispatch). Verifiziert: Synthetik-/Real-smooth-logs, YAML-Validierung, sauberer main-Merge dieses Branches. (e) PR #222 erstellt, CodeRabbit-Review (5 Funde: 4 gefixt — EOL-Erhaltung, || true raus, Befehlspfad, CHANGELOG-Konsolidierung; checkout@v7 als Repo-Konvention begründet beibehalten), Auto-Merge-Squash → gemergt. (f) Nutzer aktivierte „Allow auto-merge" (letzter OP-PM-2-Repo-Setting-Punkt ✅); Follow-up-Doku SYNC_BOT_TOKEN-Setup in agents.md §6.6 + OP-PM-2 in HANDOFF auf ✅ geschlossen (Branch claude/sync-bot-token-doc). |
| 2026-06-27-docs-navigation-structure | 2026-06-27 ~17:40 | 2026-06-27 ~19:30 | ~1.8 h | Doku-Navigation: Findability-Layer + warnungsfreier Site-Build (Branch claude/docs-navigation-structure-wf696m, PR #229, Doku/Tooling-only → kein Bump, APP_VERSION bleibt 0.15.0). Nutzer „Doku unübersichtlich → Masterpiece". Gebaut: YAML-Frontmatter (sidebar_position 10er-Schritte = Lesereihenfolge, sidebar_label) in allen docs/**; generated-index je Kategorie; ID-/OP-Index docs/konventionen/IDs.md (OP → Owning-Doc); Landkarte Lesepfade nach Aufgabe + alle Docs vollständig gelistet; check-doc-consistency.sh neue Drift-Checks (Landkarte/Frontmatter/_category_.json); warnungsfreier Build via Staging-Kopie docs-site/prepare-content.mjs (Cross-Instance-Links resolve-basiert → 7→0 Broken-Links, CHANGELOG/CLAUDE jetzt auf der Site). Integration mit main: auf das kanonische generierte Glossar (docs/glossar/) deferred (eigene konventionen/Glossar.md entfernt), main's 4 neue Architektur-Docs + zielgruppen/Lesepfade in Frontmatter+Landkarte aufgenommen, Konflikte (Navbar/package.json) gelöst, Timesheet-union-Dubletten geglättet (OP-PM-2). Entscheidungen: keine Datei-Renames · Status-Kopfblöcke bewahrt (agents.md §2.1) · Lastenheft nicht gesplittet. Verifikation: docs-site build warnungsfrei · check-doc-consistency.sh grün · smooth-logs sauber. Kein Solver-/Worker-Redeploy. |
| 2026-06-27-taktano-meeting-minutes | 2026-06-27 ~20:15 | 2026-06-27 ~20:50 | ~0.6 h | Besprechungs-Protokolle (Meeting-Minutes) als Doku-Struktur (Branch claude/taktano-meeting-minutes-jfekpr, Version 0.17.0 → 0.17.1 PATCH — Doku-Zuwachs). Nutzer-Frage „Welche Meeting-Minutes gibt es zu Taktano?" → Repo-/Notion-Suche: keine vorhanden (kein Notion-MCP-Connector angebunden → Anbindungs-Optionen + DSGVO-Drittland-Hinweis erläutert). Gebaut: Ordner docs/betrieb/meetings/ (README.md Index+Anleitung, _Vorlage.md Protokoll-Template pyramidal: TL;DR→Beschlüsse→Action Items→Diskussion→True-North-Bezug, _category_.json); Eintrag in docs/README.md. Entscheidungen: Minutes leben im Repo (Everything-as-Code) · eine Datei je Termin JJJJ-MM-TT-thema-slug.md (kollisionsfrei, analog Session-IDs) · Beschlüsse zusätzlich am verbindlichen Ort spiegeln (CHANGELOG/HANDOFF §4/design/CLAUDE.md). Kein Code/Solver berührt. Doku: docs/betrieb/meetings/*, docs/README.md, CHANGELOG, HANDOFF, Timesheet. |
| 2026-06-27-seed-6-tenant-isolation | 2026-06-27 ~02:00 | 2026-06-27 ~02:40 | ~0.7 h | Entscheidung Tenant-Isolation (OP-TENANT): Daten pro Tenant physisch getrennt (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). Nutzer: Mandantendaten + Audit je Tenant in DO-SQLite (Option A); Tenant-Registry zentral via Better Auth. Löst E-DATA-1 = B. Proaktiv geflaggt: Audit verlässt separate D1 → Mitigation Hash-Chain (Tamper-Evidenz) + D1 taktano-audit umgewidmet zu zentralem Compliance-Sink; ⮕ E-TENANT-1. Neu docs/architektur/Mandantenfaehigkeit.md; aktualisiert Persistenz.md (E-DATA-1 ✅), Audit-Log.md (§2-Verfeinerung), HANDOFF, CLAUDE.md. Kein Code. Doku: Mandantenfaehigkeit.md + 4 Updates, CHANGELOG, Timesheet (Session 43). |
| 53 | 2026-06-26 ~19:00 | 2026-06-26 ~20:15 | ~1.3 h | OP-SEED-1 / OP-TENANT: Seed-Audit + Datenbestand-Purge + Tenant-Vorlage-Fundament (Branch claude/seed-usage-audit-frsx52, Version 0.11.0 → 0.12.0/Build 15, MINOR). Audit „wo werden noch Seeds verwendet?" (nur serverseitig; Buchten/Taxonomie/Schichten noch hart am Seed, Demo-/Spike-Skripte bleiben). Gebaut: baueState(kategorien) als einzige Seeding-Stelle der Tenant-Vorlage vest-automotive (Boot-Default = Voll-Seed, regressionsfrei); Admin-Kommando admin.purge (admin-gegated wie Kosten, interim bis OP-AUTH-1) mit einzeln wählbaren Seed-Kategorien; Flag demoHistorieGeseedet unterdrückt Demo-Nachseeden nach Purge (additiv, keine Migration); neuer Workspace /administration (Cluster „System") mit Gefahrenzone (Preset-Schnellwahl + Tipp-Bestätigung LÖSCHEN). Entscheidungen (empfohlene Defaults — interaktive Rückfrage scheiterte am Permission-Stream): D1 alle Kategorien wählbar · D2 Default „Leeres Gerüst" · D3 Tenant „Fundament + OP". ⚠ Proaktiv geflaggt: Purge destruktiv/irreversibel → vor Prod Export/Backup (OP-EXPORT-1) + Purge-Audit-Event (OP-AUDIT-1) + Rollen-Gate (OP-AUTH-1). Server-Typecheck + operativ + test:prozess + ng build + No-Hex grün. Reiner Server+Client-Pfad, kein Solver-Redeploy. Doku: neu docs/Seed-Abloese-Plan.md, HANDOFF (OP-SEED-1 + OP-TENANT), CHANGELOG, Timesheet (Session 53). |
| 54 | 2026-06-26 ~20:15 | 2026-06-26 ~21:30 | ~1.3 h | S-SEED-1: Arbeitsplätze/Buchten persistiert + editierbar + neuer OP-BACKUP-1 (Branch claude/seed-usage-audit-frsx52, Version 0.12.0 → 0.13.0/Build 16, MINOR). arbeitsplaetze (R2) in den DO-State (persistiert + onStart-Backfill + in baueState/Purge); BELEGUNG_SLOTS → Instanz-Getter belegungSlots; ressourcenDTO().bays + schedulerInput() lesen aus dem State statt Seed; CRUD `arbeitsplatz.create |
| 55 | 2026-06-26 ~21:30 | 2026-06-26 ~22:50 | ~1.3 h | S-SEED-2: Taxonomien (G-1) persistiert + admin-editierbar (Branch claude/seed-usage-audit-frsx52, Version 0.13.0 → 0.14.0/Build 17, MINOR). taxonomy (Abteilungen/Arbeitsplatz-/Abwesenheits-/Sperre-Typen/Ausstattung/Leistung-Kategorien) in den DO-State (persistiert + Backfill + in baueState/Purge); ~11 Modul-Konstanten → Instanz-Getter über state.taxonomy; toAuftragDTO/buildProzessKatalog/bauBelegungSlots bekommen Taxonomie/Label-Map als Parameter; schedulerInput() reicht taxonomy durch. CRUD `taxonomie.create |
| 56 | 2026-06-26 ~22:50 | 2026-06-27 ~00:10 | ~1.3 h | S-SEED-3: Schicht-Katalog (R1-S2) persistiert + admin-editierbar (Branch claude/seed-usage-audit-frsx52, Version 0.14.0 → 0.15.0/Build 18, MINOR). schichten in den DO-State (persistiert + Backfill + in baueState/Purge); SCHICHTEN/SCHICHT_DTOS/SCHICHT_IDS → Instanz-Getter schichtenMap/schichtDtos/schichtIds; schedulerInput() reicht schichten durch (Verfügbarkeit/Ausfall). CRUD `schicht.create |
| 57 | 2026-06-27 ~00:10 | 2026-06-27 ~01:10 | ~1.0 h | S-SEED-4: Seed → benannte Tenant-Vorlage extrahiert (Branch claude/seed-usage-audit-frsx52, Version 0.15.0 → 0.16.0/Build 19, MINOR). Stammdaten per git mv von server/src/model/seed.ts → server/src/tenants/vest-automotive.ts; neuer Typ TenantVorlage (tenants/types.ts) + Wrapper vestAutomotive + Registry tenants/index.ts (aktiveTenantVorlage()); leitstand.ts bezieht die Vorlage über die Registry (interne vestAutomotiveSeed = AKTIVE_TENANT.daten, Referenzen unverändert); model/seed.ts = dünner Re-Export-Shim (Demo-/Spike-Imports unverändert). Entscheidungen: Shim statt ~11 Demo-Imports umbauen (niedriges Risiko, Runtime-Pfad nutzt Registry) · Name lokal beibehalten (keine Churn) · MINOR (neue Abstraktion, verhaltensgleich). ➡ Seed kein impliziter Laufzeit-Default mehr → Fundament für OP-TENANT; verbleibt nur S-SEED-5 (Drizzle, OP-DATA-1). Server-Typecheck (inkl. Demos via Shim) + spike/operativ/replan/solve/test:teilplan/test:prozess + ng build + No-Hex grün. Kein Solver-Redeploy. Doku: docs/Seed-Abloese-Plan.md (S-SEED-4 ✅), HANDOFF (OP-SEED-1/OP-TENANT), CHANGELOG, Timesheet (Session 57). |
| 58 | 2026-06-27 ~01:10 | 2026-06-27 ~02:00 | ~0.8 h | Design-Docs: S-SEED-5/OP-DATA-1 (Persistenz) + OP-BACKUP-1 (Backup/Restore) (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Version-/Build-Bump, Präzedenz #182/#185). Nutzer „1, dann 2". (1) docs/Persistenz.md: DO-Blob vs. DO-SQLite vs. D1; Drizzle als Single Source + generierte Migrationen + CI-Gate; ⮕ E-DATA-1; Slices D5-1…D5-4. (2) docs/Backup-Restore.md: Snapshot vs. PITR (DO-SQLite-natives PITR als stärkster Hebel, an OP-DATA-1 gekoppelt); Restore-Punkt via Audit-Timeline; Audit-Log bleibt append-only/nicht mitgerollt (Restore = state.restore-Event); B5-1 Pre-Purge-Snapshot als Sofort-Netz; ⮕ E-BACKUP-1/2/3. Registriert in CLAUDE.md (Tiefenquellen) + HANDOFF §4 (OP-DATA-1 neu, OP-BACKUP-1 ausgearbeitet) + Seed-Abloese-Plan (S-SEED-5). Kein Code, keine Gates/Solver berührt. Doku: Persistenz.md, Backup-Restore.md, CLAUDE.md, HANDOFF, CHANGELOG, Timesheet (Session 58). |
| 59 | 2026-06-27 ~02:00 | 2026-06-27 ~02:40 | ~0.7 h | Entscheidung Tenant-Isolation (OP-TENANT): Daten pro Tenant physisch getrennt (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). Nutzer: Mandantendaten + Audit je Tenant in DO-SQLite (Option A); Tenant-Registry zentral via Better Auth. Löst E-DATA-1 = B. Proaktiv geflaggt: Audit verlässt separate D1 → Mitigation Hash-Chain (Tamper-Evidenz) + D1 taktano-audit umgewidmet zu zentralem Compliance-Sink; ⮕ E-TENANT-1. Neu docs/architektur/Mandantenfaehigkeit.md; aktualisiert Persistenz.md (E-DATA-1 ✅), Audit-Log.md (§2-Verfeinerung), HANDOFF, CLAUDE.md. Kein Code. Doku: Mandantenfaehigkeit.md + 4 Updates, CHANGELOG, Timesheet (Session 59). |
| 60 | 2026-06-27 ~02:40 | 2026-06-27 ~03:05 | ~0.4 h | E-TENANT-1 entschieden: (C) zentraler Hash-Anker fürs Audit (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). Abwägung A (voller Event-Sink) · B (rein per-Tenant + Fan-out) · C (nur Chain-Kopf zentral) → Nutzer wählt C: per-Tenant-Audit DO-SQLite append-only + Hash-Chain; zentral nur der Chain-Kopf je Tenant (taktano-audit → audit_anchors, keine Events/PII) → off-box-Tamper-Nachweis ohne zentrale Daten; Cross-Tenant-Reporting bleibt Fan-out (Upgrade C→A nur bei Bedarf); D1-Dual-Write schreibt interim noch volle Events. Festgehalten: architektur/Mandantenfaehigkeit.md §4/§6/§7, architektur/Audit-Log.md §2, HANDOFF §4, CHANGELOG. Kein Code, kein Solver-Redeploy. |
| 61 | 2026-06-27 ~03:05 | 2026-06-27 ~03:25 | ~0.3 h | E-TENANT-2 entschieden: (3) R2 ein Bucket + Prefix je Tenant, gekapselt (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). Abwägung 1 (Prefix) · 2 (Bucket je Tenant) · 3 (Prefix gekapselt + Opt-in-Split) → Nutzer wählt 3: Fotos in einem EU-Bucket tenant/<id>/… via tenantBucket()/tenantKey() + unrätbare Ids + signierte URLs. Begründung: Relation Foto↔Tenant liegt schon physisch in DO-SQLite; Zielmarkt = tausende kleine Mandanten → Bucket-je-Tenant rennt ins R2-Limit; Bucket-Split = Opt-in-Upgrade. Festgehalten architektur/Mandantenfaehigkeit.md §3/§5/§6(T-7)/§7, CHANGELOG. Kein Code, kein Solver-Redeploy. |
| 62 | 2026-06-27 ~03:25 | 2026-06-27 ~03:35 | ~0.2 h | E-TENANT-3 entschieden: zurückgestellt („auf Anforderung") (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). Per-Tenant-Verschlüsselung at-rest erst bei konkretem Compliance-/Vertragsbedarf; bis dahin Plattform-Verschlüsselung (DO/D1/R2 EU). ➡ Alle Tenant-Isolations-Sign-offs durch (E-DATA-1=B · E-TENANT-1=C · E-TENANT-2=3 · E-TENANT-3=zurückgestellt); offen nur OP-BACKUP-1 (E-BACKUP-1/2/3). Festgehalten architektur/Mandantenfaehigkeit.md §7, CHANGELOG. Kein Code. |
| 63 | 2026-06-27 ~03:35 | 2026-06-27 ~04:10 | ~0.5 h | E-BACKUP-1/2/3 entschieden + Housekeeping + PR (Branch claude/seed-usage-audit-frsx52, reine Doku → kein Bump). E-BACKUP-1 = native DO-SQLite-PITR selektiv (nur Fachtabellen auf T, Audit-Tabelle bleibt — Cross-Check mit E-TENANT-1=C: blindes Whole-DO-PITR würde Audit mitrollen) + B5-1-Netz; E-BACKUP-2 = 30 T Retention + Plattform-Krypto + Lösch-via-Aging ≤30 T (Audit ausgenommen); E-BACKUP-3 = ja, darstellungsseitig markieren. ➡ OP-BACKUP-1 vollständig entschieden. Housekeeping: HANDOFF-Stub entfernt + flache docs/-Pfade auf docs/architektur/ (OP-DOCS-8); 3 doppelte Timesheet-„## Summe"-Köpfe (Union-Merge) kollabiert. Dann PR der Tenant-/Backup-Entscheidungs-Docs + Merge. Kein Code, kein Solver-Redeploy. Doku: architektur/Backup-Restore.md §5–§8, HANDOFF §4, CHANGELOG. |
| 2026-06-27-notion-claude-code-integration | 2026-06-27 ~19:50 | 2026-06-27 ~20:40 | ~0.8 h | Notion-Anbindung via MCP für Claude (Branch claude/notion-claude-code-integration-4yxtzf, Contributor-Tooling/Doku-only → kein Bump, APP_VERSION bleibt 0.16.0). Nutzer „Notion in Claude Code nutzen — lokal in Claude Desktop und in Claude Code in der Cloud" (Klärung: Ziel-Repo taktano, Auth Integrations-Token; medidentas war nicht im Session-Scope → ausgewichen auf taktano). Gebaut: eingecheckte .mcp.json (Server notion via npx -y @notionhq/notion-mcp-server, Token ${NOTION_TOKEN}-Env-Expansion, kein Secret im Repo) + Doku docs/konventionen/Notion-Integration.md (pyramidal, Zielgruppe IT-Dev/DevOps, Mermaid-Übersicht; Setup Claude Code lokal/Cloud + Claude Desktop, Bereichs-Freigabe least-privilege, Troubleshooting) + Eintrag in der Doku-Landkarte docs/README.md. Entscheidungen: Token statt OAuth für headless Cloud · stdio+npx mit verifizierter Env-Var (NOTION_TOKEN, gegen Paket-README geprüft) · kein Versions-Bump (kein Worker-/Build-Change) · Claude Desktop bleibt geräte-lokal. Verifikation: valides JSON; Paketname/Env-Var bestätigt. Kein Solver-/Daten-/Verhaltens-Change. Doku: Notion-Integration.md (neu), docs/README.md, HANDOFF §2, CHANGELOG, Timesheet. |
| 2026-06-27-d5-1-implementation | 2026-06-27 ~18:10 | 2026-06-27 ~19:00 | ~0.8 h | OP-DATA-1 / D5-1: Drizzle-Toolchain auf der bestehenden Audit-D1 (Branch claude/d5-1-implementation-qg0myg, Version 0.15.0 → 0.16.0/Build auto, MINOR). drizzle-orm + drizzle-kit als devDependencies (Schema-Datei nur von drizzle-kit konsumiert, nicht im Worker-Laufzeitpfad → kein Prod-Bundle/Audit-Surface); das schon existierende audit_entries-Schema (raw 0001, remote angewandt) deklarativ als Drizzle nachgezogen (server/src/db/schema.ts = Single Source) — Schema-First, kein Daten-/Verhaltens-Change; server/drizzle.config.ts + generierte server/drizzle/-Migration deckungsgleich zu 0001. Entscheidungen: getrennte Migrations-Verzeichnisse (wrangler liest weiter nur migrations/ → die idempotente raw-0001 bleibt einziger Apply-Pfad, kein Doppel-Apply) · Drizzle devDependency · Staleness-Gate prüft git status (fängt auch neue/untracked Migrationen). CI-Required-Gate db-check (scripts/check-drizzle.sh → drizzle-kit generate → diff leer) + npm-Scripts db:generate/db:check. Verifikation: typecheck grün · drizzle-kit generate idempotent (2× → „No schema changes") · npm audit --omit=dev --audit-level=high → 0 Vulns. Kein Solver-Redeploy. Doku: architektur/Persistenz.md (D5-1 ✅), HANDOFF (OP-DATA-1), CHANGELOG, Timesheet. |
| 2026-06-27-d5-2-do-state-migrations | 2026-06-27 ~19:30 | 2026-06-27 ~20:35 | ~1.1 h | OP-DATA-1 / D5-2: DO-Blob-Migrations-Registry (Variante A, verhaltenstreu) (Branch claude/d5-2-do-state-migrations, Version 0.16.0 → 0.17.0/Build auto, MINOR — Präzedenz S-SEED-4). Die versionsgegateten onStart-Remaps (v2/3/4/5/7/12/14) in eine geordnete, benannte, getestete Registry server/src/persistence/do-state-migrations.ts extrahiert (DO_MIGRATIONS + migriereDoState + SCHEMA_VERSION als Single Source, von leitstand.ts re-importiert); onStart ruft nur noch migriereDoState. Round-Trip-Self-Test test:do-migrations (Voll-Migration v0→v15 · Idempotenz · Versions-Gating · Registry-Invarianten) + CI-Step. Entscheidungen: Scope = nur versionsgegatete Remaps (risikoärmste Variante, Nutzer bestätigt) · emptiness-gegateter Abwesenheits-Backfill + Feld-Default-Merges bleiben in onStart (nicht sv-gegatet) · SCHEMA_VERSION bleibt eigene Konstante (Registry lückenhaft, da v13/v15 reine Feld-Ergänzungen) · lose DoStateBlob-Typisierung (isoliert testbar) · Token-Coverage-Gate → D5-4. Verifikation: typecheck + test:do-migrations + Regression-Smokes (operativ/replan/teilplan/fairness) grün. Kein Storage-/Verhaltens-Change, kein Solver-Redeploy. Doku: architektur/Persistenz.md (D5-2 ✅ + §1), HANDOFF (OP-DATA-1), CHANGELOG, Timesheet. |
| 2026-06-27-d5-4-persistence-gate | 2026-06-27 ~20:40 | 2026-06-27 ~21:35 | ~0.9 h | OP-DATA-1 / D5-4: CI-Gate vereinheitlichen — Persistenz-Gate (Branch claude/d5-4-persistence-gate, Version 0.17.0 → 0.18.0/Build auto, MINOR — neues CI-Gate). Vereinheitlichtes scripts/check-persistence.sh (npm persistence:check, CI-Job persistence-gate) bündelt (1) Drizzle-Schema-Staleness (D5-1) + (2) neues DO-State-Coverage-/Token-Muster-Gate scripts/check-do-state-coverage.mjs (jedes nicht-optionale PersistedState-Feld braucht expliziten saved.<feld> ??-onStart-Default; statisch geparst). leitstand.ts: expliziter bays-Default ergänzt (verhaltensgleich) → 19/19 Pflichtfelder gedeckt. CI: db-check-Job → persistence-gate umbenannt + in ci-gate nachgezogen. Entscheidungen: explizite saved.X ??-Defaults statt Spread (low-false-positive); optionale Felder exempt; Job umbenannt statt zweiter Job. Verifikation: persistence:check grün + Negativtest (Default entfernt → Gate exit 1, restauriert exit 0) + typecheck grün. ➡ OP-DATA-1 bis auf D5-3 (DO-SQLite-Pilot) umgesetzt. Kein Laufzeit-/Verhaltens-Change (nur additiver bays-Default), kein Solver-Redeploy. Doku: architektur/Persistenz.md (D5-4 ✅), HANDOFF (OP-DATA-1), CHANGELOG, Timesheet. |
| 2026-06-27-op-crud-c1-mitarbeiter-archiv | 2026-06-27 ~21:40 | 2026-06-27 ~22:50 | ~1.2 h | OP-CRUD-1 / C1: Mitarbeiter-Archivierung (Archiv statt Hard-Delete) (Branch claude/op-crud-c1-mitarbeiter-archiv, Version 0.18.0 → 0.19.0/Build auto, MINOR — neues Feature). Generisches Archiv-Flag (E-CRUD-1): Archivierbar-Interface + istArchiviert/nurAktive in types.ts, Mitarbeiter extends Archivierbar. Handler employee.archivieren/reaktivieren (admin-gegated, Audit-Event via d1Audit, OP-AUDIT-1). Archivierte aus aktiver Verwendung via nurAktive (Solver schedulerInput, Zähler, Ausbildungs-/Niveau-Vorschläge, Engpass, Ausfall) — referenzstabil; Live-Task-Lösung bei laufender Bindung (geordnete Übergabe). Client staff.component: Archivieren-Button (Rückfrage) + Archiviert-Abschnitt mit Reaktivieren; archiviert im DTO. Self-Test test:archiv + CI-Step. Entscheidungen: generisches Flag statt Status-Enum (E-CRUD-1); kein Hard-Delete (revisionssicher); kein Migrationsbedarf (archiviert? optional). Verifikation: typecheck + test:archiv + Regression-Smokes + ng build + No-Hex + persistence:check grün. Reiner Server+Client-Pfad, kein Solver-Redeploy. Doku: architektur/Entitaeten-Lebenszyklus.md (C1 ✅ + §1), HANDOFF (OP-CRUD-1), CHANGELOG, Timesheet. |
| 2026-06-27-e-crud-3-decision | 2026-06-27 ~22:50 | 2026-06-27 ~23:05 | ~0.3 h | OP-CRUD-1: E-CRUD-3 entschieden (Branch claude/e-crud-3-decision, reine Doku → kein Bump). Nutzer-Sign-off: Slice-Reihenfolge nach C1 = C2 → C4 → C3; Running-process-Testmatrix wird blockierender Server-CI-Gate (wie test:archiv). Festgeschrieben in architektur/Entitaeten-Lebenszyklus.md §5/§6/§7 + HANDOFF (OP-CRUD-1). Kein Code. Doku: architektur/Entitaeten-Lebenszyklus.md, HANDOFF, CHANGELOG, Timesheet. |
| 2026-06-27-op-crud-c2-soft-delete | 2026-06-27 ~23:05 | 2026-06-28 ~00:20 | ~1.3 h | OP-CRUD-1 / C2: Soft-Delete vereinheitlichen — Teilschritt-Archivierung (Branch claude/op-crud-c2-soft-delete, Version 0.19.0 → 0.20.0/Build auto, MINOR). Befund: Skill (aktiv) + Leistung (status) haben bereits Soft-Delete → kein redundantes Flag; echte Lücke = Teilschritt. Teilschritt extends Archivierbar + Handler teilschritt.archivieren/reaktivieren (admin-gegated, Audit). Running-process-Safety (E-CRUD-2): Filterung NUR am Angebots-Punkt (angeboteneTeilschritte, Add-Dropdown), buildProzessKatalog resolved archivierte weiter → bestehende Prozesse/Instanzen intakt; ProzessSchrittDTO.archiviert. Client processes.component: Archivieren/Reaktivieren + Dimmen. Doku §1-Matrix: alle Klasse-A-Entitäten haben jetzt „archiv statt löschen". Verifikation: typecheck + test:archiv + test:prozess + Smokes + ng build + No-Hex + persistence:check grün. Reiner Server+Client-Pfad, kein Solver-Redeploy. Doku: architektur/Entitaeten-Lebenszyklus.md (C2 ✅ + §1), HANDOFF (OP-CRUD-1), CHANGELOG, Timesheet. |
| 2026-06-28-op-crud-c4-running-process-tests | 2026-06-28 ~00:20 | 2026-06-28 ~01:10 | ~0.8 h | OP-CRUD-1 / C4: Running-process-Testmatrix (blockierender CI-Gate) (Branch claude/op-crud-c4-running-process-tests, Version 0.20.0 → 0.21.0/Build auto, MINOR). Self-Test test:running-process (operativ/running-process-demo.ts) als blockierender Server-CI-Step (vor solve): beweist über die pure buildProblem-Fläche (1) Mitarbeiter archiviert → nurAktive raus, Solver plant dieselben Aufträge ohne Crash; (2) Teilschritt-Vorlage archiviert (bleibt im Input) → kein Schritt verloren (Resolve/Materialisierung schützt Laufendes, E-CRUD-2). ci.yml strikt auf Dup-Keys geprüft (Lehre aus D5-4). Verifikation: test:running-process + typecheck + Smokes grün. Kein App-Laufzeit-Change (nur Test+CI), kein Solver-Redeploy. Doku: architektur/Entitaeten-Lebenszyklus.md (C4 ✅), HANDOFF (OP-CRUD-1), CHANGELOG, Timesheet. |
| 2026-06-28-op-crud-c3-katalog-create | 2026-06-28 ~01:10 | 2026-06-28 ~02:20 | ~1.2 h | OP-CRUD-1 / C3: Prozess-Katalog Create (neue Teilschritte + Leistungen) (Branch claude/op-crud-c3-katalog-create, Version 0.21.0 → 0.22.0/Build auto, MINOR). Pure erstelleTeilschritt/erstelleLeistung in operativ/prozess.ts (sinnvolle Defaults, G-3-konform) + Self-Test test:prozess. Handler teilschritt.create/leistung.create (admin-gegated, Audit *.erstellt) + ID-Gens neueTeilschrittId/neueLeistungId. Client processes.component: „+ Neuer Teilschritt"/„+ Neue Leistung". Katalog jetzt voll editierbar (Create neu; Delete = Teilschritt-Archiv C2 / Leistung-status-Soft). §1-Matrix nachgezogen. Verifikation: typecheck + test:prozess + test:archiv + test:running-process + Smokes + ng build + No-Hex + persistence:check grün. ➡ OP-CRUD-1 bis auf E-CRUD-4 vollständig. Reiner Server+Client-Pfad, kein Solver-Redeploy. Doku: architektur/Entitaeten-Lebenszyklus.md (C3 ✅ + §1), HANDOFF (OP-CRUD-1), CHANGELOG, Timesheet. |
| 2026-06-28-e-crud-4-decision | 2026-06-28 ~02:20 | 2026-06-28 ~02:35 | ~0.3 h | OP-CRUD-1: E-CRUD-4 entschieden → OP-CRUD-1 abgeschlossen (Branch claude/e-crud-4-decision, reine Doku → kein Bump). Nutzer-Sign-off: E-CRUD-4 = (A) Hart-Delete für Infra-Kosten/Foto beibehalten (referenzfrei + Audit; bei Foto DSGVO/Recht-auf-Vergessen pro echtes Löschen). Festgeschrieben in architektur/Entitaeten-Lebenszyklus.md §7 + HANDOFF. ➡ OP-CRUD-1 vollständig (alle Slices C1–C4 + E-CRUD-1…4). Kein Code. Doku: architektur/Entitaeten-Lebenszyklus.md, HANDOFF, CHANGELOG, Timesheet. |
| 2026-06-29-nacharbeit-mangel-behoben | 2026-06-29 ~10:30 | 2026-06-29 ~11:00 | ~0.4 h | OP-UX-3-Nachzug: Mangel automatisch behoben beim Abschluss der Nacharbeit (Branch claude/nacharbeit-mangel-behoben, Version 0.33.0 → 0.33.1/Build auto, PATCH). Nutzer: beim Abschluss des Nacharbeits-Schritts den Mangel auto auf behoben setzen (blieb offen). Gebaut (reiner Server-Pfad): TeilschrittInstanz.mangelId (Verknüpfung, gesetzt bei nacharbeitInstanz aus mangel.id); pure erledige setzt beim Erledigen den verknüpften Mangel behoben (idempotent); Handler ergänzt Protokoll + Audit mangel.behoben (OP-AUDIT-1). QS-Kreis Mangel→Nacharbeit→behoben geschlossen. Kein Client-Change (Status via maengel-DTO). test:nacharbeit um 2 Fälle erweitert (Abschluss behebt; normaler Schritt unberührt). Verifikation: Server tsc+test:nacharbeit+operativ/replan/running-process grün. Kein Solver-Redeploy/Schema. Doku: architektur/Operative-Durchgaengigkeit.md (§OP-UX-3 Nachzug), architektur/Audit-Log.md (mangel.behoben), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-29-nacharbeit-gantt | 2026-06-29 ~08:30 | 2026-06-29 ~10:30 | ~2.0 h | OP-UX-3: Nacharbeit nach QS-Mangel live im Gantt (Branch claude/nacharbeit-gantt, Version 0.32.0 → 0.33.0/Build auto, MINOR — neues Feature). Nutzer (Flow-Audit-Backlog): QS-Nacharbeit war nur Kennzahl, nicht eingeplant → kein Gantt-Block, Reserve/Auslastung falsch. Gebaut (voll solver-integriert, 3 Sign-offs: erst bestätigen · echter Solver-Schritt · Solver wählt Bucht/Crew frei): Scheduler-Kern — AuftragInput.zusatzSchritte werden in scheduleLeistung (TS) + buildProblem (CP-SAT) NACH dem Skip-Filter an Leistung.prozess angehängt (reuse dauerOverrideMin/abhaengigkeit); TeilschrittInstanz.nacharbeitMin (optional), toAuftragInput erzeugt zusatzSchritte, applyPlanung index-stabil. Neue Transition nacharbeiten: fertiggestellt → angeliefert. Handler auftrag.nacharbeitEinplanen (offene Aufwands-Mängel → Nacharbeits-Instanzen, Skill/Bucht-Typ vom Mangel-Schritt, Dauer=Aufwand, Bucht+Crew solver-frei), Reopen + sofortiger Einzel-Plan (live im Gantt) + REOPT_EVENTS (globale Reopt als Vorschlag), Audit nacharbeit.eingeplant, TeilschrittDTO.nacharbeit. Client Qualität-Button „⚠ Nacharbeit einplanen" (persistiert über Mängel statt client-Set), Detail-Panel-Kennzeichnung, Reserve/Konflikt auto. Verifikation: Server tsc + neues test:nacharbeit (CI-Gate) + operativ/replan/running-process/spike grün · ng build + No-Hex + persistence:check grün · ci.yml strict-YAML. Kein Solver-Redeploy/Schema. Doku: architektur/Operative-Durchgaengigkeit.md (§OP-UX-3 + Backlog ✅), fachlich/Lastenheft.md §4.9.1, konventionen/IDs.md+Register.md, HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-29-offline-foto-queue | 2026-06-29 ~17:45 | 2026-06-29 ~18:30 | ~0.75 h | OP-OFFLINE-1 Stufe C: verzögerter Foto-Upload (Offline-Queue) (Branch claude/offline-foto-queue, Version 0.35.2 → 0.36.0/Build auto, MINOR — neues Feature). Nutzer: „Stufe c". Befund: Foto-Upload rein online (putFoto plain fetch + foto.registriert via send()-Guard) → offline erfasstes Foto verloren. Gebaut: (1) OfflineFotoQueueService (IndexedDB taktano-offline-fotos, keyPath fotoId, StateCacheService-Muster) puffert komprimierte Blobs (+Original) bis Upload+Registrierung durch; count-Signal→Shell-Badge. (2) reine Zustandsmaschine naechsterFotoQueueSchritt (offline-foto-queue.ts, Angular-frei): upload→register→upload-original→register-original→fertig, warten offline; idempotent via uploaded/registered. (3) uploadFoto enqueued nur (löst sofort auf) + drainFotoQueue (Trigger Socket-open/Reconnect + online-Event + nach Erfassung); HTTP-Fehler=offline→Eintrag bleibt. (4) Server: /api/foto/upload R2-Key deterministisch aus ?foto=<fotoId> (kein Orphan bei Replay); foto.registriert dedupliziert schon nach id (unverändert), kein Schema. (5) UI: Detail-Panel-Toast „erfasst/offline wird gesendet", Shell-Badge „N warten". Verifikation: neuer test:fotoqueue (CI-Gate, 8 Fälle) + ng build + Server tsc grün. Doku: architektur/Offline-PWA.md (Stufe C ✅), konventionen/IDs.md, HANDOFF §4, CHANGELOG, Timesheet. |
| 2026-06-29-ci-path-filters | 2026-06-29 ~17:20 | 2026-06-29 ~17:45 | ~0.4 h | OP-CI-1 Folge-Hebel: Pfad-Filter je Bereich + SBOM nur auf main (Branch claude/ci-path-filters, Version 0.35.1 → 0.35.2/Build auto, PATCH — CI-Tweak). Nutzer: „beide" (angebotene Folge-Hebel). Gebaut (nur ci.yml + Doku): (1) changes-Job liefert Bereichs-Outputs server/client/solver/design/security (dorny/paths-filter OR; geteilte Dateien scripts/**+ci.yml per YAML-Anker in alle Bereiche); schwere Jobs gated auf needs.changes.outputs.<Bereich> == 'true' ‖ github.event_name == 'push' → bereichsfremder PR überspringt server(27 Tests)/solver/persistenz; main-Push läuft immer voll (Deploy-Sicherheitsnetz). (2) SBOM auf push (main-only) → spart je PR 2× npm ci; OP-SBOM-1 in CLAUDE.md nachgezogen. Verifikation: YAML-Parse (Jobs/ifs/Anker je Bereich; keine outputs.code-Reste). Kein Code/Solver/Schema. Doku: .github/workflows/ci.yml, CLAUDE.md, konventionen/IDs.md, HANDOFF §4, CHANGELOG, Timesheet. |
| 2026-06-29-ci-optimize-minutes | 2026-06-29 ~17:00 | 2026-06-29 ~17:20 | ~0.3 h | OP-CI-1: GitHub-Actions-Build-Minuten halbieren (Branch claude/ci-optimize-minutes, Version 0.35.0 → 0.35.1/Build auto, PATCH — CI-Tweak). Nutzer: „Build-Minuten optimieren, Actions-Kontingent nicht so schnell ausschöpfen" (ausgelöst durch den Actions-Stau, der PR #261 blockierte). Befund: ci.yml mit on: push + on: pull_request ohne Branch-Filter → zwei komplette Läufe pro PR-Push; kein concurrency → überholte Läufe liefen weiter. Fix (nur ci.yml): push auf branches: [main] (Feature-Branches nur via pull_request; Deploy=main+push unberührt) + concurrency je github.ref mit cancel-in-progress außer main (Deploy-Schutz). Folge-Hebel offen/angeboten: Pfad-Filter je Bereich + SBOM auf Schedule. Verifikation: YAML-Parse (top-keys + concurrency ok); übrige 4 Workflows bereits schlank. Kein Code/Solver/Schema. Doku: .github/workflows/ci.yml (Kopf), konventionen/IDs.md (OP-CI-1), HANDOFF §4, CHANGELOG, Timesheet. |
| 2026-06-29-pwa-read-offline | 2026-06-29 ~16:00 | 2026-06-29 ~16:30 | ~0.5 h | OP-OFFLINE-1 Stufe B: Offline-Fähigkeit als PWA (Service Worker + Read-Offline) (Branch claude/pwa-read-offline, Version 0.34.0 → 0.35.0/Build auto, MINOR — neues Feature). Nutzer: „offline-fähig — App vs. Webbrowser abwägen; Bild-Upload versetzt." Entscheidung: PWA statt nativer App. Gebaut (Client + Build-Konfig): (1) PWA-Shell — @angular/service-worker + ngsw-config.json (App-Shell prefetch, Fonts/Bilder lazy, navigationUrls ohne /api/**), angular.json serviceWorker + assets(public), provideServiceWorker (nur Prod) in app.config.ts; manifest.webmanifest + icon.svg (SVG = everything-as-code) + <link rel=manifest>. (2) Read-Offline — StateCacheService (IndexedDB-Snapshot des LeitstandState), LeitstandService persistiert je Broadcast + hydriert beim Start (Broadcast hat Vorrang), Offline-Banner in der Shell („nur Ansicht"). Bewusst NICHT: Offline-Schreiben (großer Folge-OP) + Foto-Upload-Queue (Stufe C/PR C). No-Hex: manifest/index.html außerhalb des Gate-Scopes, Banner via var(--tk-amber). Verifikation: ng build grün → ngsw-worker.js+ngsw.json (assetGroups app/assets, Manifest+Icon gehasht); No-Hex grün. Kein Server/Solver/Schema. Doku: architektur/Offline-PWA.md (neu), konventionen/IDs.md, HANDOFF §4, CHANGELOG, Timesheet. |
| 2026-06-29-server-checks-timing-omm2he | 2026-06-29 ~14:30 | 2026-06-29 ~16:00 | ~1.5 h | OP-QS-GATE: QS-Vollständigkeits-Gate vor der Abholung (server-hart) + Nacharbeit als QS-Phasen-Schritt (Branch claude/server-checks-timing-omm2he, Version 0.33.1 → 0.34.0/Build auto, MINOR — neues Feature). Nutzer: „Nacharbeit als Prozessschritte innerhalb der QS hinzufügen — dokumentiert, dass Nacharbeit nötig war; in der QS auch prüfen, dass alle Prozessschritte ausgeführt + dokumentiert wurden." Gebaut: (1) Nacharbeit = QS-Phasen-Schritt — neues optionales TeilschrittInstanz.phase (Per-Instanz-Override), nacharbeitInstanz setzt phase:'qs'; aktuellePhase + Teilschritt-DTO bevorzugen Instanz-Phase. (2) Server-hartes Gate — pure istAbnahmebereit(auftrag, dokuPflichtByTs, fotoAnfByTs, fotosByInstanz)→{ok,offen[]} (jeder nicht-übersprungene Schritt erledigt + Doku-Kommentar + Foto-Pflicht; kein Mangel offen); auftrag.aktion-Guard lehnt abholen bei !ok ab, sendet auftrag.aktion.result (offen[]) + Audit auftrag.abnahme.abgelehnt. (3) Client Qualität-Sicht: Prozess-Vollständigkeits-Tafel aus echten Schritten, „Übergeben" an abnahmebereit(a) gebunden, Reject-Toast (auftragAktionResult), Sicht-Checkliste frisch je QS-Runde (Schlüssel inkl. Nacharbeit-Schritt-Anzahl). Entscheidungen: kein separater Lifecycle-Status (Nacharbeit=QS-Schritt); Gate server-hart; Sonderwünsche vertagt (eigener PR, istAbnahmebereit als Erweiterungspunkt). Bewusst offen: transition→fertiggestellt erledigt undokumentierte Schritte weiter (vom Gate abgefangen) — Härtung als Folge-Schritt. Migration SCHEMA_VERSION 15→16 (additiv, kein Transform). Verifikation: Server tsc + neues test:abnahme (CI-Gate, 7 Fälle) + test:do-migrations (v0→v16) + test:nacharbeit/operativ/replan grün · ng build grün. Kein Solver-Redeploy. Doku: architektur/Operative-Durchgaengigkeit.md (OP-QS-GATE), fachlich/Lastenheft.md §5.1, konventionen/IDs.md, HANDOFF §4, CHANGELOG, Timesheet. |
| 2026-06-29-unused-skills-org | 2026-06-29 ~16:10 | 2026-06-29 ~17:40 | ~1.3 h | OP-SKILL-1 + OP-R1-6 festgehalten, dann OP-SKILL-1 Variante A gebaut + Branch auf main (Branch claude/unused-skills-org-7r4k6l, PR #269, Version 0.34.0 → 0.35.0 → 0.38.0 nach main-Merge/Build auto, MINOR — neues Feature). Nutzer (2 Eingaben + Screenshot Prozesse-Workspace): (1) „Skills, die in keinem Prozess vorkommen, anzeigen — Skills sollten zu Prozessen/Teilschritten wandern (macht Mitarbeiter-Sicht leichter)"; (2) „Mitarbeiter-Seite für 10–50 MA optimieren — erst Konzepte entwickeln+vergleichen, dann umsetzen". (a) OP-Capture: OP-SKILL-1 (Befund per Explore-Agent: Skill-Katalog = Separat-Liste 7 Skills, Teilschritt fordert genau einen Skill benoetigteSkillId F11; 5/7 verwendet, verwaist = skill-ppf+skill-klaerung; Optionen A/B/C; Sonderfälle skill-klaerung→OP-R3-1, skill-ppf=Variante von skill-folie) + OP-R1-6 (Mitarbeiter-Seite skaliert nicht auf 10–50; zweistufig: erst Konzepte vergleichen, dann bauen; Konzeptphase). (b) OP-SKILL-1 Variante A gebaut (reiner Client-Pfad): Skill-Katalog-Dialog (staff.component.ts) markiert verwaiste Skills mit Badge „⚠ in keinem Prozess verwendet" + Kopf-Zähler; abgeleitet/nichts gespeichert (S-2): verwendeteSkillIds computed-Set über teilschritteKatalog().benoetigteSkillId, istVerwaist, verwaisteAnzahl; Amber=Hinweis (nicht Rot, Design-G), kein Hardcoded-Hex; verwaist ≠ inaktiv; Propose-not-execute (OP-CRUD-1). Offen: B (Prozess-Editor) / C (MA-Sicht filtert). (c) Branch auf main (#261–#268 gemergt): Konflikte in version.ts (0.37→0.38.0 MINOR über main), Lastenheft.md/Register.md (OP-DOCS-12-Anchor-/Link-Format übernommen, meine OPs mit <a id>+Sprunglinks nachgezogen). Verifikation: ng build + No-Hex-Gate grün. Kein Server/Solver/Schema/Token. Doku: staff.component.ts, version.ts, Lastenheft.md (§11.3/§11.7), HANDOFF §4, Register.md, CHANGELOG, Timesheet. (d) CodeRabbit-Fix: „PR folgt" → [PR #269] in CHANGELOG (2×) + Timesheet nachgetragen (docs/**-Konvention, Commit 0aa4aa1). (e) OP-SKILL-1 Variante B gebaut (0.38.0 → 0.39.0 MINOR): Prozesse-Workspace pflegt Skills im Prozess-Kontext — je Teilschritt „+ neu" (Inline-Anlegen → serverseitig atomar dem Teilschritt zugewiesen via optionalem skill.create.teilschrittId → setzeSkillAnforderung, race-frei da ID server-generiert) + „✎ umbenennen" (katalogweit); createSkill(…, teilschrittId?). Entscheidungen: atomar server-seitig · Katalog bleibt Single Source · ungegated/audit-frei wie bestehende Skill-Handler (Härtung → OP-AUTH-1). Verifikation: Server tsc + test:prozess + ng build + No-Hex grün; kein Schema/Solver. (f) OP-SKILL-1 Variante C gebaut (0.39.0 → 0.40.0 MINOR): MA-Sicht (staff.component.ts) sortiert verwaiste Skills an den Auswahl-Pickern (Qualifikation + Ausbildungsziel) ans Ende (verwaisteAnsEnde, stabil), dimmt sie (--tk-text-faint) + Tooltip/Suffix „in keinem Prozess" — bewusst nicht ausgeblendet (Selbsterklärbarkeit); derived via istVerwaist, kein Server/Schema. ➡ OP-SKILL-1 vollständig (A+B+C). (g) CodeRabbit-Fixes (4): CHANGELOG-Doppelheading ## 2026-07-01 gemergt (MD024) · neuerSkillName-Leak über Zeilen/Escape behoben (toggleNeuerSkill/schliesseNeuerSkill leeren beide Signals, Major) · benenneSkillUm Duplikat-Namens-Check · nativer autofocus → standalone AutofocusDirective (afterNextRender). Verifikation: Server tsc+test:prozess+ng build+No-Hex grün. (h) CodeRabbit Runde 3 (0.40.0 → 0.40.1 PATCH): Duplikat-Namens-Guard auch in StaffComponent.benenneSkillUm (Katalog-Dialog, spiegelt Prozess-Editor) + Lastenheft.md §11.7 veralteten „Zu klären"-Schwanz an vollständiger OP-SKILL-1 durch „Geklärt (A/B/C)" ersetzt (Konsistenz zu HANDOFF/CHANGELOG). ng build+No-Hex grün; kein Server/Schema. (i) CodeRabbit Runde 4 (0.40.1 → 0.40.2 PATCH): legeSkillAn warnt bei aktivem Namensgleichstand (No-Op-Schutz) — bewusst nur aktiv, damit die Reaktivierung deaktivierter gleichnamiger Skills (Feature) erhalten bleibt (CodeRabbits pauschaler Block bewusst abgewandelt); benenneSkillUm setzt Feld bei leerem/unverändertem Namen zurück. ng build+No-Hex grün. |
| 2026-06-28-aufbereitung-folien-produktion | 2026-06-28 ~12:10 | 2026-06-28 ~12:50 | ~0.7 h | Fachliche Phasen-Labels umbenannt + OP-PHASE-1/FEEDBACK-1/I18N/AI-3 festgehalten (Branch claude/aufbereitung-folien-produktion-mvn691, Version 0.31.0 → 0.31.1/Build auto, PATCH — sprechende Labels). Nutzer (iterativ): „Aufbereitung → Vorbereitung (inkl. Car-Check + Folien-Produktion)", „QS → Quality-Check", „Folien-Produktion/bessere Produktions-Benennung als OP". Rename (nur Labels): Single-Source client/src/app/leitstand/phase.ts (PHASE_LABEL.aufbereitung→„Vorbereitung", .qs→„Quality-Check"; technische Keys aufbereitung/qs bleiben, kein Schema/Migration) → propagiert in Flow-Band/Orders/Detail; Wareneingang-Button „Aufbereiten starten"→„Vorbereitung starten" (occupancy.component.ts). OP-PHASE-1 neu (bessere Produktions-Benennung + Vor-Produktion: Folien-Zuschnitt/Bestellung kann nach Annahme starten, Plotter-Kapazität + Auslastung im Scheduler) in Lastenheft §11 + HANDOFF §4. Doku-Konsistenz: Standard-Prozess in CLAUDE.md/Lastenheft §5.1 (+Mermaid)/Lesepfade/COMPONENTS/WORKSPACES nachgezogen. Verifikation: No-Hex unberührt; Label rein textuell. Reiner Client + Doku, kein Server/Solver/Token/Schema. Folge-Captures derselben Session (reine OP/Doku, kein Code): OP-FEEDBACK-1 neu (In-App-Feedback mit Screenshot-Markup; Empfehlung Eigen-Widget statt Plugin, DSGVO; Chatbot = Zusatzkanal via OP-AI-4); OP-I18N-1 geschärft (UI-Sprachen + Chinesisch + Ukrainisch, mehrsprachige Belegschaft); OP-AI-3 erweitert (Audio-Notizen + Translator + Domänen-Anpassung an taktano-/Glossar-Vokabular); OP-BRAND-2 neu („Automotivo" defensiv als Marke schützen — mit Proaktiv-Flagging der Rechts-Risiken, kein Rechtsrat); OP-R1-4 neu (rückwirkende Abwesenheiten Urlaub/Krank trotz erfasster Arbeit → flaggen/blocken/Audit + Abgrenzung gegen Datev/Lohnbuchhaltung; Flagging Arbeitszeit-/DSGVO-Art.9-/eAU-Pflichten); OP-ONBOARD-1 neu (In-App-Tutorials + sukzessive Feature-Freischaltung/progressive disclosure; Mechanik Feature-Flags je Tenant/Rolle/Onboarding-Fortschritt offen); OP-CAL-1 neu (Feiertage je Bundesland vorschlagen — Betriebskalender, Tenant-Region, Vorschlag nicht hart, Schließtage→Scheduler/Kapazität; Abgrenzung Datev); OP-STAGE-1 neu (mehrere Stages/Release-Stände dev→staging→prod via CF Worker-Environments/Fly/Gradual Deployments; DSGVO: Non-Prod ohne PII); OP-R7-12 (Auftragsaufnahme/Annahme; Phase per Rückfrage geklärt = Annahme) dann verallgemeinert auf „immer Kommentare erlauben — je mit Foto/Voice" (durchgängige Kommentar-Fähigkeit als Verlauf, R4 + OP-AI-3); OP-R7-13 neu (Umgang mit „freien Aufträgen" — Begriff zu schärfen: freier Prozess/ad-hoc vs. freier Termin vs. ohne Kunde/Fahrzeug); OP-R3-4 neu (Vorbedingungen je Auftrag/Schritt erfassen + rechtzeitig veranlassen — z. B. Ersatzteil bestellen; verallgemeinert OP-R3-2; Startschranke+Gate); OP-R7-14 (Feststellung: Anzahlungen werden nicht erfasst → Abgrenzung SevDesk, offen: operatives „Anzahlung erhalten?"-Gate); OP-R7-15 neu (Prozess-Vorschau bei der Auftragserfassung + auftragslokal Schritte hinzufügen/kommentieren; Instanz ≠ Katalog, Materialisierung E-CRUD-2); OP-BACKOFFICE-1 neu (Backlog der Vorarbeiten/Vorbedingungen für Back-Office/Vorgesetzte, dispositive Arbeitsliste, Datenquelle OP-R3-4); TODO „Umparken checken" in HANDOFF §4 geparkt (Verifikation Umpark-Funktion, noch nicht abgearbeitet); OP-QS-3 neu (während Bearbeitung verursachte Schäden, z. B. Clip bricht → Nacharbeit-Kette: Schaden→Ersatzteil bestellen [OP-R3-4/Backlog]→bei Eintreffen Einbau planen→behoben); OP-R7-16 neu (Fahrzeug-Angaben bei der Annahme: Beschreibung + ein paar Fotos + FIN/Fahrgestellnummer Pflicht + Kennzeichen optional; am Auftrag §4.9; DSGVO-Flag); OP-R6-2 neu (Fahrzeug-Visualisierung Silhouette/3D-drehbar/AR-vorbereiten + Besonderheiten-Wissensbasis je Modell aus dem Learning, Bsp. 911 ab GT mit Leichtbauscheiben; Cross-Tenant als kostenpflichtiges Add-on — Flag Tenant-Isolation/Opt-in/Anonymisierung), dann erweitert: Silhouette schon bei der Annahme zum Markieren von Arbeitsbereichen am Fahrzeug (z. B. „länger gezogene Ladekante"; Zonen verknüpfen Umfang↔Ort; Annahme-Erststufe 2D+Zonen); OP-R2-3 neu (Buchten-Gantt aus Planung in die Belegung verschieben + mehr Detail je Bucht-Block; freie Slots/Ausfall-Bänder; True North 2+3); OP-OPT-8 neu (Zeitlage-Präferenz je Leistung/Teilschritt asap vs. jit/spät — Bsp. Folierung früh, Aufbereitung spät damit nicht einstaubt; Soft-Goal im Scheduler, jit reduziert Reserve); OP-DATE-1 neu (konsistente kontext-bewusste Datums-/Zeit-Darstellung: Wochentag+Zeit+Datum+relativ „heute/morgen/nächste Woche Di"; zentraler formatZeitpunkt-Helfer, distanz-abhängig, Tooltip=absolut, locale-aware; Ansatz entworfen + zur Diskussion); Bugfix neu angelegte Teilschritte unsichtbar (Version 0.31.1→0.31.2 PATCH): Ursache Teilschritte-Liste nur aus Leistungen abgeleitet → neuer/unzugeordneter Teilschritt nie gezeigt; Fix: Server liefert vollen teilschritteKatalog, Client seedet daraus (Verifikation server typecheck+test:prozess + client ng build grün); OP-R8-13 neu (Konfliktvermeidungs-Hebel Bereitschaft / genehmigte Wunschfrei heranziehen; Bausteine+Pönale-Reihung aus OP-OPT-7, neu als quantifizierte Hebel im Konflikt-Wizard; Wunschfrei ziehen = MA-Zustimmung sensibel); OP-R3-5 neu (Reihenfolge der Prozessschritte hart durchsetzen, kein Überspringen von Pflicht-Schritten; Abgrenzung zu optional-Skip/frei/Klärfall — OP-DOCS-9-Konsistenz); OP-R3-6 neu (Kommentare/besondere Hinweise je Teilschritt+Leistung auf Katalog-Ebene; ≠ auftragslokal/Modell-Besonderheit); OP-AI-5 neu (KI-Meeting-Minutes: Transkript→Zusammenfassung in taktano-Lingo; docs/betrieb/meetings/); OP-FIND-1 neu (Owner Dominik & Julian: häufige Sonderwünsche + Auffindbarkeit via Synonyme/Nutzen, später Chatbot); OP-COST-5 neu (Roadmap: Rentabilitätsberechnung & Prognosen/Ziel-Tracking — „wieviele Aufträge bis Ziel?"; Umsatz×Auslastung×Ziel→Forecast; noch auszuarbeiten); OP-R7-17 neu (Rabatte/Nachlässe auf dem Preismodell, Wirkung auf Marge, Audit/Berechtigung; Rechnung bleibt SevDesk); OP-R1-5 neu (Arbeitszeitkonten & Abfeiern + „Auftrag fertigstellen trotz Schichtende" — Überstunde jetzt ⇄ Abfeiern später; Abgrenzung Datev, Flag ArbZG-Grenzen); OP-PM-3 neu + docs/betrieb/Roadmap.md (lebend): OPs nach Dringlichkeit (🔴/🟠/🟢) + rollierender 4-Wochen-Plan (Entwurf, PO bestätigt Priorität interaktiv); in README-Landkarte registriert; OP-R7-7 geschärft (Customer Self-Service per Web-Portal + WhatsApp — Status/Freigaben/Kommunikation; DSGVO/WhatsApp-Flag; in Roadmap aufgenommen); OP-PM-3 PO-Priorisierung bestätigt (Fokus 4 Wochen = Annahme-Flow meisterhaft; In-App-Feedback W2 vorgezogen) + E-R3-5 entschieden (nur Pflicht unüberspringbar, optionale bleiben) + OP-R3-5 Konsistenz-Check Bestand (bestehende TeilschrittInstanz auf Status-Konsistenz prüfen — idempotente Migration + Invarianten-Check/Klärfall); OP-DOCS-11 neu (OP-Verwaltung Single Source + Query-Views: GitHub Issues vs. Markdown vs. Hybrid; Empfehlung Hybrid = ein File je OP + generierte Views, bewahrt Everything-as-Code); OP-Konsolidierung (Audit: alle Session-OPs in §11+§4, keine Doppel-IDs; check-doc-consistency+smooth-logs ohne neue Befunde, 11 Warnungen = Alt-Bestand Session-IDs 37–47; Konsolidierter OP-Index in Roadmap.md ergänzt). Doku: phase.ts, occupancy.component.ts, CLAUDE.md, Lastenheft.md (§5.1/§8/§11.8), Lesepfade.md, design/{COMPONENTS,WORKSPACES}.md, HANDOFF (§4), CHANGELOG, Timesheet. (06-29) PR #257 erstellt + main gemergt (#254/#255/#256; Konflikt nur version.ts → 0.32.1) + CodeRabbit-Review-Fixes (Tooltip „Vorbereitung", addStep→angeboteneTeilschritte, „QS"→„Quality-Check" in Prosa, PR-Link im CHANGELOG, Roadmap-Zielgruppe; HANDOFF-Reorg bewusst nach OP-DOCS-11 verschoben). Verifikation nach Merge+Fixes: server typecheck+test:prozess + client ng build grün. |
| 2026-06-28-competitive-analysis-market-entry | 2026-06-28 ~09:00 | 2026-06-28 ~10:05 | ~1.0 h | Mitbewerbsanalyse + Marktabschätzung/Markteintrittsstrategie als neue Produkt-Docs (Branch claude/competitive-analysis-market-entry-vb79s4, OP-COMPETE-1 + OP-MARKET-1, reine Doku → kein Bump). Nutzer „ergänze Mitbewerbsanalyse und Marktabschätzung/Markteintrittsstrategie in die docs". Zwei neue Business/Management-Docs (pyramidal, Mermaid, alle Zahlen als Annahme + „zu validieren"): produkt/Wettbewerbsanalyse.md (4-Kategorien-Landschaft inkl. Status-quo, Differenzierungsmatrix Burggraben = Domänenmodell + echte Taktung, SWOT) + produkt/Markt-und-Markteintritt.md (TAM/SAM/SOM-Rechenweg + Trichter, Beachhead = Folierer DE, Go-to-Market-Gantt 4 Phasen + 2 Kanäle, Pricing-Hypothese, Compliance als Kaufanlass). Entscheidungen: zwei eigene Docs (je OP-ID); Gerüst mit markierten Annahmen statt erfundener Präzision (Validierung via Pilot/Verband vor Vertriebsinvestition); kein Version-Bump. Registriert in README/Lesepfade(§Fach)/IDs/HANDOFF(§2+§4); RISK-13 (Wettbewerber kopiert Nische) + RISK-14 (Markt zu klein/SOM überschätzt); Glossar +4 (TAM/SAM/SOM·Beachhead·ARPA·Go-to-Market, 50→54, npm run glossar). Verifikation: 3 Mermaid via MCP valid:true; glossar-Gen grün. Kein Code/Solver/Token-Change. Doku: produkt/Wettbewerbsanalyse.md+produkt/Markt-und-Markteintritt.md (neu), produkt/Produkt-und-Marketing.md, README, Lesepfade, IDs, Risikoregister, glossar.mjs, Glossar.md (gen.), HANDOFF, CHANGELOG, Timesheet. Nachtrag (Nutzer): Team-Seite docs-site/src/pages/team.js — namenloses Mitglied „Mitarbeiter von Dominik" als Lucas Tiede (Initialen LT) benannt, To-dos bereinigt; static/img/team/README.md Beispiel ergänzt (Doku-Site-only). |
| 2026-06-28-op-register | 2026-06-28 ~12:55 | 2026-06-28 ~13:30 | ~0.6 h | Doku: „OP- & Entscheidungs-Register" (navigierbarer Gesamt-Index) (Branch claude/op-register, Doku-only → kein Bump). Nutzer: explizite Seite mit OP + Entscheidungspunkten, keine Duplikate, verlinken. Neu docs/konventionen/Register.md: ein Einstieg zu allen OP-* (thematisch gruppiert; Modul-Familien OP-R*-n als Sammelzeile) + allen Entscheidungen/Constraints (G·A·S·UC·E), je ID · Kurz-Gloss · Link. Nicht-Duplikat-Vertrag: Status/Detail → HANDOFF §4, ID→Owning-Doc → IDs.md, G/A/S/UC → Lastenheft §2/§3/§9/§10, E-* → Owning-Docs. Quervernetzt: README (Lesepfad + konventionen-Tabelle) + IDs.md (Kopf-Hinweis). Entscheidung: Register = Navigations-Index, keine Status-Pflege; Modul-OP-Familien gruppiert statt ~50 Sub-IDs (Drift-arm). Reine Doku, kein Code. Verifikation: Doku-interne Links existieren (geprüft); doc-consistency ohne neue Befunde. Doku: konventionen/Register.md (neu), README.md, konventionen/IDs.md, CHANGELOG, Timesheet. |
| 2026-06-28-klaerfaelle-workspace | 2026-06-28 ~12:10 | 2026-06-28 ~12:55 | ~0.75 h | OP-UX-2 / U8: Klärfälle-Workspace (Störung-Achse: Sicht + Zähler) (Branch claude/klaerfaelle-workspace, Version 0.31.0 → 0.32.0/Build auto, MINOR — neues Feature). Nutzer: Folge aus U7 — symmetrische Klärfall-Sicht/-Zähler analog Konflikte. Gebaut (reiner Client-Pfad): neuer Workspace „Klärfälle" (pages/klaerfaelle.component.ts, Cluster Steuerung nach Konflikte, Token --tk-ws-klaerfaelle Amber/Gold #f59e0b, Glyph ⚠, Route /klaerfaelle) — listet Aufträge mit aktivem klaerfall (svc.klaerfaelle()), dringlichkeits-sortiert (eskaliert zuerst, dann längst-ungeklärt via klaerfall.seit); je Zeile Auftragsnr · ★ · ⚠ eskaliert · Grund · „seit … · X offen"; Klick → geteiltes auftrag-detail-panel (bestehendes „✓ Klärfall lösen", nichts dupliziert). Service klaerfaelle/klaerfaelleCount → Nav-Badge. Token in tokens.json + build.mjs-NAME-Map → npm run tokens. Entscheidung (Sign-off): Signaturfarbe Amber/Gold (nicht rot) — rot bleibt Termin-Achse (Konflikte); inline Klärfall-Pille bleibt rot. Beide Warn-Achsen haben jetzt Liste + Badge. Kein Server/Solver/Schema (Klärfall-Modell besteht, OP-R3-1). Verifikation: ng build + No-Hex + persistence:check + Token-Staleness grün. Doku: architektur/Operative-Durchgaengigkeit.md (OP-UX-2/U8 ✅), design/COMPONENTS.md+WORKSPACES.md+DESIGN_TOKENS.md, konventionen/IDs.md, HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-team-lucas-tiede | 2026-06-28 ~12:00 | 2026-06-28 ~12:10 | ~0.2 h | Team-Seite: Platzhalter „Mitarbeiter von Dominik" → „Lucas Tiede" (Branch claude/team-lucas-tiede, Docs-Site-only → kein Bump). Nutzer-Wunsch. In docs-site/src/pages/team.js Name/Initialen (LT)/Foto-Pfad-Hinweis gesetzt, To-do auf „Rolle & Titel schärfen" reduziert, erledigten Team-To-do-Punkt entfernt. Reine Inhaltsänderung, kein Code/Token/Schema. Doku: docs-site/src/pages/team.js, CHANGELOG, Timesheet. |
| 2026-06-28-warn-achsen-entwirren | 2026-06-28 ~11:20 | 2026-06-28 ~12:00 | ~0.7 h | OP-UX-1 / U7: Zwei rote Warnsysteme entwirrt (Störung-Achse ⚠ vs. Termin-Achse) (Branch claude/warn-achsen-entwirren, Version 0.30.0 → 0.31.0/Build auto, MINOR — UX-Optimierung). Nutzer: die zwei roten Warnsysteme entwirren (Flow-Audit-Backlog). Befund: auf der Tafel kollidierten zwei rote Signale gleicher Optik (eine Zeile: −3T über-Pille + ⚡ überfällig-Flag + ⚠ Klärfall-Flag = drei rote Pillen, zwei für dieselbe Termin-Bedingung). Gebaut (tafel.component.ts): zwei getrennte Achsen — Störung-Achse = Klärfall ⚠ (rot) als einziges rotes Flag; Termin-Achse = Reserve-Pille mit Schweregrad (≥0 grün · −1…−3T amber/Achtung · ≤−4T rot/Warnung — 4-T-Schwelle wie Konflikte-Triage conflicts.component). Redundantes ⚡ überfällig-Flag entfällt (Reserve-Pille trägt die Termin-Achse quantifiziert + Tooltip). Entscheidungen: Termin-Achse quantifiziert statt rotes Icon; Schweregrad-Farbe (Amber=Achtung/Rot=Warnung) an Konflikte-Schwelle angeglichen; ⚠ reserviert für Störung-Achse. Folge-Idee (offen): symmetrische Klärfall-Sicht/-Zähler. Verifikation: ng build (Template-Typecheck) + No-Hex grün. Reiner Client-Pfad, kein Server/Solver/Schema. Doku: architektur/Operative-Durchgaengigkeit.md (U7 ✅ + Backlog), design/COMPONENTS.md (Warn-Achsen-Pattern), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-annahme-zuletzt-update | 2026-06-28 ~10:25 | 2026-06-28 ~11:20 | ~0.9 h | OP-UX-1 / U5: „Zuletzt angenommen"-Panel + Kunde/CRM nachtragen (Branch claude/annahme-zuletzt-update, Version 0.29.0 → 0.30.0/Build auto, MINOR). Nutzer: rechts die zuletzt angenommenen Fahrzeuge zeigen, falls nachtragen. Gebaut: Server-Message auftrag.update ({id, kunde}, nur R5-v1-Felder, Name Pflicht) + Audit auftrag.aktualisiert (OP-AUDIT-1, neuer per-Conn connEmail-Actor) + Chronik + Broadcast; Client: Annahme zweispaltig, rechts „Zuletzt angenommen" (letzte ~6, neueste zuerst via AU-<seq>), Inline-„✎ nachtragen" Kunde/CRM → updateAuftragKunde + Toast. Entscheidungen (Sign-off): Kunde/CRM nachbearbeitbar (neue Aktion, eng auf R5-v1); Recency via AU-<seq>. Verifikation: Server tsc+operativ + ng build + No-Hex + persistence:check grün. ➡ OP-UX-1 inkl. aller Annahme-Slices komplett (U1–U6). Kein Solver-Redeploy/Schema. Doku: architektur/Operative-Durchgaengigkeit.md (U5 ✅), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-annahme-reopt | 2026-06-28 ~10:00 | 2026-06-28 ~10:25 | ~0.4 h | OP-UX-1 / U6: Reopt bei Annahme (Branch claude/annahme-reopt, Version 0.28.0 → 0.29.0/Build auto, MINOR). Nutzer-Sign-off: Annahme stößt globale Reopt an. auftrag.create ist jetzt ein REOPT_EVENT (wie liefern/starten/…) → nach Anlage automatisch globaler CP-SAT-Reopt (aktualisiereVorschlaegeAuto, TS-Fallback) → neuer Auftrag optimal eingeplant, Ergebnis als Idee/Vorschlag (Propose-not-execute, §7); Dry-Run auftrag.pruefen löst keinen Reopt aus. Solver-Frage damit vollständig beantwortet. Entscheidung: bestehendes Event-Reopt-Muster wiederverwendet (kein neuer Pfad/Auto-Apply). Verifikation: Server tsc+operativ grün. Einzeiler, kein Solver-Redeploy/Schema. Doku: architektur/Operative-Durchgaengigkeit.md (U6 ✅), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-annahme-preis-vorschau | 2026-06-28 ~08:30 | 2026-06-28 ~10:00 | ~1.5 h | OP-UX-1 / U4: Annahme-Vorschau (Preis & Reserve) + „Wirklich anlegen?"-Bestätigung (Branch claude/annahme-preis-vorschau, Version 0.27.0 → 0.28.0/Build auto, MINOR). Nutzer: vor dem Anlegen Preis+Reserve zeigen + bestätigen (kostenpflichtig); Frage Solver. Antwort: Annahme-Prüfung = TS-Scheduler (angebot, synchron); CP-SAT = globale Optimierung (Reopt-bei-Annahme = U6). Gebaut: Preismodell OP-R7-6-Erstschnitt (Leistung.grundpreisCent Seed + auftragspreisCent pure + test:preis + CI; Preis-Snapshot Auftrag.preisCent); Dry-Run auftrag.pruefen/auftrag.pruefen.result (Machbarkeit+Reserve+Preis, kein Anlegen); Annahme zweistufig (Prüfen → Bestätigungs-Dialog mit Preis/Reserve → auftrag.create). Entscheidungen (Sign-off): einfaches Preismodell jetzt; Cent-Integer; echter Dry-Run. Verifikation: Server tsc+test:preis+operativ+test:running-process+spike + ng build + No-Hex + persistence:check + ci.yml strict-YAML grün. Kein Solver-Redeploy. Doku: architektur/Operative-Durchgaengigkeit.md (U4 ✅), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-optimizer-docs-rationale | 2026-06-28 ~08:30 | 2026-06-28 ~09:00 | ~0.5 h | Doku: Problematik der Optimierung + Warum mehrere Optimierer (Branch claude/optimizer-docs-rationale-ypqmcl, reine Doku → kein Bump). Nutzer „beschreibe in der Doku die Problematik bei der Optimierung, auch warum es die unterschiedlichen Optimierer gibt". docs/fachlich/solver.md um zwei vorangestellte, pyramidale Abschnitte erweitert (Minto: Kernaussage zuerst): §1 Die Problematik (NP-schwer/Job-Shop, kombinatorische Explosion N!, widersprüchliche Ziele §6.2, gekoppelte harte Constraints §6.1, Dynamik + Worker-Laufzeit) und §2 Warum es mehrere Optimierer gibt (Konflikt-Dreieck Optimalität × Antwortzeit × Worker-Lauffähigkeit → Kaskade Greedy → TS-Decoder → CP-SAT mit Fallback, Vergleichstabelle + Dispatch-Mermaid „nur einer reicht nicht"). Folgeabschnitte 1→3 … 5→7 umnummeriert; Querverweise (§5 Demo, §6 CP-SAT, §7 Leitstand) eingezogen. Mermaid via MCP validiert (valid:true). doc-consistency nur Vorbestands-Timesheet-Dubletten. Kein Code/Solver/Token-Change. Doku: docs/fachlich/solver.md, CHANGELOG, Timesheet. |
| 2026-06-28-op-ux-empty-states | 2026-06-28 ~07:15 | 2026-06-28 ~08:30 | ~1.25 h | Einheitliche Leere-Zustände (app-empty-state) (Branch claude/op-ux-empty-states, Version 0.26.0 → 0.27.0/Build auto, MINOR — neue wiederverwendbare Komponente + UI-Konsistenz). Nutzer „inkonsistente Leere-Zustände vereinheitlichen" (Flow-Audit-Backlog). Inventur: 25 ad-hoc „Keine …"-Platzhalter (2 reich/20 dünn). Eine Standalone-Komponente empty-state.component.ts (Signal-Inputs + CTA-<ng-content>), 3 Varianten card/bare/inline; alle ~12 Workspaces migriert. CTAs wo der Flow es trägt (Tafel/Aufträge/Überblick → /annahme, Vorschläge → /planning, Annahme → /processes); Erfolgs-/Auswahl-Prompts CTA-frei. Entscheidungen (Sign-off): Shared-Komponente + alle migrieren; CTAs ergänzen. Nur --tk-*. Verifikation: ng build + No-Hex grün. Reiner Client + Doku, keine Token-/Schema-/Server-/Solver-Änderung. Doku: design/COMPONENTS.md (## Empty state), HANDOFF (§2), CHANGELOG, Timesheet. |
| 2026-06-28-op-ux-u3b-annahme-feedback | 2026-06-28 ~06:20 | 2026-06-28 ~07:15 | ~0.9 h | OP-UX-1 / U3b: Machbarkeits-Rückmeldung der Annahme (Branch claude/op-ux-u3b-annahme-feedback, Version 0.25.0 → 0.26.0/Build auto, MINOR — neues Feature). Nutzer „Infeasibility-Rückmeldung" (Folge-Punkt aus U3). auftrag.create war fire-and-forget → kein Feedback bei nicht machbarem Plan. Neue ServerMsg auftrag.create.result (per-Connection conn.send in onMessage): abgelehnt mit konkretem Grund (ScheduleResult.reason — kein qualifizierter MA/keine Bucht — bzw. Zeit-Validierung), angenommen mit Auftragsnummer + Termin-Warnung wenn frühestens nach Wunsch-Abholung fertig (earliest.abholbereit > abholtermin). Client auftragCreateResult-Signal → Annahme-Workspace: Spinner „prüft …", Erfolg-Toast + Reset bzw. Grund inline (rot) + Toast, 8-s-Sicherheitsnetz. Entscheidungen: per-Connection statt Broadcast; reason durchreichen statt generisch; Deadline-Miss bleibt nicht-blockierend (Warnung), nur strukturelle Infeasibility lehnt ab. Verifikation: Server tsc+operativ+test:running-process + ng build + No-Hex grün. Kein Schema/Solver-Redeploy. ➡ OP-UX-1 inkl. U3b komplett. Doku: architektur/Operative-Durchgaengigkeit.md (U3b ✅), HANDOFF (§4), CHANGELOG, Timesheet. |
| 2026-06-28-op-ux-u3-annahme | 2026-06-28 ~05:05 | 2026-06-28 ~06:20 | ~1.25 h | OP-UX-1 / U3: Annahme „Auto kommt → Auftrag anlegen" → OP-UX-1 vollständig (Branch claude/op-ux-u3-annahme, Version 0.24.0 → 0.25.0/Build auto, MINOR — neues Feature). Nutzer „u3". Vorab-Entscheidung (Sign-off): E-UX-3 = eigener Annahme-Workspace. Neuer Workspace „Annahme" (pages/annahme.component.ts, Route /annahme, erster Operativ-Eintrag = Flow-Start, Token --tk-ws-annahme neu, Glyph ⊕): Formular Kunde (Name + CRM-Link) · Leistung-Picker (aktiver Katalog) · Güteklasse/Anspruch · Anlieferung + Wunsch-Abholung (datetime-local) · Termin-Härte → bestehender auftrag.create (Machbarkeit Angebotsmodus). Kunde v1 neu im Datenmodell (R5-v1, war spezifiziert/ungebaut): Auftrag.kunde={name,crmLink?} durch materialisiereAuftrag + Handler + toAuftragDTO + Client-DTO (optional, keine Migration). Ersetzt die Demo-Buttons als realer Eingang. Offen (Folge): Infeasibility-Rückmeldung im Formular. ➡ OP-UX-1 vollständig (U1–U3, E-UX-1…3) — Flow von Vordertür bis Abholung durchgängig. Verifikation: Server tsc+operativ+replan+test:teilplan+test:running-process+test:archiv + ng build + No-Hex + tokens-Staleness grün. Kein Solver-Redeploy. Doku: architektur/Operative-Durchgaengigkeit.md (U3 ✅), design/DESIGN_TOKENS.md, HANDOFF (§2+§4), CHANGELOG, Timesheet. |
| 2026-06-28-op-ux-u2-meine-arbeit | 2026-06-28 ~04:05 | 2026-06-28 ~05:05 | ~1.0 h | OP-UX-1 / U2: Werker-Sicht „Meine Arbeit" (Branch claude/op-ux-u2-meine-arbeit, Version 0.23.0 → 0.24.0/Build auto, MINOR — neues Feature). Nutzer „dann U2". Vorab-Entscheidungen (Sign-off): E-UX-2 = eigener Workspace + Mitarbeiter-Picker (Schichtterminal; echtes QR/Login = R1-Future). Neuer touch-Workspace (pages/meine-arbeit.component.ts, Route /meine-arbeit, Cluster Operativ, Token --tk-ws-werker neu, Glyph ⬣): Picker → nur seine offenen/laufenden Schritte (produktiv + 🎓 Helfer), laufend zuerst, Offen-Badge; große Aktionen ⏸ Pause / ▶ Weiter / ✓ Fertig über teilschrittAktion; Doku-/Foto-Pflicht (OP-R4-3) via geteiltes Detail-Panel (kein zweites Gate). Reine Projektion (kein Schema/Server/Solver). Erste Hand-Sicht statt nur Leitstand. Verifikation: ng build + No-Hex + tokens-Staleness + Server tsc grün. Kein Solver-Redeploy. Offen: U3 Annahme-Maske (E-UX-3). Doku: architektur/Operative-Durchgaengigkeit.md (U2 ✅), HANDOFF (§2+§4), CHANGELOG, Timesheet. |
| 2026-06-28-glossary-classification-filtering | 2026-06-28 ~05:05 | 2026-06-28 ~06:05 | ~1.0 h | OP-DOCS-10 Slice 2: Glossar-Klassifikation (Art × Ebene) + interaktiver Filter; Startseite Lesepfade/Mouse-over/Glossar; Sidebar-Rubrik umbenannt (Branch claude/glossary-classification-filtering-vpb0ub, Doku-Site-only → kein Bump). Drei Nutzer-Wünsche: (1) Begriffe nach fachlich/technisch × Grundprinzip/erweitert klassifizieren + filterbar; (2) Lesepfade nach Zielgruppe + Mouse-over/Glossar auf die Startseite; (3) „Betrieb · Compliance · Governance" → „Governance · Compliance". Single-Source glossar.mjs um art/ebene (+ ART/EBENE) erweitert (alle 50 klassifiziert: Fachlich 20 · Technisch 30); Generator gruppiert in 4 Rubriken (Badges + Anzahl-Matrix); neues Client-Modul glossarFilter.js (Chips Art × Ebene + Volltext, datengetrieben, kein Hex); index.js Lesepfade-Button + Mouse-over/Glossar-Absatz; Rubrik in allen kanonischen Quellen umbenannt. Verifikation: npm run build grün; Playwright gegen den Build (Filter „Technisch"→30, „Technisch+Grund"→6, Suche „makespan"→4); Startseite + Label im Build geprüft. Kein Code-/Solver-Change. Doku: glossar.mjs, gen-glossar.mjs, Glossar.md (gen.), glossarFilter.js, docusaurus.config.js, custom.css, index.js, _category_.json, docs/README.md, betrieb/meetings/README.md, CLAUDE.md, HANDOFF, CHANGELOG, Timesheet. |
| 2026-06-27-op-ux-1-tafel | 2026-06-28 ~02:35 | 2026-06-28 ~04:05 | ~1.5 h | OP-UX-1 / U1: Werkstatt-Tafel — durchgängige Auftragszeile (Branch claude/d5-1-implementation-qg0myg, Version 0.22.0 → 0.23.0/Build auto, MINOR — neues Feature). Flow-Audit „ein Auto kommt, was passiert dann? Meisterwerk?" (3 Explore-Agenten) → Befund: Cockpit nahe am Meisterwerk, aber Alltags-Fakten über drei Seiten verstreut, keine Werker-Sicht, keine Annahme-Maske → als OP-UX-1 aufgenommen + Design-Doc (architektur/Operative-Durchgaengigkeit.md), Slice U1 gebaut. Neuer Workspace „Tafel" (pages/tafel.component.ts, Route /tafel, Cluster Überblick, Token --tk-ws-tafel neu in tokens.json→npm run tokens, Glyph ▤): je aktivem Auftrag eine Zeile mit Status·Phase·aktuellem Schritt (wer·Bucht)·📍Standort·Fortschritt·Reserve·Warn-Flags; dringlichkeits-sortiert; Klick → geteiltes Detail-Panel. Reine Projektion des Live-States (S-2), kein neues Schema, keine Server-/Solver-Änderung. Beantwortet True-North-Frage 2. E-UX-1 ✅ = eigener Workspace. Offen: U2 Werker-Sicht (E-UX-2), U3 Annahme-Maske (E-UX-3). Verifikation: ng build + No-Hex + tokens-Staleness grün; doc-consistency nur Vorbestands-Dubletten. Kein Solver-Redeploy. Doku: architektur/Operative-Durchgaengigkeit.md (neu), README, IDs, HANDOFF (§2+§4), CHANGELOG, Timesheet. |
| 2026-06-27-op-crud-lifecycle | 2026-06-27 ~21:40 | 2026-06-27 ~22:25 | ~0.7 h | Neuer OP-CRUD-1: Entitäten-Lebenszyklus (CRUD · Versionierung · Archiv statt Löschen · laufende Prozesse) (Branch claude/op-crud-lifecycle, reine Doku → kein Bump). Nutzer-Wunsch: CRUD aller Entitäten durchgehen — was versionieren, beim Löschen ggf. archivieren, laufende Prozesse nicht stören. Neuer Design-Doc docs/architektur/Entitaeten-Lebenszyklus.md: CRUD-Ist-Matrix (Lücken: Mitarbeiter-/Skill-Delete, Leistung/Teilschritt Create/Delete) · 3 Lösch-Klassen (archivieren/Lifecycle-Archiv/hart+Audit) · Versionierung via OP-AUDIT-1 (+ Katalog-Versionierung) · Running-process-Schutz (Materialisierung + Referenz-Guards + geordnete Übergabe) · Slices C1–C4 · ⮕ E-CRUD-1…4 (Sign-off offen). Registriert in HANDOFF §4 + README-Landkarte + IDs (OP→Doc). Kein Code — Umsetzung erst nach Sign-off. Kein Solver-Redeploy. Doku: architektur/Entitaeten-Lebenszyklus.md (neu), HANDOFF, README, IDs, CHANGELOG, Timesheet. |
¹ Stop = letzter Commit 00:06 + 30 min Nachlauf = 00:36 (deckt sich mit „~00:30" des Users); inkl. der projektbezogenen Klärung nach dem letzten Commit. Start = erster Commit 14:16 (Untergrenze, evtl. früher). Diese Session ist aus dem Rückblick herausgelöst (dort nicht mehr gezählt → kein Doppel).
² Stop = letzter Commit (Merge #144) 19:19 + 30 min Nachlauf = 19:49 (User schließt ~19:22 ab). Durchgängig gearbeitet: Commit-Cluster 07:58–19:19 belegt fortlaufende Aktivität (12 PRs gemergt), die Zwischenräume sind aktive Build-/Verifikations-Zeit (kein
1-h-Gap). Lange Session (~12 h) — konsistent mit den 06-16-/06-17-Tagen im Rückblick.
³ Neue Session (Abstand zu Session 1 ~21 min, < 1 h, aber eigener Auftrag). Start ~20:10 (erster Commit 20:12). Stop = letzter Commit ~20:40 + 30 min Nachlauf = ~21:10 (inkl. PR-Erstellung/Review). Durchgängiger Commit-Cluster 20:12–20:40.
⁴ Mehrere aktive Blöcke im selben Fenster, Pausen exkl. (User-Vorgabe): 06-22 21:10–~22:00 (OP-R1-1 Build A–E + Schicht-/Abwesenheits-Editor; parallel Light/Dark-Implementierung + PR #159; letzte Feature-Commits ~21:29 +30 min) + 06-23 05:15–~06:00 (main-Merge/Konflikt-Auflösungen, PR #160 gemergt, #159 zweifach auf neues
mainrebased + gemergt, Wrap-up/Doku). Der ~7-h-Leerlauf dazwischen zählt nicht (Σ ~1.6 h aktiv, nicht die Spanne). Start 21:10 = Stop Session 2 → keine Doppelzählung (die Feature-Commits ab 20:41 fallen ins Nachlauf-Fenster von Session 2). #159 (Light/Dark) und #160 (Mitarbeiter-CRUD) fielen ins selbe aktive Fenster → einmal gezählt, nicht addiert.⁵ Start = Session-Beginn ~07:25 (Orientierung/Exploration). Stop = letzte Feature-/Doku-Arbeit + ~30 min Nachlauf (Doku/Verifikation). Durchgängige Build-/Test-Aktivität (Server-Tests, Client-Build, No-Hex-Gate), keine >1-h-Lücke.
⁶ Nur der nicht-überlappende Block gezählt (Wall-Clock, kein Doppel): aktiver Block 06-23 ~12:50–16:10 (Strategie-/Options-Diskussion Auth/Billing/EU + Entscheidungen festhalten + Way-of-Working #164–#167) — durchgängig aktiv (lange Analyse-Konversation, keine >1-h-Lücke) + ~30 min Nachlauf (Wrap-up/Timesheet). Nicht erneut addiert: der 06-22-Abend-Build (#153/#158/#155/#156/#152, ~21:14–22:16) und die „B"-Merges + #161 am 06-23 ~05:45–06:05 fielen ins Wall-Clock-Fenster paralleler Sessions (Session 2/3, andere Claude-Instanz am selben Tag) → dort bereits erfasst; hier nur als Schwerpunkt gelistet (Untergrenze, kein Doppelzählen).
⁷ Merge #163 + Branch-Setup, dann mehrere Folge-Slices (OP-R1-2 #6 Verfügbarkeit · güteklassen- gewichtete + anteilige Helfer-XP · Niveau-Aufstieg-Vorschlag · neue OP-R3-3 Unterbrechung/Übernahme), #170 erstellt+gemergt. Überwiegend Server-Pfad + Tests + Doku; durchgängige Build-/Test-Aktivität.
⁸ Nur der nicht-überlappende Wrap-up-Tail gezählt (kein Doppel): Feature-/Build-Fenster 06-23 ~14:55–16:40 (Explore → Tooltip+Fly-in → Aktions-Hub → Doku) fiel ins Wall-Clock paralleler Sessions (Session 5/6, andere Claude-Instanzen am selben Tag, bis 16:40 bereits erfasst) → dort gezählt, hier nur als Schwerpunkt; zusätzlich nur PR/Merge/Doku-Wrap-up + die Folge-Verdrahtung #172 (geteiltes Panel/Aufträge) ~16:40–17:25 (~0.8 h inkl. Nachlauf). Untergrenze, konsistent mit ⁶/⁷.
⁹ Parallel-Branch zu Session 4, nur nicht-überlappender Block gezählt (Wall-Clock, kein Doppel): anderer Feature-Branch am gleichen 06-23-Morgen. Start ~06:30 (geschätzt, vor dem ersten Edit), Stop = letzter Commit ~07:10 + 30 min Nachlauf = ~07:40. Reine Erfassung/Viz-Scheibe (Solver bewusst ausgeklammert → OP-OPT-7); inkl. Klärung Scope-Frage + drei nachgereichter Folge-OPs/ Guidelines. Fenster überlappt mit Session 4 (07:25–07:40) → nur der nicht-überlappende Teil 06:30–07:25 ≈ 0.9 h zählt (Methodik wie ⁶/⁸).
¹⁰ Kleiner Client-Slice; Wall-Clock überlappt das bereits gezählte Feature-Fenster von Session 7 (bis ~17:25) → nur der nicht-überlappende Tail ~17:25–17:50 (~0.4 h inkl. Nachlauf) zählt (Methodik wie ⁶/⁸/⁹). Start ~17:05 (Exploration/Scope-Frage), Stop = Doku-Commit + ~30 min Nachlauf.
¹¹ Durchgehender Feature-Build, kein Parallel-Overlap (Session 9 endete ~17:50). Start ~17:50 (direkt nach dem #174-Merge/Wrap-up), Stop = Feature-/Doku-Commit + ~30 min Nachlauf (PR/Review). Substanzielles Feature (Server-Persistenz + Scheduler-Verdrahtung + neuer Client-Workspace + Design-Token + Self-Test + Doku) über die Spanne durchgängig aktiv.
¹² Direkte Fortsetzung von Session 10 (back-to-back #175→#176 in derselben Agent-Session): #175 ~18:31 gemergt, #176-Bau ~18:31–~18:49 + Nachlauf. Da Session 10 großzügig bis ~18:50 verbucht wurde, zählt hier nur der inkrementelle, nicht-überlappende Teil (~0.5 h inkl. Nachlauf).
¹³ Fortsetzung derselben Agent-Session (#176→#177). #176 ~19:27 gemergt, #177-Bau ~19:27–~20:22
- Nachlauf. Großes Feature (Leistungs-Persistenz + Handler + Tab-Editor + Doku) durchgängig aktiv; kein Parallel-Overlap.
¹⁴ Fortsetzung derselben Agent-Session (#177→#178), inkl. der „Was ist Übernahme-Durchsetzung"- Klärung + Explore-Mapping der Scheduler/Solver-Eingriffspunkte → Entscheidung server-seitig. #178-Bau ~20:30–~20:50 + Nachlauf. Überlappt das großzügig bis ~20:50 verbuchte Session-12-Fenster → nur der nicht-überlappende Teil (~0.5 h inkl. Nachlauf) zählt.
¹⁵ Fortsetzung derselben Agent-Session (#178→#179), neuer OP nach Nutzer-Wahl (OP-OPT-7). Großes Slice (Datenmodell + beide Solver + Editor + Tests + Doku) durchgängig aktiv; #179-Bau ~21:15–~21:32
- Nachlauf (Commit/Push/PR). Kein Parallel-Overlap.
¹⁶ Fortsetzung derselben Agent-Session (#179→#180), Slice 2 nach Nutzer-Bestätigung + Auslöser-Wahl („auch bei Zeitgewinn"). Großes Slice (Verfügbarkeits-Exklusion + Varianten-Solve + Hybrid-Vorschlag im DO + Test + Doku) durchgängig aktiv; #180-Bau ~21:45–~22:44 + Nachlauf (Commit/Push/PR/Merge). Kein Parallel-Overlap. Kein Solver-Redeploy (nur Worker).
¹⁷ Fortsetzung derselben Agent-Session (#180→#181) am Folgetag — Übernacht-Gap 06-23 ~22:50 → 06-24 ~06:20 nicht gezählt (Gap-Regel). Enthält #180-Finalisierung (Create/Merge/Cleanup) + OP-AUDIT-1-Recherche (Mapping; Bau folgt) + die Konventions-/Governance-Arbeit. Kein Parallel-Overlap.
¹⁸ Fortsetzung derselben Agent-Session (#181→#182), Design-only nach Nutzer-Wahl („erst Architektur festzurren"). Gap 06-24 ~07:10 → ~12:00 (Nutzer abwesend) nicht gezählt; reine Design-Doku-Arbeit (~0.4 h,
docs/Audit-Log.md). Kein Parallel-Overlap.¹⁹ Fortsetzung derselben Agent-Session (#182→#183), erster OP-AUDIT-1-Bau nach Nutzer-Wahl „Slice 1 bauen". Gap 06-24 ~12:25 → ~16:30 (Nutzer abwesend) nicht gezählt (Gap-Regel). Substanzielles Slice durchgängig aktiv (Explore-Mapping DO/Abwesenheits-Pfad → append-only Historie + Migration/ Backfill + pure Fairness-Ableitung + Client-Anzeige + Self-Test + Doku); Start ~16:30, Stop = letzter Commit + ~30 min Nachlauf (PR/Review). Kein Parallel-Overlap. Kein Solver-Redeploy.
²⁰ Fortsetzung derselben Agent-Session (#183→#184), aber am Folgetag: Übernacht-Gap 06-24 ~17:40 → 06-25 ~10:20 nicht gezählt (Gap-Regel). OP-AUDIT-1 D1-Verdrahtung (deploy-sicher/ dormant) + OP-COST-1-Erfassung; Start ~10:20, Stop = letzter Commit + ~30 min Nachlauf (Zeiten approximativ, lokal). Substanzielles Slice (Infra-Analyse → Schema + guarded Dual-Write/Backfill + Doku) durchgängig aktiv. Kein Parallel-Overlap, kein Solver-Redeploy.
²¹ Direkte Fortsetzung derselben Agent-Session (#184→#185), gleicher Tag 06-25 ohne Gap. Der #184-Merge war bereits durch den ~30-min-Nachlauf von Session 19 (s. ²⁰) abgedeckt → Session 20 zählt nur die neue Arbeit (D1-DB-Provisionierung via MCP + Migration/Verifikation + Doku-PR #185). Zeiten approximativ/lokal. Kein Parallel-Overlap, kein Solver-Redeploy.
²² Fortsetzung derselben Agent-Session (#185→#186), gleicher Tag 06-25. Start = Nutzer-„Go" nach dem Session-20-Stand (~12:00); ein etwaiger Gap davor ist nicht gezählt (Gap-Regel) — gezählt sind nur die ~0.4 h Aktivierungs-/Doku-Arbeit (zwei Vorbedingungen bestätigt → Binding gesetzt + Versions-/Doku- Pflege). Zeiten approximativ/lokal. Kein Parallel-Overlap, kein Solver-Redeploy.
²³ OP-COST-1 Design (#186→#187, gleicher Tag 06-25, kein Gap). Branch-Split (Nutzer-Wahl „split"): OP-COST-1 lief als eigener Branch
claude/op-cost-1-design, getrennt von der Audit-Binding-PR #186 — beide am 06-25 gemergt. Reine Doku-Arbeit (Code-Recherche Leistungsnachweis/Typen + neuesdocs/Kosten.md+ Doku-Pflege), kein Code/Solver-Redeploy.²⁴ Direkte Fortsetzung (#187→#188), gleicher Tag 06-25. Umfasst die Merge-Orchestrierung beider PRs (#186 live-deployed, #187 nach Rebase inkl. Konfliktauflösung der kumulativen Doku-Dateien) + die Erfassung + Design des neuen OP-R1-3 (
docs/Akademie.md). CD-Deploy von #186 lt. CI ~13:23 grün. Zeiten approximativ/lokal; reine Doku-/Orchestrierungs-Arbeit, kein Code/Solver-Redeploy.²⁵ Direkte Fortsetzung (#188→#189), gleicher Tag 06-25. Erster Code-Bau der OP-R1-3-Serie (Server-Modell + Migration v12 +
leistung.ts+ DO/DTO + Client-Editor/Karte + Self-Testtest:progression); Touch-Point-Recon via Explore-Subagent. Zeiten approximativ/lokal; kein Solver-Redeploy.²⁶ Direkte Fortsetzung (#189→#190), gleicher Tag 06-25. Slice 2 der OP-R1-3-Serie (begründete Beförderung + append-only Audit-Historie, Muster #183; Server-Modell/DO/DTO + Client-Begründungs- Dialog/Anzeige). Zeiten approximativ/lokal; kein Solver-Redeploy.
²⁷ Direkte Fortsetzung (#190→#191), gleicher Tag 06-25. Reine OP-Erfassung (zwei Gantt-OPs R8-17/18) + Merge-Orchestrierung beider offener Branches (#190 Slice 2, #191 Gantt-OPs) inkl. Auflösung der kumulativen Doku-Konflikte (CHANGELOG/HANDOFF — „beide behalten, neueste zuerst"). Zeiten approximativ/lokal; reine Doku-/Orchestrierungs-Arbeit, kein Code/Solver-Redeploy.
²⁸ Neuer Tag 06-26 (Übernacht-Gap nach Session 26 nicht gezählt, Gap-Regel). Erster Code-Bau der Gantt-OPs: Zoom (
scale-Signal + adaptive Achsen) + Echtzeit-Überfälligkeit; Befund, dass die JETZT- Linie bereits existierte (kein Doppelbau). Start ~08:00, Stop = letzte Verifikation + Doku + ~30 min Nachlauf. Reiner Client-Pfad, Verifikationng build/No-Hex/Typecheck. Zeiten approximativ/lokal.²⁹ Eigene Agent-Session 06-24 (Branch
claude/workflow-reservation-pickup-6m2q37, parallel zu den main-Sessions einer anderen Instanz). Reine Konversations-/Analyse-Session ohne Code-Commit; Start/Stop geschätzt (Stop = letzte Doku-Bearbeitung ~07:00 + ~30 min Nachlauf). Untergrenze; Angaben des Users haben Vorrang.³⁰ Direkte Fortsetzung (²⁹→Refactor) am 06-25/26: Flow-Refactor-Plan + PR 1–7 (OP-R3-1) + PR #194. Großer, durchgängiger Strang (Phase first-class Daten→DTO→UI · Annahme-Doku-Schritt · QS/Abholung/ Nachkontrolle · Klärfälle/Abbruch · Doku-Gates) inkl. zweier
main-Abgleiche/Merge-Konfliktauflösung + lokaler Verifikation (typecheck/Self-Tests/ng build/No-Hex + Laufzeit-Probe). Zeiten approximativ/lokal; kein Solver-Redeploy.³¹ Nach >1 h Gap zu Session 28 (Build ~09:00 → Merge-Orchestrierung ~12:00) → eigene Session (Gap-Regel). Nutzer-„update from main; then pr + merge":
origin/main-Merge inkl. Auflösung der Versions-Kollision mit der parallelen OP-COST-1-B1-PR #192 (beide hatten 0.5.0/Build 7 → Gantt auf 0.6.0/Build 8) + 3-Wege-Doku-Konflikte, PR #193 via MCP, Squash-Merge, Deploy-Verifikation. Zeiten approximativ/lokal; reine Orchestrierung/Doku, kein Code/Solver-Redeploy.³² Direkte Fortsetzung (#195→Bugfix) ohne Gap, 06-26. Nutzer-Report „linke Sidebar bei kleinem Fenster nicht scrollbar" → CSS-Flexbox-Fix (Nav = scrollbare
flex-1-Zone mitmin-h-0; Logo/Status fixiert). Build- + No-Hex-verifiziert; Browser-Augenschein offen (Playwright im Env nicht installiert). Zeiten approximativ/lokal; reiner Client-Pfad, kein Solver-Redeploy.
Rückblick (rekonstruiert aus Commit-Clustern; Untergrenze, ohne Nachlauf/Konversation)
| Datum | ~Aktiv | Schwerpunkt |
|---|---|---|
| 2026-06-14 | <0.5 h | Repo-Setup / Start |
| 2026-06-15 | ~3.9 h | Datenmodell · Scheduler-Grundlagen |
| 2026-06-16 | ~10.1 h | Rebrand folie2000→Taktano · TS-Optimierer · Gantt |
| 2026-06-17 | ~6.2 h | Operatives Modell · Konflikt-Wizard · Belegung |
| 2026-06-18 | <0.5 h | kleine Fixes |
| 2026-06-19 | ~4.8 h | CP-SAT-Service · Deploy |
| 2026-06-20 | ~5.6 h | Optimierer-Refinement (Eil/Deadline/asap/best_effort/Stabilität) · Solver-Redeploys |
| Σ Rückblick | ~30.6 h | 06-14 … 06-20 (Untergrenze; +~30 min/Session Nachlauf + Konversation nicht enthalten) |
Summe
~96.0 h = Rückblick ~30.6 h (bis 06-20) + Session 0 ~10.3 h (Slice A) + Session 1
~96.7 h = Rückblick ~30.6 h (bis 06-20) + Session 0 ~10.3 h (Slice A) + Session 1
~102.0 h = Rückblick ~30.6 h (bis 06-20) + Session 0 ~10.3 h (Slice A) + Session 1
~11.8 h (06-22) + Session 2 ~1.0 h (06-22, In-App-Assistent OP-AI-4) + Session 3 ~1.6 h
(06-22/06-23, OP-R1-1 Mitarbeiter-/Skill-CRUD #160 + Light/Dark-Mode OP-R9-9 #159) +
Session 4 ~0.9 h (06-23, Mitarbeiter-Leistung/Erfahrung + Ausbildung-Helfer + QS-Mangel #163) +
Session 5 ~3.3 h (06-23, Auth/Billing/Markteintritt-EU-Strategie + Entscheidungen #164/#165 +
Way-of-Working #166/#167; parallele Vorarbeit #152–#158/#161 nicht doppelt gezählt) +
Session 6 ~1.6 h (06-23, #163-Merge + OP-R1-2 #6/Güteklasse/anteilige Helfer-XP/Niveau-Aufstieg + OP-R3-3 #170) +
Session 7 ~0.8 h (06-23, Gantt-Task Tooltip + Detail-Fly-in + Aktions-Hub OP-R8-16 #171 + geteiltes
Panel/Aufträge-Fortschritts-Verdrahtung #172; Feature-Fenster parallel zu Session 5/6 nicht doppelt
gezählt, nur Wrap-up-/Folge-Tail) +
Session 8 ~0.9 h (06-23, Abwesenheiten/Soft-Blocks + Schicht-Art OP-R8-11/OP-OPT-7 #173; Parallel-Branch
zu Session 4, nur nicht-überlappender Block 06:30–07:25 gezählt — s. ⁹) +
Session 9 ~0.4 h (06-23, Skill-Katalog Beschreibung F02 editierbar #174; kleiner Client-Slice,
Wall-Clock überlappt Session 7 → nur nicht-überlappender Tail gezählt — s. ¹⁰) +
Session 10 ~1.0 h (06-23, Prozessschritt-Skill-Anforderungen editierbar #175, OP-R3-3-Teil:
Teilschritte persistiert + Editor-Workspace „Prozesse"; kein Parallel-Overlap — s. ¹¹) +
Session 11 ~0.5 h (06-23, Prozessschritt-Eigenschaften editierbar #176, OP-R3-3-Forts.:
Dauer/Cool-down/Flags/Bucht-Typen/Regeln je Teilschritt; direkte Fortsetzung von Session 10 — s. ¹²) +
Session 12 ~1.1 h (06-23, Leistungs-Prozess-Editor #177, OP-R3-3-Editor komplett:
Leistungen persistiert + Tab-Editor Komposition/Stammfelder; Fortsetzung #176→#177 — s. ¹³) +
Session 13 ~0.5 h (06-23, Eingriffsregeln am Preemption-Hebel #178, OP-R3-3 server-seitig
abgeschlossen; Fortsetzung #177→#178, überlappt Session-12-Fenster — s. ¹⁴) +
Session 14 ~0.5 h (06-23, OP-OPT-7 Slice 1 Wunschfrei-Pönale #179: beide Solver + Editor-Abstufung
genehmigt; Fortsetzung #178→#179 — s. ¹⁵) +
Session 15 ~1.0 h (06-23, OP-OPT-7 Slice 2 Bereitschaft-Hybrid #180: Überlauf nie still → bestätigungs-
pflichtiger Vorschlag mit Effekt-Vorschau; Fortsetzung #179→#180 — s. ¹⁶) +
Session 16 ~0.8 h (06-24, Projekt-Konventionen & Governance #181: Versionierung/Build · SBOM ·
Compliance · Risikoregister · Log-Handling; Fortsetzung #180→#181 — s. ¹⁷) +
Session 17 ~0.4 h (06-24, OP-AUDIT-1 Audit-Log-Architektur festgezurrt #182, Design-only;
Fortsetzung #181→#182 — s. ¹⁸) +
Session 18 ~1.0 h (06-24, OP-AUDIT-1 Slice 1 Abwesenheits-/Wunschfrei-Historie → OP-OPT-7-Fairness
#183, interim im DO-Blob; Fortsetzung #182→#183 — s. ¹⁹) +
Session 19 ~1.0 h (06-25, OP-AUDIT-1 D1-Verdrahtung deploy-sicher/dormant + OP-COST-1 erfasst #184;
Fortsetzung #183→#184, Übernacht-Gap — s. ²⁰) +
Session 20 ~0.4 h (06-25, OP-AUDIT-1 #184 gemergt + D1-Audit-DB taktano-audit provisioniert/migriert,
Binding zurückgestellt #185; Fortsetzung #184→#185 — s. ²¹) +
Session 21 ~0.4 h (06-25, OP-AUDIT-1 D1-Audit-Binding gesetzt → Dual-Write live #186, PATCH 0.2.2/Build 4;
Fortsetzung #185→#186 — s. ²²) +
Session 22 ~0.5 h (06-25, OP-COST-1 Kosten-Dashboard-Architektur festgezurrt #187, Design-only;
Fortsetzung #186→#187 — s. ²³) +
Session 23 ~1.0 h (06-25, PRs #186/#187 gemergt + OP-R1-3 erfasst + Design docs/Akademie.md #188;
Fortsetzung #187→#188 — s. ²⁴) +
Session 24 ~1.0 h (06-25, OP-R1-3 Slice 1 gebaut — Skill-Niveau-Progression #189, v0.3.0/Build 5;
Fortsetzung #188→#189 — s. ²⁵) +
Session 25 ~0.8 h (06-25, OP-R1-3 Slice 2 gebaut — begründete Beförderung + Audit-Historie #190, v0.4.0/Build 6;
Fortsetzung #189→#190 — s. ²⁶) +
Session 26 ~0.5 h (06-25, zwei Gantt-OPs erfasst — Heute-Linie OP-R8-17 + Zoom OP-R8-18 #191, Doku-only;
Fortsetzung #190→#191 — s. ²⁷) +
Session 27 ~1.5 h (06-25/26, OP-COST-1 Slice B1 Infra-/Cloud-Kosten gebaut + PR #192, v0.5.0/Build 7;
parallel auf main gemergt) +
Session 28 ~1.0 h (06-26, Gantt Zeit-Zoom OP-R8-18 + Heute-Linie/Überfälligkeit OP-R8-17 gebaut #193,
v0.6.0/Build 8; neuer Tag, Übernacht-Gap nicht gezählt — s. ²⁸) +
Session 29 ~1.1 h (06-24, Flow-Analyse Auftrags-Flow #194, reine Doku — s. ²⁹) +
Session 30 ~5.5 h (06-25/26, Flow-Refactor-Plan + PR 1–7 + PR #194, OP-R3-1 — s. ³⁰) +
Session 31 ~0.5 h (06-26, Update-from-main + PR #193 + Merge + Deploy-Verifikation + Einpflegen #194,
Wrap-up der Gantt-OPs #195, Doku-only; eigene Session nach >1 h Gap — s. ³¹) +
Session 32 ~0.4 h (06-26, Bugfix Rail-Sidebar-Scroll bei niedrigem Fenster #197, v0.7.1/Build 10 PATCH;
direkte Fortsetzung #195→Bugfix — s. ³²) +
Session 33 ~1.0 h (06-26, #192-Merge→live + Way-of-Working-Guideline + OP-COST-1 Follow-up #196
[Sicht-A-Design · Prod-Gate-Runbook · OP-COST-2 · OP-EXPORT-1], Doku/Konfig — Zeiten geschätzt,
Vormittags-Block eingefaltet) +
Session 34 ~0.5 h (06-26, Prod-Gate: interim für alle freigeschaltet + OP-COST-3 als Pre-Prod-Requirement
[RISK-12 reklassifiziert, Kosten.md §12], Doku/Konfig — Nutzer-Entscheidung „erstmal für alle") +
Session 35 ~0.6 h (06-26, Infra-Kosten-Änderungen protokolliert #200, v0.9.0/Build 12 MINOR:
Ops-Log + D1-Audit-Event je infraKosten.*, OP-AUDIT-1/OP-LOG-1) +
Session 36 ~1.3 h (06-26, R2-Foto-Upload live [#199 Merge+Deploy-Verifikation] + Client-Bild-Kompression
- volle Auflösung optional im Hintergrund, OP-R4-1, v0.11.0/Build 14 MINOR) + Session 37 ~1.3 h (06-26, OP-SEED-1/OP-TENANT: Seed-Audit + Datenbestand-Purge + Tenant-Vorlage-Fundament
- Admin-Workspace, v0.12.0/Build 15 MINOR) + Session 38 ~1.3 h (06-26, S-SEED-1: Arbeitsplätze/Buchten persistiert + editierbar + Editor + OP-BACKUP-1, v0.13.0/Build 16 MINOR) + Session 39 ~1.3 h (06-26, S-SEED-2: Taxonomien persistiert + admin-editierbar + Taxonomie-Editor, v0.14.0/Build 17 MINOR) + Session 40 ~1.3 h (06-26/27, S-SEED-3: Schicht-Katalog persistiert + admin-editierbar + Schicht-Editor, v0.15.0/Build 18 MINOR) + Session 41 ~1.0 h (06-27, S-SEED-4: Seed → benannte Tenant-Vorlage extrahiert [tenants/], v0.16.0/Build 19 MINOR) + Session 42 ~0.8 h (06-27, Design-Docs S-SEED-5/OP-DATA-1 [Persistenz] + OP-BACKUP-1 [Backup/Restore], reine Doku). Stand 2026-06-27 ~02:00. Session 37 ~1.2 h (06-26, OP-COST-2 Slice 1: GitHub-Infra-Kosten-Pull #202, v0.12.0/Build 15 MINOR — quelle/quelleRef + github-billing-Mapper + dormant pullGithubKosten + on-demand Button/API-Badge) + Session 38 ~0.2 h (06-26, OP-COST-4 erfasst: GitHub-Token-Aktivierung als Pre-Prod-Requirement #203, Doku) + Session 39 ~0.7 h (06-26, R7-Invariante „ohne Zuweisung kein in_arbeit" — hatZuweisung-Guard in transition
- erlaubteAktionen-Filter + DTO/UI-Badge, v0.13.0/Build 16 MINOR) +
Session 40 ~1.2 h (06-26, Docs-Struktur optimiert — Doku-Landkarte
docs/README.md+ physische Gliederung aller 17 Docs in 5 Unterordner [_category_.json/Sidebar] + 49 Links/10 Code-Stellen nachgezogen, OP-DOCS-8 ✅, Doku/Kommentar-only/kein Bump; append-only Logs unverändert) + Session 41 ~0.3 h (06-27, OP-DOCS-8 PR #205 erstellt + squash-gemergt + Wrap-up; Docusaurus-Build live verifiziert [docs-deploy #75 grün], Branch-Cleanup; Übernacht-Gap zu Session 40) + Session 42 ~0.6 h (06-27, Doku-Site Start-Seite als Produkt-Übersicht + neue Team-Seite mit Rollen/Portraits/To-dos,npm run buildgrün; Doku-Site-only/kein Bump). Stand 2026-06-27 ~10:15. Rollen/Portraits/To-dos,npm run buildgrün; Doku-Site-only/kein Bump) + Session 43 ~0.4 h (06-27, CodeRabbit-Review-Handling [1 Fix, 2 begründet abgelehnt] + PR #206 squash-gemergt + Wrap-up; Doku-Site-only/kein Bump) + Session 44 ~4.3 h (06-26/27, OP-QS-2 Bildbewertung — Optionen B-1–B-4 + On-Device-Pre-Upload-Gate (Phase 1a) + Auto-Erkennungs-Adapter MediaPipe/nsfwjs (dormant) + privates R2-Serving (/models/*) + CI-Privacy-Gate + Upload-Skript + Status-Warnung; nach main-Merge v0.14.0/Build 17; eigene Session parallel zu main's 35–43, nach >1 h Gap zu Session 34) + Session 45 ~0.3 h (06-27, Bugfix Foto-Schutz: Bild wurde nach Auswahl nicht angezeigt — onDatei zeichnete vor geladen=true aufs noch nicht gerenderte Canvas; Fix detectChanges + Input-Reset, im Browser verifiziert; v0.14.1/Build 18) + Session 46 ~1.9 h (06-27, iPad-Bugfix Crystal-Bar [pointer-abhängig: Proximity nur Feinzeiger + Touch-Toggle ☰/✕ + Backdrop + Auto-Einklappen + a11y-inert, v0.14.1→0.14.2/Build 19 PATCH] + Crystal-Bar-Doku/Screenshots - Timesheet-Management-Summary + OP-PM-1 [Jira] + OP-DOCS-9 [Doku-Konsistenz-Check: Guidelines +
SessionStart-Hook + CI-Skript] + PR #207 inkl. vier main-Merges [#205/#206/#208/#209] & CodeRabbit-Review) +
Session 47 ~0.5 h (06-27, OP-PM-2 Merge-Churn entschärft — union-Merge der Logs [.gitattributes] +
Auto-Build-Nummer aus Git-Commit-Count [build-number.ts/stamp-build.mjs] + Log-Hygiene-Pflicht & -Check;
OP-R9-12-Verify „ist ok" geschlossen).
Session 48 ~1.1 h (06-27, OP-OBS-1 Backend-Kandidaten bewertet — neue Doku
architektur/Observability.md[Grafana↔Sentry↔CF-nativ↔Honeycomb, OTLP-austauschbar, Empfehlung Grafana self-host/EU] + SonarQube/Snyk-Befund [GitHub-nativ zuerst]; HANDOFF/Landkarte/CLAUDE/Compliance/RISK-4 nachgezogen. Anschließend Security-Quick-Wins umgesetzt [OP-SEC-1/OP-SBOM-1/RISK-4]: Dependabot + CodeQL-Workflow + CI-Jobsecurity-audit[npm-audit prod-Deps + pip-audit, blockierend; Voll-Audit informativ; auch Deploy-Gate], Produktiv-Deps/Solver verifiziert sauber; Doku/CI-Tooling-only/kein Bump) + Session 49 ~0.4 h (06-27, Foto-Schutz Touch/Pencil-Markierung iPad [touch-action/Pointer-Capture] + ehrliche Befund-Box „Bitte prüfen" wenn Auto-Erkennung nicht lief [PII-spezifisch, nicht am geteilten autoStatus]; im Browser verifiziert; v0.14.3 Auto-Build) + Session 50 ~0.6 h (06-27, wöchentlicher Security-/Setup-Sanity-Lauf —weekly-audit.yml[Montags-Cron + manuell: npm-/pip-audit zeitgesteuert neu, blockierend] +scripts/check-security-setup.sh[„ist alles gesetzt?" — Dependabot/ CI-Jobs/gepinnte Actions/CodeQL + best-effort Repo-Settings; warnt] + Doku als Sanity-Check in Sanity-Checkliste.md; OP-SEC-1/OP-SBOM-1/RISK-4; Doku/CI-Tooling-only/kein Bump) + Session 51 ~0.4 h (06-27, CodeQL via GitHub Default Setup aktiviert [Nutzer-Wahl] → Status „blockiert"→„✅ aktiv" in RISK-4/Compliance/Observability/HANDOFF/Sanity-Checkliste + check-security-setup.sh angepasst [kein eigener Workflow erwartet]; neue Agenten-Instruction agents.md §6.7 „nicht-per-MCP-prüfbare Checks" [Repo-Settings/ Code-Scanning/Branch-Protection → Agenten-Pflicht] + SessionStart-Hook-Punkt 6; Doku/Tooling-only/kein Bump). Session 52 ~0.3 h (06-27, Bugfix Foto-Schutz: erneutes Markieren nach Verpixeln ging nicht —verpixelt-Guards entfernt + Boxen-Listen nach Verpixeln geleert; im Browser verifiziert; v0.14.4) + Session 2026-06-27-sprechende-session-ids ~0.6 h (06-27, #217-Finalisierung [CodeRabbit: syncOffeneBoxen nach Detektor-Lauf + CHANGELOG-PR-Link] + sprechende, branch-abgeleitete Session-IDs<Datum>-<branch-slug>statt fortlaufender Zahl → kollisionsfrei [OP-PM-2], Alt-Sessions bleiben; Doku/Tooling-only/kein Bump) + Session 2026-06-27-cp-sat-glossary-docs ~0.6 h (06-27, Glossar [50 Begriffe inkl. CP-SAT] als eine Quelle → generierte Seite + automatische Begriffs-Sprechblasen [Remark + Client-Modul, Mouse-over/Klick] in der gesamten Doku + Lesepfade nach Zielgruppe [Nutzer · Fach · IT-Dev · IT-Ops], OP-DOCS-10 ✅ Slice 1 / OP-DOCS-4 Schritt 1;npm run buildgrün; Doku-Site-only/kein Bump). Stand 2026-06-27 ~16:40. Session 2026-06-27-merge-churn-reduction-vo24s7 ~0.6 h (06-27, Merge-Churn Teil 2 — Doku-Fast-Track inci.yml[changes-Job + gegatete schwere Jobs inkl.security-audit+ aggregierterCI Gateals einziger Required-Check] + agents.md §7-Regel + Auto-Merge-Konvention; reine Doku-PRs überspringen die App-CI, Audit-/PR-Trail bleibt lückenlos; auf aktuellen main [#210–#218] gemergt, manueller Build-Bump verworfen [OP-PM-2 Auto-Stamp]; Mergify verworfen zugunsten nativem GitHub; PR #219, kein Bump, v0.14.4; Repo-Admin: Branch-Protection nurCI Gate+ Auto-Merge aktiviert). Session 2026-06-27-merge-churn-reduction-vo24s7 ~0.6 h (06-27, Merge-Churn Teil 2 — Doku-Fast-Track inci.yml[changes-Job + gegatete schwere Jobs inkl.security-audit+ aggregierterCI Gateals einziger Required-Check] + agents.md §7-Regel + Auto-Merge-Konvention; reine Doku-PRs überspringen die App-CI, Audit-/PR-Trail bleibt lückenlos; auf aktuellen main [#210–#218] gemergt, manueller Build-Bump verworfen [OP-PM-2 Auto-Stamp]; Mergify verworfen zugunsten nativem GitHub; PR #219, kein Bump, v0.14.4; Repo-Admin: Branch-Protection nurCI Gate+ Auto-Merge aktiviert) + Session 2026-06-27-coderabbit-mcp-integration-xm9zpu ~0.3 h (06-27, OP-DEVTOOL-1 erfasst — CodeRabbit↔MCP-Integration recherchiert [2 Richtungen: Client/Dashboard+.coderabbit.yamlvs. community-MCP-Server] + Empfehlung + als offener Punkt geparkt; Doku-only/kein Bump; PR #221). Stand 2026-06-27 ~16:30. Session 43 ~0.7 h (06-27, Entscheidung Tenant-Isolation [Mandantenfaehigkeit.md], reine Doku). Stand 2026-06-27 ~02:40. Session 2026-07-01-op-liste-doc-hyperlinks-7e3s6o ~0.9 h (07-01, OP-DOCS-12 — OP-Listen tragen klickbare OP-ID-Sprünge: OP-ID in Register.md §1 + IDs.md-Reverse-Lookup als Direkt-Link [Owning-Doc / Lastenheft-§11-Anker / HANDOFF §4], stabile Heading-Anker Lastenheft §11.1–§11.10 + HANDOFF §4{#op-parked}; Folge-Ausbau „1 und 2": per-OP-<a id>-Anker in Lastenheft §11 [80] + HANDOFF §4 [145], volle §4-Liste verlinkt jede OP-ID auf Detail-Quelle, Register-Einzel-OPs springen exakt auf#op-<id>[skriptgestützt + validiert]; Konvention in agents.md §2.5 + Pflege-Notizen verankert; Doku-only/kein Bump). Stand 2026-07-01 ~12:30. Session 2026-07-01-op-liste-doc-hyperlinks-7e3s6o ~0.1 h (07-01, Nachtrag: CHANGELOG „PR folgt" → #267 [Log-Hygiene, Folge-PR auf frischem main nach Merge #267]; Doku-only/kein Bump). Stand 2026-07-01 ~13:45. Session 2026-07-01-foto-varianten-3 ~1.2 h (07-01, OP-R4-1 drei Bild-Varianten [Thumbnail 256 · verkleinert 1024 · Original], Thumbnail-priorisiert über alle wartenden Fotos: Client-erzeugeFotoVarianten+ Queue-Modell/Maschine je Variante + Drain [Varianten außen/Einträge innen] + Servervariante=thumb/WSfoto.variante-Upsert +FotoAttachment.thumbR2Key[SCHEMA_VERSION 16→17, additiv] + UI thumb-first [Kachel/Popover];test:fotoqueue+test:do-migrations+operativ+ng buildgrün; v0.36.0→0.37.0 MINOR; PR #265). Stand 2026-07-01 ~11:45. Session 2026-07-01-coderabbit-config ~0.3 h (07-01, OP-DEVTOOL-1 versionierte.coderabbit.yaml— Profilassertive[detailliertere Reviews] +path_instructionsje Bereich [server/party · client/src/app · docs] + kommentierend statt blockierend; Entscheidung „nur CodeRabbit schärfen", kein Copilot-Review; Everything-as-Code, kein App-Change/kein Bump; PR folgt). Stand 2026-07-01 ~12:45. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed ~2.6 h (07-01, OP-AI-4 / OP-DOCS-2/-7 In-App-Assistent Slices 4–6 — reine Server-Kerneserver/src/assistant/*[Keyword+Vectorize-Retrieval · EU-LLM-Client hinterLlmClient-Interface · 7-Werkzeug-Registry auf Insights/konfliktHebel-Simulation/Doku · Dialog-Handler mit Rundenlimit · Feedback→Issue-Mapper · generierter Doku-Index 458 Chunks]; DO-Endpoint/assistant[onRequest, dormant ohneASSISTENT_LLM_KEY→ 503] + Feedback dormant ohneGITHUB_FEEDBACK_TOKEN+ Auditassistent.feedback; Angular Chat-Panel [Drawer] + Feedback-Pin [Capture-Klick→Element-Anker]; Entscheidungen App-first · EU-LLM · RAG · Issue; 3 Self-Tests grün + typecheck +ng build+ No-Hex grün; Compliance C-17/C-10 + RISK-10/-15; v0.40.2→0.41.0 MINOR; PR #271 gemergt). Stand 2026-07-01 ~15:30. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-2 ~0.4 h (07-01, Folge-Slice: SecretGITHUB_FEEDBACK_TOKEN→TAKTANO_FEEDBACK_TOKENumbenannt [GitHub-Actions-Secrets erlauben keinGITHUB_-Präfix] + CI-deploy-Job spiegeltASSISTENT_LLM_KEY+TAKTANO_FEEDBACK_TOKENaus GitHub-Secrets viawrangler secret putvorwrangler deploy[dormant-sicher, übersprungen wenn ungesetzt]; typecheck +test:assistant-*+ YAML-Validität grün; v0.41.0→0.41.1 PATCH; PR #272 gemergt). Stand 2026-07-01 ~16:00. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-3 ~0.2 h (07-01, Doku-Nachzug CodeRabbit-Review zu #272: „PR folgt"→#272 in CHANGELOG+Timesheet, wrangler.toml-Fallback-Kommentar präzisiert; Doku-only/kein Bump; PR #273). Stand 2026-07-01 ~16:15. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-4 ~0.3 h (07-01, UI-Fix: Assistent-Antworten als Markdown rendern — abhängigkeitsfreier Renderermarkdown.ts[Überschriften/fett/Listen/Code, HTML-escaped + Angular-Sanitizer, XSS-geprüft] + puremarkdown.pipe.ts,chat-panelrendert via[innerHTML], Nutzer-Text bleibt Klartext, Tokens/No-Hex grün;ng buildgrün; v0.41.1→0.41.2 PATCH; PR #274). Stand 2026-07-01 ~16:35. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-5 ~0.9 h (07-01, OP-DOCS-7 Fix „kein Feedback-Issue": Ursache = LLM-abhängiges Anlegen + maskierte API-Fehler [Secrets/Issues verifiziert via Deploy-Log/D1]. Deterministischer DO-Endpoint/feedback[kein LLM] +erstelleFeedbackIssue→FeedbackErgebnis[ehrlich ok/status/grund] +feedbackFehlerGrund-Mapper; Clientfeedback.service.ts+feedback-form.component.ts[Art-Chips+Text], Pin öffnet Formular, ehrliche Erfolg/Fehler-Toasts, toter LLM-Feedback-Pfad entfernt; Entscheidung Issues statt Discussions; typecheck+test:assistant-*+ng build+No-Hex grün; v0.41.2→0.41.3 PATCH; PR #275). Stand 2026-07-01 ~17:30. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-6 ~0.3 h (07-01, Bugfix: Feedback-Fehler wurde nicht angezeigt — Ursache: Formular-Vollbild-Scrim [z-50] liegt in DOM-Reihenfolge nach app-toasts [z-50] → Fehler-Toast hinter dem Formular. Fix: Fehler inline im Formular [FeedbackService.fehler-Signal → Danger-Banner, voller Text], Formular bleibt offen für Retry; Toast-Container auf z-[70] gehoben;ng build+No-Hex grün; v0.41.3→0.41.4 PATCH; PR #278). Stand 2026-07-01 ~18:00. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-7 ~1.1 h (07-01, OP-DOCS-7/OP-AI-4: Duplikat-Erkennung + Assistent-Datenzugriff. Reinegithub-issues.ts[Terme/Such-Pfad/Mapping] + DOsucheOffeneIssues[dormant];/feedback/aehnliche→ ähnliche offene Issues+OPs [OPs via keywordSuche Lastenheft/Register/IDs], Client warn+confirm „Trotzdem anlegen"; neue ToolsissueSuche+datenListe[Mitarbeiter/Aufträge/Skills/Leistungen/Buchten, gefiltert/gekappt], System-Prompt: Daten-Fragen mit echten Daten [behebt „kein Live-Daten-Zugriff", Nutzer-Screenshot]; Erfolgs-Toast „Issue #N"; OP-FEEDBACK-2 [Kunden-Sichtbarkeit]. typecheck+test:assistant-+ng build+No-Hex grün; v0.41.4→0.42.0 MINOR; PR #281. Nächster PR: Screenshot-Feedback+Bild-Schutz OP-FEEDBACK-1). Stand 2026-07-01 ~19:10. Session 2026-07-01-in-app-chatbot-feedback-vpv8ed-8 ~0.2 h (07-01, Accuracy-Fix: Assistent erfand Skill-Niveau 4 [Screenshot], real ist SkillNiveau 1–3 [Sterne, 3=höchste].datenListeTextzeigt Skala als Sterne+„(n/3)"; System-Prompt: Niveau 1–3, keine höheren Stufen erfinden. typecheck+test:assistant-tools grün; v0.42.0→0.42.1 PATCH; PR folgt). Session taktano-2026-07-02-d5-1-implementation-qg0myg ~2.4 h (07-02, OP-QS-4: QS-Nacharbeit direkt als zuweisbarer Prozessschritt + Leistungs-Schwellwerte. Befund: Abschluss-Gate [OP-QS-GATE] + Nacharbeit-Solver-Fluss [OP-UX-3] schon gebaut → nur echte Lücken. Gebaut: einstufige Erfassungqs.nacharbeitErfassen[Auto-Mangel+Schritt, überschreibbare Zeit, optional zugewiesen]; manuelle Zuweisungteilschritt.zuweisen+TeilschrittInstanz.manuellZugewiesen[bleibt bei Re-Opt fix,applyPlanung]; Auto-Erledigen bei →fertiggestellt für Nacharbeit ausgenommen [Gate-Härtung]; Leistungs-SchwellwertenacharbeitSchwelleGesteigert/ExtremMin+ reine FnnacharbeitStufe()+AuftragDTO.nacharbeitStufe[D-2] + Client-Badge + Katalog-Editor-Felder;nacharbeitEinplanenüberspringt verplante Mängel [keine Doppel-Einplanung]; lebende Feature-Listedocs/betrieb/Funktionsumfang.md[neu]. Entscheidungen [Nutzer]: Mangel automatisch · absolute Minuten · ab fertiggestellt · Gate server-hart. Neuer Self-Testtest:qs-nacharbeit[CI-Gate] + test:abnahme/nacharbeit/leistung/operativ/replan +ng build+No-Hex+Persistenz grün; keine Migration; v0.45.0→0.46.0 MINOR; PR #287. Doku: Operative-Durchgaengigkeit.md [OP-QS-4+Mermaid], Lastenheft §5.1, HANDOFF §4, IDs/Register, Glossar, Funktionsumfang.md, CHANGELOG.) Session taktano-2026-07-02-d5-1-implementation-qg0myg-2 ~1.2 h (07-02, PR #287 Review-Betreuung + OP-QS-5. CodeRabbit ASSERTIVE: 6 Findings behoben [onStart-Boot-Repair nimmt Nacharbeit aus (Gate-Bypass) · prozess.ts Schwellwert-Validierung · zuweisen-Guard · manuelle Crew nurAktive · orders Badge-Typ · quality connected()-Offline-Guard, Commit daee056], 2 Re-Review-Funde [WS-Payload-Validierung nacharbeitAufwandMin/mitarbeiterIds · Client filtert archivierte MA, Commit 7d10833], 3 begründet vertagt [mAufwand-Konvention · Crew-CP-SAT-Constraint · Mutation-ID-Idempotenz]. Dann OP-QS-5 (Nutzer-Entscheidung „eigenständig lassen + Duplikat entschärfen"): Nacharbeitsschritt = Single Source der Dauer — alleMaengel überschreibt Aufwand step-authoritativ, Mangel.nacharbeitAufwandMin = Ersterfassung/Intent, keine Sync-Pflicht; Self-Test test:qs-nacharbeit (5); Doku Operative-Durchgaengigkeit/IDs/Register/HANDOFF; kein Bump [Teil von #287, v0.46.0]. tsc + test:qs-nacharbeit/leistung + ng build grün.) Stand 2026-07-02 ~01:40. Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p ~0.8 h (07-02, OP-COST-2 Slice 2: LLM-API-Spend automatisch ziehen + „zuletzt erfolgreich gezogen"-Stempel je Auto-Pull-Komponente. Nutzer-Auftrag „LLM-Kosten automatisch ziehen; Zeitstempel des letzten erfolgreichen Abholens je Komponente dezent anzeigen". Gebaut: pureserver/src/kosten/llm-billing.ts[llmCostZuPostenmappt Anthropic Cost-APIdata[]-Zeitbuckets je Monat → Posten, Dienst „Anthropic API (LLM)",quelle:'api'/quelleRef=llm:YYYY-MM, idempotenter Upsert, Betrag/Datum defensiv]; DOpullLlmKosten()dormant ohne SecretLLM_BILLING_KEY[Endpoint/Label perLLM_BILLING_URL/LLM_BILLING_DIENST-vars überschreibbar]; AktioninfraKosten.pullLlm+ Button „↻ LLM ziehen" + AuditinfraKosten.pull. Zeitstempel: persistierter FaktinfraKostenPull: Record<Dienst,epoch-ms>[schemaVersion 17→18 Merge-Default; bei jedem erfolgreichen Abruf, auch GitHub] → DTOletzterPull; dezent angezeigt [Button-Caption, Inline-Stempel je API-Zeile, Badge-Tooltip; relativ/ab 1 Tag absolut]. Key-Bereitstellung wie ASSISTENT_LLM_KEY: CI-deploy-Job spiegelt GitHub-SecretLLM_BILLING_KEYviawrangler secret putnach Cloudflare [Everything-as-Code, dormant-sicher]. test:kosten [LLM-Mapper] + test:do-migrations [v0→v18] + tsc +ng build+ No-Hex grün; v0.42.1→0.43.0 MINOR; PR #289). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-2 ~0.7 h (07-02, OP-COST-2 Slice 3: Mistral = realer Anbieter → ECHTE LLM-Kosten via Admin-Usage-API. Nutzer „checke die Mistral-API und nutze die tatsächlichen Kosten". Befund: Mistral-SDK hat keinen Usage-Endpoint, aber Admin-Beta-APIGET console.mistral.ai/api/admin/usage?month=M&year=Y[Bearer Admin-Key ≠ ASSISTENT_LLM_KEY] liefert echte Kosten je Modell/Monat [Nutzer-Screenshot]. Gebaut: puremistral-billing.ts[mistralUsageZuPosten/mistralUsageUrl] → Monatsposten „Mistral (LLM)" mit realen Beträgen, quelleRef=mistral:YYYY-MM idempotent; DO pullMistralKosten() [laufender+Vormonat, dormant ohne MISTRAL_ADMIN_KEY] + Button „↻ Mistral ziehen" [generisch→„↻ Anthropic ziehen"]; Key via GitHub-Secret MISTRAL_ADMIN_KEY [CI-Sync]. Schema-Unsicherheit [Beta-Console-API undokumentiert] → defensiver Kosten-Extraktor [Gesamtfeld bevorzugt/sonst Listen-Summe, MISTRAL_BETRAG_IN_CENT], nach erstem Pull Feld/Einheit verifizieren. Selbst-Messung Token×Preis verworfen [API liefert reale Kosten]. test:kosten [Mistral-Mapper: beide Formen/Cent/URL/leer] + tsc +ng build+ No-Hex grün; v0.43.0→0.44.0 MINOR; PR #289). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-3 ~0.3 h (07-02, UX-Fix „Auto-Pull-Buttons reagieren nicht" [Nutzer-Screenshot: 3 Buttons „noch nie gezogen", kein Effekt]. Ursache: ohne Provider-Secret ist der Pull dormant [No-op] + der Server gab keine Rückmeldung → nicht unterscheidbar von Erfolg. Fix: DO sendetinfraKosten.pull.result{dienst,ok,anzahl,grund?} an die auslösende Verbindung [analog auftrag.create.result]; Client-Signal infraKostenPullResult; Kosten-Seite quittiert per Toast [„wird gezogen…" → Erfolg N Posten / aktuell / dormant+Grund], Offline-Hinweis. Buttons reagieren jetzt immer + selbst-diagnostizierend. tsc +ng buildgrün; v0.44.0→0.44.1 PATCH; PR #290). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-4 ~1.1 h (07-02, OP-OBS-1/OP-LOG-1 Slice 1: Logs nach Grafana. Nutzer „Logs und Metriken in Grafana auswerten/visualisieren". Befund: OP-OBS-1 nur Design, alles console-basiert, kein OTLP/keine Grafana-Instanz. Backend-Entscheidung Nutzer: Grafana [Cloud EU ↔ self-host code-frei via OTLP]. Gebaut Worker/DO: Logger-Wrappersrc/obs/logger.ts[strukturiert, service/version/build/trace_id, PII-Scrubbing sensible Keys+E-Mails, Level, child, console-Sink] + dependency-freier OTLP/HTTP-Log-Exportsrc/obs/otlp.ts[resourceLogs-JSON + best-effort POST, dormant ohne OTEL_EXPORTER_OTLP_ENDPOINT]; DO-Verdrahtung [console + OTLP-Puffer, flushObs() via ctx.waitUntil; Boot + Kosten-Pull-Pfade adoptiert, rohe console.log dort ersetzt]; Dashboards-as-Codegrafana/[Log-Volumen/Level, Fehler/Warnungen, Kosten-Pull-Ergebnisse, letzte Fehler] + README; Metriken interim aus Logs [LogQL], native Metrics/Traces + Client-Faro + Solver-OTLP = Folge-Slices. Env via GitHub-Secrets OTEL_EXPORTER_OTLP_ENDPOINT/_HEADERS/LOG_LEVEL [CI-Sync]. Scope-Leitplanke: Grafana=Technik, True-North bleibt in der App. Neuer Self-Test test:obs [Scrubbing/Level/child/Sink-Isolation + OTLP-Payload + best-effort-POST] grün [CI] + tsc grün + Dashboard-JSON valide; v0.44.1→0.45.0 MINOR; PR #292 gemergt). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-5 ~0.2 h (07-02, OP-OBS-1 Aktivierung + Residenz-Flag: Grafana-Cloud-Stackdrkv+ OTEL-Secrets gesetzt → Log-Export live via #292-Merge/Deploy. Endpoint liegt in US-Region → proaktiver DSGVO-Flag; Nutzer-Entscheidung „US erstmal zum Testen" [Dev/Non-Prod, PII-gescrubbt]. Als RISK-16 [akzeptiert/befristet] + Observability.md §6a festgehalten; verbindliche EU-Umstellung vor Go-Live [code-frei via OTLP]. Doku-only, kein Bump; PR #294). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-6 ~0.7 h (07-02, OP-OBS-1 Slice 2: native OTLP-Metrics. Nutzer „emittieren wir auch Metriken?" → nein, nur Logs → „go". Gebaut: puresrc/obs/metrics.ts[MetricsRegistry Counter+Histogramm, cumulative → Prometheus; OTLP-resourceMetrics-JSON sum/histogram + best-effort POST /v1/metrics];metricsLogSink[taktano_log_events{level}] am Logger + taktano_infra_pull{dienst,ergebnis} an Pull-Pfaden; DO flushObs() schickt Logs+Metriken via ctx.waitUntil [dormant ohne Endpoint]; Grafana-Dashboard um Prometheus-Panels [Log-Events-Rate/Level, Pull-Rate/Dienst] ergänzt. Naming ohne _total [OTLP→Prometheus ergänzt es]. test:obs erweitert [Registry/Histogramm/Payload/Sink] + tsc + Dashboard-JSON valide; v0.45.0→0.46.0 MINOR; PR #294. Offen: Traces/Tempo, Dauer-Histogramme, Client/Solver). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-7 ~0.9 h (07-02, OP-OBS-1 Slice A+B + EU-Umstellung. Nutzer „A, b, pr und merge". Slice A: Dauer-Histogramme verdrahtet [taktano_solve_dauer{modus} CP-SAT + taktano_assistent_turn_dauer{frontend}, ms-Buckets → P50/95/99]. Slice B: verbliebene DO-Laufzeit-console. auf den Wrapper migriert [Kosten/Assistent/Purge/Employee] → alle Logs in Grafana; neues CI-Gate scripts/check-no-console.sh [Server-Job; Ausnahmen -demo/spike + Marker obs-allow-console]. CodeRabbit-Review [3 valide Findings gefixt]: Metrics-Export 30-s-gedrosselt [sonst POST je Message, Registry ab Boot nicht-leer], .catch() an beiden OTLP-waitUntil, dienst-Label je Pull-Case gehoben. Nutzer stellte Grafana auf EU um [otlp-gateway-prod-eu-west-2] → RISK-16 gemindert [DSGVO-Residenz erfüllt], Risikoregister+Observability.md nachgezogen. test:obs + check-no-console + check-no-hex + tsc grün; v0.46.0→0.47.0 MINOR; in #294 gefaltet). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-8 ~0.8 h (07-02, OP-OBS-1: Telemetrie-Weiterleitung prüfbar + Verbindungs-Status in der App. Nutzer „können wir prüfen, ob die Weiterleitung der Logs und Metriken funktioniert? Den Status der Verbindung dann auch in der App anzeigen". Gebaut: aktiver DO-Handlerobs.test[admin-gegated, dormant ohne OTEL_EXPORTER_OTLP_ENDPOINT] →testeObsExport()sendet SYNCHRON [await, nicht fire-and-forget] Test-Log + Test-Metrik taktano_obs_test an den OTLP-Endpoint, liefert echtes HTTP-Ergebnis [end-to-end-Beleg, dass Grafana annimmt]; laufenderobsStatus[transient je DO-Lebenszeit] via merkeObsExport() bei jedem regulären flushObs-Export + Test [letztes ok/HTTP-Status/Grund/Zeit + Zähler logsGesendet/metrikenGesendet]; obsStatusDTO() gibt dem Client NUR Host+letztes Ergebnis [Region sichtbar, kein Token], nur im Admin-Broadcast; ServerMsg obs.test.result + Client-Signal obsTestResult [eigene seq je Klick]. UI-Karte „Telemetrie · Grafana" im Kosten-Workspace/Tab Infra: Ampel [grün ok/amber Fehler+dormant/faint noch keiner], Host/Region, letzter Export [rel. Zeit + HTTP], Zähler, Button „↻ Verbindung testen" → Toast [ok/dormant/Fehler]. Entscheidungen: Test admin-gegated wie Kosten-Pulls [kein Leak/Spam]; Status transient [derived state nie speichern]; Test synchron [Regulär-Export bleibt waitUntil]. tsc + test:obs + check-no-console + check-no-hex +ng buildgrün; kein Migrations-Bump; v0.47.0→0.48.0 MINOR; PR #296 gemergt). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-9 ~0.3 h (07-02, OP-OBS-1: selbsterklärender Fehler-Hinweis an der Telemetrie-Karte. Auslöser Nutzer-Screenshot: neuer Verbindungstest lieferte real HTTP 401 vom EU-Grafana-Gateway → Export scheiterte bis dahin still [Auth abgelehnt, Logs/Metriken kamen nie an]; Test hat es sofort sichtbar gemacht. Code + CI-Secret-Sync [wrangler secret put OTEL_EXPORTER_OTLP_HEADERS] verifiziert korrekt → Ursache = Credential-Wert im Secret, nicht Code. Gebaut: obsHinweis() in costs.component.ts → Klartext-Tipp je Status unter „Grund" [amber]: 401/403 Auth [Token/Instance-ID, Scopes logs:write+metrics:write, Format Authorization=Basic base64(InstanceID:Token)], 404 Endpoint, 5xx vorübergehend.ng build+ check-no-hex grün [var(--tk-amber), kein Hex]; v0.48.0→0.48.1 PATCH; PR #297 gemergt. Nutzer-Aktion offen: Secret korrigieren + neu testen). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-10 ~0.2 h (07-02, OP-OBS-1/OP-LOG-1: fehlgeschlagener Auto-Pull loggt warn statt info. Nutzer-Befund: infraKosten.pull.skip mit grund „Mistral-Usage-API HTTP 401" lief auf info → echter Auth-Fehler gehört auf warn. Fix: 3 Pull-Funktionen markieren „kein Secret" explizit mit dormant:true; Helper protokollierePullFehler() → dormant=info, echter Fehler [HTTP/Netz]=warn, Teil-Erfolg [anzahl>0]=info. Expliziter Diskriminator statt String-Heuristik. Log-Zeile bleibt infraKosten.pull.skip [kein Dashboard hängt daran, Counter taktano_infra_pull{ergebnis} trägt das]. tsc + check-no-console grün; v0.48.1→0.48.2 PATCH; PR #298 gemergt). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-11 ~0.3 h (07-02, OP-OBS-1/RISK-16: AVV/DPA mit Grafana dokumentiert. Nutzer: „Secret gefixt [funktioniert]; AVV/DPA mit Grafana". OTLP-Export nach Grafana Cloud EU läuft [401 behoben]. Doku-only: neue Compliance-Tracker-Zeile C-18 „Telemetrie-Datenverarbeitung EU-konform [Grafana]" [Datenminimierung nur PII-gescrubbte Betriebs-Telemetrie/keine Kundendaten, EU-Region belegt, nächster Schritt Grafana-Standard-DPA gegenzeichnen+VVT]; C-10 um Grafana Labs ergänzt; C-06/C-07/C-09 nachgezogen [Logging live, EU-Residenz, PII-Scrubbing live]; RISK-16 aktualisiert [AVV/DPA dokumentiert, Rest = Gegenzeichnung/VVT durch Nutzer/Legal]. Proaktiver DSGVO-Flag: DPA-Unterzeichnung ist Rechts-/Betriebshandlung vor Go-Live. Kein Bump; PR #300). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-12 ~0.4 h (07-02, OP-DOCS-9: lebende Test-Übersicht + Regel „immer mitführen". Nutzer „Übersicht über alle automatischen Tests in der Doku immer mitführen". Gebaut: docs/betrieb/Tests.md [Tabellen: 29 Server-test:-Selbsttests · Smokes · Client · Solver · Gates, je Befehl/Prüfgegenstand/OP-Bezug/CI-Job + lokal-ausführen-Block]; Regel in CLAUDE.md §Tests & CI + agents.md [je PR mitführen]; mechanischer Warn-Check in check-doc-consistency.sh Block 5 [jedes test:* aus server+client package.json muss in Tests.md stehen]; in docs/README.md-Landkarte + CLAUDE.md-Tiefenquellen verlinkt. check-doc-consistency.sh grün [alle test:* erfasst]. Kein App-Bump [Doku+Tooling]; PR #302). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-13 ~0.9 h (07-02, OP-OBS-1 Slice C1: Client-Telemetrie [Angular]→Grafana, Variante A [Nutzer-Wahl minimal/dependency-frei]. Blindflug behoben: unbehandelte Frontend-Fehler landen jetzt in Grafana. Kern-Entscheidung KEIN Token im Browser: Client POSTet same-origin an Access-gegateten Worker-Endpoint POST /api/obs/client; Worker mappt [rein/gehärtet server/src/obs/client-logs.ts: parseClientLogPayload+clientEventsZuLogs, Level-Whitelist/Anzahl-Deckel 50/Längen/Content-Length 128KB/PII-Scrubbing] → LogEvent[] service=taktano-client → serverseitig via postOtlpLogs [ctx.waitUntil, dormant→204]. Client client-obs.service.ts + TaktanoErrorHandler [Angular ErrorHandler + window.onerror + unhandledrejection + manuelle API; Ringpuffer 50, Batch-Flush 10s + sendBeacon on pagehide; best-effort/kein Re-Queue; Konsole zeigt Fehler weiter] in app.config.ts registriert. Neuer Test test:obs-client [CI Server-Job] + in Tests.md eingetragen [dogfood der mitführen-Regel]. Volles RUM/Faro = Slice C2 offen. tsc + test:obs-client + check-no-console + ng build + check-doc-consistency grün; v0.48.4→0.49.0 MINOR; PR #303). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-14 ~0.5 h (07-02, OP-OBS-1: Grafana-Dashboards automatisch per API einspielen [Dashboards-as-Code end-to-end]. Nutzer-Frage „erscheinen Dashboards automatisch über OTLP?“ → nein [OTLP = nur Daten-Transport] → Nutzer „erst Dashboard-Push per API“. Gebaut: dependency-freies scripts/push-grafana-dashboards.mjs [POST /api/dashboards/db, overwrite:true, stabile uid = Update-in-place, entfernt id/__inputs/__requires]; CI-Deploy-Job pusht nach Worker-Deploy [dormant ohne GitHub-Secrets GRAFANA_URL/GRAFANA_DASHBOARD_TOKEN, Muster wie Secret-Syncs]; neues netzfreies PR-Gate test:grafana-dashboards [--check: JSON parsebar, title/uid, uid eindeutig, Payload baubar] im CI-Server-Job + in Tests.md [mitführen-Regel]. Entscheidungen: Grafana-API direkt statt Terraform/Grizzly [Einfachheit, 0 Abhängigkeiten]; Repo = Single Source [Hand-Edits werden überschrieben]; Editor-Token least-privilege. Log-Hygiene: 3 „PR #307“-Platzhalter → #303/#301/#295. --check grün + dormant-Pfad verifiziert; kein App-Bump [CI/Tooling]; PR #307. Aktivierung offen [Nutzer]: Service-Account-Token + 2 Secrets). Session taktano-2026-07-03-llm-cost-auto-deduction-o3pd0p-15 ~1.0 h (07-03, Deploy-Blocker + Dashboard-Fix. (1) Befund: main-Deploys seit #304 rot — Vectorize-Self-Provisioning HTTP 403 [CI-CLOUDFLARE_API_TOKEN ohne Vectorize-Scope] → hartes [[vectorize]]-Binding ließ wrangler deploy scheitern [code 10159]; auch Nutzer-Re-Run identisch rot. Nutzer ergänzte Token-Scope [Account·Vectorize·Edit] → rerun_failed_jobs per API → Attempt 3 GRÜN: Index taktano-doku angelegt [1024 Dims, cosine], 498/498 Vektoren gepusht [RAG live], Worker v0.50.0 deployed, Grafana-Dashboard-Push lief echt [taktano-technik gepusht, nicht dormant]. (2) Nutzer-Screenshot „No data“: Daten WAREN in Loki, aber Panels parsten | json — OTLP-Gateway liefert Body=msg + Structured Metadata [detected_level/severity_text/Attribute]. Fix: 5 Loki-Queries auf detected_level-Label + Zeilenfilter umgestellt, Legende {{detected_level}}, README-Label-Hinweis ersetzt. test:grafana-dashboards grün; kein App-Bump; PR #319 — Dashboard aktualisiert sich nach Merge automatisch via #307-Push). Session taktano-2026-07-03-llm-cost-auto-deduction-o3pd0p-16 ~0.4 h (07-03, OP-OBS-1: Build-Nummer + Build-Zeit dezent im Grafana-Dashboard [Nutzer-Wunsch]. Server: OtlpResource.buildZeit [APP_BUILD_ZEIT] → Resource-Attribut service.build_zeit in Logs+Metrics-Payload [alle 4 Resource-Stellen] — Deploy-Zeitstempel an jeder Telemetrie-Zeile statt nur Boot-Zeile. Dashboard: schmales Stat-Panel [textMode=name, farblos, h2 rechte Spalte] zeigt v/Build/Zeit aus den Resource-Labels; Fehler/Warnungen auf h3 verschlankt. tsc + test:obs + test:obs-client + test:grafana-dashboards grün; v0.51.0→0.51.1 PATCH; PR #320). Session taktano-2026-07-03-llm-cost-auto-deduction-o3pd0p-17 ~0.7 h (07-03, OP-OBS-1/OP-AI-4: LLM-Dashboard + Token-Metrik [Nutzer-Wahl b]. Token-Metrik: LlmKonfig.onUsage + reiner Parser leseUsage() [defensiv, wirft nie] → DO zählt taktano_llm_tokens{zweck,art} [chat|embedding × prompt|completion] je API-Antwort; test:assistant-tools um leseUsage-Asserts erweitert. Neues Dashboard grafana/dashboards/taktano-llm.json [uid taktano-llm, 11 Panels: Turn-Rate/Frontend, Latenz P50/P95, Token-Rate+Summe, 3 RAG-Panels, Kosten-Pull-Gesundheit, Assistent-Fehler-Logs] — wird vom #307-Push automatisch eingespielt. Scope: Nutzung in Grafana, Euro-Kosten bleiben in der App [OP-COST-2]. tsc + test:assistant-tools + test:grafana-dashboards [2 Dashboards] grün; v0.51.1→0.52.0 MINOR; PR #321). Session taktano-2026-07-03-llm-cost-auto-deduction-o3pd0p-18 ~0.8 h (07-03, OP-AI-4: Hybrid-Matching Live-Daten [Nutzer-Befund „Kaffee kochen“ fand Skill „Kaffee machen“ nicht + Wunsch „exakt+semantisch kombinieren“]. Ursache: Ganz-Phrasen-Substring im datenListe-Filter. Gebaut dreistufig: (1) Token-Matching [neues reines Modul matching.ts: tokens/tokenTreffer/cosine/semantischeTreffer]; (2) semantische Stufe: Anfrage-Embedding [EU-Modell] gegen lazy gecachte Skill-Namen-Embeddings [Cosine, Schwelle 0.6/top3], Vektoren transient im DO [derived/nie persistiert, NICHT Vectorize — kein PII, RISK-17 unverändert], Treffer transparent „semantisch ähnlich“ markiert; (3) Selbstkorrektur: 0 Treffer → verfügbare Skill-Namen ans LLM. datenListeText async+llm; Token-Matching auch skills/leistungen. Neuer test:matching [CI+Tests.md — Warn-Check aus #302 mahnte das Fehlen selbst an]. tsc + test:matching + test:assistant-tools + check-no-console grün; v0.52.0→0.53.0 MINOR; PR #322). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-12 ~0.4 h (07-02, OP-DOCS-9: lebende Test-Übersicht + Regel „immer mitführen". Nutzer „Übersicht über alle automatischen Tests in der Doku immer mitführen". Gebaut: docs/betrieb/Tests.md [Tabellen: 29 Server-test:-Selbsttests · Smokes · Client · Solver · Gates, je Befehl/Prüfgegenstand/OP-Bezug/CI-Job + lokal-ausführen-Block]; Regel in CLAUDE.md §Tests & CI + agents.md [je PR mitführen]; mechanischer Warn-Check in check-doc-consistency.sh Block 5 [jedes test: aus server+client package.json muss in Tests.md stehen]; in docs/README.md-Landkarte + CLAUDE.md-Tiefenquellen verlinkt. check-doc-consistency.sh grün [alle test:* erfasst]. Kein App-Bump [Doku+Tooling]; PR #302). Session taktano-2026-07-02-vectorize-rag-analysis-ad9mt5-1 ~0.6 h (07-02, OP-DOCS-2/OP-AI-4: Vectorize/RAG Pain-Gain-Analyse → Aktivierung bewusst zurückgestellt. Nutzer „Vectorize/RAG — what is the pain/gain?" → „Let's do it" [Entscheidung festhalten]. Befund: Code fertig + dormant-sicher [semantischer Pfad aktiviert sich mit DOKU_INDEX-Binding, TF-IDF-Keyword-Fallback läuft, ~460 Chunks]; Rest-Pain = Ops [Provisionierung · Embeddings-Push · Re-Index je Doku-Deploy/Drift] + Query-Latenz [Fallback fängt]; Kosten vernachlässigbar; Gain = Recall bei Vokabular-Mismatch [Komposita/Flexion/Nutzer- vs. Glossar-Sprache] — intern heute ausreichend, kritisch bei externen Widget-Nutzern. Entscheidungen: Aktivierungskriterium [externe Doku-Sicht/Widget OP-DOCS-5 ODER reale Recall-Beschwerden] statt Sofort-Provisionierung + Runbook-Kurzform [In-App-Assistent.md §8.1]; proaktiver DSGVO-Flag → neuer RISK-17 [Vectorize ohne EU-Jurisdiktion, anders als R2; kein PII im Index; Compliance-Nachzug bei Aktivierung Pflicht]. Doku-only, kein Bump; PR #304). Session taktano-2026-07-02-vectorize-rag-analysis-ad9mt5-2 ~0.9 h (07-02, OP-DOCS-2/OP-AI-4: RAG aktiviert. Nutzer „Implement RAG" → überstimmt die Zurückstellung aus Session 1; Retrieval-Kern war fertig → gebaut wurde die Aktivierungsschicht. Gebaut: scripts/push-doku-index.mjs [npm doku-index:push = frisch chunken + pushen]: Index taktano-doku SELF-PROVISIONING [GET→CREATE, 1024/cosine = mistral-embed], Batch-Embedding über EU-Endpoint [ASSISTENT_LLM_BASE_URL, Dimension validiert], NDJSON-Upsert via CF-REST-API [Metadaten = rankVectorize-Vertrag; gleiche IDs → Re-Index überschreibt; bewusste Grenze: verwaiste Vektoren nach Abschnitts-Löschungen dokumentiert]; dormant-sicher [ohne CF-Token Skip, ohne ASSISTENT_LLM_KEY nur Index sicherstellen → Keyword-Fallback]; [[vectorize]]-Binding DOKU_INDEX in wrangler.toml einkommentiert; CI: deploy-Job pusht VOR wrangler deploy [Binding existiert garantiert], docs-deploy re-indext Doku-only [OP-DOCS-1 d, Fast-Track überspringt deploy]. Compliance/Risiko: neue Zeile C-19 [Compliance.md] + RISK-17 → in Arbeit/akzeptiert. Verifikation: doku-index regeneriert [499 Chunks, committet] · Push-Dry-Run dormant-Pfad · Parse-Check [Parser-Bug DokuChunk[] vs. Array-Start gefunden+gefixt] · tsc + test:assistant-retrieval grün; echter Push beim ersten main-Deploy [Secrets nur in CI]. v0.48.4→0.50.0 MINOR [0.49.0→0.50.0 korrigiert, Kollision mit #303]; PR #304). Session taktano-2026-07-02-vectorize-rag-analysis-ad9mt5-3 ~0.4 h (07-02, PR #304 CodeRabbit-Review: 5 Findings, alle umgesetzt [Leitsatz Deploy-Verfügbarkeit > Index-Frische]. (1+5) Push-Script nicht-blockierend: AbortSignal.timeout 30 s + 1 Retry [429/5xx/Netz] auf jedem externen Call [hole()-Wrapper], Top-Level-Catch → :⚠️: + Exit 0 [Keyword-Fallback trägt, nächster Deploy re-indext; echtes Existenz-Gate bleibt wrangler deploy]; (2+3) beide Workflow-Steps continue-on-error:true + timeout-minutes:10 [ci.yml deploy + docs-deploy — Crash/Hänger ≠ Deploy-/Docs-Blocker]; (4) fragiles TS-Text-Scraping → JSON-Sidecar doku-index.generated.json [build-doku-index.mjs schreibt beide; Build-Artefakt, .gitignore]. Fehlerpfad end-to-end verifiziert [Bogus-Creds → Warning + Exit 0] + Sidecar-Parse [499 Chunks] + node --check + YAML valide. Kein Version-Bump [Härtung innerhalb desselben PR]; PR #304). Session taktano-2026-07-02-vectorize-rag-analysis-ad9mt5-4 ~0.5 h (07-02, OP-DOCS-2/OP-OBS-1: RAG-Wirkung messbar. Nutzer „can we track in the metrics or logs the impact of the rag?" → ja, über den bestehenden OTel-Stack [kein neues System]. Gebaut: dokuSuche in leitstand.ts instrumentiert — Counter taktano_doku_suche{pfad,grund,ergebnis} [vectorize·ok vs. keyword + Fallback-Grund dormant/fehler/leer; ergebnis=leer = Recall-Signal], Histogramme taktano_doku_suche_dauer{pfad} [Pain live] + taktano_doku_suche_score [Cosine-Top-Score, neue SCORE_BUCKETS in metrics.ts], Logzeile assistent.dokuSuche [ohne Fragetext, nur frageLaenge — OP-LOG-1]; 3 Grafana-Panels [RAG-Anteil/Fallback · Latenz P95 · Score P50/P90]; Observability.md Slice A2. Dabei Versions-Kollisionen entdeckt+behoben: #303 nahm parallel 0.49.0, #306 später 0.50.0 → dieser PR final auf 0.51.0 [OP-PM-2-Muster]. tsc + test:obs + test:assistant-tools + Dashboard-JSON valide; v0.48.4→0.51.0 MINOR; PR #304). Session taktano-2026-07-03-vectorize-rag-analysis-ad9mt5-5 ~0.4 h (07-03, OP-OBS-1/OP-DOCS-2: CI-Warnung in den zentralen Log-Sink + Leitlinie. Nutzer „continue on error aber mit Warnung in log" + „Add general guideline: OTLP/Grafana is log sink". Branch neu von main aufgesetzt [#304 gemergt + auto-gelöscht]. Gebaut: push-doku-index.mjs → meldeWarnungAnGrafana() [WARN-Event an OTLP /v1/logs, service.name=taktano-ci, Header-Parsing wie otlp.ts, best-effort/Timeout/dormant]; beide Workflow-Steps reichen OTEL_EXPORTER_OTLP_ENDPOINT/_HEADERS durch; Leitlinie in CLAUDE.md §Observability + Observability.md §1 [zentraler Sink für Laufzeiten UND Tooling/CI, Annotationen = Ergänzung nie Ersatz]. Verifikation: node --check + Fehlerpfad-Dry-Run [Bogus-Creds + toter OTLP-Endpoint → Warnung + Exit 0] + YAML + doku-index regeneriert. Kein App-Bump [Tooling/Doku]; PR folgt). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-12 ~0.4 h (07-02, OP-DOCS-9: lebende Test-Übersicht + Regel „immer mitführen". Nutzer „Übersicht über alle automatischen Tests in der Doku immer mitführen". Gebaut: docs/betrieb/Tests.md [Tabellen: 29 Server-test:-Selbsttests · Smokes · Client · Solver · Gates, je Befehl/Prüfgegenstand/OP-Bezug/CI-Job + lokal-ausführen-Block]; Regel in CLAUDE.md §Tests & CI + agents.md [je PR mitführen]; mechanischer Warn-Check in check-doc-consistency.sh Block 5 [jedes test: aus server+client package.json muss in Tests.md stehen]; in docs/README.md-Landkarte + CLAUDE.md-Tiefenquellen verlinkt. check-doc-consistency.sh grün [alle test:* erfasst]. Kein App-Bump [Doku+Tooling]; PR #302). Session taktano-2026-07-02-llm-cost-auto-deduction-o3pd0p-13 ~0.9 h (07-02, OP-OBS-1 Slice C1: Client-Telemetrie [Angular]→Grafana, Variante A [Nutzer-Wahl minimal/dependency-frei]. Blindflug behoben: unbehandelte Frontend-Fehler landen jetzt in Grafana. Kern-Entscheidung KEIN Token im Browser: Client POSTet same-origin an Access-gegateten Worker-Endpoint POST /api/obs/client; Worker mappt [rein/gehärtet server/src/obs/client-logs.ts: parseClientLogPayload+clientEventsZuLogs, Level-Whitelist/Anzahl-Deckel 50/Längen/Content-Length 128KB/PII-Scrubbing] → LogEvent[] service=taktano-client → serverseitig via postOtlpLogs [ctx.waitUntil, dormant→204]. Client client-obs.service.ts + TaktanoErrorHandler [Angular ErrorHandler + window.onerror + unhandledrejection + manuelle API; Ringpuffer 50, Batch-Flush 10s + sendBeacon on pagehide; best-effort/kein Re-Queue; Konsole zeigt Fehler weiter] in app.config.ts registriert. Neuer Test test:obs-client [CI Server-Job] + in Tests.md eingetragen [dogfood der mitführen-Regel]. Volles RUM/Faro = Slice C2 offen. tsc + test:obs-client + check-no-console + ng build + check-doc-consistency grün; v0.48.4→0.49.0 MINOR; PR #303). Stand 2026-07-02. Stand 2026-07-01 ~19:25. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-9 ~0.5 h (07-02, OP-AI-4 Accuracy: Datenmodell-Grounding + Anti-Halluzinations-Regel [Assistent erfand Mitarbeiter/Fakten bzw. „Niveau 4"]. Neuer Steckbriefserver/src/assistant/datenmodell.ts[DATENMODELL: EnumFakt[]= Skalen 1–3 · Auftrag-/Teilschritt-/Mitarbeiter-Status · Phasen · Abhängigkeit · Schicht-/Leistung-Status, synchron zu model/types.ts+operativ/auftrag.ts, OP-DOCS-9] +datenmodellPrompt()/datenmodellText(); System-Prompt injiziert Steckbrief immer + Regeln „ERFINDE NIEMALS Fakten [nur echte Werkzeug-Daten, sonst ehrlich keine Daten]" + „strikt an Wertebereiche [kein Niveau 4/5]" [frühere #282-Einzeiler aufgegangen]; neues read-only Tooldatenmodell[Registry 9→10, gebunden in leitstand.ts]. typecheck+test:assistant-tools [10 Werkzeuge · Dispatch datenmodell→„1–3" · System-Prompt „ERFINDE NIEMALS"] grün; v0.42.1→0.42.2 PATCH; PR folgt). Stand 2026-07-02 ~09:30. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-10 ~0.8 h (07-02, OP-FEEDBACK-1 PR-A: nummerierte Markierungen im wiederverwendbaren Bild-Schutz. Reiner Kernupload-gate.ts: TypMarkierung {nummer;xProzent;yProzent;notiz?}[prozentual→auflösungsunabhängig] + reine Helfer markierungHinzufuegen/Entfernen [Re-Nummerierung ab 1]/Notiz/Text, von test:bildgate mitgeprüft; Komponentebild-upload-gate.component.ts: Modus „① Punkt markieren" [exklusiv zu Bereich-Markieren], prozent-Vorschau-Kreise, Notiz-Liste, Einbrennen ins Bild auf Off-Screen-Kopie [Canvas arc+fillText, Farben via getComputedStyle→No-Hex, idempotent], neuerbildQuelle/ladeBlob-Eingang, Ausgabefreigegeben:{blob;markierungen}; Seite /bild-schutz konsumiert. Entscheidungen eigenes Canvas · Layer wiederverwendbar · Off-Screen-Einbrennen. test:bildgate+ng build+No-Hex grün; v0.42.2→0.43.0 MINOR; PR folgt. Offen PR-B: Screenshot html2canvas→Bild-Schutz+Markierungen→R2/D1). Stand 2026-07-02 ~10:20. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-11 ~1.0 h (07-02, OP-FEEDBACK-1 PR-B: Screenshot-Feedback mit Bild-Schutz + nummerierten Markierungen — konsumiert PR-A. Aufnahmeservices/screenshot.service.ts[Regions-Auswahl + lazy html2canvas→38-kB-Chunk, Crop auf Region, ignoreElements data-tk-screenshot-ignore] +screenshot-region-overlay.component.ts[Ziehen-Auswahl, in shell gemountet]; Formular bettetapp-bild-upload-gate [bildQuelle]ein, freigegeben {blob,markierungen}→Upload; Server-Zweig/api/feedback/screenshot[FOTOS-Key feedback/, dormant 503] + FeedbackService.ladeScreenshotHoch; FeedbackAnfrage +screenshotKey/+markierungen, /feedback baut Access-gated Link aus url.origin, feedbackZuIssue hängt „Screenshot (intern, Access-gated)"-Sektion + Markierungs-Bullets an. html2canvas@^1.4.1 [allowedCommonJsDependencies]. typecheck+test:assistant-feedback+test:bildgate+ ng build+No-Hex grün; v0.43.0→0.44.0 MINOR; PR folgt. ➡ OP-FEEDBACK-1 vollständig [PR-A+PR-B]; offen OP-FEEDBACK-2 Kunden-Sichtbarkeit). Stand 2026-07-02 ~11:30. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-12 ~1.3 h (07-02, OP-DOCS-2 Doku-Widget auf docs.taktano.com [Assistent-Frontend Nr. 2] + CORS + Frontend-Werkzeug-Gate. Nutzer-Entscheidungen: Doku-Seite intern-only, Widget-Umfang Doku-Q&A+Feedback. Reiner CORS-Helferserver/src/http/cors.ts[parseCorsAllowlist/corsErlaubt/corsHeaders, spiegelt Origin, nie *, credentials] +test:cors[CI]; Worker-fetch: OPTIONS-Preflight vor Access-Check, mitCors auf /parties/… + /api/feedback/screenshot; Env ASSISTENT_CORS_ORIGINS. DO onRequest: istDokuFrontend [Origin in Allowlist] → fuehreDialog werkzeugFilter ['dokuSuche','datenmodell']+systemZusatz; handler.ts filtert TOOL_DEFS. Docs-Widgetdocs-site/src/clientModules/assistentWidget.js[SSR-sicher, Tabs Doku-Frage/Feedback, credentials:include, Infima-Styling in custom.css], appOrigin via /customFields, in docusaurus.config.js registriert. Infra-Voraussetzung dokumentiert: gemeinsame Access-App über *.taktano.com. typecheck+test:cors+test:assistant-tools [Doku-Modus 2 Tools / App 10]+docs-site build grün; v0.44.0→0.45.0 MINOR; PR #291.). Stand 2026-07-02 ~13:00. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-13 ~0.4 h (07-02, OP-DOCS-2 Doku-Widget-Bugfixes [Nutzer-Screenshot]: (1) Enter sendet Frage ab [Keydown-Handler, Umschalt+Enter=Umbruch]; (2) Antworten/Fehler verschwanden — imperativ an Body gehängt, aber finally-render() überschrieb sie → jetzt Chat-Antwort+Fehler im verlauf [Assistent-Blase] + Feedback-Quittung als persistente status-Zeile, render() zeichnet mit; HTTP-Status im Fehlertext; (3) Art-Chips nur im Feedback-Tab [CSS .tk-assi-arten[hidden]{display:none} schlägt display:flex]. Nur docs-site [assistentWidget.js + custom.css];docs-site buildgrün; v0.48.2→0.48.3 PATCH; PR #295. Rest-Hinweis: „Server nicht erreichbar" = Access-Cross-Origin-Voraussetzung [gemeinsame Access-App *.taktano.com], nicht Client.). Stand 2026-07-02 ~14:30. Session 2026-07-02-in-app-chatbot-feedback-vpv8ed-14 ~0.6 h (07-02, OP-FEEDBACK-1 Screenshot-Feedback-Bugfixes [Nutzer-Meldung: Aufnahme unsichtbar, keine Markierungen, kein Bild im Issue]. Wurzel a: Kamera-Qualitäts-Gate [min 640×480] blockierte UI-Ausschnitt → „Gesperrt" → Hochladen deaktiviert → kein screenshotKey → kein Issue-Bild; Wurzel b: html2canvas backgroundColor:null auf dunklem color-mix/backdrop-blur-Cockpit → leer wirkende Aufnahme, Capture-Fehler nicht angezeigt. Fixes: Gate@Input gateConfig[Default STANDARD_GATE], Formular reicht entschärfte Screenshot-Konfig [NSFW bleibt]; Aufnahme mit deckendem --tk-bg-Hintergrund [Fallback white], <8px-Zuschnitt → ehrliche Meldung; Capture-Fehler als Danger-Banner + „Erneut aufnehmen" im Formular. test:bildgate+ng build+No-Hex grün; v0.48.3→0.48.4 PATCH; PR folgt.). Stand 2026-07-02 ~16:15. Session taktano-2026-07-02-ipdad-fix-rinfjx ~0.5 h (07-02, OP-FEEDBACK-1 iPad-Fix: Feedback-Screenshot scheiterte auf iPadOS/Safari mit „unsupported color function “color”“ — html2canvas@1.4.1 parst moderne CSS-Farbfunktionen [color()/oklch/lab/color-mix] nicht, Safari liefert computed Styles als color(srgb …). Fix: Wechsel auf html2canvas-pro@2.2.1 [gepflegter API-kompatibler Fork, unterstützt genau diese Farbfunktionen; nur Lazy-Import getauscht, Optionen unverändert]; ESM → allowedCommonJsDependencies aus angular.json raus.ng buildgrün [Lazy-Chunk html2canvas-pro-esm, Initial unverändert]; v0.49.0→0.49.1 PATCH; PR folgt. Doku: In-App-Assistent §9 Slice 10, Bildbewertung, Lastenheft OP-FEEDBACK-1, HANDOFF §4.). Stand 2026-07-02 ~17:15. Session taktano-2026-07-02-ipdad-fix-rinfjx-2 ~0.4 h (07-02, Build-Zeit sichtbar [Nutzer: „bau die Build-Zeit ein“]. stamp-build.mjs stempelt zusätzlich APP_BUILD_ZEIT [ISO-UTC, Stempel-=Deploy-Zeitpunkt] in build-number.ts [Fallback leer = Dev-Stand]; version.ts re-export + ans APP_VERSION_LABEL [Boot-Log automatisch]; DO-State appBuildZeit → Client; Planung-Statuszeile „v… · Build … · YYYY-MM-DD HH:MM UTC“ [computed, Tooltip]. Entscheidungen: Deploy- statt Commit-Zeit · leerer Fallback statt Pseudo-Zeit · bestehendes Label statt neues UI-Element. typecheck+ng build+No-Hex+Stempel-Test grün; v0.49.1→0.50.0 MINOR; PR folgt.). Stand 2026-07-02 ~18:45. Session taktano-2026-07-02-ipdad-fix-rinfjx-3 ~0.3 h (07-03, Wrap-up: PR #305 [iPad-Fix] + #306 [Build-Zeit] + #304 [RAG, fremde Session — „merge sobald grün“] gemergt [Squash, CI grün, Branches gelöscht]; Log-Hygiene OP-PM-2: 10 CHANGELOG-Dubletten aus union-Merges entfernt [PR-Link-Fassung behalten, Diff-verifiziert kein Inhaltsverlust; #257-Triple = echte Folge-Captures, bleibt; Legacy-Timesheet-IDs 37–47 grandfathered]. check-doc-consistency ohne neue Hinweise.). Stand 2026-07-03 ~01:00. Session taktano-2026-07-03-chatbot-docs-bug-6zvwnv ~0.9 h (07-03, OP-DOCS-2 Doku-Widget-Fix [Nutzer-Screenshot: jede Frage → „Server nicht erreichbar“]. Ursache: Cross-Origin-Fetch docs.taktano.com→app.taktano.com kam nie am Worker an — Cloudflare Access [Edge] vor app.taktano.com leitete CORS-Preflight [OPTIONS ohne Cookie] und credentials-POST [kein App-Access-Cookie im Docs-Kontext] zum Login um [Redirect ohne CORS-Header → fetch-TypeError → Catch-Zweig]; die Worker-CORS-Schicht aus #291 lief HINTER dem Gate [bestätigt den Rest-Hinweis aus Session vpv8ed-13]. Fix Everything-as-Code statt Access-Dashboard: Same-Origin-Proxy — Pages-Function docs-site/functions/parties/[[pfad]].js [nur POST, Allowlist assistant/feedback/feedback/aehnliche, kein WS/State-Durchgriff] + Service-Binding APP_WORKER→Worker taktano [docs-site/wrangler.toml]; Widget/docusaurus.config default same-origin [TAKTANO_APP_ORIGIN-Override bleibt]; Doku-Frontend-Werkzeugfilter greift weiter [Origin-Header auch same-origin gesetzt]. Folge-Hinweis dokumentiert: bei Scharfschalten der Worker-JWT-Prüfung [OP-COST-3] Docs-AUD nötig. docs-site npm run build grün + Proxy-Allowlist per Node geprüft; v0.53.0→0.53.1 PATCH; PR folgt. Doku: In-App-Assistent.md §9 Slice 11-Korrektur + Slice 12, HANDOFF §2/§4, CHANGELOG, Timesheet.) Session taktano-2026-07-03-chatbot-docs-bug-6zvwnv-2 ~0.7 h (07-03, OP-DOCS-7 Feedback-Übersicht [Nutzer-Wunsch „in App und Doku anzeigen, wo es offenes/geschlossenes Feedback gibt + Issue-Liste in der Doku, read-only“]. Quelle = die ohnehin angelegten GitHub-Feedback-Issues [Label feedback, kein zweiter Datenbestand]. Server: GET /feedback/liste am DO [FeedbackListe, dormant ohne Token, Berechtigung wie /assistant] + reine Helfer githubFeedbackListePfad [state=all]/issuesAusListe [PRs raus, Status offen/geschlossen]/routeAusIssueBody [Verortung aus Issue-Body zurückgelesen]; DTO-Symmetrie FeedbackIssue/FeedbackListe beidseitig. App: Sektion „Bisheriges Feedback“ im Feedback-Formular [Status-Badge amber/grün + Titel-Link + Route, lädt beim Öffnen]. Doku-Widget: dritter Tab „Issues“ [read-only, via Same-Origin-Proxy; Allowlist +GET feedback/liste; .tk-assi-form[hidden]-CSS — gleiche display:flex-Falle wie einst die Art-Chips]. test:assistant-feedback erweitert [Listen-Pfad/Route-Rücklese/Status-Mapping] + Tests.md nachgezogen. tsc + test:assistant-feedback + ng build + No-Hex + docs-site build + Proxy-Allowlist-Check grün; v0.53.1→0.54.0 MINOR; gleicher PR wie der Widget-Fix. Doku: In-App-Assistent.md §9 Slice 13, HANDOFF, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-markup-rendering-issue-tooltips-8i90j3 ~0.9 h (07-03, OP-DOCS-2/-7 Markdown-Rendering + Issue-Tooltip [Nutzer-Screenshot: Assistent-Antworten im Doku-Widget als roher Markdown-Text ###/fett/[Link]; Wunsch: Issue-Liste mit Details im Tooltip inkl. verlinkter Screenshots/Bilder]. (1) Widget-eigener minimaler Markdown-Renderer mdHtml [erst escapen, dann zeilenbasiert Überschriften/Listen/Trennlinien/```-Code + Inline fett/kursiv/Code/Links mit Schema-Allowlist nur http(s)/relativ — Entscheidung: keine Markdown-Lib, Einfachheit; escapeHtml escapet jetzt auch " für Attribut-Sicherheit; Nutzer-Blasen bleiben Klartext]. (2) FeedbackIssue +details [Body ohne -Meta/Bild-Markup, 600 Zeichen] +bilder [Markdown-Bilder, , Bild-URLs inkl. GitHub-Attachments + Access-gated Screenshot-Link] via reine Helfer detailsAusIssueBody/bilderAusIssueBody [github-issues.ts], DTO-Symmetrie beidseitig; Doku-Widget: Hover-/Fokus-Tooltip je Zeile [position:fixed gegen Panel-Overflow-Clipping, bleibt beim Überfahren offen → Bild-Links klickbar, 📷-Marker]; App-Formular „Bisheriges Feedback“: derselbe Tooltip [verzögertes Ausblenden; Details als Klartext — Entscheidung: kein Markdown-Renderer im Angular-Client]. Log-Hygiene: HANDOFF-Dubletten OP-DOCS-2/OP-AI-4 [Union-Merge, Bodies identisch] entfernt; CHANGELOG „(PR folgt)“ → #323/#324-Links. test:assistant-feedback +10 Asserts + tsc + ng build + Widget-JS-Syntax-Check grün; v0.56.0→0.57.0 MINOR [0.55/0.56 parallel vergeben, beim main-Merge aufgelöst]; PR #388. Doku: In-App-Assistent.md §9 Slice 15, HANDOFF §2/§4, Tests.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-markup-rendering-issue-tooltips-8i90j3-2 ~0.4 h (07-03, OP-DOCS-7 Nachschärfung [Nutzer „Ich sehe die Issues nur im Chat-Dialog — wo ist das in der App?“]: die Feedback-Übersicht war in der App nur im Feedback-Formular versteckt [öffnet erst beim Feedback-Geben]. Neu: „🗂 Issues“-Umschalter in der Kopfzeile des Assistent-Panels [neben „📍 Feedback“] zeigt die read-only Liste direkt im Chat-Drawer [Eingabe/Verlauf ausgeblendet, Umschalten lädt die Liste neu]; Liste + Detail-Tooltip in wiederverwendbare Komponente feedback-issues-liste.component.ts extrahiert [Formular + Panel nutzen dieselbe — Wiederverwendung statt Duplikat, Input hoeheKlasse kompakt/voll]. ng build + No-Hex grün; Version 0.57.0 [gleicher PR]. Doku: In-App-Assistent.md §9 Slice 15, HANDOFF §2/§4, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-chatbot-docs-bug-6zvwnv-3 ~1.2 h (07-03, OP-DOCS-7/OP-FEEDBACK-1 Feedback-UX-Umbau [Nutzer: „Dialog ist nicht gut“ + 3 Wünsche]. (a) EIN Schritt: neues screenshot-editor-overlay [öffnet direkt nach Aufnahme; bild-upload-gate wiederverwendet]; Feedback-Pin erfasst Element automatisch als Screenshot [Ausschnitt+12px, best-effort, data-tk-screenshot-ignore]; Formular verschlankt. (b) Overlay statt Dialog-Liste: feedback-marker-overlay [Element-Marker via selektorAusIssueBody→FeedbackIssue.selektor, Klick-Tooltip, Seiten-Chip, rAF-Reposition]; Doku: Navbar-Toggle 💬 + Seiten-Chip-Popover je Seite; Widget-Tab Issues bleibt. (c) globaler Toggle wie Light/Dark [Rail-Button „Feedback-Anzeige“/Navbar, localStorage tk-feedback-overlay, Default aus]. Branch von main neu aufgesetzt [#324 war gemergt]. tsc + test:assistant-feedback + ng build + No-Hex + test:bildgate + docs-site build grün; v0.54.0→0.55.0 MINOR; PR #379. Doku: In-App-Assistent.md §9 Slice 14, HANDOFF, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-chatbot-docs-bug-6zvwnv-4 ~0.5 h (07-03, OP-DOCS-7 Echtzeit-Feedback [Nutzer: neues Feedback erscheint nicht direkt in der UI → weiterhin per Broadcast/Partykit an alle]. DO: ServerMsg feedback.neu nach erfolgreichem Anlegen in erstelleFeedbackIssue an alle Verbindungen [FeedbackIssue aus Anlege-Daten: Nummer aus URL, Titel/Labels/Route/Selektor; best-effort]. App: LeitstandService → FeedbackService.issueEingegangen [merge vorn+dedupe → Marker/Chip live] + Info-Toast „💬 Neues Feedback · #N“. Doku bewusst ohne WS [OP-DOCS-5]: 60-s-Refresh bei aktivem Overlay + Seitenwechsel-TTL + sofort nach eigenem Feedback. Branch erneut von main aufgesetzt [#379 gemergt]. tsc + ng build + docs-site build grün; v0.55.0→0.56.0 MINOR; PR #384. Doku: In-App-Assistent.md §9 Slice 14a, HANDOFF, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-pickup-date-special-requests-6hrlnc ~0.8 h (07-03, OP-UX-1/U9 + R7-F10: Frühestmöglicher Abholtermin direkt in der Annahme + Sonderwünsche [Nutzer-Wunsch mit Screenshot]. (1) Neuer Dry-Run auftrag.terminvorschlag [leistungId/anlieferung/gueteklasse → fruehesteAbholung = scheduleLeistung(...).abholbereit inkl. Standzeit; kein State-Change/Reopt]; Annahme fragt entprellt [300 ms] bei Leistung-/Anlieferung-/Güteklasse-Änderung an [ohne Anlieferung ab „jetzt"]; Vorbefüll-Regel: leeres/auto-befülltes Wunsch-Abholung-Feld wird sofort vorbefüllt, Hand-Wert bleibt [„Frühestmöglich: … · Übernehmen"-Zeile]; nicht machbar → Amber-Hinweis mit Grund. Neue Zeit-Helfer minToInput/nowInput [util/time.ts]. (2) Sonderwünsche [R7-F10, war spezifiziert/nicht gebaut]: Freitext-Feld Annahme → auftrag.create.sonderwuensche → Auftrag.sonderwuensche [additiv, keine Migration] → Bestätigungs-Dialog + Aufträge-Detail. Abgrenzungen: Struktur/Auswertung = OP-FIND-1, QS-Prüfpunkt = OP-QS-GATE-Erweiterungspunkt [vertagt], Foto/Voice-Kommentare = OP-R7-12; kein neuer Self-Test [dünner Wrapper/Pass-through]. tsc + Smokes [spike/operativ/teilplan/abnahme/preis] + ng build grün; v0.57.0→0.58.0 MINOR; PR folgt. Doku: Operative-Durchgaengigkeit §U9, Lastenheft F10+§5.2.2, Funktionsumfang, HANDOFF §2, CHANGELOG.)
Session taktano-2026-07-03-dependabot-vulnerabilities-0wzu6o ~1.0 h (07-03, RISK-4/OP-SBOM-1/OP-SEC-1 Dependabot-/Vuln-Assessment + Safe-Fixes [Nutzer-Wahl „Assess + Safe-Fixes" + „flyctl pinnen"]. Befund: 0 Prod-Runtime-Vulns [Server/Client npm audit --omit=dev = 0, pip-audit grün; html2canvas-pro/@angular/service-worker advisory-frei] — alle 57 Voll-Audit-Findings [Server 8 · Client 12 · docs-site 37] nur Dev-/Build-Toolchain. Fixes nicht-brechend: wrangler ^4.105 [Server+docs-site → undici/ws/miniflare-Highs weg] · Client npm audit fix [Angular-Build 20.3.31, vite 7.3.5] + Patch-Override http-proxy-middleware 3.0.7 [Angular-Exakt-Pin 3.0.5] · flyctl-Action SHA-gepinnt [ed8efb3 = v1.6, letzte @master-Referenz]. Residuen begründet akzeptiert [drizzle-kit-esbuild moderate · Client babel/uuid low/moderate · docs-site serialize-javascript high nur Build-Cache statischer Doku — npm-„Fixes" wären Downgrades, abgelehnt]. Branch von main neu aufgesetzt [0 eigene Commits, main 64 voraus]. Prod-Gates + ng build + docs-site build grün; v0.57.0→0.57.1 PATCH; PR folgt. Doku: Risikoregister RISK-4, Compliance C-05, HANDOFF OP-SBOM-1 [+1 Union-Merge-Dublette entfernt; ältere §4-Generationen für eigene Glättungs-Session belassen], CHANGELOG, Timesheet.)
Session taktano-2026-07-03-planning-queue-optimization-iniw7z ~1.2 h (07-03, OP-OPT-9 Ressourcen-Queues + Auto-Re-Opt [Nutzer-Frage „Hat jeder Platz/Mitarbeiter eine priorisierte Queue? Wird bei jeder Veränderung das nächste Optimum vorgeschlagen?" → Analyse-Antwort + „Baue einen Slice für beide Vorschläge"]. (1) Neue Komponente naechste-aufgaben.component.ts in der Planung unter dem Gantt: priorisierte Queue je Mitarbeiter/Arbeitsplatz als reine Projektion des Plans [S-2, kein Server-Change] — ▸ läuft/⏸ pausiert/1…n als Nächstes, je Eintrag Start·Auftrag·Schritt·🎓-Helfer·⚡-Terminkonflikt, Kopf „frei ab …"/„jetzt frei" [True North 3], Bucht-Freigabe inkl. Cool-down [bayEnd], Klick → geteiltes Detail-Panel; Entscheidung: Architektur bleibt globaler Plan, keine lokalen Dispatch-Queues [verlieren Abhängigkeiten/Termine/G-2/G-3]. (2) aktualisiereVorschlaegeAuto wendet terminneutrale Pareto-Verbesserungen direkt an [autoAnwendbar in neu operativ/autoopt.ts: ≥1 früher UND keiner später; Umsortierung ohne Zeitgewinn bewusst nicht → Plan-Stabilität]: Chronik je geändertem Auftrag + Audit plan.auto + solverInfo + Persist; Trade-offs bleiben Vorschlag. Neuer Selbsttest test:autoopt [+CI, Tests.md]. tsc + test:autoopt + ng build grün; v0.58.0→0.59.0 MINOR; PR folgt. Doku: Lastenheft §11.2 OP-OPT-9, HANDOFF §2/§4, Funktionsumfang, Sanity-Checkliste F3, CHANGELOG, Timesheet.)
Session taktano-2026-07-03-planning-queue-optimization-iniw7z-2 ~0.4 h (07-03, OP-OPT-9 Slice 3 [Nutzer „Ja (PR), dann nächster Slice"]: PR #393 geöffnet; persönliche Queue in „Meine Arbeit" — meineSchritte sortiert geplante Schritte nach Optimierer-Startzeit [vorher Auftragsnummer], Positions-Badge 1…n für wartende [1 = als Nächstes], „ab <model-viewer> v4.3.1 [Drehen + Hotspot-Markierungen out of the box, Klick-Setzen via positionAndNormalFromPoint, erste Lazy-Route] + renderer-neutrales Markierungs-Datenmodell [FahrzeugMarkierung am Auftrag: Position/Normale · kommentar · mangelId? · fotoIds[] → FotoAttachment/Mangel/OP-R7-16] + iOS-Pfad GLB→USDZ [RealityKit/Quick Look; model-viewer-AR = „AR vorbereiten"]. Konsequenz: OP-R6-2-Aufwand-Flag relativiert, Stufe 1 kann direkt generisches 3D sein [Slices V-1…V-4]. Reine Doku, keine Version; PR #396. Doku: Lastenheft OP-R6-2, HANDOFF §4, Doku-Landkarte, CLAUDE.md-Tiefenquellen, CHANGELOG, Timesheet.)
Stand 2026-07-04.
Session taktano-2026-07-04-design-input-integration-ae43ki ~4.5 h (07-04, OP-UX-4 v3-Kern-Loop-Redesign [Nutzer: „Übernehme den Input aus Claude Design und lege es im Repo ab; dann setze exakt um" + 4 Rückfragen-Entscheidungen: alle 8 Workspaces sofort · LLM-Parsing direkt (Heuristik-Fallback) · Nav 8 Kern + „Weitere" · Konflikte & Klärfälle als Tabs]. (1) Design-Bundle abgelegt: v3-Prototyp ersetzt v2 als lebende Quelle, Handoff-Spec + 10 Screenshots nach design/prototype/, v2-Referenzen nachgezogen [Bundle-Tokens byte-identisch]. (2) Umsetzung mit echten Daten: Shell [Kern-Loop-Nav, Badge-Farben, Logo-Gradient, Backdrop-Grid, 17px-Header] · Annahme „Takt-Kommando" [5 Baustein-Chips: Client-Heuristik util/annahme-parse.ts je Tastendruck + LLM-Endpoint POST /annahme/parse via Assistent-Infra, enum-gebunden, dormant; Machbarkeits-Panel = echter Dry-Run auftrag.pruefen +startMin/slotName; Erfolgs-Screen + Radar-Fokus; test:annahme-parse + CI] · Hof-Radar [Kacheln aus Ist-Belegung, Avatare aus dem Plan, ehrlich beschriftet, Als-Nächstes-Vorschau, ?fokus=/?mitarbeiter=-Cross-Links] · Aufträge Fluss/Risiko + Vollbreiten-Detail [AuftragDTO.leistungIds neu] · Konflikte & Klärfälle Tabs [Pixel-Dissolve, /klaerfaelle-Redirect, klaerfaelle.component entfernt] · Vorschläge-Karten-Grid [„☺ von dir", Quelle] · Mitarbeiter-Karten [Plan-Ortung, ✦-Box, Umparken cyan, Aktionen + 📍 Radar] · Qualität [KPI real, 3 Spalten, ✓/✕ + Release-Gate, Zwei-Wege: qs.mangelErfassen+sofortBehoben → Aufwands-Log; Nacharbeit→Produktion = OP-QS-4]. Planung bereits v3-konform [Detail-Strip = Fly-in OP-R8-16, dokumentiert]. tsc + ng build + test:annahme-parse/qs-nacharbeit/operativ + No-Hex grün; v0.61.0→0.62.0 MINOR; PR folgt. Doku: WORKSPACES.md v3-Abschnitte [+§0 Annahme], HANDOFF §2/§4 [OP-UX-4 neu], Tests.md, CHANGELOG, Timesheet.)
Stand 2026-07-04 ~14:30.
Session taktano-2026-07-04-design-input-integration-ae43ki-2 ~0.3 h (07-04, OP-ORTUNG-1 neu [Nutzer: „BLE-Location für Mitarbeiter und Fahrzeuge als OP aufnehmen; dann PR und Merge"]: echte Live-Ortung als offener Punkt spezifiziert — MA Handy/BLE [Zonen-Genauigkeit], Fzg BLE-Tag/RFID/UWB [Prototyp-Zielbild ±2 m]; Bausteine Gateway-Ingestion → DO-State mit TTL, D-2-Datenmodell [rohe Sichtungen getrennt vom Abgeleiteten], Radar-Fusion mit Abweichungs-Signal [BLE vs. Plan → Umpark-Hinweis, True North 2], Sync-Ehrlichkeit je Quelle, Datenschutz/Mitbestimmung DE/AT/CH [BetrVG §87, DSGVO, Zonen- statt Bewegungsprofil, Pilot Fahrzeug-Tags zuerst — proaktiv geflaggt]. HANDOFF §4 + IDs.md [+OP-UX-4-Zeile] + WORKSPACES §1 + Radar-Code-Kommentar. Danach PR + Squash-Merge dieser Session.)
Session taktano-2026-07-04-design-input-integration-ae43ki-3 ~0.4 h (07-04, OP-UX-4-Nachschärfung [Nutzer-Screenshot: „…kommt mo, 14 Tage Zeit" → Abholung leer; Fragen: funktioniert das LLM? + Quelle dezent anzeigen]. Diagnose: alles Sichtbare kam aus der Heuristik [kannte nur „bis X"], LLM-Status war unsichtbar [stummer Catch]. (1) Dauer-Parsing in Heuristik [Tage/Wochen → Abholung = Anlieferung + Dauer, 17:00] + explizite Dauer-Regel im LLM-System-Prompt; (2) LLM-Validierung kürzt Voll-ISO [Sekunden/Zeitzone] auf Minute statt verwerfen; (3) dezente Quellen-Zeile unter den Baustein-Chips [„Analyse: KI (LLM) + Heuristik" magenta / „Heuristik" / „KI nicht konfiguriert" / „KI nicht erreichbar" amber — llmStatus-Signal]. test:annahme-parse +2 Asserts; Nutzer-Satz verifiziert [Mo 06.07. 08:00 → Mo 20.07. 17:00]. tsc + ng build grün; v0.62.0→0.63.0 MINOR; Branch von main neu aufgesetzt [#397 gemergt], Folge-PR. Außerdem Frage „Was ist der Kunde/CRM-Nachtrag?" beantwortet [ehem. U5: Kunde/CRM-Link nachträglich am angelegten Auftrag ergänzen; Panel wich dem v3-Erfolgs-Screen, Verlagerung ins geteilte Detail-Panel offen].)
Stand 2026-07-04 ~16:00.
Session taktano-2026-07-04-design-input-integration-ae43ki-4 ~0.3 h (07-04, OP-UX-4-Rest [Nutzer „Erst merge, dann OP-UX-4"]: #398 nach grüner CI squash-gemergt; dann Kunde/CRM-Nachtrag [ehem. U5] ins geteilte auftrag-detail-panel — Kunde-Karte im Fakten-Grid [Name + klickbarer CRM-Link, „✎ nachtragen" → Inline-Edit → bestehender auftrag.update-Handler, Audit/Chronik unverändert]; damit von überall erreichbar [Aufträge/Tafel/Radar/Planung/Klärfälle/Meine Arbeit] statt Annahme-only. Reiner Client-Pfad. ng build grün; v0.63.0→0.64.0 MINOR; Branch von main neu aufgesetzt, Folge-PR. Doku: HANDOFF §4 [Offen-Liste: Nachtrag ✅], CHANGELOG, Timesheet.)
Stand 2026-07-04 ~16:45.
Session taktano-2026-07-04-design-input-integration-ae43ki-5 ~0.7 h (07-04, OP-UX-4-Nachschärfung 2 [Nutzer-Screenshot „Kein machbarer Plan: kein verfügbares Ressourcen-Set …" + 3 Wünsche: trotzdem anlegen · Alternativen · Service-Schnellauswahl · Kunden-Lookup]: #399 nach grüner CI squash-gemergt, Branch von main neu aufgesetzt. (1) Alternativen statt Sackgasse: auftrag.pruefen probt bei Infeasibility Anlieferungen +1…+14 Tage [gleiche Uhrzeit, scheduleLeistung-Dry-Run] → alternativeAnlieferung/alternativeFertig; Panel bietet Ein-Klick-Übernahme, analog fruehesteAbholung bei geplatztem Wunschtermin; Termin-Übernahmen als overrides-Signal über dem Parsing [Termine nicht in den Satz patchbar; manuelles Tippen setzt zurück — Satz bleibt Quelle]. (2) „⚠ Trotzdem annehmen": auftrag.create +trotzdem-Flag legt ohne machbaren Plan an [nur Standard-Annahme-Schritt, kein Maschinenplan] und markiert als Klärfall [Grund = Scheduler-Befund] → sichtbar im Klärfälle-Workspace. (3) Leistungs-Schnellauswahl-Chips [Klick ergänzt/ersetzt die Leistung im Satz — Stamm-Suche, Nutzer-Vorgabe „Auswahl ergänzt den Text"]. (4) Kunden-Lookup „Meintest du: ☺ …" aus Kunden bisheriger Aufträge [Substring ab 2 Zeichen, max. 3]; Übernahme ersetzt Kurzform im Satz, beim Anlegen wird der CRM-Link des bekannten Kunden automatisch verknüpft. tsc + ng build + operativ + test:annahme-parse grün; v0.64.0→0.65.0 MINOR; Folge-PR. Doku: HANDOFF §2/§4 [OP-UX-4 Nachschärfung 2], CHANGELOG, Timesheet.)
Stand 2026-07-04 ~18:00.
Session taktano-2026-07-04-design-input-integration-ae43ki-6 ~0.6 h (07-04, OP-UX-5 neu [Nutzer: „Oder erst trennen von Auftragsannahme und Fahrzeugannahme?" + 2 Rückfragen-Entscheidungen: Tab im Annahme-Workspace · Doku-Pflicht]: Befund — Datenmodell trennte längst (geplant→liefern→angeliefert, Ist-Stempel, harte Reservierung), UX nicht (nackter Status-Button, Annahme-Schritt bei Ankunft undokumentiert). Gebaut: reiner Domänen-Helfer fahrzeugAnnahme [Kommentar-Pflicht, nur aus geplant, erledigt Annahme-Schritt via erledige, transition(liefern) atomar; Doppel-Check-in = Fehler statt Duplikat] + Handler auftrag.checkin [Quittung, Protokoll, Audit auftrag.angeliefert, REOPT_EVENTS] + Annahme-Tabs „⌨ Auftrag anlegen"/„🚗 Fahrzeug da" [Badge, Liste erwarteter Anlieferungen nach Bringtermin, überfällig amber, Check-in-Textarea Pflicht] + DTO +bringtermin + Selbsttest im operativ-Durchlauf. tsc + operativ + ng build grün; v0.65.0→0.66.0 MINOR; Folge-PR. Doku: HANDOFF §2/§4 [OP-UX-5], IDs.md, WORKSPACES §0, Tests.md, CHANGELOG, Timesheet.)
Stand 2026-07-04 ~19:00.
Session taktano-2026-07-04-design-input-integration-ae43ki-7 ~0.2 h (07-04, OP-ORTUNG-2 neu [Nutzer: „Standort unbekannt ist auch ein Klärfall — ggf. Skill Standort finden (ähnlich Umparken-Skill)"]: als OP spezifiziert — unbekannter Standort (standort: null, kein Slot/keine Bucht bei physisch anwesendem Auftrag) wird Klärfall statt stillem „—"; Skill „Fahrzeug finden" nach ReparkService-Muster [Suchauftrag → wird-gesucht-Puls → Fund = Belegung setzen → Klärfall gelöst + Chronik/Audit]; Bausteine: Unbekannt-Definition [in-transit ausgenommen], Auto-Detection als abgeleiteter Warnmarker [D-2] + manuelles Melden, Radar-„?"-Kachel, Abgrenzung OP-ORTUNG-1 [BLE macht Suchen obsolet, Skill = Hardware-loser Fallback]. HANDOFF §4 + IDs.md + CHANGELOG; docs-only-Commit auf PR #402. Zweiter Nutzer-Wunsch derselben Session: OP-KOMM-1 neu [Broadcast-Nachrichten ans Team — Durchsagen + Rückfragen mit Kurz-Antwort über die vorhandene partyserver-Broadcast-Infra (Muster plan.autoAngewendet); Bausteine Adressierung (alle vs. Rolle, OP-AUTH-1-Abhängigkeit), flüchtig vs. kurze DO-Aufbewahrung (OP-OFFLINE-1), Quittierung, Klärfall-Anbindung (Standort-Suche OP-ORTUNG-2), Compliance-Leitplanke „Betriebskommunikation, kein privater Chat/keine Überwachung"]. Außerdem in dieser Session: CI-Runner auf self-hosted umgestellt [GitHub-Actions-Ausfall/Kontingent, Stopgap; timeout-minutes je Job; Security-Empfehlung ephemeral + getrennte Deploy-Runner-Gruppe an Betreiber] + CodeRabbit-Runden 3–5 [Textarea-Sperre, verarbeiteCheckin, Disconnect-Fallback, Panel-Wechsel-Guard; Idempotenz-/Self-hosted-Findings begründet abgegrenzt].)
Stand 2026-07-04 ~19:45.
Session taktano-2026-07-04-nifty-euler-esi8p6 ~0.4 h (07-04, OP-CI-2 CI/Deploy runner-unabhängig [Nutzer „vergleiche die runner config" → „ja" auf Angleichung]: Vergleich der GitHub-Actions-runs-on beider Repos ergab — medidentas bereits auf self-hosted Runner umgestellt [D-29: Org drkv-com seit 2026-07-04 ohne gehostete Actions-Minuten, Billing/Limit], taktano noch überall hartkodiert ubuntu-latest; da gleiche Org → gleiches Limit trifft taktano [CI + alle Deploys stünden still]. D-29-Strategie 1:1 portiert [nur Workflows + Doku, kein Code/Schema]: alle 5 Workflows runs-on: ${{ vars.CI_RUNNER || 'self-hosted' }} [Default lokaler Runner, per Repo-/Org-Variable CI_RUNNER ohne Commit auf ubuntu-latest umschaltbar]; ci.yml [11 Jobs, läuft auf pull_request auch aus Forks] mit Fork-Gate ${{ github.event.pull_request.head.repo.fork && 'ubuntu-latest' || vars.CI_RUNNER || 'self-hosted' }} → fremder Fork-Code nie self-hosted [RISK-18 neu, gemindert]; sync-pr-logs einfache Form [Guard 2 weist Fork-PRs vor dem Checkout ab]; fly-deploy/docs-deploy/weekly-audit einfache Form [nur main-Push/Dispatch/Cron]. Rest-Offen: Runner-Host härten sobald produktiv. YAML-Parse aller 5 grün + grep bestätigt kein hartes ubuntu-latest mehr. Kein App-Bump [APP_VERSION bleibt 0.65.0]. Doku: .github/workflows/.yml Kopf-Kommentare, Risikoregister RISK-18, HANDOFF §4 OP-CI-2, konventionen/IDs.md, CHANGELOG, Timesheet.)
Stand 2026-07-04 ~18:15.
Session taktano-2026-07-04-design-input-integration-ae43ki-8 ~0.9 h (07-04, OP-UX-6 neu [Nutzer aus „Fahrzeug da"-Screenshot: „falls Autos überfällig, in Klärfälle aufnehmen; dort auch Fahrzeuge rausnehmen können (Auftragsstorno)"; 2 Rückfragen-Entscheidungen: überfällig automatisch abgeleitet (D-2, kein State) · Storno aus Klärfall-Detail mit Pflicht-Grund]. Gebaut: Domänen-Helfer stornieren [Grund-Pflicht, transition(abbrechen)→abgebrochen terminal, Grund in Chronik] + Handler auftrag.stornieren [Quittung, Audit auftrag.storniert, REOPT_EVENTS]; Client ueberfaelligeAnlieferung [computed: geplant + bringtermin<jetzt + kein persistierter Klärfall] + stornoAuftrag; Klärfälle-Workspace: Sektion „⏱ Überfällige Anlieferungen" [Check-in-Hinweis + „✕ Stornieren" mit Pflicht-Grund-Textarea, Offline-Guard] + „✕ Auftrag stornieren" im Klärfall-Detail [geteiltes storno-State]; klaerfaelleCount zählt jetzt Klärfälle + überfällige [Nav-/Tab-Badge]. Selbsttest im operativ-Durchlauf [Grund-Pflicht · abbrechen→abgebrochen · Chronik · Doppel-Storno abgelehnt]. tsc + operativ + ng build grün; v0.66.0→0.67.0 MINOR; Branch von main neu aufgesetzt [#402 gemergt], Folge-PR. Doku: HANDOFF §2/§4 [OP-UX-6], IDs.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-04-runner-env-variables-v5tc5h ~0.6 h (07-04, OP-CI-2-Nachzug Runner-Tool-Cache [Nutzer „in den runnern: RUNNER_TOOL_CACHE/AGENT_TOOLSDIRECTORY = runner.temp/_tool"]: damit setup-node/-python auf dem lokalen Org-Runner einen per-Lauf isolierten, beschreibbaren Tool-Cache nutzen statt des geteilten Host-Caches [/opt/hostedtoolcache → keine Kollisionen paralleler Jobs, keine Rechteprobleme]. Erst irrtümlich als top-level env: gesetzt → CI-Annotation „Unrecognized named-value: 'runner'" [der runner-Context ist NUR auf Step-Ebene gültig, nicht im top-level-/job-env:]; korrigiert auf Step-env je setup-node/setup-python-Step in ci/docs-deploy/fly-deploy/weekly-audit [sync-pr-logs hat keinen setup-Step]. YAML-Parse aller Workflows grün, kein top-level env: mehr. Kein App-Bump [APP_VERSION bleibt 0.65.0]; PR #404. Review CodeRabbit: „AGENT_TOOLSDIRECTORY droppen [setup-node ignoriert es]" — nach Nutzer-Rückfrage BEIDE behalten [explizit gewünscht, harmlos; setup-python ehrt es auf self-hosted]; medidentas-Nitpick „composite action gegen 3-Zeilen-Dublette" abgelehnt [YAGNI/Einfachheit, 5 triviale Blöcke]. Hinweis: taktano-ci triggert nur auf pull_request/main-Push → PR-Erstellung via Claude-Code-UI [App-Token] löste keinen Lauf aus [GitHub unterdrückt Workflow-Trigger durch App/GITHUB_TOKEN], CI-Anstoß daher per Folge-Push [synchronize, realer Actor]. Doku: .github/workflows/.yml, CHANGELOG, Timesheet.)
Stand 2026-07-04 ~19:25.
Session taktano-2026-07-04-runner-env-variables-v5tc5h-2 ~0.5 h (07-04, OP-CI-2 Merge-Konflikt + main-Latenzbug: PR #404 stand nach zwischenzeitlichem main-Vorlauf auf mergeable_state „dirty" [GitHub-Server-Merge wendet .gitattributes merge=union NICHT an → Log-Konflikt CHANGELOG/Timesheet]; ein „dirty"-PR baut keinen Merge-Ref → taktano-ci [nur pull_request/main-Push] lief NIE, während medidentas-ci [on: push, ohne Branch-Filter] normal durchlief. Lokaler union-Merge löste die Logs auf. Dabei aufgedeckt: main enthielt in ci/docs-deploy/fly-deploy/weekly-audit job-level env: mit ${{ runner.temp }} [aus einem parallelen Fix] — im jobs.<id>.env ist der runner-Context NICHT verfügbar → „Unrecognized named-value: 'runner'" [actionlint via CodeRabbit] → main-CI/Deploys selbst kaputt. Fix: alle 11+3 job-level Blöcke entfernt, nur die korrekten Step-env bleiben → #404 repariert main gleich mit. YAML-Parse grün, alle runner.temp jetzt step-level. Doku: .github/workflows/.yml, Timesheet.)
Stand 2026-07-04 ~19:35.
Session taktano-2026-07-04-runner-env-variables-v5tc5h-3 ~0.6 h (07-04, OP-CI-2 Pivot auf Runner-Ebene [Nutzer: „neue Runner erstellt … nimm die workflow cache-dinger raus" + „fix 1 gemacht"]: CI auf den self-hosted Mac-Runnern zeigte — setup-node ehrt die env-Umleitung (grün), aber setup-python NICHT: das actions/python-versions-Install-Skript legt den Toolcache hart unter /Users/runner/hostedtoolcache an → „mkdir: /Users/runner: Permission denied" (auf mehreren Runnern reproduziert: runner-2/-5/-9). Entscheidung mit Nutzer: Toolcache auf Runner-Ebene provisionieren (Fix 1: /Users/runner/hostedtoolcache beschreibbar) statt im Workflow → alle RUNNER_TOOL_CACHE/AGENT_TOOLSDIRECTORY-env-Blöcke aus ci/docs-deploy/fly-deploy/weekly-audit entfernt (9+1+1+2). Behebt zugleich mains invaliden job-level env. YAML-Parse grün, kein runner.temp mehr in .github/workflows/. Doku: .github/workflows/.yml, CHANGELOG, Timesheet.)
Session taktano-2026-07-05-cleanup-logs-frontmatter-ae43ki ~0.3 h (07-05, Log-Hygiene + Doku-Frontmatter [nach #409-Merge, OP-PM-2/OP-DOCS-9]: check-doc-consistency.sh flaggte zwei Punkte auf main. (1) Timesheet-ID-Kollision — Sessions 37–47 doppelt: ein zweiter, eigenständiger Block aus dem parallelen Branch claude/seed-usage-audit-frsx52 [OP-SEED-1 · S-SEED-1…5 · E-TENANT/E-BACKUP] hatte dieselben laufenden Nummern gegriffen [Vor-OP-PM-3-Zahl-Kollision paralleler Branches; union-Merge konkateniert]; kein byte-identisches Duplikat → smooth-logs löst das bewusst nicht auto. Auflösung: Seed-Audit-Block auf eindeutige IDs 53–63 umnummeriert [nach Max 52], inkl. zeileninterner „(Session NN)"-Selbstverweise; Start-Spalte trägt die echte Chronologie. (2) docs/architektur/Fahrzeug-3D.md ohne Frontmatter → sidebar_position: 75 [zwischen Bildbewertung 70 und Persistenz 80] + sidebar_label ergänzt, konsistent mit den übrigen architektur/-Docs. check-doc-consistency.sh ohne Session-ID-/Frontmatter-Warnung, keine doppelten numerischen IDs. Kein App-Bump [APP_VERSION bleibt 0.67.0]; Folge-PR. Doku: Timesheet.md, Fahrzeug-3D.md, CHANGELOG, Timesheet.)
Stand 2026-07-05 ~08:30.
Session taktano-2026-07-05-missing-vehicles-clarification-n3eqe8 ~0.5 h (07-05, OP-UX-6-Nachschärfung [Nutzer-Befund zum „Fahrzeug da"/Klärfälle-Screenshot: (a) „auch allgemeinen Kommentar, z. B. nochmal angerufen und gefragt, ergänzen können", (b) „müssten die seit 2 Wochen vermissten Fahrzeuge nicht in der Klärfälle-Liste erscheinen?"]. Klärung (b): erscheinen bereits — Sektion „⏱ Überfällige Anlieferungen" nutzt exakt dieselbe Bedingung [status geplant + bringtermin<jetzt] wie das „erwartet seit"-Badge im Annahme-Screen → leere Klärfälle-Liste bei sichtbar überfälligen Fahrzeugen = Deploy-Nachzug [laufender Build vor #409], kein Logikfehler. Entscheidung Nutzer [AskUserQuestion]: freie Notiz „überall am Auftrag". Gebaut: Message auftrag.notiz [Handler hängt „Notiz: …"-Protokoll-Eintrag an, leere verworfen, NICHT in REOPT_EVENTS] + Service auftragNotiz + UI zweistellig: „📝 Notiz"-Aktion+Mini-Formular im geteilten auftrag-detail-panel + neuer „Verlauf"-Block [Protokoll neueste zuerst, war im DTO da aber nirgends angezeigt]; „📝 Notiz"-Button+Inline-Feld an der Überfällig-Zeile im Klärfälle-Workspace. tsc + operativ + ng build grün; v0.67.0→0.68.0 MINOR; Folge-PR. Doku: HANDOFF §4 [OP-UX-6], CHANGELOG, Timesheet.)
Stand 2026-07-05 ~09:00.
Session taktano-2026-07-05-fix-no-hex-pr-ref ~0.3 h (07-05, No-Hex-Gate False-Positive [Nutzer zeigte roten main-CI-Design-Job]: check-no-hex.sh matchte in conflicts.component.ts:402 den Kommentar „…Review #409)" als 3-stelligen Hex #rgb — jede 3-/6-stellige PR-Nummer ist gültiges Hex → reiner False-Positive. Entscheidung Nutzer [AskUserQuestion]: dedizierter Hotfix-PR von aktuellem main + Gate härten. Fix: Gate ignoriert jetzt Kommentar-Anteile [// · /* */ · <!-- -->] je Zeile [Hex im Kommentar rendert nichts = kein Token-Verstoß; PR-Refs leben dort]; Kandidaten-Treffer werden per sed um den Kommentar-Anteil bereinigt und nur außerhalb-Kommentar gemeldet; tk-allow-hex unverändert. Original-#409-Kommentar bleibt als Regressionsfall. 3 lokale Fälle grün [#409-Kommentar passiert · echter Code-Hex blockt weiter auch mit Trailing-Kommentar · reiner Kommentar-Hex passiert]. Rest-Risiko mehrzeilige Block-Kommentare im Header dokumentiert. Kein App-Bump [APP_VERSION bleibt 0.68.0]; Hotfix-PR. Doku: scripts/check-no-hex.sh, docs/betrieb/Tests.md, CHANGELOG, Timesheet.)
Stand 2026-07-05 ~09:20.
Session taktano-2026-07-06-angular-react-version-bump-rq4eis ~1.2 h (07-06, Framework-Bump [Nutzer: „Bump angular and react to recent version"]. Angular 20.3 → 22.0.5 via ng update @angular/core@21 → @22 [nur je eine Major-Stufe; 21er-Zwischenschritt committet], TypeScript ~6.0.3, verhaltensbewahrende Migrationen [Block-Control-Flow, ChangeDetectionStrategy.Eager, extendedDiagnostics-Suppress]. React nur in docs-site → react/react-dom 18 → 19.2.7 + @docusaurus/* 3.6 → 3.10.1 [React 19 verlangt Docusaurus ≥ 3.7]. Manuelle Anpassungen durch TS-6-/v22-Diagnostik: ImageData aus frischer Uint8ClampedArray-Kopie [ArrayBufferLike ≠ ArrayBuffer, Muster wie pii-/nsfw-Adapter], ungenutzter EmptyStateComponent-Import [NG8113] raus. Node lokal 22.23.1 [CLI 22 verlangt ≥ 22.22.3]; .nvmrc/CI unverändert 22. ng build + test:bildgate/fotoqueue/queue + docs-site build grün. v0.68.0 → 0.69.0 MINOR; PR folgt. Doku: Angular-20→22-Verweise [CLAUDE.md, HANDOFF, INTEGRATION_PLAN, Fahrzeug-3D], CHANGELOG, Timesheet.)
Stand 2026-07-06 ~19:08 UTC.
Session taktano-2026-07-07-docs-guidelines-tech-standards-zhu4a5 ~0.5 h (07-07, Doku-only, kein App-Bump [APP_VERSION bleibt 0.69.0]. Nutzer-Wunsch drkv-weit: Entwicklungsansatz-Guideline in der Doku sichtbar halten · Taktano-Governance für alle Repos übernehmen · Chatbot LLM+RAG auf Live-Daten & Doku · Standard-Tech-Stacks bewirtschaften [Echtzeit, moderne Frameworks, Chatbot App+Doku, Feedback]. Taktano-Teil: [1] neue Seite docs/konventionen/Entwicklungsansatz.md — True North · Leitprinzipien [Einfachheit · Selbsterklärbarkeit · Dokumentation-als-Meisterwerk · Everything-as-Code] · Way-of-Working · Standard-Bausteine, 1 Mermaid, Hinweis „G-1…G-3 hier = Scheduler-Constraints, nicht die drkv-Leitprinzipien". [2] CLAUDE.md: Abschnitt „Standard-Bausteine (drkv) — Taktano ist Referenz-Implementierung" [Echtzeit/DO+WS · Angular 22 · In-App-Assistent OP-AI-4 · Feedback; kanonisch im Template everything-as-code-template/docs/Standard-Tech-Stack.md] + Regel „Way-of-Working sichtbar" + Tiefenquellen [Entwicklungsansatz, In-App-Assistent]. [3] docs/README.md-Landkarte. Taktano ist die Referenz — In-App-Assistent/Feedback/Echtzeit bereits gebaut. Konsistent mit medidentas + Template. check-doc-consistency Doku-Konsistenz-relevant. Doku: Entwicklungsansatz.md [neu], CLAUDE.md, docs/README.md, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~17:15.
Session taktano-2026-07-07-documentation-structure-ux-qzof50 ~2.9 h (07-07, OP-DOCS-13 Doku entwirren — Konzept + Phase-1-Drift-Fixes + Phase-2-Leitplanken-Single-Source [Nutzer: „Die Dokumentation wirkt verworren — wie kann das verbessert werden bzgl. Struktur, Lesbarkeit, Navigation und UX?"]. 3 Explore-Analysen + Plan-Agent → Diagnose: Struktur-/Redundanz-/Dichte-Problem, kein Inhaltsproblem [Mensch-/Maschinen-Doku vermischt · ~155 OP-IDs Kurzschrift · Leitplanken mehrfach besessen · vier überlappende OP-Indizes · Mega-Zeilen 5k–15k Z. HANDOFF §4/CHANGELOG · 20/41 Leaf-Docs Navigations-Sackgassen]. Entscheidung nicht-invasiv, 5-Phasen-Roadmap nach Glossar-Generator-Muster. Neues Konzept-Doc docs/betrieb/Doku-UX-Konzept.md [pyramidal, Mermaid, messbare Kriterien] + OP-DOCS-13. Phase 1 umgesetzt: Zielgruppen 4→7 in glossar.mjs [entsperrt gen-glossar für devops/security/support], Positions-Clash Tests/Timesheet 40→50, stale category.json [architektur/konventionen] + Pfade [agents.md docs/Timesheet.md 3× · CHANGELOG docs/agents.md], Topic-Split-Querlinks Mandantenfähigkeit↔Seed + Flow-Analyse-Status-Widerspruch zu Flow-Refactor behoben. Phase 2 [Nutzer-Freigabe „1" = Phase 2, nicht-invasiv]: die zwei verbose-duplizierten Blöcke OP-DOCS-9 + OP-PM-2 in der immer-geladenen CLAUDE.md auf Essenz + Owner-Pointer [agents.md §5.1/§6.5/§6.6] gekürzt [~12 Zeilen Duplikat weniger, jede Regel erhalten], True-North-Owner-Link in Lesepfade [SemVer/ID-Legende bereits single-source]. Registriert HANDOFF §4/Roadmap/IDs/README/CLAUDE. npm run glossar + check-doc-consistency grün; Doku-only kein App-Bump [APP_VERSION bleibt 0.69.0]; PR #417. Doku: Doku-UX-Konzept.md [neu], glossar.mjs, 2× category.json, agents.md, Mandantenfaehigkeit, Seed-Abloese-Plan, Flow-Analyse, Flow-Refactor-Plan, Lesepfade.md, CHANGELOG, HANDOFF, Roadmap, IDs.md, README, CLAUDE.md, Timesheet.)
Stand 2026-07-07 ~19:25 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-2 ~0.6 h (07-07, OP-DOCS-13 Phase 3 Navigation [Nutzer-Freigabe „Phase 3"]: Aufgaben-Lesepfade aus README in Lesepfade.md konsolidiert [eine Vordertür statt zwei überlappender Systeme]; neues Remark-Plugin docs-site/src/remark/docNavFooter.mjs hängt „↩ Landkarte · Lesepfade · Register"-Footer an jedes Leaf-Doc der Haupt-Instanz [schließt alle 20 Navigations-Sackgassen driftfrei, idempotent: überspringt Hubs/Projekt-Instanz/Docs-mit-Rücklink] + in docusaurus.config.js verdrahtet; Sidebar-Brücke /docs↔/projekt [sidebars.js + sidebars-projekt.js, waren unverbunden]; konventionen als Prozess-/Agenten-Tier gelabelt. npm ci scheiterte an docsearch/react-Peer unter React 19 → npm install --legacy-peer-deps [Lockfile danach zurückgesetzt, nicht committet]; npm run build grün [Plugin läuft, Footer-Injektion/Idempotenz/Skip am Build-Output verifiziert; nur vorbestehende Broken-Link-Warnungen], check-doc-consistency grün. Offen: Phase 3b [generierte Landkarte gen-doku-landkarte.mjs + architektur/-Bänder], Phase 4/5. Doku/Doku-Tooling, kein App-Bump [APP_VERSION 0.69.0]; PR #417. Doku: docNavFooter.mjs [neu], docusaurus.config.js, sidebars.js, sidebars-projekt.js, Lesepfade.md, README, konventionen/category.json, Doku-UX-Konzept.md, Roadmap, HANDOFF, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~19:55 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-3 ~0.7 h (07-07, docs-deploy-Fix + OP-DOCS-13 Phase 3b Teil A + CodeRabbit-#417-Finalisierung. PRIORITÄT docs-deploy [Nutzer-Screenshot: Build+Deploy Cloudflare Pages rot]: docs-deploy.yml scheiterte auf main an npm ci [ERESOLVE — @easyops-cn/docusaurus-search-local@0.45 React-Peer <20 vs. React-19-Stand seit Framework-Bump 07-06; durch #417 als erstem docs-site-Push sichtbar]. Fix: neues docs-site/.npmrc [legacy-peer-deps=true] → npm ci + npm run build lokal grün, Lockfile unverändert; Rückbau sobald search-local React-19-Peer trägt. Phase 3b Teil A: 16 flache architektur/-Docs in 5 Sidebar-Bänder [Betrieb/Daten/Produkt-Flow/KI-QS/Zugang-Team] via sidebar_label-Präfix + sidebar_position 10–160. CodeRabbit-#417 [4 Findings]: PR-folgt→#417 [CHANGELOG/Timesheet], True-North-Plural in Lesepfade angeglichen, True-North-Bezug im Konzept-Status präzisiert [MD022-Leerzeile bewusst übersprungen = Datei-Stil]. Branch nach #417-Merge von origin/main neu aufgesetzt [Fixes vorwärts getragen]. npm run build + check-doc-consistency grün; Doku/Doku-Tooling kein App-Bump [APP_VERSION 0.69.0]; PR #418. Doku: docs-site/.npmrc [neu], 16× architektur/.md, Lesepfade.md, Doku-UX-Konzept.md, CHANGELOG, Timesheet, Roadmap, HANDOFF.)
Stand 2026-07-07 ~20:30 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-4 ~0.4 h (07-07, OP-DOCS-9/-13 Broken-Links/Anchors der Doku-Site bereinigt [Nutzer: Build-Warnungen aus dem docs-deploy-Log]. Behoben, Build jetzt warnungsfrei [vorher 6 Links + 2 Anchors]: Repo-Datei-Links außerhalb docs/ [.github/workflows/ci.yml IDs.md×4 + HANDOFF; design/WORKSPACES.md IDs.md×2] auf absolute GitHub-Blob-URLs [funktionieren Site+GitHub; relativ brachen sie, weil sie aus dem Docs-Baum herauszeigen]; _Vorlage.md-Links [Docusaurus schließt _-Präfix vom Routing aus] auf GitHub-URL; blanker ../-Parent-Link im meetings-Index entfernt; Anchor #2-marktabschatzung-tamsamsom [Umlaut-Slug] via explizite {#…}-Heading-ID in Markt-und-Markteintritt.md fixiert. npm run build grün [0 Broken-Link/Anchor-Warnungen], check-doc-consistency grün. Kontext: docs-deploy nach #418 wieder grün [Run #211 success], .npmrc-Fix wirkt. Doku, kein App-Bump [APP_VERSION 0.69.0]; PR #419. Doku: IDs.md, HANDOFF, README, betrieb/meetings/README.md, produkt/Markt-und-Markteintritt.md, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~20:45 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-5 ~0.6 h (07-07, OP-DOCS-13 Phase 3b Teil B [Nutzer-Wahl „Check härten (empfohlen)"]: statt README-Generierung — Grounding zeigte, check-doc-consistency.sh §4 prüft schon die Landkarte-Vollständigkeit, volle Generierung [~38-Doc-kurz:-Migration] hätte nur marginalen Nutzen. Gate gehärtet: 3-Ebenen-Glob [meetings/ etc., _-Partials aus], category.json je md-Ordner, sidebar_position-Eindeutigkeit je Ordner [fängt 40/40-Clash], Zielgruppen-Parität glossar.mjs==Lesepfade [fängt 4-vs-7]. bash -n + Lauf grün [0 Findings]; Negativ-Tests: Positions-Clash + Taxonomie-Divergenz werden korrekt geflaggt. Phase 3b damit vollständig [Bänder + Anti-Drift-Gate]. #419-Refs im Vor-Eintrag finalisiert. Tooling/Doku kein App-Bump [APP_VERSION 0.69.0]; PR #420. Doku: scripts/check-doc-consistency.sh, Tests.md, Doku-UX-Konzept.md, Roadmap, HANDOFF, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~20:58 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-6 ~0.8 h (07-07, OP-DOCS-13 Phase 4 Lesbarkeit [Nutzer-Wahl „Worst-Offender + Kernaussage"]: (1) pyramidale Kernaussage-Blöcke oben in 7 schweren Docs [Lastenheft, HANDOFF + architektur/ Akademie/Audit-Log/Fahrzeug-3D/Kosten/Offline-PWA — die 5 ohne TL;DR]. (2) HANDOFF §4 entdichtet — Befund: union-Merge-Dublettenhalde [226 Bullets/~116 distinkt; AUDIT-1 ×9, TENANT/BACKUP ×7]; 19 byte-identische Dubletten-Zeilen entfernt [226→207], verifiziert kein Info-Verlust [jede entfernte Zeile existiert weiter]. (3) Format-Konvention agents.md §6.2: neue §4-Einträge kurz+strukturiert, keine Mega-Zeilen. check-doc-consistency grün [keine toten Links]. Bewusst offen: near-identische Mega-Zeilen [zwei ~15k OP-OPT-1-Kopien 15250 vs 15284] brauchen gezielte per-OP-Glättung [eigener PR, append-only Audit-Trail nicht riskieren]. #420-Ref im Vor-Eintrag finalisiert. Doku kein App-Bump [APP_VERSION 0.69.0]; PR #421. Doku: Lastenheft, HANDOFF, 5× architektur/.md, agents.md, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~21:25 UTC.
Session taktano-2026-07-07-documentation-structure-ux-qzof50-7 ~0.2 h (07-07, Kernaussage-Korrekturen [CodeRabbit-#421-Review, 2 Major]: (1) Audit-Log-Kernaussage sagte „separate D1 (EU)" → korrigiert auf finalen Zuschnitt E-TENANT-1=C [DO-SQLite je Tenant + D1 nur Tamper-Anker], deckungsgleich mit §2; (2) Offline-PWA „Fotos nie verloren" → konditional [bei funktionierender IndexedDB-Queue geschützt, uploadFoto meldet sonst]. #421-Refs im Phase-4-Eintrag finalisiert. check-doc-consistency grün. Doku kein App-Bump [APP_VERSION 0.69.0]; PR folgt. Doku: Audit-Log.md, Offline-PWA.md, CHANGELOG, Timesheet.)
Stand 2026-07-07 ~21:35 UTC.
Session taktano-2026-07-08-vorteilsrechner-prospects-0hm08a ~0.5 h (07-08, OP-MARKET-2 Vorteilsrechner als Landingpage für Interessenten [Nutzer: „Vorteilsrechner für Interessenten einbauen — Akquise-wie? Hubspot?"]. Neue Docusaurus-Seite docs-site/src/pages/vorteilsrechner.js [Quick-ROI-Rechner: 4 Eingaben → Δ Fahrzeuge/Woche, Δ Umsatz/Deckungsbeitrag, Payback, Bandbreite 8–22% konservativ], verlinkt von index.js. Rückfrage an Nutzer [Scope + Akquise-Weg]: Antwort = Quick-Rechner + Akquise-Anbindung noch offen [kein Hubspot-Account/Entscheidung] → v1 ohne Lead-Erfassungs-Backend, nur mailto-Platzhalter; neuer OP-MARKET-2 für die Nachverdrahtung. npm run build [docs-site] grün. Kein App-Bump [APP_VERSION 0.69.0]. Doku: Produkt-und-Marketing.md §3, IDs.md, Register.md, HANDOFF §2+§4, CHANGELOG, Timesheet.)
Stand 2026-07-08 ~00:15 UTC.
Session taktano-2026-07-11-vorteilsrechner-prospects-0hm08a-wrapup ~0.3 h (07-11, PR #427 erstellt + OP-ID-Reconciliation: Branch gegen main aktualisiert [#426 parallel gemergt, dokumentierte Gründer-Call-Themen als OP-VERTRIEB-1..3 — OP-VERTRIEB-1 deckt sich exakt mit dem gebauten Rechner]. Selbst erfundenes OP-MARKET-2 zurückgezogen zugunsten OP-VERTRIEB-1 [jetzt ✅ v1] + OP-VERTRIEB-2 [Akquise-Tool Build-vs-Buy Hubspot, weiterhin offen] als autoritative IDs; OP-VERTRIEB-1..3 zusätzlich in IDs.md/Register.md nachregistriert [fehlten dort]. check-doc-consistency grün. Kein App-Bump. Doku: HANDOFF, Lastenheft §11.6, IDs.md, Register.md, Produkt-und-Marketing.md §3, vorteilsrechner.js-Kommentar, CHANGELOG, Timesheet.)
Stand 2026-07-11 ~12:45 UTC.
Session taktano-2026-07-11-op-management-gold-standard ~1.0 h (07-11, OP-DOCS-11 entschieden + v1 gebaut [Nutzer: offene Punkte für Stakeholder diskutierbar machen, GitHub-UI nicht intuitiv genug, kein Eigenbau, Gitbook? — Anforderung: Claude Code + Codex müssen sauber damit arbeiten]. Empfehlung: GitHub Issues + optionales Projects-Board statt Gitbook [reines Doku-Rendering, kein Status/Board] oder Linear [neuer Vendor]. Gebaut: ops/
Session taktano-2026-07-11-app-ux-process-review-i4b52d ~1.0 h (07-11, UX-/Prozess-Review der Gesamt-App [Nutzer: „Experte UX + Prozess-Automatisierung für stark anzuleitende Akteure — verständlich, konsistent, leicht bedienbar, intuitiv, kurz: ein richtig cooles Meisterwerk?"]. Methode: 3 parallele Erkundungen [Client-UI alle 15 Workspaces · Server-Prozessführung Lifecycle/Gates/Auto-Opt · Soll-Ist Lastenheft/Sanity-Checkliste/Design-System], Befunde stichprobenhaft gegen Code verifiziert [u. a. FlowBand/InsightsPanel-Orphans per Grep]. Urteil: starkes Gesellenstück, noch kein Meisterwerk — Stärken S1–S6 [harte Zustandsmaschine+QS-Gate, Next-Task-Push, Vorschlag-statt-Zwang, Ehrlichkeit, Design-Disziplin, sprechende IA] vs. Befunde B1–B7 [keine Rollen/Identität · Klärfall nicht im Werker-Flow · True North 3×🟡 · 4 Label-Inkonsistenzen · kein Onboarding · Bedienränder · tote Ecken]. Empfehlungen E1–E6 priorisiert, Top-3 als neuer ops/OP-UX-7.md gebündelt. Neu: docs/betrieb/UX-Review-2026-07.md [pyramidal, Business+IT-Dev]. check-doc-consistency + gen-ops grün. Reine Doku, kein App-Bump [APP_VERSION 0.69.0]; PR folgt. Doku: UX-Review-2026-07.md [neu], ops/OP-UX-7.md [neu], Offene-Punkte.md [generiert], Sanity-Checkliste.md, docs/README.md, HANDOFF §4, CHANGELOG, Timesheet.) Session taktano-2026-07-11-next-steps-pot5hb ~0.9 h (07-11, Zeitbasierte Auslastungs-Quote als KPI-Kachel [Nutzer: „Was steht als nächstes an?" → aus den offenen Punkten Spur „Auslastungs-Quote KPI" gewählt; Sanity-Checkliste North-Star-Frage 1 stand auf 🟡, explizite %-Quote fehlte]. Gebaut: pure auslastungsQuote() in insights.ts [je Gruppe Mitarbeiter/Buchten Anteil verplanter an verfügbarer Zeit über ein Fenster; kappt belegt ∩ verfügbar → kein Über-100-%-Artefakt; merge/subtract aus time.ts] — ergänzt Snapshot auslastung() um die Zeit-Achse. DO-Verdrahtung leitstand.ts: Fenster = Planungszeitraum, MA-Verfügbarkeit via mitarbeiterAvailability, Bucht-Verfügbarkeit = offene Werkstattzeit [Schicht-Envelope] − Sperre/Wartung [Entscheidung: Buchten sonst 24/7 → als Nenner irreführend]; nichts gespeichert [D-2]. Client: insights.auslastungsQuote im State-Typ + KPI-Kachel oben in der Überblick-Sidebar [Mini-Balken je Gruppe, Ampel ohne Rot: dim<60% / Brand-Cyan 60–90% / Amber>90%, Rot bleibt Warnungen]. Verifikation: test:insights um Quote-Assertions erweitert [540/960=56%, 300/480=63%] grün; alle Server-Selbsttests grün; Server- + Client-tsc sauber [ng build lokal nur wegen Node 22.22.2<22.22.3 nicht ausführbar — CI baut]. Version 0.69.0 → 0.70.0 MINOR. Offen [Sanity-Checkliste nachgezogen]: wählbarer Zeitraum heute/Woche + Trend-Sicht. Doku: insights.ts+insights-demo.ts, leitstand.ts, leitstand.service.ts, overview.component.ts, version.ts, Sanity-Checkliste.md, Tests.md, HANDOFF §2, CHANGELOG, Timesheet.) Stand 2026-07-11 ~20:20 UTC.
Session taktano-2026-07-11-app-ux-process-review-i4b52d-2 ~1.2 h (07-11, OP-UX-7 umgesetzt [Nutzer: „PR und merge; dann OP-UX-7 umsetzen"]. (1) PR #434 [UX-Review-Doku] entblockt: mergeable_state dirty durch parallel gemergten #433 [Auslastungs-Quote] → lokaler union-Merge von main + smooth-logs + Push → Auto-Merge [Squash] hat gefeuert, #434 gemergt; Branch danach von origin/main neu aufgesetzt [Konvention merged-PR]. (2) OP-UX-7 gebaut [rein client-seitig, kein Server/Solver/Schema]: E1 Werker-Terminal-Modus [Rail-Footer-Toggle ⬣, localStorage tk-werker-modus, Nav reduziert auf Meine Arbeit·Tafel·Qualität, Sprung nach /meine-arbeit; Entscheidung: Geräte-Einstellung ohne Security-Gate, Rollen bleiben OP-AUTH-1] · E2 Klärfall am Schritt in Meine Arbeit [Inline-Form: 4 Grund-Presets + Pflicht-Freitext + eskalieren → bestehendes auftrag.klaerfall, Schrittname als Grund-Präfix; aktiver Klärfall = rote Badge] · E3 zentrales Label-Modul labels.ts [Muster phase.ts: Auftrag-Status kanonisch „Fahrzeug angeliefert", Teilschritt „wartet/läuft/pausiert", Terminklasse Title-Case, Aktions-Labels; Entscheidungen: Tafel-archiviert rot→neutral (Rot nur Warnungen), „Verfügbar"→„Frei", Gantt-Blockfarben bleiben kontext-lokal]. Node-Hürde: Angular-CLI verlangt ≥22.22.3, Sandbox hatte 22.22.2 → nvm install 22.23.1. Verifikation: ng build grün [Budget-Warnung Bestand], No-Hex grün, check-doc-consistency grün, gen-ops grün, Grep 0 Alt-Label-Maps. v0.70.0→0.71.0 MINOR; PR folgt. Doku: labels.ts [neu], shell/meine-arbeit/tafel/panel/gantt/orders/annahme/staff.component.ts, version.ts, ops/OP-UX-7.md [erledigt], Offene-Punkte.md [generiert], UX-Review-2026-07.md §4, Funktionsumfang.md, design/COMPONENTS.md, HANDOFF §4, CHANGELOG, Timesheet.)
Session taktano-2026-07-11-app-ux-process-review-i4b52d-3 ~0.7 h (07-11, UX-Review E5 „Politur" [Nutzer: „E5"]. (1) Native Browser-Dialoge ersetzt [B6]: neue geteilte app-modal-dialog-Komponente [Muster Planung „Entwurf verwerfen?" OP-R8-15: Fog+Panel, Esc/Scrim, optionales Pflicht-Eingabefeld mit Auto-Fokus/Enter, gefahr=rote Warn-Aktion] ersetzt confirm() [MA-/Teilschritt-Archivieren] + prompt() [neue Vorlage/Leistung, Skill umbenennen]; alert()-Duplikat-Warnungen → Warn-Toasts [nicht-blockierend]. Anti-Pattern „keine neuen confirm/prompt/alert" in COMPONENTS.md verankert. Stolperstein: deutsches Schließ-Anführungszeichen in [text]-Attribut-Binding bricht den Template-Parser → Texte in Klassen-Helfer [archivText()] verlagert. (2) Tote Komponenten gelöscht [B7]: FlowBandComponent [v2-Band, überholt durch Hof-Radar+Aufträge-Fluss] + InsightsPanelComponent [überholt durch Überblick-KPI-Kacheln inkl. #433]; Grep-verifiziert referenzlos, COMPONENTS.md-Abschnitt umgeschrieben. (3) /bild-schutz bleibt bewusst Deep-Link-Demo [OP-QS-2 Phase 1]. Bewusst offen aus B6: Tastatur-D&D, Hof-Radar-Responsivität, Touch-Kommentar [OP-TEXTBLOCK-1/OP-DIKTAT-1]. ng build + No-Hex + check-doc-consistency grün. v0.71.0→0.71.1 PATCH; PR folgt. Doku: modal-dialog.component.ts [neu], staff/processes.component.ts, flow-band+insights-panel [gelöscht], version.ts, UX-Review §4 [E5 ✅], design/COMPONENTS.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-11-app-ux-process-review-i4b52d-4 ~0.6 h (07-11, UX-Review E6 / OP-ONBOARD-1 Slice 1 [Nutzer: „Ja" auf E6-Vorschlag]. Gebaut [rein client-seitig]: onboarding-hinweis.component.ts [„Kurz erklärt"-Erstbesuch-Karte je Workspace: 1 Satz was + 2–3 erste Schritte, Werkstattsprache, 14 Workspaces, Signaturfarben-Akzent, eine Einbaustelle in der Shell über dem router-outlet] + onboarding.service.ts [Gesehen-Set pro Gerät, localStorage tk-onboarding-gesehen, fail-open im Privatmodus] + „?"-Header-Button [zeigt Karte erneut]. Entscheidungen: Text-Karten statt verankerter Coachmark-Pfeile [Anker brechen bei Layout-Umbau; Vertiefung = Assistent OP-AI-4]; Tour + Progressive Freischaltung bleiben OP-ONBOARD-1-Rest. Damit alle 6 Review-Empfehlungen adressiert [E1–E3 #436 · E5 #437 · E6 hier · E4-Rest OP-R9-10]. ng build + No-Hex + check-doc-consistency grün. v0.71.1→0.72.0 MINOR; PR folgt. Doku: onboarding-hinweis.component.ts+onboarding.service.ts [neu], shell.component.ts, version.ts, UX-Review §4 [E6 ✅ v1], HANDOFF §4 [OP-ONBOARD-1 Slice 1], Funktionsumfang.md, design/COMPONENTS.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-11-app-ux-process-review-i4b52d-5 ~0.8 h (07-11, UX-Review E4: True-North-Kacheln komplett [Nutzer: „E4"]. (1) Server: naechsteKapazitaeten() in insights.ts — je aktiver Leistung EIN ASAP-Dry-Run des TS-Schedulers [scheduleLeistung, bewusst KEIN angebot()-Scan: der wäre ~Fenster/60min Aufrufe je Leistung und je Broadcast zu teuer] → frühestmögliche Anlieferung + Abholbereitschaft; try/catch defensiv [kaputte Leistung → grund, kein Broadcast-Riss; Erkenntnis: scheduleLeistung wirft bei unbekannter Leistung]. DO cached über Plan-Stempel + Stunden-Raster [kapazitaetCache, D-2 nichts persistiert]; DTO insights.kapazitaet. (2) Client: Überblick-Sidebar +2 Kacheln — „Nächste freie Kapazität" [„ab morgen 08:00" via fmtRelative, Tooltip Abholbereitschaft, amber „kein Fenster"+Grund] und „Standorte" [grün „alle verortet" / amber „⚠ N ohne Standort →" Link Konflikte; Rot bleibt Warnungen]. Damit Top-3-Antworten gebündelt in einer Sidebar [F1 #433 · F2+F3 neu]. (3) test:insights erweitert [Kachel-Asserts + Unbekannt-Fall]. Sanity-Checkliste Frage 3 🟡→✅ [erste Leitfrage auf Grün]. Verifikation: Server-tsc + test:insights + operativ grün, ng build + No-Hex + check-doc-consistency grün. v0.72.0→0.73.0 MINOR; PR folgt. Alle 6 Review-Empfehlungen damit UMGESETZT. Doku: insights.ts+insights-demo.ts, leitstand.ts, leitstand.service.ts, overview.component.ts, version.ts, Sanity-Checkliste [F3 ✅], UX-Review §4 [E4 ✅], Funktionsumfang.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-11-app-ux-process-review-i4b52d-6 ~1.3 h (07-11, Klärungs-Workflow-Engine [Nutzer: „OP-R3-1"] — geroutetes Klärfall-Lösen nach Lastenheft §5.1, schließt den benannten OP-R3-1-Rest + Review-B2 vollständig. Server: KlaerfallKontext +teilschrittInstanzId [Auslöser], pausiereLaufendeSchritte [Melden = echte Unterbrechung], ueberspringeFuerKlaerung [sanktionierte OP-R3-5-Ausnahme: darf Pflicht+pausiert skippen], loeseKlaerfallMitRoute [pur: zurueck · qs → Klärungs-Skip + ggf. fertigstellen · schritt = ab-hier-weiter ODER Katalog-Einschub via nacharbeit-/zusatzSchritte-Muster+einzelplan · abbruch → stornieren; Pflicht-Kommentar]; Handler: Route-Zweig + d1Audit klaerfall.gemeldet/geloest [fehlte] + auftrag.klaerfall in REOPT_EVENTS [fehlte]; abwärtskompatibel [loesen ohne route = zurueck]. Client: neue geteilte klaerfall-loesen.component [Routen-Chips + Hinweis je Weg + Ziel-Picker + Pflicht-Kommentar] ersetzt nackte Lösen-Buttons in Konflikte+Panel; Meine Arbeit sendet Instanz beim Melden. Entscheidungen: „anderer Schritt" doppelt interpretiert [vorwärts=Skip davor, rückwärts=Einschub — deckt Spec-Diagramm komplett]; kapazitäts-tragender Klärungs-Arbeitsschritt [skill-klaerung] bleibt bewusste Folge. operativ-Selbsttest um 6 Engine-Asserts erweitert; operativ+nacharbeit+tsc+ng build+No-Hex+doc-consistency grün. v0.73.0→0.74.0 MINOR; PR folgt. Doku: auftrag.ts, leitstand.ts, demo.ts, leitstand.service.ts, klaerfall-loesen.component.ts [neu], conflicts/panel/meine-arbeit, version.ts, Lastenheft §5.1+§11, Operative-Durchgaengigkeit, WORKSPACES.md, UX-Review [B2 ✅], Funktionsumfang, Tests.md, HANDOFF §4, CHANGELOG, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-wrapup ~0.4 h (07-12, Session-Wrap-up nach dem UX-Review-Zyklus [Nutzer: „Wrap-up, pr und merge"; OP-PM-2 Log-Hygiene]. (1) CHANGELOG: 16 veraltete „(PR folgt)"-Marker → echte PR-Links [2 Session-Einträge #439/#440 inhaltlich zugeordnet + 14 eindeutige Ein-PR-Branches via GitHub-API-Mapping Branch→gemergter PR]; ~42 mehrdeutige Marker [Mehrfach-PR-Branches älterer Sessions] bewusst belassen — kein Rate-Raten im Audit-Trail. (2) HANDOFF §2: Kompakt-Zeile „UX-Review-Zyklus 07-11 + Klärungs-Engine" [v0.70.0→0.74.0, 6 PRs, B2–B5+B7 geschlossen, offener Hebel OP-AUTH-1]; Quote-Zeile auf-main-Status korrigiert. (3) Roadmap: OP-ONBOARD-1 Slice 1 ✅. (4) smooth-logs sauber, check-doc-consistency grün. Reine Doku, kein Bump [0.74.0]; PR folgt. Doku: CHANGELOG, HANDOFF §2, Roadmap, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-2 ~0.9 h (07-12, Kapazitätstragender Klärungs-Arbeitsschritt [Nutzer: „Ja" auf Vorschlag; OP-R3-1-Folge aus #440]. Gebaut: Katalog-Template ts-klaerung [Skill skill-klaerung — erster Verwender des reservierten Skills; keine Bucht-Bindung, Doku-Pflicht=Klärungs-Doku] in Tenant-Vorlage + Migration v19 [SCHEMA_VERSION 18→19, idempotent, nur Katalog — MA-Skills bewusst nicht migriert]; Seed: Julian +skill-klaerung N2. Domäne: klaerungsArbeitsInstanz [pure; Guards offener Klärfall/max. 1 offene/5–480 min; Phase=aktuelle Auftrags-Phase; Dauer via nacharbeitMin→zusatzSchritte, kein Solver-Redeploy] + offeneKlaerungsInstanz. Handler auftrag.klaerungEinplanen [+REOPT, +D1-Audit klaerung.eingeplant; infeasible → Chronik-Hinweis „Skill Klärung zugewiesen?"]. Client: geteilte klaerung-einplanen.component [„⏱ Klärung einplanen …", Presets 15/30/60, Badge bei eingeplanter Klärung] in Konflikte+Panel. Entscheidungen: Opt-in statt Automatik [Minutensachen formlos]; Warten-auf-Kunde bewusst nicht modelliert. Stolperstein erneut: „-Zeichen in title-Attribut. Tests: test:do-migrations [v19+Idempotenz] + operativ [5 neue Asserts] + tsc + ng build + No-Hex + doc-consistency grün. v0.74.0→0.75.0 MINOR; PR folgt. Doku: vest-automotive.ts, do-state-migrations.ts+demo, auftrag.ts, leitstand.ts, demo.ts, leitstand.service.ts, klaerung-einplanen.component.ts [neu], conflicts/panel, version.ts, Lastenheft §5.1, Operative-Durchgaengigkeit, Funktionsumfang, Tests.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-3 ~0.8 h (07-12, UX-Review B6 Bedien-Politur [Nutzer: „B6"], rein client-seitig. (1) Gantt-Tastatur-Pfad: verschiebbare Blöcke im Entwurfs-Modus fokussierbar [role/tabindex/aria-Hinweis], Enter → Verschiebe-Dialog [Bucht-Select + datetime-local, 15-min-Raster wie Drag] → gleiches pinned-Event [ein Pin-Pfad]; außerhalb Entwurf bleibt Enter Detail-Klick. (2) Hof-Radar responsiv: 760px-Design skaliert per transform+ResizeObserver [Wrapper Breite/Höhe×Skala, max 1] — Kachel-Pixelkoordinaten bleiben gültig. (3) Textbausteine OP-TEXTBLOCK-1 v1: 5 feste Werkstatt-Phrasen als Antipp-Chips über dem Pflicht-Kommentar im Doku-Gate [·-Trenner, Tippen frei]; admin-editierbar = Rest. Bewusst verbleibend: Belegung/Radar-Umparken Drag-only [Tastatur-Weg via Umpark-Modal], Diktat OP-DIKTAT-1. ng build + No-Hex + doc-consistency grün. v0.75.0→0.76.0 MINOR; PR folgt. Doku: gantt/overview/panel-Komponenten, version.ts, UX-Review [B6 ✅ weitgehend], HANDOFF §4, Funktionsumfang, COMPONENTS.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-4 ~0.2 h (07-12, Korrektur Pilotkunde [Nutzer: „Der Pilotkunde heißt Vest Automotive"]: OP-VERTRIEB-3 nannte aus der Gründer-Call-Notiz „Festler Automotive" → in ops/OP-VERTRIEB-3.md, HANDOFF §4, Lastenheft §11.6 auf Vest Automotive korrigiert, je mit selbst-dokumentierender Korrektur-Notiz [kein stilles Umschreiben]; Offene-Punkte.md regeneriert. Folge für POC-Liste: Tenant-Vorlage vest-automotive.ts trägt den Pilotkunden bereits → Blocker „Tenant-Setup" schrumpft auf Stammdaten-Abgleich. check-doc-consistency grün. Reine Doku, kein Bump; PR folgt. Doku: ops/OP-VERTRIEB-3.md, HANDOFF §4, Lastenheft §11.6, Offene-Punkte.md [generiert], CHANGELOG, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-5 ~1.0 h (07-12, OP-R7-16 v1: Fahrzeug-Angaben am Auftrag [Nutzer: „Dann jetzt op-r7-16"; POC-Blocker aus der Offen-Liste]. Domäne: Auftrag.fahrzeug={fin?,kennzeichen?,beschreibung?} [§4.9-konform: Attribute am Auftrag, kein Fahrzeug-Objekt] + finPlausibel [ISO 3779: 17 Zeichen ohne I/O/Q] + FIN-Guard in fahrzeugAnnahme. Handler: create/checkin/update nehmen fahrzeug [bereinigeFahrzeug trimmt/verwirft Leerstrings; checkin patcht VOR der Annahme; update merged + Chronik „Nachgetragen" + D1-Audit]; DTO-Passthrough. Client: Buchung optionale Fahrzeug-Zeile [Kennzeichen/FIN/Beschreibung, sichtbar sobald ready]; Check-in „Fahrzeug da" mit FIN-Pflichtfeld [vorbefüllt aus Buchung] + Kennzeichen; Detail-Panel Fahrzeug-Karte + ✎ nachtragen [Muster Kunde/CRM]; Tafel Kennzeichen-Chip. Entscheidungen: FIN Pflicht spätestens beim Check-in, optional bei Buchung [Fahrzeug oft noch nicht da; liefern-Altpfad ohne Guard]; Plausibilität warn-only [Sonder-/Altfahrzeuge]; Fotos über bestehenden Annahme-Schritt OP-R4-3 [kein zweiter Foto-Pfad]; ⚠ DSGVO FIN/Kennzeichen personenbezogen → Löschkonzept bleibt OP-CRUD-1/E-CRUD-4. operativ-Selbsttest um FIN-Pflicht/-Plausibilität erweitert; tsc+operativ+ng build+No-Hex+doc-consistency grün. v0.76.0→0.77.0 MINOR; PR #445 (gemergt). Doku: auftrag.ts, leitstand.ts, demo.ts, leitstand.service.ts, annahme/panel/tafel-Komponenten, version.ts, Lastenheft §4.9+§11.1, HANDOFF §4 [inkl. 1 Duplikat-Zeile geglättet], Funktionsumfang, Roadmap [W1 ✅], CHANGELOG, Timesheet.)
Session taktano-2026-07-12-docs-review-process-automation-soolri ~1.5 h (07-12, Doku-Review [Nutzer: „Experte UX + Prozess-Automatisierung für stark geführte Akteure — ist die Dokumentation ein richtig cooles Meisterwerk?"]. Methode: 4 parallele Tiefen-Reviews über alle ~55 Docs [fachlich+Glossar · 16× architektur/ · betrieb/produkt/Logs · Konventionen/Governance/CI-Mechanik], Code-Stichproben [operativ/auftrag.ts, Migrationen, ci.yml, check-doc-consistency.sh, docusaurus.config.js] + mechanische Messungen [Zeilenlängen, Marker, Format-Matrix, gen-ops-Diff]. Urteil: Gesellenstück mit Meister-Inseln — generierte Sichten frisch/hart validiert, aber D1 keine Anwender-Doku [Lesepfad → veraltetes operativmodell.md] · D2 Drift an verbindlichen Stellen [Lifecycle, design/CLAUDE.md, E-TENANT-1] · D3 stale Vordertüren + Mega-Zeilen [HANDOFF max 15.284 Z., 70× „PR folgt"] · D4 OP-Doppel-Wahrheit [HANDOFF §4 vs. ops/] · D5 kein blockierendes Doku-Gate. Empfehlungen E1–E6; Top-3 als ops/OP-DOCS-14.md. Neu: docs/betrieb/Doku-Review-2026-07.md [pyramidal, Business+IT-Dev+CS]. gen-ops + check-doc-consistency grün. Reine Doku, kein Bump [0.77.0]; PR #447. Doku: Doku-Review-2026-07.md [neu], ops/OP-DOCS-14.md [neu], Offene-Punkte.md [generiert], docs/README.md, IDs.md, Register.md, HANDOFF §4, CHANGELOG, Timesheet.) Stand 2026-07-12 ~08:20 UTC. Session taktano-2026-07-12-app-ux-process-review-i4b52d-6 ~0.7 h (07-12, Umparken-Check + Regel G-4 [Nutzer: „führe den check durch … generelle Regel mitnehmen"]. Check [Code-Review aller Pfade]: Drag&Drop/Repark-Modal/Preemption laufen konsistent auf auftrag.parken/starten/buchtwechsel/belegung.verschiebe; Interrupt-Pflicht-Kommentar, Bucht-Typ-Guard, Doppelbelegung rot, belegungParke idempotent — funktioniert. Befunde: (1) Umpark-Auftrag wird NIEMANDEM zugewiesen [kein Skill/Schritt/Queue; „unterwegs" nur client-lokal, kein Broadcast] → OP-UMPARK-1; (2) Erfolgs-Toast vor Server-Antwort → Phantom-Transit [in OP-UMPARK-1]; (3) Chronik-Lüge bei parken/beenden aus pausiert → DIREKT GEFIXT [beendet/pausiert-Flag, ehrlicher Text]; (4) tote „Umparken"-Skill-Hervorhebung staff.component [v3-Rest]. Regel festgehalten: G-4 [CLAUDE.md + Lastenheft §3] Kontextwechsel-Minimierung bei Platzierung [wer als Nächstes am Fahrzeug arbeitet, parkt es um] + harte Vier-Augen-Ausnahme QS [Ausführender prüft nie eigene Arbeit] → OP-QS-6 [Scheduler-Constraint fehlt, heute rein skill-basiert]. tsc+operativ+doc-consistency grün. v0.77.0→0.77.1 PATCH; PR #446 (gemergt). Doku: CLAUDE.md [G-4], Lastenheft §3+§11.1 [OP-UMPARK-1/OP-QS-6], HANDOFF §4 [TODO ✅+2 OPs], IDs.md, Roadmap, leitstand.ts [Fix], CHANGELOG, Timesheet.)
Session taktano-2026-07-12-app-ux-process-review-i4b52d-7 ~1.1 h (07-12, OP-UMPARK-1 [Nutzer: „Op-umpark-1"] — Umparken als zuweisbare Aufgabe, G-4-platziert. Server: umparkAuftraege im DO-State [persistiert+Broadcast, Ankunft von jedem Terminal, Chronik+D1-Audit]; EINE Message auftrag.umparken [gemeinsamer parken/starten/buchtwechsel-Dispatch extrahiert: parkeAuftragAus + fuehreUmparkZielAus] + Quittung umpark.result [Phantom-Transit behoben — stille Ablehnungen kommen mit Grund zurück]; REOPT-Event. Domäne: umparken.ts [pure waehleUmparkMitarbeiter: nächster-am-Fahrzeug → freier Umpark-fähiger [stört keinen in_arbeit-Schritt, least-loaded] → offen; darfUmparken schließt urlaub/krank/inaktiv aus]. Skill-Gate: skill-umparken neu [Seed Julian+Marco; Migration v20 Katalog-Backfill idempotent, SCHEMA_VERSION 20; Sina/Tom bewusst ohne — Gate sichtbar]; tote Umparken-Chip-Hervorhebung im Staff-Workspace damit live. Client: repark.service auf Server-Transit umgestellt [isInTransit/transitList aus State, confirm=1 Message, Toast erst auf Quittung inkl. Zuweisungs-Text]; Meine Arbeit +Umpark-Karten [zugewiesen+offene, ✓ Angekommen]. Entscheidungen: Drag&Drop bleibt direkte Inventur-Korrektur [dokumentiert Ist, beauftragt nicht]; keine Solver-Kapazität [Minutensache]; Rollen-Gate → OP-AUTH-1. Tests: operativ +4 Platzierungs-Asserts + do-migrations v20 + tsc + ng build + No-Hex + doc-consistency grün. v0.77.1→0.78.0 MINOR; PR #449. Doku: umparken.ts [neu], leitstand.ts, vest-automotive.ts, do-state-migrations+demo, demo.ts, leitstand.service.ts, repark.service.ts, meine-arbeit, version.ts, Lastenheft §11.1 ✅, HANDOFF §4, Funktionsumfang, Roadmap, Tests.md, COMPONENTS/WORKSPACES, CHANGELOG, Timesheet.) Session taktano-2026-07-12-docs-review-process-automation-soolri-2 ~0.8 h (07-12, OP-DOCS-14 Teil 1: Anwender-Handbuch [Nutzer: „Ok, next" nach Doku-Review #447]. Methode: Explore-Lauf extrahiert wörtliche UI-Labels/Flows aus dem Client [shell/meine-arbeit/annahme/quality/klaerfall-loesen/labels.ts/onboarding-Texte], dann 4 Handbuch-Seiten in Werkstattsprache [du-Form, keine OP-IDs/Code-Symbole]: Handbuch.md [Bereiche · Werker-Modus · Status-Wörter · 3-Leitfragen-Tabelle], Mein-Arbeitstag.md [Queue, ⏸/▶/✓, Doku-Gate + Textbaustein-Chips + Pflicht-Fotos + Offline-Queue], Klaerfall-melden.md [3 Schritte, 4 Grund-Presets, 4 Lösungs-Wege, Klärung einplanen 15/30/60], Fahrzeug-annehmen.md [Ein-Satz-Annahme, 5 Bausteine, Termin-Härte, Check-in Car-Check+FIN]. Entscheidungen: Vier-Augen-Regel bewusst nicht beschrieben [im Client nicht gebaut — Handbuch beschreibt nur Gebautes]; Sidebar-Position 0.5 nicht-invasiv. Lesepfade [Anwender+Support → Handbuch zuerst, statt veraltetem operativmodell.md], Landkarte, ops/OP-DOCS-14 [Teil 1 ✅], Offene-Punkte regeneriert. check-doc-consistency + gen-ops grün. Reine Doku, kein Bump; PR #450. Doku: docs/anwender/* [neu], Lesepfade.md, docs/README.md, ops/OP-DOCS-14.md, Offene-Punkte.md [generiert], HANDOFF §4, CHANGELOG, Timesheet.) Stand 2026-07-12 ~08:45 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-3 ~1.0 h (07-12, OP-DOCS-14 Teil 2: Drift-Fix-Runde verbindliche Stellen [Nutzer: „Next" nach #450]. Arbeitsteilung: 3 Agenten für die großen Rewrites [operativmodell.md gegen auftrag.ts/labels.ts · design/CLAUDE.md gegen Ist-Client (Tailwind v4/Tokens, 15 Pages, kein STATUS_HEX) · Root-README (Angular 22, Node 22/Wrangler 4, Tests→Tests.md-Link)], chirurgische Edits selbst [Lastenheft §5.1 +abgebrochen/nacharbeiten in Diagramm+Tabelle+F02 · Persistenz.md E-TENANT-1 „empfohlen/offen"→„✅ Variante C nur Tamper-Anker" · CLAUDE.md Observability/OP-LOG-1 auf OTLP-live + Owner-Pointer · HANDOFF Footer 16.06.→12.07. + §8-Dateibaum real + §6.1 Tailwind]. RAG-Doku-Index regeneriert [npm run doku-index] — Assistent antwortet nicht mehr mit wegmigriertem Statusmodell. Verifikation: check-doc-consistency + check-no-hex + smooth-logs grün. Reine Doku, kein Bump [0.77.1]; PR #451. Doku: operativmodell.md, Lastenheft, design/CLAUDE.md, README.md, HANDOFF, Persistenz.md, CLAUDE.md, doku-index.generated.ts, ops/OP-DOCS-14 [Teil 2 ✅], Offene-Punkte [generiert], CHANGELOG, Timesheet.) Stand 2026-07-12 ~09:15 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-4 ~1.0 h (07-12, OP-DOCS-14 Teil 3: Doku-Gates scharf [Nutzer: „Next" nach #451] — OP geschlossen. (1) check-doc-consistency.sh zweistufig: harte Teilmenge [tote Links · Version/Build-SoT] blockt via --strict/Exit 1, Rest warnt; +3 Warn-Checks [Log-Zeilenlängen >2000 Z. aggregiert je Datei · Footer-Staleness README/HANDOFF >7 Tage vs. Commit · Landkarte-Rücklink via gen-doc-footer --check]; Negativ-Test verifiziert [injizierter toter Link → Exit 1]. (2) ci.yml: doc-consistency --strict + neu am ci-gate; Offene-Punkte-Staleness-Diff blockt [::error/Exit 1]. (3) docusaurus onBrokenLinks warn→throw [Build vorher+nachher grün verifiziert, npm ci+build]. (4) Neu scripts/gen-doc-footer.mjs [idempotent, --check]: „↩ Doku-Landkarte · Lesepfade · Register"-Footer statisch in 39 Leaf-Docs — Rück-Navigation jetzt auch auf GitHub [Review-Kennzahl 0/16 behoben]; Timesheet bewusst ausgenommen [append-only, End-Footer rutscht in die Mitte]; Site-Remark-Footer doppelt nicht [erkennt README-Link]. Regel-Kopien nachgezogen [CLAUDE.md, agents.md §2.1/§5.1/§6.6, session-start-hook, Tests.md, Doku-UX-Konzept §3 inkl. Korrektur der zwei übertreibenden Behauptungen]. Reine Doku/Tooling, kein Bump [0.77.1]; PR #452. Doku: check-doc-consistency.sh, gen-doc-footer.mjs [neu], ci.yml, docusaurus.config.js, 39× Footer, agents.md, CLAUDE.md, Tests.md, Doku-UX-Konzept, ops/OP-DOCS-14 [erledigt], Offene-Punkte [generiert], HANDOFF §4, CHANGELOG, Timesheet.) Stand 2026-07-12 ~09:55 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-5 ~0.7 h (07-12, ops/-first verbindlich [Nutzer: „next" = Doku-Review E3/Befund D4; OP-DOCS-11 v2]. Doppel-Wahrheit aufgelöst: agents.md §6.2 auf ops/-first umgeschrieben [neuer OP = ops/
Session taktano-2026-07-12-docs-review-process-automation-soolri-6 ~0.4 h (07-12, Wrap: CodeRabbit-#453-Review [6 Findings, alle adressiert]: gen-ops altBestand() 160-Zeichen-Deckel entfernt [defensiv; Zähler unverändert 143/6] · Register.md Änderungs-Reihenfolge-Regel auf ops/-first · IDs.md Rest-HANDOFF-als-Quelle-Stellen [Status-Zeile + Fußnote] · HANDOFF 3 stale §4-Verweise [§7-Abarbeiten, §8-Baum, §9-Reminder] + Footer-Detailzeile · harte OP-Zahlen aus Hand-Docs raus [Zähler ist generiert] · frische „PR folgt"-Marker finalisiert [#446/#450/#451/#452/#453 in CHANGELOG+Timesheet, historisch-mehrdeutige bewusst belassen] + Duplikat-Bereinigung Teil-2-Eintrag. PR #454; danach Session-Ende.) Stand 2026-07-12 ~10:55 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-7 ~0.2 h (07-12, Session-Abschluss: Timesheet-Hygiene-PR #455 [3 CodeRabbit-Findings aus #454: 70×-„PR-folgt"-Kennzahl restauriert · inhaltliches Teil-2-Duplikat entfernt + Bestand auf #451 finalisiert · Wrap-Marker → #454] + dieser selbst-dokumentierende Abschluss-Eintrag, PR #456 [beendet die Log-Rekursion: der letzte PR dokumentiert sich selbst, CodeRabbit-#455-Finding]. Session-Gesamtbilanz: Doku-Review #447 → OP-DOCS-14 komplett [#450/#451/#452] → ops/-first #453 → Wraps #454/#455/#456. smooth-logs + check-doc-consistency --strict grün.) Stand 2026-07-12 ~11:05 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-8 ~0.5 h (07-12, OP-DOCS-15: Kanonische PR-Checkliste [Nutzer: „e5" — Doku-Review-Empfehlung E5, Befund D5/D10]. Gebaut: .github/PULL_REQUEST_TEMPLATE.md als Checkbox-Liste [8 Pflicht-Punkte je PR · 6 falls-zutreffend · 2 Prozess], von GitHub automatisch in jeden PR-Body gelegt. Entscheidungen: Checkliste = Sicht, kein neuer Regel-Owner [jede Pflicht zitiert Owner-Regel — Lehre aus D4]; Pflege-Regel neu als agents.md §6.9 [Pflicht ändern ⇒ Template im selben PR]; kein Generator [Einfachheit]. Hook Punkt 4 + CLAUDE.md §Repo auf Verweis umgestellt; ops/OP-DOCS-15.md [erledigt] + IDs/Register + Offene-Punkte regeneriert [7 OPs]. gen-ops + check-doc-consistency --strict + smooth-logs grün. Reine Doku, kein Bump [0.77.1]; PR #457.) Stand 2026-07-12 ~11:20 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-9 ~0.3 h (07-12, CodeRabbit-#457-Nachzug [OP-DOCS-15-Folge]: 3 Findings behoben [Prozess-Checkliste +Branch-first/+API-MCP-Transport · Hook auf reinen Pointer · True-North-Satz in ops/OP-DOCS-15 („schneller"-Klausel)] · 2 begründet abgelehnt [H1/MD041: Template = Body-Prefill, H1 würde jeden PR-Body verschmutzen · relative statt blob-Links: bricht auf der Doku-Site, blob = Konvention #419]. gen-ops + check-doc-consistency --strict + smooth-logs grün. Reine Doku, kein Bump [0.77.1]; PR #458.) Stand 2026-07-12 ~11:30 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-10 ~0.1 h (07-12, Mini-Nachzug: Template-Zeile Branch-Löschung konditional [CodeRabbit-#458-Finding; Auto-Merge gewann den Wettlauf gegen den In-PR-Fix]. PR #459.) Stand 2026-07-12 ~11:40 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-11 ~1.2 h (07-12, CodeRabbit-Tuning + Doku-Review E6 + OP-VERTRIEB-4 [Nutzer: „passe die coderabbit.yaml entsprechend an; dann e6" + „Neuer OP: Vorteilsrechner-Direktlink"]. (1) .coderabbit.yaml: True-North-Scope auf Liefergegenstände [D6-Feigenblatt-Verbot], Pfad-Instruktionen Timesheet/CHANGELOG/.github, Angular 20→22. (2) E6: 2 Agenten normalisieren alle 16 architektur/-Köpfe auf den Standard [Status·Bezug·Zielgruppe·True-North + genau 1 Kernaussage; Selbstwidersprüche In-App-Assistent/Audit-Log aufgelöst, Doppel-Kernaussagen zusammengeführt]; Regel in agents.md §2.1, Warn-Gate check-doc-consistency §10 [46→0 Warnungen]. (3) Glossar +11 Alltagsbegriffe [68 gesamt], Lastenheft-§13-Doppel-Glossar → Verweis [Falsch-Definitionen Helfer/Standort raus, Crystal-Bar zentral gerettet], RAG-Index regeneriert [581 Chunks]. (4) ops/OP-VERTRIEB-4 [Direktlink, Klärpunkte Access/Domain/Leads] + ops/OP-DOCS-13-Migration [ops/-first bei Berührung]. gen-ops [9] + gen-glossar + doku-index + strict + smooth-logs grün. Reine Doku, kein Bump [0.77.1]; PR #462.) Stand 2026-07-12 ~12:20 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-12 ~0.6 h (07-12, CodeRabbit-#462-Nachzug: 9 Findings behoben [Backup-Restore-PITR-Kernaussage ehrlich (nativer Restore = ganze DO-DB, Audit-Handling explizit) · Mandantenfähigkeit 2 zentrale Ausnahmen + R2-logisch · Bildbewertung dormant→Phase 1b · Audit-Log-Slice ✅ mit Historie-Klammer · agents.md §2.1 auf architektur/ gescoped + MD031 · Gate §10 auf Kopf-Block gehärtet (4 Felder + genau 1 Kernaussage, Negativ-Test) · Tests.md-Beschreibung · OP-VERTRIEB-4 +Negativ-Security-Check · CHANGELOG-Zähler 143/7/9] · 8 MD028-Findings begründet abgelehnt [Zwei-Block-Design gewollt, jetzt in §2.1 dokumentiert]; Folge-Runde: PITR-Vertrag §§5/7/8 konsistent [Export→Whole-DO-PITR→Re-Append] + Gate auf Blockquote-Zeilen geankert. strict + smooth-logs grün. Reine Doku, kein Bump [0.77.1]; PR #467.) Stand 2026-07-12 ~12:55 UTC.
Session taktano-2026-07-12-app-ux-process-review-i4b52d-8 ~1.4 h (07-12, OP-QS-6 [Nutzer: „Op-QS-6 — von dieser Regel darf nur der Chef abweichen"] — Vier-Augen beim Quality-Check hart + Chef-Freigabe. Begriffsschärfung: Prüfschritt = Phase qs OHNE Nacharbeit/Klärung [beides Ausführung in der QS-Phase]. Domäne: istPruefschritt/qsAusfuehrende/vierAugenVerletzung [pur; Helfer zählen nicht] + Instanz-Feld vierAugenFreigabe [gespeicherte Chef-Entscheidung]. Durchsetzung 4-fach: TS-Scheduler [prospektiver Crew-Ausschluss im Lauf + AuftragInput.vierAugenAusgeschlossen; NEU G-4-Heuristik „zwingende Ausführende zuerst" — einziger Könner übernimmt bevorzugt, hält Prüfer frei, sonst verbrennt Greedy den letzten QM-Träger; Infeasible-Grund nennt Vier-Augen] · CP-SAT-Payload [Ist-Ausführende raus; prospektive Co-Zuweisung = dokumentierte Lücke → model.py-Constraint Folge] · harter Start-Guard [teilschritt.aktion] · Hand-Zuweisungs-Gate [Ablehnung in Chronik]. Chef: qs.vierAugenFreigabe [Pflicht-Begründung, interim Leitungs-Gate wie Kosten-Admin, chef-Flag im State, Chronik+D1-Audit qs.vieraugen.freigabe]; UI Badge „⚠ Vier-Augen"/„✓ Chef-Freigabe" + 🔓-Freigabe-Formular im Detail-Panel + Meine-Arbeit-Hinweis. Seed-Erkenntnis: Marco +skill-qm ★2 [Premium: Julian+Sina führen aus → ohne dritten Prüfer Endkontrolle unplanbar; Staffing-Punkt für Vest-Abgleich: wer prüft Güte 3?]. Tests: operativ +6 Asserts + volle Regression [spike/replan/solve/teilplan/nacharbeit/qs-nacharbeit/autoopt/insights/running-process/do-migrations] + tsc + ng build grün. v0.78.0→0.79.0 MINOR; PR #468. Doku: auftrag.ts, schedule.ts, multi.ts, problem.ts, leitstand.ts, vest-automotive.ts, demo.ts, leitstand.service.ts, auftrag-detail-panel, meine-arbeit, version.ts, CLAUDE.md+Lastenheft §3 G-4-Chef, Lastenheft §11.1 ✅, HANDOFF §4, Funktionsumfang, Roadmap, Tests.md, CHANGELOG, Timesheet.)
Session taktano-2026-07-12-docs-review-process-automation-soolri-13 ~0.9 h (07-12, „#405 abschließen; dann Rest von OP-DOCS-13" [Nutzer]. (1) #405: Branch 1 Wo. hinter main, GitHub-Update-Branch 422 [Server kennt merge=union nicht] → lokal gemergt [konfliktfrei], 2 überholte „(PR folgt)"-CHANGELOG-Dubletten von main geglättet, Auto-Merge → gemergt; Nachzug-Finding: IDs.md „bare"→„repo-lokal, also ohne Repo-Key". (2) OP-DOCS-13 Schluss-Runde: HANDOFF-§4 117 Zeilen glätten [96 Dekorations-Duplikate + 21 überholte Generationen; 143 Alt-IDs vollständig, 587→470 Zeilen, Mega-Zeilen 90→52] + PITR-Korrektur-Notiz am OP-BACKUP-1-Bestand [#467-Konsistenz]; ops/OP-DOCS-13 → erledigt. (3) Neue OPs [Nutzer]: OP-PILOT-1 [Pilot-Phasen-Konzept, jetzt] + OP-ORG-1 [Tasktracking]. (4) PO-Vorgabe Statistik+Grafik: gen-ops erzeugt 📊-Sektion [Zahlen + 2 Mermaid-Pies, ops/ + §4-Heuristik] in Offene-Punkte.md; Regel in CLAUDE.md. gen-ops [11] + strict + smooth-logs grün. Reine Doku, kein Bump [0.79.0]; PR #469. Folge-Runde [#469-Review]: 2/6 Findings valide [OP-DOCS-13-§4-Eintrag raus, Schnappschuss-Titel ehrlich], 4 begründet abgelehnt; PR #472.)
Stand 2026-07-12 ~13:45 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-14 ~0.6 h (07-12, „Dann jetzt OP-ORG-1" [Nutzer; davor Beratung: GitHub-Wiki verworfen — außerhalb PR-Flow/Gates/RAG, Drift-Risiko]. Entscheidung: GitHub Projects über op-sync-Spiegel statt neuem Tool. Gebaut: gen-ops-📊 + Entscheidungen [E-IDs, 12/2] + Risiken [Register-Status, 13/6] als Bestandstabelle; sync-ops-issues +status:-Labels [Board-Spalten]; agents.md §6.2 Sichten-&-Steuern-Ritual; ops/OP-ORG-1 aktualisiert [Rest: PO legt Board an, 5-Min-Anleitung + Kadenz-Entscheid]. gen-ops + strict + smooth-logs grün. Reine Doku/Tooling, kein Bump [0.79.0]; PR #473. Folge-Runde [#473-Review, 2/2 valide]: hart-fehlschlagende Statistik-Quellen + Board-Wording Labels=Filter/Slice statt Spalten; PR #474.)
Stand 2026-07-12 ~14:10 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-15 ~0.3 h (07-12, CodeRabbit-#474-Nachzug [letzte Polier-Runde]: (1) CHANGELOG „je PR ein Eintrag" wiederhergestellt — Folge-Runden-Addendum aus dem #473-Eintrag in eigenen #474-Eintrag gelöst [valide: #474 hatte keinen eigenen Link]; (2) gen-ops-Risiko-Status-Whitelist [unbekannter Status bricht mit Zeilen-Kontext statt still als offen zu zählen]; (3) abgelehnt: Timesheet-Finding [Timesheet ist je Session, nicht je PR — Session -14 umfasste beide PRs]. PR #475.)
Stand 2026-07-12 ~15:35 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-16 ~0.3 h (07-12, „Project-board ist angelegt; Kadenz wöchentlich / coderabbit auf einmaligen review bei ready-pr" [PO]. (1) ops/OP-ORG-1 → erledigt [Board live, Kadenz wöchentlich in agents.md §6.2 verankert]. (2) .coderabbit.yaml: auto_incremental_review: false [Schema-verifiziert; 1 Review je Ready-PR, Re-Review nur manuell]. gen-ops [11: 4/0/7] + strict + smooth-logs grün. Reine Doku/Config, kein Bump [0.79.0]; PR #476.)
Stand 2026-07-12 ~15:55 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-17 ~1.4 h (07-12, „überführe das OP-Archiv in das neue Modell — dann haben wir das sauber" [PO]. Big-Bang-Migration: ~166 Alt-OPs (HANDOFF §4 + Lastenheft §11) → je eine ops/
Stand 2026-07-12 ~16:30 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-18 ~0.3 h (07-12, Hotfix nach #477: sync-ops-Lauf #19 scheiterte am GitHub-Search-Secondary-Rate-Limit [1 Suche/OP × ~140]. sync-ops-issues.mjs: Search-je-OP → 1× paginierter Core-List-Index; gh() mit 403/429-Backoff + Primär-Limit-Drosselung; 300 ms zwischen Writes. node --check + Dormant-Skip grün. Tooling, kein Bump [0.79.0]; PR #512.)
Stand 2026-07-12 ~16:55 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-19 ~0.3 h (07-12, nach Fix #512 sync-ops #20 per Dispatch nachgefahren → Board vollständig. PO-Antworten (3 Fragen) verankert: agents.md §6.2a [Priorität im Repo entscheiden · OP-Diskussion-Zusammenfassung + OP-Grooming als agentgetriebene on-demand-Tasks, keine Pipeline]; _Vorlage.md +Grooming/Diskussions-Blöcke. Reine Doku, kein Bump [0.79.0]; PR #617.)
Stand 2026-07-12 ~17:20 UTC.
Session taktano-2026-07-12-docs-review-process-automation-soolri-20 ~0.2 h (07-12, Session-Wrap: HANDOFF-Footer + §2-OP-Management-Zeile auf Ist-Stand [Archiv migriert, Board vollständig, Grooming-WoW verankert]; smooth-logs + strict grün. Reine Doku, kein Bump [0.79.0]; PR #619.)
Stand 2026-07-12 ~18:05 UTC.
Session taktano-2026-07-12-meeting-notes-integration-qcf9mg-1 ~0.8 h (07-12, „übernehme die angehängten Gesprächsnotizen in die jeweils relevanten Stellen" [Nutzer; Meeting 12.07. mit Queckenstedt/Tieder/May/Kirchhof, Notion-Export]. Erstes Meeting-Protokoll docs/betrieb/meetings/2026-07-12-produktiv-launch-app-review.md [pyramidal: TL;DR·B1–B7·A1–A8·Diskussion·True North] + README-Index + HANDOFF-Zeile. Beschlüsse gespiegelt: OP-VERTRIEB-3 [Launch-Timeline Aug/Sep/Okt + ~50-Kunden-Ziel], OP-PILOT-1 [Lars-von-Mattwerk bestätigt + Kriterium + Onboarding], OP-ORTUNG-1 [AirTag Fahrzeuge+Kartons, MA über iPads/Betriebsvereinbarung, Alternativen Chipolo/aufladbare Karte], OP-I18N-1 [EU-Sprachen NL/FR/ES/EN], OP-BRAND-2 [Automotivo + made-in-Germany, Owner Holger]. 3 neue OPs: OP-ALERT-1 [Notfall-Knopf], OP-VERTRIEB-5 [Folienhersteller-Partnerschaft], OP-VERTRIEB-6 [Zielgruppen/Betriebsarten/Länder]. Markt-und-Markteintritt.md +Meeting-Input-Callout. gen-ops + strict + smooth-logs grün. Reine Doku, kein Bump [0.79.0]; PR folgt.)
Stand 2026-07-12 ~18:55 UTC. Session taktano-2026-07-12-docs-review-process-automation-soolri-21 ~0.6 h (07-12, „wie lassen sich die dependabot-Themen angehen?" [PO]. Welle 1: 4 unabh. PRs [#309/#424/#425/#431] rebased + Auto-Merge SQUASH. Beide Majors lokal gg. main verifiziert [tsc --noEmit + Server-Smoke grün]: workers-types 4→5 [#311, types-only] gemergt; typescript 5.9.3→7.0.2 [#312] = nativer tsgo-Compiler → gehalten [PO: Einfachheit, keine Server↔Client-TS-Divergenz], als ops/OP-DEPS-1.md [offen·spaeter·technik] verankert. ops/-Bestand 175. gen-ops [175] + strict + smooth-logs grün. Reine Doku/Prozess, kein Bump [0.79.0]; PR #620.)
Stand 2026-07-12 ~18:40 UTC.
Session taktano-2026-07-12-next-steps-f1buws-1 ~1.0 h (07-12, „Was steht als nächstes an?" → „Technische Punkte aus §7" → OP-R8-4 Slice 1 [PO wählte „Sofort-Feedback beim Ziehen" aus 3 Optionen]. HANDOFF §7 + offene ops/*.md gesichtet [OP-PILOT-1 einzige „jetzt"-Prio, mehrere „next" aus dem 12.07.-Meeting]. Gebaut: gantt.component.ts prüft Drag-Ziele im Entwurfs-Modus live gegen Überlappung [Plan + andere Pins, inkl. Cool-down] und Ausfall-/Schicht-Bänder — Geist-Block rot/⚠ statt cyan/✎ bei Verletzung, ungültiger Drop erzeugt keinen Pin sondern pinRejected-Toast mit Grund; gleiche Prüfung im Tastatur-Pfad (moveBestaetigen). Skill-Match/Cool-down-Feinheiten bewusst weiter Solver-Sache [Single Source of Truth]. PR #623. Verifikation: ng build grün + Live-Test im Browser [wrangler dev + ng serve, Playwright-Treiber via playwright-core gg. vorinstalliertes Chromium — Node 22.22.3 via nvm nachinstalliert, da Angular 22 >22.22.2 verlangt]: Überlappungs-Drop → roter Geist + Toast + kein Pin bestätigt; freier Drop → Pin normal übernommen bestätigt. ops/OP-R8-4.md offen→in-arbeit [Slice 1 ✅, Folge-Slices dokumentiert]. v0.79.0→0.80.0 MINOR.)
Stand 2026-07-12 ~23:46 UTC.
Session taktano-2026-07-13-next-steps-f1buws-2 ~1.1 h (07-13, „OP-R8-1 Konflikt-Typen" [PO, nach Rückfrage „Enum + 3 wiederverwendbare Typen"]. Bestand gesichtet: bisher NUR EIN Konflikt-Typ [Termin]; die 6 Lastenheft-Beispiele existierten als Enum gar nicht. Gebaut: KonfliktTyp [termin/ueberbuchung/skill_luecke/standzeit] als Datenmodell [neues server/src/operativ/konflikte.ts, reine Funktionen]; 3 neue Typen OHNE neue Erkennungslogik — Überbuchung [ueberbelegt-Flag der Belegung], Skill-Lücke [dieselbe Engpass-Logik wie der Hebel-Wizard-Hinweis, jetzt für alle offenen Aufträge], Standzeit [derselbe bringtermin+standzeitStunden-Vergleich wie der Scheduler]. Server broadcastet weitereKonflikte im State; Konflikte-Tab zeigt eigene Karte [Typ-Badge/Schwere], Tab-Zähler kombiniert. Verifikation: npm run test:konflikte [neu] + tsc --noEmit + ng build grün; Live im Browser [wrangler dev+ng serve, Playwright]: Vest-Seed zeigt 5 Skill-Lücken korrekt im Feed. ops/OP-R8-1.md offen→in-arbeit [Slice 1 ✅, 3 Folge-Slices dokumentiert: Mitarbeiter/Arbeitsplatz-fehlt/Sperre-kollidiert brauchen echten Neu-Abgleich, Typ-Filter, Hebel-Wizard-Integration]. v0.80.0→0.81.0 MINOR. PR #627.)
Stand 2026-07-13 ~06:11 UTC.
Session taktano-2026-07-13-next-steps-f1buws-3 ~1.2 h (07-13, „was ist OP-R8-7?" → „Ja" [PO, nach Erklärung des Bulk-Auto-Resolve-Features]. ops/OP-R8-7.md gesichtet [offen, Kernfrage: welche Garantien gegen neue Konflikte]. Gebaut: reine Kernfunktion waehleSicherenHebel [neues server/src/operativ/konflikt-auto-resolve.ts] wählt je Termin-Konflikt aus der bereits vorhandenen Hebel-Liste des manuellen Wizards [konfliktHebel, OP-R8-2/3] den wirksamsten SICHEREN Hebel — Rang skip>eil>unterbrechen>abholtermin, sicher = kein bislang unkonfliktierter Auftrag gerät neu in Verzug [Prüfung gg. Baseline-Menge bekannter Konflikte]. KEINE neue Simulation gebaut — nutzt dieselbe Simulieren-dann-Anwenden-Reihenfolge wie der Einzel-Wizard [Garantie-Grenze bewusst dokumentiert: keine kombinatorische Joint-Optimierung über alle Konflikte]. Server: neue Message konflikt.alleLoesen → loeseAlleKonflikte() [server/party/leitstand.ts] wendet je Konflikt den bestehenden loeseKonflikt() an, quittiert ehrlich {geloest,offen} + D1-Audit [mirroring auftrag.stornieren.result-Muster, keine Broadcast-Stempel-Variante]. Client: konfliktAlleLoesen() + konfliktAlleLoesenResult-Signal, Konflikte-Tab-Header-Aktion „⚡ Alle automatisch lösen" [nur bei ≥1 Termin-Konflikt] + Toast-Bilanz. Verifikation: npm run test:konflikt-autoloese [neu, 6 Fälle: Rang, unsicherer Hebel übersprungen, bereits-bekannter-Konflikt-Ausnahme, kein sicherer Hebel→null, nicht-anwendbar ignoriert] + tsc --noEmit + ng build grün, npm run operativ ohne Regression. Live End-to-End [wrangler dev+ng serve, Playwright + direkter WebSocket-Test]: mehrere real erzeugte Termin-Konflikte automatisch gelöst, Toast „✓ 1 Konflikt automatisch gelöst" + Feed-Badge/Leerzustand korrekt aktualisiert. ops/OP-R8-7.md offen→in-arbeit [Slice 1 ✅, Überstunden-/Kapazitäts-Hebel als Folge-Slice offen]. v0.81.0→0.82.0 MINOR. PR #629.)
Stand 2026-07-13 ~14:45 UTC.
Session taktano-2026-07-13-id-naming-conventions-912st8 ~0.2 h (07-13, „Gold-Standard für Doku und ID-Namenskonventionen?" [User] → „Projekt-Kürzel bei IDs immer als Prefix verwenden" [User-Auftrag, repo-übergreifend über sera/medidentas/taktano/everything-as-code-template]. Taktano hatte als einziges Schwester-Repo noch keine Projekt-Kürzel-Klausel im ID-System — CLAUDE.md ergänzt: TKT--Prefix für alle neuen IDs jetzt verbindlich [TKT-D-n, TKT-OP-Rn-n, Session-ID TKT-<Datum>-<branch-slug>], bestehende IDs unverändert [kein retroaktiver Umbau]. CHANGELOG + HANDOFF-Footer nachgezogen. Docs-only, kein Code-/Schema-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~06:20 UTC.
Session taktano-2026-07-13-golden-rule-zero-trust ~0.1 h (07-13, „Golden Rule: Alle Online-Deployments zunächst per Cloudflare Zero Trust abschotten" [User-Auftrag, repo-übergreifend]. CLAUDE.md unter „Compliance, Sicherheit & Risiko" ergänzt: neue Regel — offener Zugriff auf ein Online-Deployment ist begründete Ausnahme, nie Default beim Go-Live; Hinweis auf automotivo.de-Analyse/Vest-POC als weiterhin Access-gated. Gleichzeitig in sera/medidentas/everything-as-code-template vereinheitlicht. CHANGELOG nachgezogen. Docs-only, kein Code-/Schema-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~17:35 UTC.
Session taktano-2026-07-13-runs-on-vereinheitlicht ~0.1 h (07-13, „runs-on sollte immer sein: ...fork && 'ubuntu-latest' || vars.CI_RUNNER || 'hot'" [User-Auftrag, repo-übergreifend]. ci.yml hatte das Muster bereits an jedem Job [PR #403/OP-CI-2]; die übrigen sechs Workflows [auto-rerun/docs-deploy/fly-deploy/sync-ops/sync-pr-logs/weekly-audit] hingen noch auf der älteren ${{ vars.CI_RUNNER || 'self-hosted' }}- bzw. 'hot'-Form ohne Fork-Gate — auf den einheitlichen Ausdruck gehoben. Kein pull_request-Trigger aus Forks bei diesen sechs, das Fork-Gate ist dort inert, schafft aber Konsistenz. YAML lokal geparst [valide]. CHANGELOG nachgezogen. Docs/Infra-only, kein Code-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~17:50 UTC.
Session taktano-2026-07-13-next-steps-f1buws-4 ~0.3 h (07-13, Rückfrage nach OP-R8-7-Merge [#629]: „müsste das nicht der Solver besser bewerten können?" [PO]. Chat-Antwort geschärft statt nur Prosa: jeder einzelne Hebel-Wert IST solver-/scheduler-gestützt [konfliktHebel→planeJointMitEil/simuliereGewinnDurchFreigabe]; fehlend ist eine gemeinsame Optimierung ÜBER mehrere gleichzeitige Konflikte hinweg — loeseAlleKonflikte() verarbeitet greedy in Array-Reihenfolge statt nach Dringlichkeit/Options-Anzahl, ein früh verbrauchter Hebel kann einen späteren Konflikt unnötig ungelöst lassen. Auf „schärfer fassen" [PO]: neuer ops/OP-R8-19.md [bezug OP-R8-7/OP-OPT-9] mit konkretem Fehlerbild-Beispiel + Lösungsrichtung [CP-SAT-Meta-Modell über die Konflikt-Menge, einfachere Zwischenstufe „nach Options-Anzahl sortieren"] + explizitem YAGNI-Bau-Trigger [erst bei wiederholt beobachteten Fällen, auditierbar über bestehende D1-Audit-Zeile]. ops/OP-R8-7.md Garantie-Grenze von vager Prosa auf präzisen Cross-Link geschärft. gen-ops [179 OPs] + strict [5 bekannte Warnungen, keine neuen] grün. Reine Doku, kein Bump [0.82.0]; PR #633.)
Session taktano-2026-07-13-concurrency-vereinheitlicht ~0.1 h (07-13, „concurrency sollte immer sein: group: ${{ github.workflow }}-${{ github.ref }}, cancel-in-progress: true" [User-Auftrag] → korrigiert auf die main-Ausnahme [„doch ausnahme auf main"]. ci.yml hatte das Muster [inkl. ci--Präfix vor Korrektur] bereits; auto-rerun/docs-deploy/fly-deploy/sync-ops/weekly-audit hatten gar keinen concurrency-Block — ergänzt: group: ${{ github.workflow }}-${{ github.ref }}, cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}. sync-pr-logs.yml bewusst ausgenommen [PR-spezifischer Group-Key, github.ref würde parallele PR-Syncs canceln]. YAML aller 6 lokal geparst [valide]. CHANGELOG nachgezogen. Docs/Infra-only, kein Code-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~18:05 UTC.
Session taktano-2026-07-13-nested-claude-md-scoping ~0.1 h (07-13, „Instruktions-Scoping-Regel (Nested CLAUDE.md) auch hier einführen" [User-Auftrag, repo-übergreifend, übernommen aus Template D-9]. Neue Sektion in CLAUDE.md: Root bleibt einzige Stelle für stack-unabhängige Governance [True North, G-n, ID-System, Compliance, Repo-Konventionen]; nested CLAUDE.md je eigenständigem Tech-Stack-Unterverzeichnis [client/ Angular, server/ Worker, solver-service/ Python — Taktano ist der heterogenste der vier Repos, Referenzfall] nur für stack-lokale Build/Test/Lint-Details, mit festem Skelett + Pflicht-Rückverweis auf Root. CHANGELOG nachgezogen. Docs-only, kein Code-/Schema-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~19:20 UTC.
Session taktano-2026-07-13-runner-desktop-preferred ~0.1 h (07-13, „prefer selfhosted runner with label desktop" [User-Auftrag]. Literaler Fallback ${{ vars.CI_RUNNER || 'hot' }} → 'desktop' in allen 17 runs-on-Stellen [7 Workflow-Dateien: auto-rerun/ci/docs-deploy/fly-deploy/sync-ops/sync-pr-logs/weekly-audit] geändert. Hinweis dokumentiert: greift nur, wenn das Repo-Actions-Variable CI_RUNNER NICHT gesetzt ist — sonst zusätzlich in GitHub-Repo-Settings anpassen [kein Code-Fix möglich]. YAML aller 7 Dateien lokal geparst [valide]. CHANGELOG nachgezogen. Docs/Infra-only, kein Code-Change, APP_VERSION unverändert. PR #639.)
Stand 2026-07-13 ~20:35 UTC.
Session taktano-2026-07-13-next-steps-f1buws-5 ~1.0 h (07-13, „was als nächstes?" → PO wählte „OP-R8-1 Folge-Slice" aus 4 Optionen. Bestand gesichtet: ops/OP-R8-1.md schätzte die restlichen 3 Typen [Mitarbeiter/Arbeitsplatz fehlt, Sperre kollidiert] als „deutlich größeren Slice" ein — Recherche zeigte, der Abgleich Zuweisung↔Ausfallband existiert schon [mitarbeiterAusfall/bayAusfall in scheduler/ausfall.ts, bislang nur fürs Gantt-Ausfallband genutzt]. Gebaut: 3 neue reine Funktionen in konflikte.ts [konflikteMitarbeiterFehlt/konflikteArbeitsplatzFehlt/konflikteSperreKollidiert] — prüfen je offenem Teilschritt, ob die zugewiesene Ressource im geplanten Fenster einen harten, bei der Planung unbekannten Ausfall hat [krank/Urlaub/inaktiv bzw. KonfigStatus≠aktiv bzw. Sperre-Überlappung]. In weitereKonflikte verdrahtet, Client-Typ-Union+Label-Map ergänzt. Verifikation: npm run test:konflikte [8 neue Fälle] + tsc --noEmit + ng build + npm run operativ grün. Live [wrangler dev+ng serve, WebSocket-Test+Playwright]: arbeitsplatz.update auf in_wartung gesetzt → alle 10 betroffenen Vest-Seed-Aufträge korrekt als „Arbeitsplatz fehlt" erkannt, UI-Badge korrekt, zurückgesetzt; „Mitarbeiter fehlt" nur Unit-Test-verifiziert [keine Mitarbeiter-Mutations-Message existiert aktuell]. ops/OP-R8-1.md beide Slices ✅ [Feed-Filter + Hebel-Wizard-Integration als Folge-Slices offen]. v0.82.0→0.83.0 MINOR. PR #637.)
Stand 2026-07-13 ~20:25 UTC.
Session taktano-2026-07-13-taktano-nested-claude-md-split ~0.2 h (07-13, „ok" [User-Freigabe, Fortsetzung der Instruktions-Scoping-Regel] → tatsächliche Aufteilung für Taktano umgesetzt [heterogenster Stack der vier Repos]. Neu: client/CLAUDE.md [Angular 22/Tailwind v4, Build/Test, Verweis design/CLAUDE.md], server/CLAUDE.md [Cloudflare Worker/DO, Build/Test/Typecheck, Persistenz-/Logging-Konventionen], solver-service/CLAUDE.md [Python/CP-SAT, Run, Solver↔Worker-Vertrag] — Build/Test-Befehle aus den echten package.json/README.md übernommen, nicht geraten. design/CLAUDE.md-Header um Pflicht-Rückverweis ergänzt, Rest unangetastet. Root-CLAUDE.md getrimmt: „Architektur / Stack" verweist auf nested Files statt Details zu duplizieren, „Design-Prinzipien" auf repo-weite Brand-Regel verkürzt. Tiefenquellen-Tabelle ergänzt. check-doc-consistency.sh lokal geprüft — nur bestehende, unveränderte Warnungen. CHANGELOG nachgezogen. Docs-only, kein Code-/Schema-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~19:45 UTC.
Session taktano-2026-07-13-sbom-architektur-diagramm ~0.1 h (07-13, „nimm immer eine SBOM in die Doku auf sowie eine grobe Systemstruktur als Grafik" [User-Auftrag, repo-übergreifend]. Neue docs/architektur/Architektur-Uebersicht.md: Mermaid-Systemgrafik [Access · Client · Worker/DO · Solver-Service · D1/DO-SQLite · OTel, gestrichelt: TS-Optimierer-Fallback] + SBOM-Sektion — verweist auf den bereits bestehenden CI-Job sbom [OP-SBOM-1], den Taktano als einziges Repo schon hatte, aber ohne Doku-Fundstelle. CLAUDE.md §Compliance + Tiefenquellen ergänzt. Übernommen aus Template [dortige D-53]. CHANGELOG nachgezogen. Docs-only, kein Code-/Schema-Change, APP_VERSION unverändert.)
Stand 2026-07-13 ~21:25 UTC.
Stand 2026-07-25 ~10:35 UTC.
Stand 2026-07-25 ~13:10 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-fluss-4c ~1.0 h (07-25, PR #729, nach dem Merge von #728. Redesign „Flusslinie" Phase 4C — Fluss konsolidieren [PO: „4c"]. Explore-Befund: der Fluss [orders] war schon ~90% konsolidiert — Linie [5-Spalten-Board] · Karte [bettet <app-occupancy/> ein] · Risiko-Timeline · Entscheiden-Spalte [geteilte EntscheidenComponent: Konflikte·Klärfälle·Ortung·Vorschläge] · Auswahl-Panel [3d-24] · QS-Modal [3d-28] existieren; 4C ist also Lücke füllen + Nav falten, kein Neubau. Gebaut: (a) Annahme-Einstieg aus dem Fluss — „+ Neuer Auftrag" öffnet das geteilte 720px-Annahme-Overlay [bisher Lage-only] in orders.component.ts [Import + annahmeOffen-Signal + Button in der Segment-Leiste + Mount]; (b) /occupancy [=Fluss·Karte] + /tafel von der Lage in den Fluss-Ort verschoben [shell.component.ts orte-paths: fluss +occupancy +tafel, lage nur noch overview+annahme; + „···"-Gruppen] → Fluss-Tab aktiv auf /occupancy//tafel. Entscheidung — bewusst NICHT gelöscht: conflicts [688-Zeilen-Hebel-Engine] · recommendations · quality bleiben Drill-downs hinter Entscheiden-Triage/QS-Modal [Entscheiden-Karten routen dorthin; Depth, die der Prototyp so nicht hat]. Live-DO-verifiziert [wrangler dev + Client + Playwright, Hell+Dunkel: Fluss „+ Neuer Auftrag"-Button [Fluss-Tab aktiv], Klick → Annahme-Overlay [Scrim+Satz-Input], /occupancy → Fluss-Tab aktiv, keine Page-Errors]. Reiner Client [orders + shell], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod + doc-consistency --strict grün + Screenshots. v0.149.1→0.150.0 MINOR. Doku: ops/OP-REDESIGN-1 [4C ✅], design/WORKSPACES.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen: 4D Team-Seite · 4E Aufräumen [admin-Split + Chronik].)
Session taktano-2026-07-25-next-steps-8vmq5d-team-4d ~1.0 h (07-25, PR #730, nach dem Merge von #729. Redesign „Flusslinie" Phase 4D — Team-Seite [PO: „4D"]. Explore-Befund: der Team-Ort [/staff] war direkt der volle Editor StaffComponent [1037 Z.: anlegen/bearbeiten, Skills, Schichten, Abwesenheiten, Beförderungen]; der Prototyp flusslinie/ macht daraus einen lesenden Überblick „wer kann was, wer macht was". Gebaut: neuer team.component.ts = Karten-Grid [sm:2/xl:3]: Avatar [Ink] · Name/Rolle · Status-Pille [arbeitet=abgeleiteter Aktiv · Frei · Pause · krank · Urlaub, Farbe je Status, 14 % color-mix] · Aktuell [Employee.currentTask] bzw. status-ehrlicher Text · „→ Als Nächstes" [frühester geplanter Teilschritt, dem der/die MA zugewiesen ist — Haupt-/Helfer-Rolle — über alle Live-Aufträge, Queue-Semantik/start wie Tafel/OP-OPT-9, als computed vorberechnet] · Skill-Chips mit Niveau · read-only Status-Filter. Entscheidung — Editor deflektiert, NICHT dupliziert [Einfachheit]: volle Pflege bleibt StaffComponent unter Verwaltung → Team & Skills [/verwaltung/team, 4B]; Team-Ort trägt „Pflegen: Verwaltung → Team & Skills →"-Deflektor. /staff-Route auf TeamComponent repointet [Alt-Deep-Links → Überblick, Editieren 1 Klick weiter]; Onboarding-Hinweis + „···"-Label [Mitarbeiter→Team] mitgezogen. Live-DO-verifiziert [wrangler dev + Client + Demo-Seed + Playwright, Hell+Dunkel: Team-Tab aktiv [roter Underline], 4 Karten mit Pillen/Aktuell/Als-Nächstes/Skills, Filter Alle/arbeitet/Frei/Urlaub mit Zählern, Deflektor-Link, keine Page-Errors; body-bg Ink im Dark bestätigt]. Reiner Client [1 neue Komponente + app.routes-Repoint + Label], kein Server/DTO/Schema — alle Kartendaten schon auf den DTOs. Verifiziert: No-Hex + ng build prod grün + Screenshots. v0.150.0→0.151.0 MINOR. Doku: ops/OP-REDESIGN-1 [4D ✅], design/WORKSPACES.md [§5 Team-Ort], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen: 4E Aufräumen [admin-Split + Chronik] → „IA-komplett".)
Session taktano-2026-07-25-next-steps-8vmq5d-aufraeumen-4e ~1.6 h (07-25, PR #731, nach dem Merge von #730. Redesign „Flusslinie" Phase 4E — Aufräumen: Verwaltung 3-Wege-Split + Chronik → „IA-komplett" [PO: „4e"]. Explore-Befund: administration.component.ts [869 Z., Monolith] mit den Blöcken Taxonomien · Arbeitsplätze&Buchten · Schichten · Nacht-Halle · Purge; das Audit-Log [audit_entries, D1] war write-only [kein Lesepfad]. PO-Entscheidungen [AskUserQuestion]: „Alles in einem PR" + „Taxonomie ganz auf System". Gebaut — (1) 3-Wege-Split: „Stammdaten & System" → drei Ort-Sub-Tabs Buchten & Hof [Arbeitsplätze · Sperren · Nacht-Halle] · Schichten · System [Taxonomien · Mandant · Purge]. Einfachheit: eine route-parametrisierte Komponente [data.bereich via toSignal(route.data), Template @if (bereich() === …)] statt drei Dateien → die geteilte OP-EDIT-1-editResult/Präsenz-Verdrahtung bleibt ungeteilt [kein 3×-Duplikat]; da Taxonomien ganz auf System bleiben, hat jeder Bereich genau eine Edit-Domäne. Routen plaetze/schichten/system [+stammdaten→plaetze, /administration→/verwaltung/plaetze]; Sub-Sidebar 7 Tabs. (2) Chronik [OP-AUDIT-1 Slice 3]: der „folgt"-Tab gebaut mit echtem Server-Lesepfad — GET /audit/liste [DO-onRequest, admin-gegated kostenAdminFuer, eigenes Gate] liest audit_entries server-seitig [SELECT … ORDER BY ts DESC, (tenant,ts)-Index, nur summary PII-arm]; neuer AuditEintragDTO/AuditListe [Server+Client], svc.ladeAuditVerlauf(), read-only chronik.component.ts [Zeitachse Wann·Was·Wer, ehrlicher Leer-/Dormant-Zustand statt Fake]. 4-Orte-IA komplett. Live-DO-verifiziert [wrangler dev --local + lokale D1-Migration + 3 seed-Audit-Zeilen + Client + Playwright, Hell+Dunkel: 7-Tab-Sub-Sidebar, System zeigt nur Taxonomien+Purge, Chronik rendert die 3 echten D1-Zeilen {Tom Wend archiviert · Infra-Kosten · Sina Falk Urlaub} + Fußnote, keine Page-Errors; Chronik-Fetch same-origin in Prod, lokal via ASSISTENT_CORS_ORIGINS freigeschaltet]. Client + Server, kein Schema-Change [nur Lesepfad, db:check grün]. Verifiziert: No-Hex + tsc [Server] + ng build prod + No-Console + doc-consistency --strict grün + Screenshots. v0.151.0→0.152.0 MINOR. Doku: ops/OP-REDESIGN-1 [4E ✅ / IA-komplett], docs/architektur/Audit-Log.md [Slice 3 ✅], design/WORKSPACES.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Damit ist OP-REDESIGN-1 IA-komplett.)
Session taktano-2026-07-25-next-steps-8vmq5d-metrik-trends ~1.4 h (07-25, PR #732, nach dem Merge von #731. Metrik-Trends: Termintreue + Ø Durchlaufzeit [PO: „go"]. Schließt die letzten beiden bei #722 als „nachgelagert" markierten Review-Trend-KPIs → 5 Tages-Snapshot-KPIs. Definitionen [ehrlich, aus den Ist-Zeiten der fertigen Aufträge]: Termintreue = % mit tatsaechlicheFertigstellung ≤ urspruenglicherAbholtermin; Ø Durchlaufzeit = Ø tatsaechlicheFertigstellung − tatsaechlicheAnlieferung [Minuten gespeichert, Client zeigt Tage]; beide NULL ohne Basis [D-2]. Datenlücke: tatsaechlicheAnlieferung war deklariert, aber nie gestempelt → jetzt beim Fahrzeug-Check-in [auftrag.checkin→angeliefert] gesetzt + im Demo-Seed [≈ Bringtermin −2 T]. Schema: Drizzle metrik_snapshots += termintreue_pct/durchlaufzeit_min, gen. Migration drizzle/0002_*.sql [2× ALTER ADD COLUMN]; Runtime-Anlage um additive Spalten-Auto-Migration erweitert [PRAGMA table_info → fehlende Spalten per ALTER, kein Exception-Spam]. Producer/Reader/DTO [Server+Client] erweitert. Client [lage-review.component.ts]: 2 weitere Sparklines; Trend-Reihe kann jetzt nicht-Prozent-Einheiten [Dauer/Tage: eigene Einheit, Fenster-Max-Skalierung, 1 Nachkommastelle, Delta in Einheit statt fix „pp"], Grid 3→5. Live-DO-verifiziert [wrangler dev --local + frischer Demo-Seed [DO-State geleert] + Playwright, Hell+Dunkel: Review zeigt Auslastung 0 % · FPY 33 % · Nacharbeit 67 % · Termintreue 100 % · Ø Durchlaufzeit 2.0 Tage mit Sparkline + korrekter Einheit/Skalierung, keine Page-Errors]. Client + Server + DO-SQLite. Verifiziert: No-Hex + tsc + ng build prod + db:check [Schema↔Migration sync] + No-Console + doc-consistency --strict grün + Screenshots. v0.152.0→0.153.0 MINOR. Doku: Persistenz.md [metrik-Spalten + additive Migration], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Review-Trend-KPIs damit vollständig.)
Session taktano-2026-07-25-next-steps-8vmq5d-menu-prototyp ~0.7 h (07-25, PR #733, nach dem Merge von #732. Top-Bar-Menü prototype-treu [PO: „Das Menü ist nicht wie im Design-Prototyp"]. Befund: die Flusslinie-Prototyp-Top-Bar ist minimal — Logo · 4 Orte-Tabs + „⋯" öffnet direkt die Verwaltung [verwaltungAuf] · TN-Strip · Leitstand|Werkstatt-Segment · Uhr; kein Bereichs-Dropdown, keine Einstellungen/Status in der Bar. Mein 4A-Übergang hatte „···" als großes gruppiertes Overflow-Menü [alle Bereiche + Einstellungen + Status] — als Gerüst bis zur IA-Konsolidierung; nach 4A–4E überflüssig. Umbau [reiner Client, shell.component.ts]: (1) „⋯" → direkter Verwaltung-Link [routerLink="/verwaltung", roter Aktiv-Underline; Seite gated selbst], Bereichs-Dropdown entfernt [Orte=Tabs, Verwaltung=„···", Terminal=Rollen-Umschalter → keine Bereichs-Nav im Menü nötig]; (2) die realen App-/Geräte-Steuerungen, die der Prototyp nicht führt [Ansicht/Theme · Feedback · Alarm-Ton · Auf-Kurs · Foto-Queue], in ein kompaktes ⚙-Zahnrad-Popover [rechts neben der Uhr, rechts-anchored] — begründete Abweichung [Mock lässt sie aus, echte App braucht sie erreichbar/außerhalb der Orte, Einfachheit]; navGroups bleibt nur noch Routen-Titel-Registry für den Sub-Header. Live-DO-verifiziert [wrangler dev --local + Client + Playwright, Hell+Dunkel: „⋯"-Klick → /verwaltung/leistungen, ⚙-Popover zeigt nur Einstellungen+Auf-Kurs [keine Nav-Gruppen], keine Page-Errors]. Verifiziert: No-Hex + ng build prod + doc-consistency --strict grün + Screenshots. v0.153.0→0.154.0 MINOR. Doku: design/WORKSPACES.md [Top-Bar], design/CLAUDE.md [Shell], Funktionsumfang.md, CHANGELOG, HANDOFF §2.)
Session taktano-2026-07-25-next-steps-8vmq5d-auth-a1 ~0.9 h (07-25, PR #734, nach dem Merge von #733. OP-AUTH-1 A-1 — Rollen-/Fähigkeits-Naht [PO: „nur a-1", nach Frage „Wie User Management umsetzen?"]. Explore-Befund: Interim-Auth = Cloudflare Access [JWT echt verifiziert, verifyAccessJwt] + E-Mail-Allowlist; kein Rollenmodell, kein User-Objekt; das überladene istKostenAdmin-Gate trägt drei Bedeutungen [Kosten · Stammdaten/Konfig · Chef-Override]; Mitarbeiter ≠ Login-User [keine E-Mail/Konto]; Ziel-IdP Better Auth ist schon entschieden [OP-AUTH-1 06-23]. Gebaut [reiner Server, leitstand.ts, verhaltensgleich]: neue darf(conn, faehigkeit) mit benannten Fähigkeiten kosten [7 Sites] · verwaltung [19: Mitarbeiter·Skills·Prozesse·Buchten·Taxonomien·Schichten·Nacht-Halle·Editier-Präsenz·Purge·OTLP-Test] · chef [2: Vier-Augen G-4 + Notfall]; alle 28 Call-Sites von istKostenAdmin(conn) umgestellt [Python-Line-Map]. Interim lösen alle Fähigkeiten auf denselben Betreiber-Gate auf [void faehigkeit; return this.istKostenAdmin(conn)] → kein Verhaltens-Change; darf = die Naht, an der A-3 [Better Auth] je Fähigkeit die rollenbasierte Verbindungs-Projektion einsetzt. Rollen→Fähigkeit-Mapping als Design festgehalten [Inhaber=alle · Werkstattleitung=verwaltung(+opt.kosten) · Buchhaltung=kosten · Werker=keine]. Verifiziert: tsc [Server] + No-Console + Scheduler-Self-Test npm run spike [verhaltensgleich, DO-Logik unberührt] + doc-consistency --strict grün. Reiner Server, kein Client/DTO/Schema. v0.154.0→0.154.1 PATCH. Doku-Konsistenz mitgezogen [proaktiv]: ops/OP-AUTH-1 [A-1 ✅ + Slices A-1…A-5 + Rollen-Mapping + Titel-Kandidaten-Fix] · Lastenheft §11.5 [stale „Zitadel/Ory" → Better-Auth-Entscheidung nachgezogen] · CHANGELOG · HANDOFF §2. Offen [A-2+, PO]: Better Auth self-host + Mitarbeiter↔User-Modell [jeder MA eigenes Login vs. geteiltes Terminal].)
Session taktano-2026-07-25-next-steps-8vmq5d-auth-a1-nachzug ~0.5 h (07-25, PR #735, nach dem Merge von #734. A-1 CodeRabbit-Nachzug — 4 valide Findings zu #734 [kamen nach dem Merge → Follow-up]. (1) Timesheet-Summe konsistent [100.6+152.9=253.5]. (2) Lastenheft §11.5 IdP-Wortlaut an OP-AUTH-1 angeglichen [Clerk/WorkOS = nachrangig/Fallback, nicht „verworfen"]. (3) HANDOFF Rollen-Mapping Inhaber/Chef=alle. (4, Major/Security): der darf-Doc-Kommentar überzeichnete die verwaltung-Abdeckung → ehrlich gemacht; mehrere Stammdaten-Handler [employee.create/update/setVerfuegbarkeit/addAbwesenheit, Skill-CRUD, teilschritt/leistung.update] sind ungegatet — CodeRabbit korrekt, aber vorbestehend [nicht durch A-1 eingeführt, der Refactor blieb verhaltensgleich]. Bewusst KEIN Gate ergänzt: ein Gate ohne besetzte Admin-Rolle würde die Stammdaten-Pflege in Prod aussperren [leere KOSTEN_ADMIN_EMAILS → niemand Betreiber]; stattdessen als bekannter A-1-Gap dokumentiert [darf-Kommentar + ops/OP-AUTH-1], Schließung mit A-3 [+ Rollen-Zuweisung]. Verifiziert: tsc + No-Console + doc-consistency --strict grün. Reine Doku + 1 Code-Kommentar, kein Verhaltens-Change. v0.154.1→0.154.2 PATCH.)
Session taktano-2026-07-25-next-steps-8vmq5d-betreiber ~0.2 h (07-25, PR #736. Governance-Entscheidung [PO: „A-1 als Zwischenstand; m.kirchhof@drkv.com wird Betreiber/Admin"]. In ops/OP-AUTH-1.md als Entscheidung/Audit-Trail festgehalten: A-1 bleibt Zwischenstand [kein A-2/A-3 vorerst]; interim-Betreiber = PO. Zwei Deploy-Voraussetzungen dokumentiert [nicht im Repo, PII/Secret-Regel]: KOSTEN_ADMIN_EMAILS = Betreiber-E-Mail via wrangler secret put + Access aktiv [ACCESS_TEAM_DOMAIN/ACCESS_AUD] — sonst accessAktiv=false → alle Admin. Caveat: „nur PO=Admin" erst mit A-3 voll [A-1-Gap ungegatete Handler]. Von der Session aus nicht setzbar [keine CF-Creds/wrangler login] → Deploy-Aktion beim PO. Reine Governance-Doku, kein Code, kein Version-Bump.)
Stand 2026-07-25 ~20:10 UTC.
Session taktano-2026-07-26-next-steps-8vmq5d-offline-resync ~0.9 h (07-26, PR #737, nach dem Merge von #736. Offline-Resilienz: Schema-Broadcast + „↻ Neu synchronisieren" (Offline-Stand verwerfen + Voll-Resync) [PO: „b" — Wenn die lokale Offline-Variante nicht mehr zum Server-Build passt → alles neu laden; und wenn der Server erreichbar ist, aber das Datenmodell sich nicht synchronisieren lässt → anbieten, den lokalen Offline-Bestand zu verwerfen und komplett neu vom Server zu synchronisieren]. Explore-Befund: die konkreten Hooks — StateCacheService [IndexedDB taktano-offline, View-State-Snapshot], VerbindungService [hartNeuLaden/SwUpdate], DO sendet bei Connect immer den vollen autoritativen State; die separate Foto-Upload-Queue [taktano-offline-fotos] darf nie verworfen werden. Gebaut — drei Bausteine [reiner Client + 1 Server-Feld]: (1) Schema-Broadcast — Server sendet die Daten-Schema-Version schemaVersion [SCHEMA_VERSION, DO-Persistenz] im State [DTO + snapshot()]; Client stempelt jeden Snapshot mit serverSchema [StateCacheService.save/load] → Cache selbstbeschreibend/Inkompatibilität erkennbar. (2) Stiller Selbstschutz — die client-seitige Cache-SCHEMA-Konstante verwirft inkompatible Alt-Snapshots beim load(); da der DO bei Connect immer den vollen State schickt, heilen Daten bei Reconnect ohnehin automatisch [läuft still, immer sicher]. (3) Bewusste Nutzer-Aktion — VerbindungService.neuSynchronisieren() = View-Cache verwerfen [StateCacheService.clear() — nur den leitstand-Key, Foto-Queue unberührt] + hartNeuLaden(); zwei Zugänge: Sekundär-Link im Offline-Banner + ⚙-Menü-Eintrag „Verbindung → Neu synchronisieren · Offline-Stand verwerfen". Leitplanken [PO-Defaults]: wird nie automatisch/still ausgelöst [kein gültiger Cache ungefragt verworfen → immer nur anbieten]; an vorhandenes Netz gebunden [sonst ehrlicher Toast]. Live-DO-verifiziert [wrangler dev --local + gebauter Client + Playwright]: WS-State-Broadcast trägt schemaVersion=22; ⚙-Menü rendert den „Neu synchronisieren"-Eintrag [Hell, Screenshot]. Client [4 Dateien] + 1 Server-Feld, kein Schema-Change. Verifiziert: ng build prod + No-Hex + tsc [Server] grün + Screenshot. v0.154.2→0.155.0 MINOR. Doku: ops/OP-OFFLINE-1, docs/architektur/Offline-PWA.md, CHANGELOG, HANDOFF §2. Offen [OP-OFFLINE-1]: Voll-Offline-Write [großer Folge-OP] · Background-Sync nach Tab-Schließen.)
Stand 2026-07-26 ~09:15 UTC.
Session taktano-2026-07-26-next-steps-8vmq5d-offline-nachzug ~0.4 h (07-26, nach dem Merge von #737. CodeRabbit-Nachzug zu #737 [7 Findings, davon 3 valide behoben, Rest Doku-Konsistenz]. (1, echter Bug): die client-seitige Cache-SCHEMA-Konstante blieb bei 1, obwohl LeitstandState.schemaVersion in #737 Pflichtfeld wurde → vor-0.155.0-Snapshots [ohne das Feld] würden noch hydriert. SCHEMA 1→2 [genau der in #737 dokumentierte stille Selbstheilungs-Mechanismus, nur nicht ausgelöst] → Alt-Snapshots werden beim load() verworfen. (2): StateCacheService.clear() schluckte IndexedDB-Fehler [resolve auch bei Transaktions-/Delete-Fehler] → neuSynchronisieren() hätte einen Schein-Resync gemeldet; jetzt gibt clear() boolean zurück [OP-LOG-1: Persistenzfehler nicht still schlucken], bei false kein Reload. (3): neuSynchronisieren() verwarf den Cache allein auf navigator.onLine → bei Aussetzer Verlust von Cache+App-Shell ohne Reload-Aussicht; neue Same-Origin-Erreichbarkeits-Probe [HEAD/no-store, 3xx/4xx=erreichbar, ngsw-GET-Cache umgangen] vor dem Verwerfen; Shell zeigt bei false einen ehrlichen „nicht neu synchronisiert"-Toast [Offline-Stand bleibt]. Timesheet/CHANGELOG-Konsistenz mitgezogen [Front-matter 253.5→254.8 h + v0.155.1, Mermaid-Chart KW30 34.9, #737-Link nachgetragen]. Bewusst NICHT den schweren Umbau [in-page pending-Resync-Flow statt Hard-Reload] — der Hard-Reload spiegelt das bereits akzeptierte hartNeuLaden()-Verhalten [„Erneut verbinden"], die Probe deckt die Lücke proportional. Verifiziert: ng build prod + No-Hex + tsc [Server] + doc-consistency --strict grün. Reiner Client [3 Dateien] + version.ts. v0.155.0→0.155.1 PATCH. Doku: ops/OP-OFFLINE-1, Offline-PWA.md, CHANGELOG, HANDOFF §2.)
Stand 2026-07-26 ~09:55 UTC.
Session taktano-2026-07-26-next-steps-8vmq5d-offline-scope ~0.3 h (07-26, nach dem Merge von #738. Scope-Entscheidung Offline [PO: „Voll-Offline-Write kategorisch ausschließen; Background-Sync nach Tab-Schließen als OP anlegen"]. (1) Voll-Offline-Write kategorisch ausgeschlossen — bisher als „großer Folge-OP" notiert, jetzt bewusst außerhalb des Produkt-Scopes [nicht „Backlog"]: der Durable Object bleibt live-verbundene Single Source of Truth; die Idempotenz-/Replay-/Konflikt-Komplexität gegen den autoritativen DO-State widerspricht dem Leitprinzip Einfachheit und zahlt auf keine True-North-Frage ein [Auslastung/Standort/Kapazität setzen Server-Autorität + harte Gates QS/Vier-Augen G-4/Live-Taktung ohnehin voraus]; einziger gerechtfertigter Offline-Write bleibt der enge, idempotente Foto-Upload [deterministischer R2-Key aus fotoId]. In ops/OP-OFFLINE-1.md + architektur/Offline-PWA.md [§„Bewusst NICHT" — von „Folge-Schritte" zu „kategorisch ausgeschlossen" mit voller Begründung] festgehalten. (2) Background-Sync als eigener OP — neuer offener OP-OFFLINE-2 [prio: spaeter, audience: technik]: Foto-Uploads via Service-Worker-sync-Event auch nach Tab-Schließen abschließen [heute nur in-page-Drain]. Ausdrücklich abgegrenzt vom ausgeschlossenen Voll-Offline-Write [betrifft nur den bestehenden idempotenten Foto-Upload, keine neuen Schreibpfade/Konflikt-Semantik]. gen-ops [190→191 OPs], IDs.md-Reverse-Lookup + Offene-Punkte.md [generiert] nachgezogen. Reine Doku, kein Code, kein Version-Bump. Verifiziert: gen-ops + doc-consistency --strict grün. Doku: ops/OP-OFFLINE-2 [neu], ops/OP-OFFLINE-1, Offline-PWA.md, IDs.md, CHANGELOG, HANDOFF §2.)
Stand 2026-07-26 ~10:20 UTC.
Session taktano-2026-07-26-next-steps-8vmq5d-menu-aufkurs ~0.2 h (07-26, nach dem Merge von #739. ⚙-Menü: „Auf Kurs %"-Statuszeile entfernt [PO: „Entferne im Menü die Anzeige Auf Kurs 100 %"]. Die Zeile „Auf Kurs {{aufKursProzent}}%" [+ konditionaler „N gefährdet"-Indikator] im ⚙-Zahnrad-Popover raus — die Auf-Kurs-/Gefährdet-Info steht bereits prominenter im TN-Strip der Top-Bar [Auslastung/Fahrzeuge/verortet] und in den Entscheiden-/Fluss-Sichten → im kompakten Einstellungs-/Status-Popover redundant [Leitprinzip Einfachheit]. Popover trägt jetzt nur noch Einstellungen [Ansicht · Feedback · Alarm-Ton] · Foto-Queue [nur bei wartenden Uploads, tk-divider wanderte auf den Queue-Block] · Verbindung [Neu synchronisieren]. Ungenutzte aufKursProzent-Computed mitentfernt [war nur an dieser Stelle referenziert]. Live-DO-verifiziert [wrangler dev --local + Client + Playwright, Hell: „Auf Kurs" weg, Menü intakt — EINSTELLUNGEN + VERBINDUNG, Screenshot]. Reiner Client [1 Datei] + version.ts, kein Server/DTO/Schema. Verifiziert: ng build prod + No-Hex grün + Screenshot. v0.155.1→0.155.2 PATCH. Doku: CHANGELOG, HANDOFF §2.)
Stand 2026-07-26 ~10:40 UTC.
Session taktano-2026-07-26-next-steps-8vmq5d-rollen-auswahl ~1.6 h (07-26, nach dem Merge von #741. Rollen-Auswahl im Menü (interim self-declared roles, OP-AUTH-1 A-1.5) + KOSTEN_ADMIN_EMAILS-Allowlist entfernt [PO: „a-2" → gestoppt/geparkt; stattdessen „einfache Lösung: im Einstellungsmenü Rolle wählen (Arbeiter/Admin etc.), die Auswahl direkt gültig, ggf. Browser neu laden"; danach „Altlasten wie KOSTEN_ADMIN_EMAILS entfernen"]. Gebaut — Client+Server: im ⚙-Menü Rolle wählen [Werker · Buchhaltung · Werkstattleitung · Inhaber/Chef] → als ?rolle=-Query beim WebSocket-Verbinden [+ Chronik-Fetch]; der Server leitet daraus die A-1-Fähigkeiten ab [capsAusRolle — damit ist der darf()-Seam live statt „alle drei auf einen Gate"]: Werker=keine · Buchhaltung=kosten · Werkstattleitung=verwaltung · Inhaber/Chef=alle drei. Rollenwechsel lädt neu [neuer RolleService, frischer Socket trägt neue Rolle]. Das bisher kosten+verwaltung vermischende kostenAdmin-Flag um ein eigenes verwaltung-Flag gespalten [Administration/Chronik/Verwaltung-Nav gaten auf verwaltung, Kosten auf kosten]; Server-Broadcast → tailorState je Verbindung [Fähigkeits-Flags + infraKosten nur bei kosten]. Altlast entfernt [PO]: E-Mail-Allowlist KOSTEN_ADMIN_EMAILS + kostenAdminFuer + Env-Feld + wrangler.toml-Block — Autorisierung kommt aus der Rolle. Cloudflare Access bleibt Netz-Gate [Golden Rule] + X-Taktano-User-Audit-Actor. OP-COST-3 [Allowlist-Aktivierungs-Runbook] damit hinfällig → erledigt [gen-ops]. ⚠ Sicherheits-Charakter [bewusst, interim, RISK-12 aktualisiert]: die Rolle ist selbst-deklariert [jeder hinter Access kann „Inhaber/Chef" wählen] — kein echtes Berechtigungsmodell, sondern Demo/Pilot-Zwischenstand hinter dem Access-Netz-Gate; verifizierte Durchsetzung [Rolle aus Better-Auth-JWT] + Gate-Nachzug der ungegateten Stammdaten-Handler kommen mit A-3. Proaktiv geflaggt. Live-DO-verifiziert [wrangler dev --local + Playwright: WS-Probe alle 4 Rollen + ungültig→werker korrekt {werker=∅ · buchhaltung=kosten · werkstattleitung=verwaltung · chef=alle}; end-to-end: chef/werkstattleitung → /verwaltung/system Admin-Inhalt sichtbar, werker → gesperrt; ⚙-Dropdown rendert + zeigt aktuelle Rolle [selected-Fix]]. Verifiziert: ng build prod + No-Hex + tsc [Server] + No-Console + doc-consistency --strict grün + Screenshots. v0.155.2→0.156.0 MINOR. Doku: OP-AUTH-1 [A-1.5], Kosten.md [§Gate/§12], OP-COST-1/-3 [erledigt], RISK-12, HANDOFF §2 [+ Governance-/Kosten-Zeile], CHANGELOG. A-2/A-3 [Better Auth] bleiben geparkt.)
Stand 2026-07-26 ~12:15 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-4b-coderabbit ~0.4 h (07-25, PR #728, nach dem Merge von #727. Phase-4B-CodeRabbit-Nachzug — 6 valide Findings, kamen als der PR schon durch war → Follow-up-PR, frischer Branch von main. A11y: ariaCurrentWhenActive="page" am Verwaltungs-Sub-Tab. Major [Doku↔Code]: die stale Crystal-Bar-Region-Tabelle in design/WORKSPACES.md [Menü-Toggle · Rail-Cluster · Auf-Kurs-Ring · Live-Status-Fuß · Rail-Screenshots] stand nach der Top-Bar-Umstellung [4A] noch als aktuell → entfernt + „Archiv (pre-Phase-4A)"-Notiz. Label: „···"-Verwaltung-Untertitel Stammdaten · Kosten · Chronik → Prozesse · Team · Stammdaten · Kosten · Chronik. True-North [Critical]: Verwaltung beantwortet die 3 Leitfragen nicht direkt → als PO-freigegebene Ausnahme im Component-Doc dokumentiert [IA-Umstellung + Stammdaten steuern Taktung → indirekt Auslastung/Kapazität; bewusst kein Widget, Einfachheit]. Doku-Feinschliff: Funktionsumfang Chronik[folgt]→Chronik (folgt); Timesheet-Kernaussage 4B–4E offen→4C–4E offen. Verifiziert: No-Hex + ng build prod + doc-consistency --strict grün. v0.149.0→0.149.1 PATCH. Reiner Client + Doku.)
Stand 2026-07-25 ~12:45 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-verwaltung-4b ~1.0 h (07-25, PR #727, nach dem Merge von #726. Redesign „Flusslinie" Phase 4B — Verwaltung-Seite [PO: „4b"]. Zweiter Voll-IA-Schritt nach der Top-Bar: das „···"-Overflow bekommt eine echte Verwaltung-Heimat statt flacher Bereichsliste. Explore-Mapping [client/src/app]: /verwaltung war nur Redirect auf /administration; die 7 Prototyp-Bereiche mappen NICHT 1:1 — administration bündelt Buchten+Schichten+System als eine Scroll-Seite, Team&Skills=/staff, Leistungen&Abläufe=/processes, Kosten=/costs, Chronik existiert nicht. Gebaut: neue VerwaltungComponent = linke Sub-Tab-Sidebar + verschachteltes <router-outlet> [erstes nested Routing der App], hostet die bestehenden Editoren unverändert (reuse): Leistungen&Abläufe [processes] · Team&Skills [staff] · Stammdaten&System [administration] · Kosten [costs] · Chronik = disabled „folgt" [net-new, OP-AUDIT-1]. Modernist: flach, 2px, radius 0, Ink-Selektion mit rotem Links-Rand. Routing: verwaltung Redirect→Component+Children [''→leistungen; leistungen/team/stammdaten/kosten lazy]; Alt-Deep-Links /administration→/verwaltung/stammdaten, /costs→/verwaltung/kosten; Shell-„···" Verwaltung-Gruppe [bisher Administration+Kosten einzeln] → ein Eintrag. Entscheidung [minimal + reuse]: kein Aufspalten der 869-Zeilen-administration in 3 Screens, kein Chronik-Neubau — beides eigener Aufwand, ehrlich als Nachzug [Phase 4E / OP-AUDIT-1] markiert [„folgt"-Eintrag, keine erfundene Fläche]. Live-DO-verifiziert [wrangler dev + Client + Playwright, Hell+Dunkel: /verwaltung→/verwaltung/leistungen, Sub-Sidebar 5 Einträge [Leistungen aktiv/roter Links-Rand], processes-Editor im Outlet; Klick „Kosten"→/verwaltung/kosten [costs im Outlet], Sub-Header „Verwaltung", Top-Bar intakt, keine Page-Errors]. Reiner Client [1 neue Komponente + app.routes.ts + Shell-Menü], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod + doc-consistency --strict grün + Screenshots. v0.148.0→0.149.0 MINOR. Doku: ops/OP-REDESIGN-1 [4B ✅], design/WORKSPACES.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen: 4C Fluss · 4D Team · 4E Aufräumen [admin-Split + Chronik].)
Stand 2026-07-25 ~12:05 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-topbar-4a ~1.5 h (07-25, PR #726, nach dem Merge von #725. Redesign „Flusslinie" Phase 4A — Shell Rail → 62px-Top-Bar [PO-Hinweis am Offline-Screenshot: „das ist nicht das neue Design — die Sidebar wurde durch eine Top-Bar ersetzt"]. Korrektur: mein früheres „OP-REDESIGN-1 UI-komplett" [#721] war auf der Shell-/IA-Dimension zu optimistisch — die Nav war weiter die linke Icon-Rail [4 Orte nur gruppiert], nicht die Top-Bar. Prototyp-Analyse [Explore auf design/prototype/flusslinie/]: 62px-Bar [Logo · 4 Orte-Tabs · „···" · TN-Strip · Leitstand|Werkstatt · Uhr], keine Sub-Tab-Reihe — der Prototyp konsolidiert die 15 Workspaces in 4 Orte [Sub-Screens via Lanes/Modals/620px-Drawer]; „···" = Verwaltung mit eigener linker Sub-Sidebar. Konflikt mit unserer 15-Routen-Architektur → PO: Voll-IA nach Prototyp, phasiert [Phasenplan in OP-REDESIGN-1 Phase 4: 4A Shell · 4B Verwaltung-Seite · 4C Fluss · 4D Team · 4E Aufräumen]. Gebaut = 4A: shell.component.ts linke Rail → 62px-Top-Bar [2px-Divider, sticky]: Logo · Lage·Fluss·Takt·Team-Tabs [roter 3px-Aktiv-Underline, Fluss-Count-Badge = offene Entscheiden-Punkte] · „···"-Overflow-Menü [alle Bereiche gruppiert + Einstellungen Ansicht/Feedback/Alarm-Ton + Status Auf-Kurs/Foto-Queue] · TN-Strip · Leitstand|Werkstatt-Segment [= Werker-Modus] · Uhr+Live-Punkt; darunter schlanker Workspace-Sub-Header [Titel + „?"]. Alle 15 Screens erreichbar [Tabs→Ort-Hauptfläche, Rest über „···"/Deep-Link]. Rail-Code [railwrap/Proximity/☰-Toggle/expanded/ring/sweepKey] entfernt; Foto-Queue-Detailliste + Toggles ins „···" [kein Funktionsverlust]. Entscheidung: 4A bewusst reiner Shell-/Nav-Umbau [keine Screen-Änderung], damit die Top-Bar sofort steht + nichts unerreichbar wird; Prototyp-treu nur Fluss badged [Lage-Badge gedroppt]. Live-DO-verifiziert [wrangler dev + Client + Playwright, Hell+Dunkel: 62px-Bar, 4 Tabs Lage aktiv/Underline + Fluss-Badge 63, „···"-Menü listet alle Bereiche + Einstellungen, Leitstand|Werkstatt, TN-Strip, keine Rail, keine Page-Errors]. Reiner Client [shell.component.ts neu strukturiert], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün + Screenshots. v0.147.0→0.148.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 4 + „UI-komplett"-Korrektur], design/CLAUDE.md, design/WORKSPACES.md [Top-Bar-Sektion löst Crystal-Bar ab], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen: 4B–4E [Voll-Konsolidierung].)
Stand 2026-07-25 ~11:40 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-verbindung-reconnect ~0.9 h (07-25, PR #725, nach dem Merge von #723. Verbindungs-Wiederherstellung + Auto-Update [PO-Frage: „Reload verbindet nicht neu — brauchen wir einen force-reload?" → Diagnose + Fix, Reihenfolge-Entscheidung PO: „Reconnect-Fix zuerst"]. Diagnose: der PWA-Service-Worker cached die App-Shell [navigationUrls "/**"] → ein normaler Reload lädt aus dem Cache, geht nicht zum Server → eine abgelaufene Cloudflare-Access-Session [Golden Rule „Zero Trust vor Public" → Access-gated, ~24 h] oder ein neuer Client werden nicht eingespielt; der WS hängt, der Cache verdeckt die Access-Umleitung. Fix: neuer VerbindungService [providedIn:'root'] + Shell-Wiring — (1) Offline-Banner „↻ Erneut verbinden" → hartNeuLaden() = SW deregistrieren + reload → Dokument frisch vom Server → Re-Login/neuer Client → WS verbindet [SW re-registriert sich; nur bei navigator.onLine, sonst Toast „kein Netz" da PartySocket ohnehin auto-reconnectet]; (2) SwUpdate-Auto-Update: checkForUpdate() bei online/visibilitychange → VERSION_READY → Banner „Neue Version — neu laden" [activateUpdate()+reload]. Entscheidung: bewusst SW-Deregistrierung [bulletproof gegen Cache-/Auth-Klemme] statt Cache-Bust-Query; netz-gated, damit der Offline-Cache bei echtem Ausfall bleibt. Getrackt unter OP-OFFLINE-1 [kein neuer OP]. Live-DO-verifiziert [wrangler dev + Client + Playwright; WS-Abriss durch Server-Kill → Offline-Banner mit „↻ Erneut verbinden"-Button, keine Page-Errors; Neue-Version-Banner + Reload = SwUpdate/unregister-Standard, tsc/build-verifiziert]. Reiner Client [1 neue Service-Datei + Shell: Import/Inject/Handler + 2 Banner-Blöcke], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün + Screenshot. v0.146.1→0.147.0 MINOR. Doku: ops/OP-OFFLINE-1, docs/architektur/Offline-PWA.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2.)
Stand 2026-07-25 ~11:00 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-metrik-coderabbit ~0.3 h (07-25, PR #723, nach dem Merge von #722. CodeRabbit-Nachzug zu #722 — 6 valide Findings, kamen als der PR schon durch war → Follow-up-PR, frischer Branch von main. Fix [Major, Correctness]: Review-Trend-Fenster in lage-review.component.ts — tagVor() bildete die Grenze in der Runtime-TZ, Server schreibt tag aber Europe/Berlin → 1-Tag-Verschiebung möglich; jetzt Client ebenfalls Europe/Berlin. Und trendReihen ließ Tage ohne Snapshot weg statt als null-Lücke [Widerspruch zum eigenen Doc-Kommentar] → explizite Kalendertag-Liste + Nachschlagen je Tag, fehlende = leerer Balken. Perf: metrikVerlaufDTO() lief je Broadcast [inkl. 30-s-Solver-Ping] neu → Tages-Cache metrikVerlaufCache [Muster wie kapazitaetCache], invalidiert beim neuen Snapshot. Doku/Metadaten: #722-Links in CHANGELOG/Timesheet klickbar, OP-COST-1 frontmatter bezug += OP-DATA-1, Persistenz.md D5-3 „angelaufen" [metrik_snapshots validiert die DO-SQLite-Mechanik live; Pilot-Kern = State-Migration bleibt offen] + Ist-Zustand-Stand 0.146.0. Verifiziert: No-Hex + tsc + ng build prod + Persistenz-Gate + No-Console + doc-consistency --strict grün. v0.146.0→0.146.1 PATCH.)
Stand 2026-07-25 ~10:35 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-metrik-persistenz ~1.0 h (07-25, PR #722, nach dem Merge von #721. Metrik-Persistenz — Review-Trend-KPIs [PO: „Ja" auf Metrik-Persistenz als nächsten Schritt; zwei Weggabelungen entschieden: Speicher = direkt DO-SQLite (Drizzle), Umfang = die 3 heute ableitbaren KPIs]. Schaltet die in 3d-26 deferred Trend-Kennzahlen der Review-Sicht mit echter Verlaufs-Persistenz frei [statt ehrlicher Hinweis-Karte]. Erste DO-SQLite-Runtime-Tabelle des Repos: metrik_snapshots [tenant-lokal, ctx.storage.sql] — Drizzle-Schema server/src/db/schema.ts = Single Source [im db:check-Gate, gen. Migration drizzle/0001_*.sql], Runtime-Anlage CREATE TABLE IF NOT EXISTS in onStart [idempotent, analog Audit]. Producer: ein Tages-Snapshot/Tag [Europe/Berlin, guarded per In-Memory-Merker + PK-Idempotenz, kein Alarm] bei Boot + erster Persistenz; nur Fakten, Prozent NULL wenn keine Basis [keine Fake-0, D-2]. KPIs: Auslastung [zeitbasierte Buchten-Quote, auslastungsQuote-Block in geteilte Methode berechneAuslastungsQuote extrahiert → Broadcast + Producer teilen sie] · First-Pass-Yield + Nacharbeitsquote [server-seitig aus fertigen Aufträgen = SoT; quality.component zeigt sie live]. Broadcast trägt metrikVerlauf [90 T], Retention 400 T; Client rendert je KPI eine Sparkline über Woche/Monat [lage-review.component.ts ersetzt die Hinweis-Karte, honester Leer-/Ein-Tag-Zustand]. Best-effort [bricht Laufzeit nie]. Live-DO-verifiziert [wrangler dev --local + gebauter Client + Seed + Playwright, Hell+Dunkel]: DO legt die Tabelle an + schreibt beim Boot den Tages-Snapshot [Auslastung 1 % · FPY 33 % · Nacharbeit 67 % aus dem Seed], Broadcast liefert metrikVerlauf, Review zeigt „1 Tag erfasst" + 3 KPIs + Sparkline + ehrlichen Hinweis. Client + Server + DO-SQLite [Schema/Migration, DO-Producer/Reader, LeitstandState-DTO beidseitig, Service-Selektor, Consumer]. Verifiziert: No-Hex + tsc [Server] + ng build prod + Persistenz-Gate [Drizzle-Schema↔Migration sync, db:generate idempotent] + No-Console grün. v0.145.0→0.146.0 MINOR. Getrackt unter OP-AUDIT-1/OP-COST-1 [bewusst kein neuer OP]. Doku: ops/OP-COST-1 [Slice-Eintrag], docs/architektur/Persistenz.md [Ist-Zustand-Tabelle], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [nachgelagert]: Termintreue + Ø Durchlaufzeit [brauchen abgeleitete Auftrags-Historie Fertigstellung vs. Plan].)
Stand 2026-07-25 ~10:20 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-redesign-flusslinie-phase3d28 ~0.7 h (07-25, PR #721, nach dem Merge von #720. 3d-28: Quality-Check-Modal — der LETZTE Redesign-Baustein → OP-REDESIGN-1 UI-komplett [PO: „erlaube force-push und bau das QS-Modal"]. Force-Push-Permission-Edit vom Classifier blockiert [Self-Eskalation] → dem User die zwei Zeilen für .claude/settings.local.json gegeben; QS-Modal parallel gebaut. Neuer qs-modal.component.ts [720px-Modernist-Modal, wie annahme-overlay], geöffnet aus dem Fluss-Auswahl-Panel via „✓ Quality-Check"-Button [imQs = Auftrag in QS-Queue]. Reiner View über den geteilten QsChecklisteService [3d-27]: dieselbe Sichtprüfungs-Checkliste ✓/✕ + dasselbe server-harte QS-Gate — dafür offenePunkte/abnahmebereit/katLabel/brauchtBeweisfoto ebenfalls in den Service hochgezogen + im Workspace delegiert [kein Duplikat-State]. Inhalt: Prozess-Vollständigkeit [Gate-Blocker], Sichtprüfung [4 Punkte], Freigabe-Gate „✓ Freigeben" [server-bestätigt auftragAktion 'abholen', gated allePass+abnahmebereit+erlaubteAktionen] · „→ Volle Endkontrolle" [Mängel/Nacharbeit bleiben dort]. Live-DO-Verifikation [wrangler dev + Client + Seed + Playwright, Hell+Dunkel]: Modal öffnet, Prozess-Vollständigkeit listet die echten offenen Punkte, Checkliste toggelt über den Service, Freigeben korrekt disabled; scharfe Kanten/2px/radius 0. Demo-Seed hält kein QS-Auto → Modal per zwei temporären Gate-Lockerungen sichtbar gemacht, danach zurückgesetzt [committeter Code an qmAuftraege gebunden]. Reiner Client [1 neue Datei + Service-Erweiterung + orders-Wiring + quality-Delegation], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.144.1→0.145.0 MINOR. Damit OP-REDESIGN-1 UI-komplett [3d-20…3d-28]. Doku: ops/OP-REDESIGN-1 [3d-28 ✅, UI-komplett], design/WORKSPACES.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [nachgelagert, kein Redesign-Blocker]: Review-Trend-KPIs nach Metrik-Persistenz [OP-AUDIT-1/OP-COST-1].)
Stand 2026-07-25 ~09:35 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-redesign-flusslinie-phase3d27 ~0.5 h (07-25, PR #720, nach dem Merge von #720. 3d-27: QS-Checklisten-State in Service hochgezogen [Fundament fürs QS-Modal, PO-Freigabe Option A]. Auf Nutzer-Frage „was ist vom Redesign offen?" → QS-Modal als letzter Baustein identifiziert; Refactor-Optionen A–D vorgelegt, PO wählte A [State in Service statt duplizieren]. Umgesetzt als verhaltensgleicher, isolierter Refactor-Slice [QS trägt den sicherheitskritischen Vier-Augen-Gate G-4, darum erst der Refactor separat, dann das Modal]: der client-ephemere Sichtprüfungs-Scratchpad [✓/✕ je Prüfpunkt, keyed per QS-Runde id:runde] aus quality.component.ts → neuer QsChecklisteService [services/qs-checkliste.service.ts, providedIn:'root']: checkState-Signal + state/setzePruef/markiereBehoben/reset/allePass/anyFail/ckey + exportierte QS_CHECKS/Pruef. Component delegiert [gleiche Methoden-Signaturen → kein Template-Change, kein Verhaltens-Change]; server-hartes QS-Gate [Prozess-Vollständigkeit/Mängel aus AuftragDTO] bleibt getrennt/unangetastet. Live-DO-Render-Smoke [wrangler dev + Client + Seed + Playwright]: /quality rendert fehlerfrei über den Service [KPIs, Empty-States korrekt]; ✓/✕-Interaktion ist byte-gleiche Delegation, aber der Demo-Seed hält kein Auto in QS [alle am Annahme-Start] → tsc/build/Render-verifiziert. Reiner Client [1 neue Datei + quality-Delegation], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün. v0.144.0→0.144.1 PATCH. Doku: ops/OP-REDESIGN-1 [3d-27 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: QS-Modal-UI + Einstiegspunkt [auf dem Service] · Review-Trend-KPIs [nach Metrik-Persistenz].)
Stand 2026-07-25 ~09:10 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-timesheet-management-summary ~0.4 h (07-25, PR #720, nach dem Merge von #718/#719. Timesheet-Pflege + Management-Summaries [PO: „generell Timesheet pflegen; Doku geradeziehen, Statistiken aktuell" + „pro KW eine Aktivitäts-Summary immer aktualisieren + eine Management-Summary: wo stehen wir, was steht an, wieviel Zeit investiert"]. Vorher OP-AI-6-Lücke [#715] nachgetragen [#719, gemergt]. Jetzt: (1) neue Management-Summary (Gesamt-Stand) oben — Stand [v0.144.0, Redesign fast fertig, 190 OPs] · Anstehendes [QS-Modal · Metrik-Persistenz · MVP-Weg · OP-AI-6] · investierte Zeit ≈ 243 h. (2) Wochen-Rollup-Tabelle von KW26 auf KW27–KW30 erweitert [Aktivitäts-Summary + Aufwand je Woche] + Mermaid-bar von 3 auf 7 Wochen. Methodik/Ehrlichkeit: KW-Summen als dedupliziertes Aggregat aus den Einzelzeilen [Script kw-dedup.mjs: dedupe Session-ID+Stunden+Tag] — KW27≈59.7/KW28≈38.1/KW29≈21.9/KW30≈23.1 h [laufend, wächst mit späteren Sessions]; wegen Union-Merge-near-Dubletten [OP-PM-2] als vorläufig/gerundet markiert [†], Einzelzeilen maßgeblich [kein Fake-Präzision]. Der naive Auto-Sum [61.4 h KW27] wich vom dedup ab → Dubletten bestätigt [12 Mehrfach-IDs bei 267/255 Zeilen; nicht alle echte Dubletten, manche legitime Nachträge → keine Zeilen gelöscht]. (3) Pflege-Regel in Protokoll + Lesart verankert [KW-Zeile + Gesamt-Stand je PR mitziehen]. Screenshot-Vorlage kam aus einem Schwester-Repo [MED-/Dentmarking] = Format-Vorbild, nicht taktano-Daten. Reine Doku [1 Datei], kein Code. Verifiziert: smooth-logs + check-doc-consistency --strict grün.)
Stand 2026-07-25 ~08:40 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-redesign-flusslinie-phase3d26 ~0.9 h (07-25, PR #718, nach dem Merge von #717. 3d-26: Lage · Review-Sicht (Woche/Monat) [Branch frisch von main @53ef458]. Weggabelung geklärt: die Review-Sicht braucht laut Prototyp Trend-KPIs [Termintreue/Durchlaufzeit/Auslastungs-Verlauf], die Verlaufsdaten erfordern, die der Live-Stand nicht persistiert; ich habe 4 Optionen vorgelegt, PO wählte „ehrlicher Client-Teil" [1]. Umgesetzt: Lage bekommt einen Heute/Woche/Monat-Umschalter [ink-Pillen], Heute = operativer Loop [unverändert, in @if gewrappt], Woche/Monat = neuer lage-review.component.ts. Zeigt nur echt ableitbare Daten: Team-Entwicklung [Employee.ausbildung[] Skill aktuell★→ziel★ + Fortschrittsbalken · Beförderungen im Fenster aus Employee.befoerderungen[].ts = echte Historie · XP] + Klärfall-Ursachen [aktuell offene Klärfälle nach klaerfall.grund gruppiert, Notfall rot, Fazit bei Dominanz]. Trend-KPIs = ehrliche Hinweis-Karte [„brauchen Verlaufsdaten, folgen mit Metrik-Persistenz OP-AUDIT-1/OP-COST-1"] statt erfundener Zahlen — Prototype-Fixtures nie gebunden [design/CLAUDE.md]. Fenster Woche=7 T / Monat=30 T. Input-Typverengung via reviewSicht-computed ['heute' kann im gegateten Mount nicht auftreten]. Live-DO-Verifikation [wrangler dev --local + gebauter Client + Demo-Seed + Playwright, Hell+Dunkel]: Umschalter · „Rückblick — die Woche/der Monat" · Team-Entwicklung [Marco/Tom echte Ausbildungsziele] · Klärfall-Ursachen [Leerzustand] · Trend-Hinweis-Karte; „Heute" stellt den operativen Loop [Auslastung-Karte] wieder her. Reiner Client [1 neue Datei + overview-Wiring], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.143.1→0.144.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-26 ✅], design/WORKSPACES.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: QS-Modal [State-Refactor] · Review-Trend-KPIs [nach Metrik-Persistenz].)
Stand 2026-07-25 ~07:00 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-redesign-flusslinie-phase3d25 ~0.7 h (07-25, PR #717, nach den Merges von #714/#715. „weiter" (stehende Autorisierung) → 3d-25: Warn-Entkopplung screen-by-screen [Branch frisch von main @0579ee2]. Kontext DD-003: Rot ist in Taktano jetzt Primär- UND Warnfarbe → Warnungen dürfen nicht rein farblich sein. Vollständiges Audit [Explore-Subagent über alle Page- + geteilten Komponenten, Kat. A „schon entkoppelt" (Glyph/Problemwort/role=alert/Blink) vs. B „nur Farbe"]. Gefixt (Kat. B, echt farb-nur): [B1] Fluss-Kanban „spät" — der pulsierende rote Punkt war unter prefers-reduced-motion unsichtbar → persistentes „⚠ spät" [orders]; [B2] WIP-Limit-Zähler → „⚠" vor N/4 WIP [orders, neuer wipUeber-Flag]; [B5] „Entscheiden"-Stapel-Badge → „⚠" vor Zahl wenn Danger [entscheiden]; [B6] überbelegter Platz → „⚠ überbelegt"-Chip [occupancy] + „⚠"-Präfix am N/Kap im Umpark-Picker [repark-modal]; [Obs] OTLP „Letzter Export" fehlgeschlagen → „⚠" am Wert [costs]. Entscheidung — bewusst NICHT geändert: rote Zähl-Badges an Nav/Tabs [Fluss&Risiko, Konflikte&Klärfälle, Risiko-Tab, Klärfälle=Amber] — ein Benachrichtigungs-Badge mit Zahl in Alarm-Position neben Domänen-Wort ist selbst Nicht-Farb-Signal; ⚠ im 15-px-Kreis wäre Dekor-Clutter [Einfachheit]. Kat. A [Mehrheit] bereits konform, unangetastet. Live-DO-Verifikation [wrangler dev --local + gebauter Client + Demo-Seed + Playwright, Hell+Dunkel]: „⚠ spät" auf 4 Fluss-Karten + „⚠"-Entscheiden-Badge in beiden Themes; B2/B6-Zustände stellt der Demo-Seed nicht her → tsc/build-verifiziert. Reiner Client [5 Dateien, nur Template-Signale], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.143.0→0.143.1 PATCH. Doku: ops/OP-REDESIGN-1 [3d-25 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Review-Sicht (Woche/Monat) · QS-Modal.)
Stand 2026-07-25 ~06:30 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-op-ai-6-erfassung ~0.2 h (07-25, PR #715, nach dem Merge von #714. OP-Erfassung (PO-Vorgabe): „Für alle Textfelder eine typische Struktur (in den Stammdaten); diese für die KI-Neuformulierung nutzen, sodass die Strukturen einheitlich werden." → neu als ops/OP-AI-6.md [pyramidal: Warum · Bausteine (Datenmodell · Stammdaten-Editor · KI-Prompt-Kontext · Bestätigen-UX · Compliance) · offene Entscheidungen · Empfehlung „kleinste Stufe zuerst über OP-AI-4"]. Abgegrenzt zu OP-TEXTBLOCK-1 [Antipp-Bausteine = einfügen; OP-AI-6 = KI formt Freitext in die Ziel-Struktur]. Bezug OP-TEXTBLOCK-1/OP-AI-3/OP-AI-4/OP-SEED-1/G-1. drkv-Standard-Rückfluss [Frontmatter drkv_standard: kandidat + expliziter Vermerk, PO-Zusatz „put this to the drkv-standard also on next template sync"] — beim nächsten Template-Sync in everything-as-code-template [G-2] übernehmen; Template-Repo außerhalb der Session-Scope → hier nur markiert. docs/betrieb/Offene-Punkte.md neu generiert [189 → 190 OPs]. Docs-only, kein Code/DTO/Schema, APP_VERSION unverändert. Doku: ops/OP-AI-6.md, Offene-Punkte.md, CHANGELOG. [Nachgetragen 07-25 — beim ursprünglichen Push fehlte der Timesheet-Eintrag; Timesheet-Pflicht gilt je PR.])
Stand 2026-07-25 ~05:50 UTC.
Session taktano-2026-07-25-next-steps-8vmq5d-redesign-flusslinie-phase3d24 ~0.5 h (07-25, PR #714, nach dem Merge von #713. „weiter" → 3d-24: Fluss inline-Auswahl-Panel „Modernist" [Branch frisch von main @3320ae9]. Das volle-Breite-Auswahl-Panel unter dem Fluss-Board [orders.component.ts] auf die Flusslinie-Sprache gebracht [DD-002/008]: die runde Punkt-/Cyan-Puls-Phasen-Leiste ersetzt durch den 5-Stationen-Strip [Annahme·Vorbereitung·Produktion·Quality-Check·Abholung als Position: 9×9-Quadrat je Station — vorbei=Tinte+Konnektor · aktuell=Akzent --tk-brand · kommend=leer+--tk-text-faint, uppercase-Label, 2px-Konnektor], konsistent mit dem Akten-Cockpit-Drawer [3d-22]. Neuer „Alle Details →"-Knopf in der Aktionszeile öffnet den geteilten Akten-Cockpit-Drawer [620px, 3d-22] ohne Teilschritt-Fokus — neues detailOffen-Signal, Mount honoriert panelInstanzId() || detailOffen(), Close räumt beide. Neuer Helfer stufen(a) [Position je Station aus dem bestehenden stage(a)]. Die klickbare 🚗-Fortschritts-Kette [FortschrittsIndikator, Teilschritt-Sprung] bleibt daneben. Entscheidung: Phasen-Leiste auf Stationen-Position angleichen + direkten Drawer-Einstieg schaffen — kein Refactor des reichen Panels [alle Aktionen/Ausbildung erhalten]. Live-DO-Verifikation [wrangler dev --local + gebauter Client + Demo-Seed + Playwright, Hell+Dunkel]: quadratischer Stationen-Strip [rotes „Annahme" aktuell, leere Folge-Quadrate], „Alle Details →" öffnet den 620px-Akten-Cockpit-Drawer korrekt in beiden Themes. Reiner Client [1 Datei], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.142.1→0.143.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-24 ✅], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Screen-Durchlauf · Review-Sicht · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d23a ~0.2 h (07-24, PR #713, nach dem Merge von #712. CodeRabbit-Review-Nachzug zu #712 [6 Findings kamen, als das PR schon per Auto-Merge durch war → Follow-up-PATCH statt in #712]. Triage: 3 valide + 1 Guideline-konform gefixt, 3 mit Begründung verworfen. Gefixt am annahme-overlay.component.ts: [a] Ressourcen-Cleanup [repo-Standard „Timer aufräumen"] — der entprellte Dry-Run-Timer wird jetzt beim Nicht-mehr-bereit [clearTimeout vor dem early-return, sonst feuerte eine stale pruefeAuftrag nach] und via DestroyRef.onDestroy abgebrochen; [b] Autofokus — viewChild('satzInput') + afterNextRender → Cursor beim Öffnen im Satz-Input; [c] toter Code — ungenutzter TERMINKLASSE_LABEL-Import + TK-Groundwork-Feld entfernt [+ labels-Import ganz raus]; [d] Motion-Token — .18s/.25s → var(--tk-dur-fast)/var(--tk-dur-card) [client/CLAUDE.md: Motion aus --tk-*]. Verworfen [mit Grund]: „#711-Bullet wiederherstellen" = False-Positive [grep bestätigt Eintrag vorhanden, #712 darüber eingefügt, append-only intakt]; „Zeitzonen vereinheitlichen" = dieselben geteilten Time-Helper wie /annahme, pre-existing/out-of-scope; OpenGrep-child_process.exec@L261 = False-Positive [kein child_process in der Komponente, Regex-Fehlzündung]. Reiner Client [1 Datei], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün. v0.142.0→0.142.1 PATCH. Doku: CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Durchlauf · Review-Sicht · inline-Auswahl-Panel · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d23 ~0.6 h (07-24, PR #712, nach dem Merge von #711. Nutzer „weiter" → 3d-23: Annahme-Overlay „ein Satz genügt" [Branch frisch von main @b8a297a]. Der Schnell-Intake als 720px-Modernist-Modal direkt aus der Lage [neuer annahme-overlay.component.ts + Primärbutton „+ Neuer Auftrag" auf overview.component.ts, DD-001]. Scope-Entscheidung [Einfachheit + keine ungefragten Refactorings]: die 825-Zeilen-/annahme-Vollfläche NICHT in ein Modal umbauen [zu groß/riskant], sondern ein reiner View über die bereits geteilte Intake-Logik — parseAnnahmeSatz [util] + svc.pruefeAuftrag/createAuftrag/auftragPruefResult/auftragCreateResult [service]; nur die trivialen Präsentations-Formatter [euro/reserveStil/slotLabel/fmtInput] nachgebildet → keine Fachlogik-Duplikation, kein Drift-Risiko. Satz → 3 Pflicht-Tags [Kunde·Leistung·Abholung, Ink-gefüllt/Outline] → echter Server-Dry-Run [seq-gated via startPruefSeq, damit nur die eigene Anfrage zählt] → Machbarkeit·Slot·Reserve·Preis → ✓ Annehmen; Fehlerfall mit 2 Auswegen [→ Alt-Anlieferung übernehmen · ⚠ Trotzdem→Klärfall], Erfolg „AU-nnn ist im Takt" + Radar/Nächster-Satz. Effekte seq-gegated [startPruefSeq/startCreateSeq beim Konstruktor], damit das frisch gemountete Overlay nicht auf ein altes Create-Ergebnis reagiert. Modernist: radius 0 [Modal-scoped [class*=rounded]{border-radius:0}], 2px-Kante, 720px zentriert, tk-rise, Esc/Scrim/×. Alte /annahme-Route [inkl. „🚗 Fahrzeug da"-Tab] bleibt als Fallback/Deep-Link. Live-DO-Verifikation [Playwright, Hell+Dunkel]: Lage → „+ Neuer Auftrag" → „▶ Beispiel einsetzen" → Tags [Kaya GmbH / Vollfolierung Premium inkl. Keramik / Fr 31.07. 17:00] → Machbarkeits-Panel [„✓ passt in den Takt · Slot Mo 27.07. 08:00 · Waschplatz 1 · +3 T Reserve · 3.200 € · ✓ Annehmen"]; beide Themes theme-aware. Reiner Client [1 neue Datei + overview-Wiring: Import/Button/Mount/Signal], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.141.0→0.142.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-23 ✅], design/WORKSPACES.md [§0], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Screen-Durchlauf · Review-Sicht · inline-Auswahl-Panel · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d22 ~0.9 h (07-24, PR #711, nach dem Merge von #710. Nutzer lud zwei Design-Handoff-Zips hoch [„Taktano UI Redesign Brief" + „…Briefhandoff"] mit Auftrag „Import + README lesen · Akten-Cockpit 1a (Detail).dc.html implementieren · design-decisions.md in docs/produkt/ einarbeiten". READMEs + DECISIONS.md [DD-001…008] vollständig gelesen. Disambiguierung: „Akten-Cockpit 1a (Detail)" ist kein wörtlicher Datei-/Frame-Name im Flusslinie-Handoff [grep ergab nur v3-Alt-Dateien]; das eindeutig passende Modernist-Pendant ist der Auftrag-Detail-620px-Drawer [Flusslinie Screenshot 09, „Akten-Cockpit" = Fahrzeug-Akte-Cockpit, deckt OP-REDESIGN-1 „620px-Auftrag-Drawer"]. AskUserQuestion zur Bestätigung vom Nutzer abgelehnt → mit der gut gestützten Interpretation fortgefahren. PR #710 zuerst gemergt [war clean, Auto-Merge hatte wg. GitHub-Rate-Limit nie gefeuert → manuell squash-gemergt], Branch frisch von main @43730ea. Import: [1] Design-Decision-Log → docs/produkt/Design-Entscheidungen.md [Frontmatter sidebar_position 40, Landkarte docs/README.md, Rück-Footer, Taktano-lokale Abweichungen als Blockquotes ergänzt: Rot=Primär+Warn, Dark-Mode behalten]; [2] Flusslinie-Prototyp [.dc.html + Taktano Wording.md + 22 Screenshots + _ds] → design/prototype/flusslinie/ [neben v3], referenziert aus design/CLAUDE.md. Implementierung 3d-22: Extraktions-Subagent zog die exakte Drawer-Spec aus dem 201KB-.dc.html [Container/Header/Stammdaten/Stationen-Strip/Arbeitsschritte/Chronik/Tokens]; dann auftrag-detail-panel.component.ts auf Modernist gebracht — 420→620px, 2px-Kante, radius 0 [Drawer-scoped [class*=rounded]{border-radius:0} statt 100+ Einzel-Edits], 🚗-Fortschritts-Kette → 5-Stationen-Strip [stationen()/stgIndex() aus phase.ts-Reihenfolge annahme→aufbereitung→produktion→qs→fertiggestellt/Abholung], runde Status-Chips → quadratische Lifecycle-Marken [markeBg/markeBorder, Form statt Farbe DD-003]. Alle Funktionen erhalten [nur visuelle Angleichung]. Live-DO-Verifikation [Playwright]: Drawer geöffnet via Fluss→Fortschritts-Step-Click; Fallstrick Dark-Mode — ThemeService-Effect überschreibt manuelles data-theme aus dem mode()-Signal [localStorage taktano.theme] → dark via addInitScript-localStorage-Seed vor App-Boot erzwungen; Hell + Dunkel bestätigt [roter „Annahme"-Aktuell-Marker, □-Marken, scharfe Kanten, 620px, theme-aware]. Entscheidung: reiche bestehende Funktionalität behalten, nur Design-Sprache angleichen [Prototyp = vereinfachter Mock]. Reiner Client [1 Datei] + Doku/Referenz-Import. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.140.0→0.141.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-22 ✅], COMPONENTS.md [Akten-Cockpit-Rezept], design/CLAUDE.md, Design-Entscheidungen.md, README.md, Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Screen-Durchlauf · Review-Sicht · Annahme-Overlay · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d21 ~0.5 h (07-24, PR #710, nach dem Merge von #709. Nutzer „weitermachen" → zweiter net-new Layout-Schnitt 3d-21: Lage · „Heute kommt/geht"-Streifen [Branch frisch von main @910166b]. Unter den 3-TN-Karten [overview.component.ts] ein zweispaltiger Tages-Digest: ↓ Kommt heute [Anlieferungen: geplant · bringtermin im Heute-Fenster · tatsaechlicheAnlieferung==null] · ↑ Geht heute [Abholungen: abholtermin im Heute-Fenster], je Zeile Uhrzeit · AU-Nr · Kunde, Klick fokussiert das Fahrzeug im Radar [fokusAuf]; ⚠ spät [rot, Termin-Achse] bei geplanteFertigstellung > abholtermin. Max 5/Spalte [„+N weitere"], Leer-Zustände. Helfer kommtHeute/gehtHeute/heuteFenster/istSpaet/fmtT — rein aus dem Live-State, kein neuer State. Live-DO-Verifikation [Playwright]: der Demo-Seed nutzt hartkodierte Vergangenheits-Daten [2026-06-16] → „heute" leer; deshalb 2 Heute-Aufträge über eine rohe WebSocket an :8787 [/parties/leitstand-server/leitstand-vest, auftrag.create mit heutigem Datum] injiziert → Streifen populiert: Kommt 2 [16:00 Berger · 17:30 Sahin] · Geht 2 [19:00/20:00, beide ⚠ spät — Anlieferung 16:00/17:30 heute, unmöglich bis Abend fertig]; die spät-Aufträge tauchen konsistent auch in „Braucht dich" auf. Vorher/Nachher Hell + Dunkel [populated + Leer-Zustand] bestätigt. Entscheidung: Tages-Digest ergänzt die statischen TN-Karten um die zeitliche „was bewegt sich heute?"-Sicht [Q2/Q3]; „⚠ spät" nutzt die bestehende Konflikt-Prädikate-Logik [Konsistenz]. Mit-Fix: die 2 CodeRabbit-Nits aus #709 [WORKSPACES quoteFarbe-Schwellen 60–<90/≥90 · Funktionsumfang-Version 0.139.0] — kamen kurz vor #709-Merge, hier in derselben Slice mitgezogen. Reiner Client [1 Datei] + 3 Docs, kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.139.0→0.140.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-21 ✅], design/WORKSPACES.md [§1], Funktionsumfang.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Durchlauf · Review-Sicht · Annahme-Overlay · 620px-Drawer · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d20 ~0.6 h (07-24, PR #709, nach dem Merge von #706. Nutzer „Live-Do hochfahren und weitermachen" → Branch frisch von main @eee540e neu gezogen, Live-DO-Stack hochgefahren [wrangler dev --port 8787 --local + gebauter Client via http-server :4200] und den ersten net-new Layout-Schnitt aus dem OP-REDESIGN-1-Rest gebaut: 3d-20: Lage · 3-True-North-Karten-Reihe. Die Lage-Landing [overview.component.ts] führt jetzt oben über Board+Sidebar mit drei flachen Antwort-Karten [answer-first/Minto] für die drei Leitfragen — Q1 Auslastung [Engpass-Quote = engere von Mitarbeiter/Buchten, Farbe via quoteFarbe] · Q2 Fahrzeuge [aktive Aufträge; „✓ alle verortet" grün / „⚠ N ohne Standort →" amber, Link Konflikte] · Q3 Nächste Kapazität [früheste machbare Leistung „ab tnAuslastung/tnKapNext, Q2 aus aktiveAuftraege/ohneStandortCount — rein aus Live-Insights, kein neuer State; die bestehenden Sidebar-Panels bleiben Drill-down. Live-DO-Verifikation [Playwright]: Fallstrick gefunden — der Client rewritet die WebSocket nur auf :8787, wenn hostname==='localhost'; via 127.0.0.1 geladen ging die WS auf :4200 [404]. Über http://localhost:4200 geladen → WS verbindet, Seed-Daten [„vest"-DO] fließen, Karten zeigen echte Werte [Q1 1 % · Q2 5 ✓ verortet · Q3 „ab heute 14:42 · Vollfolierung Premium inkl. Keramik"]; Vorher/Nachher Hell + Dunkel bestätigt [beide Themes legibel, Panels folgen data-theme]. Entscheidung: answer-first-Landing [drei Leitfragen zuerst, dann Radar-Board]; Redundanz zum Header-True-North-Strip [Phase 2b] gewollt [Karten = prominenter Landing-Anker, Strip = ständiger Kopf]. Reiner Client [1 Datei], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün + Live-Screenshots. v0.138.0→0.139.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-20 ✅], design/WORKSPACES.md [§1], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Durchlauf · „Heute kommt/geht" · Review-Sicht · Annahme-Overlay · 620px-Auftrag-Drawer · QS-Modal.)
Session taktano-2026-07-24-next-steps-8vmq5d-redesign-flusslinie-phase3d19 ~0.4 h (07-24, PR #706, selber PR wie 3d-18. Nach mehrfachem „Continue" [Nutzer stoppte jede Branch-Reconcile-Aktion für #706 — der Merge-Konflikt-mit-main bleibt bewusst Nutzer-Sache; CI kann bis dahin nicht dispatchen, mergeable_state:dirty, 0 Check-Runs] auf den merge-/live-DO-unabhängigen OP-REDESIGN-1-Rest gepivotet: 3d-19: Design-Doku Prosa-Modernisierung. Die Design-Doku trug noch v3-Prototyp-Ära-Sprache, die der Code seit 3d-1..3d-18 nicht mehr abbildet [aktive Doku↔Code-Widersprüche, OP-DOCS-9]. Vor dem Umschreiben die unsicheren Farbstellen gegen den Code verifiziert [gantt „JETZT-Linie rot", Block-Ghost Ink, .tk-pchip-Cyan-Puls bleibt] → nur hoch-sichere, dokumentierte Korrekturen. Bereinigt in WORKSPACES.md [20 Edits] + COMPONENTS.md [8 Edits] [+ design/CLAUDE.md/ops/OP-REDESIGN-1.md Phasen-Stand]: JETZT-Linie „cyan/Glow" → rot [--tk-brand]; Selektion [Kachel-Border · „ringed cyan" · Drop-Ziel · Drag-Ghost · Standort · Master-Detail-Aktivzeile] → Ink [--tk-text]; die 12 Workspace-Signaturfarben [— #hex-Überschriften · Nav-„glow bar" · Header-Dot · Empty-Glyph · Segmented-Hex] → entfernt/Ink [3d-14/3d-15]; Glass/Glow/radius-hero/Gradient-CTA → flach/radius 0/Rot-CTA [Phase 1]; Konflikte/Klärfälle-Rohhex → --tk-red/--tk-amber; Ink-Gantt-Block-Encoding im Gantt-Rezept ergänzt [3d-18]. Bewusst behalten: .tk-pchip-Cyan-Puls [Live/Präsenz, 3d-11] + funktionale Status-/Gantt-Hues [Farbe = Information]. Nicht angetastet: statisch nicht verifizierbare Farbdetails [Szenario-Profil-Hues, Annahme-Parse-Chips — kein neuer Widerspruch]. Reine Doku [2 Design- + 2 Status-Docs], kein Code/DTO/Schema → kein APP_VERSION-Bump [gleicher PR wie 3d-18 @0.138.0]. Doku: ops/OP-REDESIGN-1 [3d-19 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Mode-Durchlauf · net-new Layout-Features.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d18 ~0.7 h (07-23, PR #706, nach Merge von #705. Nutzer wählte auf „Was als Nächstes" „Redesign-Rest (Live-DO)" → damit war das Hochfahren des Dev-Stacks freigegeben [vorher abgelehnt]. Live-Stack gebaut: wrangler dev --port 8787 --local [Worker+DO, NO_PROXY=localhost] + gebauten Client via http-server auf :4200 [Client erkennt Dev → PartySocket auf :8787]; Playwright [/opt/node22 CJS-Import] bootet :4200, seedet über die Planung [Testdaten-Toggle → 5× „+ Demo-Auftrag"] → Gantt mit Blöcken. 3d-18: Gantt Dual-Theme → Token. Diagnose am Live-Gantt: der Gantt trug als letzte Komponente die Vor-Modernist-Dual-Theme-Logik [~22 [class.…-slate-…]="!dark()"/[class.…-tk-…]="dark()"-Paare + 5 @if(dark())-gegatete Features: JETZT-Linie, ⚑/⚡/⏰-Legende, Wunsch-Flaggen, JETZT-Badge, Auslastungs-Heatmap — im Hell-Modus unsichtbar]; die Optik hing am Angular-dark-Input [theme.isDark()] statt an --tk-*-Tokens → Dark-Mode-Bug sichtbar gemacht [weißes Grid auf dunklem Cockpit, Signal↔CSS entkoppelt]. Fix per auditierbarem Transform-Skript [22 exakte Ersetzungen, je Count-asserted]: alle Paare → --tk-*-Tokens [dark byte-identisch, Hell nutzt Modernist-Neutrale statt slate/white] + die 5 Feature-Blöcke entgated [beide Themes]; ungenutztes dark-Input + Parent-Binding + ThemeService-Injection [planning] entfernt; stale „cyan"-Kommentar korrigiert. Vorher/Nachher-Screenshots Hell+Dunkel bestätigen: Dark-Gantt jetzt korrekt dunkel [data-theme allein genügt — token-getrieben, entkoppelt vom Signal], JETZT-Linie/Heatmap in Hell sichtbar. Bewusst NICHT geändert: funktionale Block-/Ausfall-Farben [Info-tragend]; der „gefüllt=läuft · Outline=geplant"-Block-Stil ist eigene opinionierte Folge-Entscheidung. Reiner Client [2 Dateien], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshots. v0.137.1→0.138.0 MINOR. Danach [gleiche PR #706, Nutzer: „Block style redesign"]: Teil B — Block-Stil. CI war auf #706-Head nicht getriggert [GitHub-Trigger-Miss, kein Run für 109eac1] → Block-Stil in dieselbe PR gefaltet [zwei Hälften eines Features „Ink-Gantt"; der Push re-triggert CI]. Live-Stack erneut hoch [wrangler+http-server], Block-Stil implementiert: die Füll-Optik trägt jetzt den Teilschritt-Arbeitsstand [Hue bleibt Auftrags-Status-Farbe b.color] — Outline=geplant [„wartet", 13%-Tint + farbiger Rahmen + farbige Schrift] · gefüllt=in_arbeit/erledigt [solide + weiße Schrift] · grau=pausiert [Graufüllung + dunkle Schrift]; uebersprungen ist im Gantt gefiltert. Neue Helfer blockBg/blockBorder/blockText, Block-div verdrahtet; Konflikt-/Spät-Glows [blockShadow] koexistieren. Live-verifiziert Hell+Dunkel [Demo-Seed all-geplant → zeigt Outline direkt; gefüllt = byte-identisch zum bisherigen Solid-Rendering, grau trivial]. Nicht geändert: funktionale Status-/Ausfall-Hues [Info-tragend]. Verifiziert: No-Hex + tsc + ng build grün + Screenshots. Doku: ops/OP-REDESIGN-1 [3d-18 Teil B ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Warn-/Dark-Screen-Durchlauf · Layout-Features · Prosa-Modernisierung.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d17 ~0.3 h (07-23, PR #705, nach Merge von #704. Nutzer „#5" [→ OP-REDESIGN-1-Rest], Live-Stack-Ansatz [wrangler dev] vom Nutzer abgelehnt → auf den build-verifizierbaren Teil von Bucket 4 pivotiert: 3d-17: Warn-Entkopplung Toasts [Branch frisch von main @b2179b0]. Audit aller roten/danger-Stellen: die meisten tragen bereits ein Nicht-Farb-Signal [Text-Labels „getrennt"/„N ohne Standort"/„über Termin", ⚠/⚑-Glyphen, role=alert, ganze Sätze] oder sind rote Aktionen [Klärfall/Notfall melden — kein Warn-Fall]. Klare Lücke: Toasts — der Ton war rein farblich kodiert [[style.color]="tone(t)"] mit Default-Glyph fix ✓, d. h. ein danger-Toast [rot] war von einem brand-Toast [ebenfalls rot] nur farblich unterscheidbar, und ein icon-loser danger-Toast zeigte das Erfolgs-✓ in Rot. Fix: TONE_ICON-Map je Ton [ok ✓ · brand ✦ · warn ⚠ · danger ⚠ · info ℹ] → t.icon ?? toneIcon(t); die Glyph-Form unterscheidet den Ton, Aufrufer-t.icon gewinnt weiter. COMPONENTS.md-Toast-Rezept um die Ton-Entkopplungs-Regel ergänzt. Entscheidung: die eine klare Farb-only-Lücke gefixt; der vollständige screen-by-screen Warn-Sicht-Durchlauf + Dark-Mode braucht Live-DO [mit den anderen Live-DO-Punkten offen]. Reiner Client [1 Datei + 1 Doc], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc + ng build prod grün. v0.137.0→0.137.1 PATCH. Doku: ops/OP-REDESIGN-1 [3d-17 ✅], COMPONENTS.md, CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1, Live-DO]: Warn-Durchlauf/Dark-Mode · Ink-Gantt-Refactor · Layout-Features · Prosa-Modernisierung.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d16 ~0.4 h (07-23, PR #704, nach Merge von #703. Auf Nutzer-Frage „was fehlt zur vollen Design-System-Integration?" die Lücken kartiert [Token-Hygiene · Ink-Gantt/Live-DO · Layout-Features · Warn-Entkopplung] und Nutzer wählte Token-Hygiene → 3d-16: Token-Hygiene [Branch frisch von main @8bbc60f]. (1) die 14 ungenutzten --tk-ws-*-Workspace-Signaturfarben aus dem Token-Layer entfernt — tokens.json [color.workspace-Block], build.mjs [Name-Map], regeneriert tokens.css [98→84 Tokens, tokens:check-Round-Trip grün]; kein --tk-ws-* mehr in Token-Layer oder App-Code. (2) 23× hardcodiertes hover:bg-white/[.03] [Weiß-Alpha, im Hell-Modus quasi unsichtbar, vom No-Hex-Gate nicht erfasst da Tailwind-Utility] → hover:bg-tk-hover [theme-aware] in costs/processes/staff. (3) Korrektur: der Klärfälle-Zähler-Badge war in 3d-15 versehentlich Rot → zurück auf Amber [--tk-amber], gemäß dokumentierter Zwei-Achsen-Regel [Termin/Konflikte=Rot, Störung/Klärfälle=Amber/Gold bewusst nicht rot, COMPONENTS.md] — beim Doku-Sync entdeckt. (4) Design-Docs synchronisiert [goldene Regel Doku↔Code]: DESIGN_TOKENS.md [ws-Tabelle → entfernt], design/CLAUDE.md [Signaturfarben-Regel durchgestrichen + Phasen-Stand], WORKSPACES.md + COMPONENTS.md [tote --tk-ws-*-Refs → --tk-red/--tk-amber/--tk-text]. Entscheidung: tote Tokens entfernt statt „deprecated" [Single-Source sauber]; Störung=Amber wiederhergestellt. Offen notiert: WORKSPACES/COMPONENTS-Prosa [Cyan-Glow/Chip-Farben aus v3-Prototyp-Ära] ist noch pre-Modernist — keine toten Token-Refs mehr, nur veraltete Prosa, eigener Doku-Schritt. Reiner Client + Design-System [Token-Layer + 4 Screens/Komponenten + 4 Docs], kein Server/DTO/Schema. Verifiziert: No-Hex + tokens:check + ng build prod grün. v0.136.0→0.137.0 MINOR. Doku: ops/OP-REDESIGN-1 [3d-16 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Ink-Gantt-Refactor [Live-DO] · Layout-Features · Prosa-Modernisierung.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d15 ~0.4 h (07-23, PR #703, nach Merge von #702. „weiter" → Phase 3d-15: ws-Signaturfarben — Screens (Rainbow-Ablösung abgeschlossen) [Branch frisch von main @ed1750c]. Abschluss des ws-Signaturfarben-Feinschliffs: alle 10 verbliebenen Screens [costs·recommendations·conflicts·processes·orders·quality·planning·annahme·staff·overview] von der 14-farbigen --tk-ws-*-Rainbow befreit [kein ws-Token mehr in irgendeinem Screen]. Methode: ein mechanischer Blanket-Durchlauf per perl [var(--tk-ws-X) → var(--tk-text)] über alle 10 Files, dann gezielte Rot-Promotion der soliden Primär-CTAs + Alarm-Badges. Regel: Tab-Umschalter/Selektions-Highlights/Dekor-Glyphen-Ränder/Chips/Fortschritts-Balken/„neu"-Badges/Preise/Links → Ink [--tk-text]; solide Primär-CTAs → Rot [--tk-brand: „✓ Übernehmen" Vorschläge/Planung · „▶ Starten" Team · „+ Posten" Kosten · „✓ Freigeben" Qualität · „🚗 Fahrzeug angeliefert"+„✓ Annehmen"-Haupt-CTA Annahme, inkl. CTA-Glow angeglichen]; Konflikt-/Klärfall-Alarm-Indikatoren → Rot [--tk-red, Gefahr-Konvention aus 3d-2: Klärfälle-Zähler-Badge + Konflikt-Hebel-Fläche]. Damit Workspace-Rainbow komplett durch Ink+Rot ersetzt [nur Token-Defs bleiben ungenutzt]. Entscheidung: Rainbow-IA [an alte 12-Workspace-Struktur gebunden] endgültig abgelöst — Cockpit durchgängig Modernist monochrom+rot. Reiner Client [10 Dateien, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.135.0→0.136.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-15 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Ink-Gantt-Block-Refactor [Dual-Theme→Token, braucht Live-DO] · 3-TN-Karten/Overlays/Drawer/QS-Modal · ws-Token-Defs-Cleanup [optional].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d14 ~0.3 h (07-23, PR #702, nach Merge von #701. „weiter" → Phase 3d-14: ws-Signaturfarben — geteilte Komponenten [Branch frisch von main @0b0c2e7]. Start des ws-Signaturfarben-Feinschliffs [die 14-farbige Workspace-Rainbow --tk-ws-* → Ink+Rot, die Modernist ablöst; 3d-2 entfärbte schon die Nav] auf die überall geteilten Komponenten [größter Konsistenz-Hebel, wie 3d-9]: Detail-Panel — die zwei „Speichern"-Buttons [Kunde/Fahrzeug, ws-annahme-Vollfläche] → Rot [--tk-brand, Primär], CRM-Link + „✦ Vorziehen vorschlagen"-Outline → Ink; Shell — Werker-Modus-⬣ [ws-werker] → Rot [wie rotes Terminal 3d-5], 3 restliche Nav-Badge-Farben [Annahme/Vorschläge/Qualität] → Ink [--tk-text-dim, deferrter Badge-Feinschliff aus 3d-2; Gefahr-Badges bleiben rot], Kommentar nachgezogen; Tafel [Leer-Glyph + „annehmen"-Link], Klärung-Einplanen + Klärfall-Lösen [Container/Chips], Nächste-Aufgaben [Tab-Aktiv] → Ink. Entscheidung: ws-Vollflächen-Primär → Rot · ws-Dekor/Outline/Toggle → Ink [analog 3d-6]. Reiner Client [6 Dateien, nur Farbwerte, perl-Ersetzung + Kommentar], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.134.0→0.135.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-14 ✅], CHANGELOG, HANDOFF §2. Offen: ws-Reste in den Screens [costs/recommendations/conflicts/processes/orders/quality/planning/annahme/staff/overview] · Ink-Gantt-Block-Refactor [Live-DO] · 3-TN-Karten/Overlays/Drawer/QS-Modal.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d13 ~0.4 h (07-23, PR #701, nach Merge von #700. „weiter" → Phase 3d-13: Takt/Planung-Chrome, Gantt-Bedienung & Klärfall-Palette — Cyan-Feinschliff abgeschlossen [Branch frisch von main @8a60333]. Der letzte Cyan-Durchgang auf die verbliebene interaktive UI-Chrome: Planung [planning.component] — „Alle Profile identisch"-Info-Box + ℹ → Ink, „✎ Entwurf"-Modus-Banner [Rahmen+Text] → Rot [--tk-brand, aktive Bearbeitung, wie „Plan ändern" 3d-3], Testdaten-Checkbox → Rot, Optimierungs-Metrik-Farbe [3. Kennzahl] → Ink; Gantt-Bedienung [gantt.component] — Zoom-Preset-Toggle aktiv + „Klick → Details"-Hinweis → Ink, Drag-Vorschau-Ghost [gültig war Cyan] → Ink [ungültig bleibt Rot ⚠, klarer Kontrast]; Klärfall-Palette [klaerfall-loesen] — mittlere Routen „Sprung zu QS" [war Cyan] + „Anderer Schritt" [war Violett] → Ink [Rainbow entschärft; „← Zurück"=Grün/„✕ Abbruch"=Rot behalten Semantik, Icons ←/✓/↷/✕ tragen den Rest]. Damit Cyan-Feinschliff des ganzen Cockpits abgeschlossen. Bewusst als Cyan erhalten [dokumentiert]: [a] funktionale Lifecycle-Status-Hues [labels angeliefert/ziel, phase Abholung, staff artFarbe, gantt wunschfrei — Phase-1-Brief bewahrt funktionale Status-/Gantt-Hues, Farbe = Information, True-North Q2]; [b] Live-/Präsenz-Signale [✎ „wird bearbeitet", ⏺ „tippt/parst", Lade-Spinner, istUmparken — reserviertes Echtzeit-Cyan]. Entscheidung: UI-Chrome → Ink/Rot; funktionale Status + Live bleiben Cyan [Brief-konform, Info-tragend]. Reiner Client [3 Dateien, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.133.0→0.134.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-13 ✅], CHANGELOG, HANDOFF §2. Offen [OP-REDESIGN-1]: Gantt-Block-Stil-Refactor [Dual-Theme→Token + Ink-Gantt, braucht Live-DO] · ws-Farben-Reste · 3-TN-Karten/Overlays/Drawer/QS-Modal.)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d12 ~0.3 h (07-23, PR #700, nach Merge von #699. „weiter" → Phase 3d-12: Bild-Gate & Shell-Reste [Branch frisch von main @d205c82]. Cyan-Feinschliff auf das Foto-Gate [bild-upload-gate + bild-schutz — On-device-Prüfung Personen/Kennzeichen vor Upload, OP-QS-2] + Shell-Reste: Bild-Gate — Prüf-Kriterien-Text-Emphase [Qualität/Personen/Inhalt], Hover-/Focus-Rahmen, Auto-Geprüft-Punkt [auto war Cyan; manuell=Amber bleibt], Markier-Modus-Toggle → Ink [Farb-Ternär mit identischen Zweigen zu statischem --tk-text vereinfacht]; Markierungs-Nummern-Badges [Bildschirm, via perl-replace_all] + ins Bild gebrannte Marker-Kreise [Canvas-Export, tokenFarbe] → Rot [--tk-brand, hohe Sichtbarkeit + Marke für markierte Personen/Kennzeichen-Regionen]; primärer „Hochladen"-Button [freigegeben] → Rot [Primär-Aktion]; Shell — Theme-Umschalt-Glyph [☀/☾] + „Auf-Kurs"-Fortschritts-Ring [SVG-stroke] → Ink. Entscheidung: Selektion/Toggle/Info/Progress → Ink · Primär-Upload + Marker → Rot [Marker müssen sichtbar sein, Rot = Marke + Kontrast]; manuell-Amber bleibt. Reiner Client [3 Dateien, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.132.0→0.133.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-12 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Klärfall-Palette · ws-Farben · labels/phase-Helfer · Ink-Gantt · 3-TN-Karten].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d11 ~0.3 h (07-23, PR #699, nach Merge von #698. „weiter" → Phase 3d-11: Annahme & Prozesse [Branch frisch von main @7cbc463]. Cyan-Feinschliff auf Annahme [annahme.component — „Takt-Kommando"-Intake] + Prozesse [processes.component — Prozess-/Schritt-Stammdaten]: Annahme — Kommandozeilen-Glow entfernt [flach], Alternativ-Vorschlag-Button → Ink, „Auf dem Radar zeigen"-CTA-Glow [war Cyan an rotem --tk-brand-Button] → Rot [angeglichen], Info-Chips [Anlieferung/Abholung/Termin-Härte-Default] → Ink; Prozesse — Info-Hinweis-Tint, Mindest-Niveau-★, Abhängigkeits-Toggle, „Foto-Vorgabe"-Outline, .tk-flag.tk-on → Ink, Arbeitsplatz-Typ-Checkbox → Rot. Bewusst Cyan behalten: der ⏺ „tippt/parst"-Live-Puls [tk-pchip] + der Lade-Spinner in der Annahme = echte Live-/Verarbeitungs-Signale [konsistent Live→Cyan]. Entscheidung: Selektion/Toggle/Info → Ink · Checkbox → Rot · Live/Processing → Cyan; Glows raus [flach], CTA-Schatten in Marken-Rot statt Cyan. Reiner Client [2 Dateien, nur Farbwerte + 1 entfernter Glow], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.131.0→0.132.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-11 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Bild-Gate/Bild-Schutz/Shell · Klärfall-Palette · ws-Farben · labels/phase · Ink-Gantt].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d10 ~0.3 h (07-23, PR #698, nach Merge von #697. „weiter" → Phase 3d-10: Belegung & Fluss-Gruppe [Branch frisch von main @1a2c18f]. Cyan-Feinschliff auf die Belegungs-/Karte-Sicht [occupancy — die „wo stehen die Fahrzeuge"-Karte, Q2] + Rest der Fluss-Gruppe [conflicts, quality]: Belegung — Drag&Drop-Hinweis-Emphase, „Wareneingang — Annahme"-Zone [Rahmen/Label/Zähler], Drag-Over-/Drag-Aktiv-Ziel-Highlight, „✓ da"/📍/🅿️-Aktions-Icons → Ink; Konflikte — Info-Box, 📝-Notiz-Button, Standort-Wert, Avatar-Farb-Rotation → Ink; Qualität — KPI „Offene Prüfungen" + Mangel-Status in_nacharbeit [war Cyan] → Ink [offen=Amber/behoben=Grün bleiben funktional]. Entscheidung: Selektion/Interaktion/neutrale Info → Ink; funktionale Status-Hues [Amber-Warnung, Grün-OK, Rot-Doppelbelegung] bleiben — nur arbiträres Cyan weicht; Drop-Ziel bewusst Ink [neutrale „hier ablegen"-Führung, kein Alarm]. Reiner Client [3 Dateien, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.130.0→0.131.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-10 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Annahme/Prozesse/Bild-Gate/Shell · Klärfall-Palette · ws-Farben · labels/phase-Helfer · Ink-Gantt].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d9 ~0.4 h (07-23, PR #697, nach Merge von #696. „weiter" → Phase 3d-9: Detail-Panel & geteilte Modals/Overlays [Branch frisch von main @9fd3066]. Der Cyan-Feinschliff auf die überall geteilten Komponenten [10 Dateien] nach der Feinschliff-Regel: Auftrag-Detail-Panel [Teilschritt-Fokus-Auswahl, „angeklickt"-Label, 📝-Notiz-Toggle, „Produktion starten"-Outline, Notiz-Popin-Rahmen] → Ink; Umparken-Modal [Slot-Auswahl empfohlen+weitere, „✓ passt"-Label, „Empfohlen"-Kopf, Auftragsnr. — ✅/✓-Glyphen tragen die „passt"-Bedeutung statt Farbe] → Ink; Assistent-Chat [Pin-/Issues-Toggles → Ink; User-Sprechblase → Rot --tk-brand, heller Text erhalten]; Feedback-Formular [Art-Auswahl + Hover → Ink]; Modal-Dialog [primärer Bestätigen → Rot]; Toast brand-Ton → Rot [war fälschlich Cyan]; Feedback-Pin-/Screenshot-Region-Overlay [Markier-Rechteck → Ink]; Fortschritts-Indikator [Fokus-Ring → Ink]; Terminal Umpark-Karten-Rahmen → Ink. Bewusst offen: die 4-farbige Klärfall-Lösen-Palette [grün/cyan/violett/rot] = semantisches Farbset [nicht halb entfärben — eigene Entscheidung]. Entscheidung: Selektion → Ink · Primär/Marke/„Du" → Rot · Live/Präsenz → Cyan; die geteilten Bausteine ziehen konsistent nach [tauchen auf allen Screens auf]. Reiner Client [10 Dateien, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.129.0→0.130.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-9 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [occupancy/Annahme/Prozesse/Konflikte/Qualität/Bild-Gate · Klärfall-Palette · ws-Farben · Ink-Gantt].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d8 ~0.3 h (07-23, PR #696, nach Merge von #695. „weiter" → Phase 3d-8: Fluss & Lage Modernist [Branch frisch von main @0e559dc]. Die beiden zentralen True-North-Sicht-Screens entfärbt: Fluss [orders.component — Auftrags-Card-Rahmen+Tint, Auftragsnummer-Farbe, Standort-Wert, aktueller Prozess-Schritt-Punkt, „Produktion starten"-Outline-Link] + Lage/Hof-Radar [overview.component — Slot-Kachel-Auswahl+Rahmen [kachelBorder-Helper], Mitarbeiter-Avatar-Auswahl-Ring, Nav-Fokus-Zeit, „Heute kommt"-Karten-Rahmen] → Ink [--tk-text]; die animierte „Flusslinie"/Radar-Sweep → Rot [--tk-brand, brand-konform — namensgebende Fluss-Linie jetzt rot] + Glow entfernt [Modernist flach]; Selektions-Glows [Slot-Kachel box-shadow, Avatar-Glow] entfernt. Bewusst unberührt: tk-cyan2 [= --tk-brand, war schon rot: Auslastungs-Wert/Eingang/früheste Anlieferung] + funktionale Status-Hues [grün „erledigt", ws-annahme „reserviert" → eigener ws-Farb-Feinschliff]. Entscheidung: Selektion durchgängig Ink [hoher Kontrast, kein Alarm], Flusslinie = Marken-Rot, Glows raus [flach]. True-North: die Q2-Screens [„wo stehen die Fahrzeuge"] ruhig monochrom — rote Flusslinie + rote Aktionen führen das Auge. Reiner Client [2 Dateien, nur Farbwerte + 2 entfernte box-shadows], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.128.0→0.129.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-8 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Ink-Gantt · Overlays/Drawer/QS-Modal · Cyan-Feinschliff Terminal/Modals/Detail-Panel/Konflikte/Qualität/Prozesse · ws-Signaturfarben].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d7 ~0.3 h (07-23, PR #695, nach Merge von #694. „weiter" → Phase 3d-7: Team-Editor Modernist [Branch frisch von main @fcec1c0]. Team-Screen inkl. Mitarbeiter-Editor [staff.component] nach Feinschliff-Regel entfärbt: Vertrauens-★-Auswahl [Anlegen+Bearbeiten] + Skill-Niveau-★ + Abwesenheits-Toggles [Wunschfrei weich · Einfacher Wunsch · Genehmigt · Ganzer Tag/Bestimmte Schichten] gewählt → Ink [--tk-text, 15 Bindungen, per zwei replace_all der Ternär-Muster]; Schicht-Checkboxen [accent-color] → Rot [--tk-brand]; XP-Badge + Fairness-Zähler + Info-Tint → Ink; weiches Abwesenheits-Typ-Label → Ink [hart bleibt Rot — hart/weich-Kontrast erhalten]; „✓ genehmigt" → Ink. Cyan behalten: ✎-Präsenz + istUmparken-Live-Status [Echtzeit-Tätigkeit] + artFarbe-Schicht-Typ-Farbe [→ eigene Gantt/Schedule-Slice]. Entscheidung: Feinschliff-Regel unverändert [Selektion/Toggle → Ink · Primär/Checkbox → Rot · Live/Präsenz → Cyan]; Schicht-Farbcodierung bleibt bei der Gantt-Slice [nicht willkürlich entfärben]. Reiner Client [1 Datei, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.127.0→0.128.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-7 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Ink-Gantt · Overlays/Drawer/QS-Modal · Lage-Rest · Cyan-Feinschliff Fluss/Lage/Terminal/Modals].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d6 ~0.3 h (07-23, PR #694, nach Merge von #693. „weiter" → Phase 3d-6: Verwaltung Modernist [Branch frisch von main @cc7fa77]. Verwaltungs-Screen [administration.component] entfärbt: Config-Auswahl-Chips [Taxonomie-Art · Skill-Eignung · Wochentage · Nachbar-Buchten] gewählt → gefüllte Ink-Chips [--tk-text statt Cyan]; „+ Arbeitsplatz"/„+ Schicht" [waren --tk-ws-bays/--tk-ws-staff] → Rot [--tk-brand]; Sekundär-Outline „+ Sperre"/„Neu laden" → Ink; „aktiv"-Checkboxen [accent-color] → Rot. Cyan behalten: die drei „✎ wird gerade bearbeitet"-Badges = reserviertes Live-/Präsenz-Signal [Echtzeit-Kollaboration], konsistent mit 3d-1. Feinschliff-Regel [aus 3d-1/3d-3]: Selektion/Config-Toggle → Ink · Primär-Aktion → Rot · Live/Präsenz → Cyan [Rot bleibt selten/bedeutungstragend]. True-North: entfärbte Config-Fläche → rote Primär-Aktionen [Anlegen/Speichern] stechen heraus, Stammdaten-Pflege [Grundlage Auslastung/Kapazität, Q1/Q3] schneller ablesbar. Reiner Client [1 Datei, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün. v0.126.0→0.127.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-6 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Ink-Gantt · Overlays/Drawer/QS-Modal · Lage-Rest · restlicher Cyan/Badge-Feinschliff in Fluss/Lage/Team/Terminal/Modals].)
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d5 ~0.3 h (07-23, PR #693, nach Merge von #692. „weiter" → Phase 3d-5: Werkstatt-Terminal Modernist-Akzent [Branch frisch von main @47f965a]. Werker-Fläche „Meine Arbeit" [meine-arbeit.component] trug als einzigen Akzent --tk-ws-werker [Indigo] → Rot [--tk-brand, 8 Stellen: aktiver Werker-Auswahl-Chip, Avatar, Offen-Zähler, Leer-Glyph ⬢, Status-Pille]. Terminal durchgängig monochrom+rot. Reiner Client [1 Datei, nur Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + ng build prod grün + Live-Screenshot [roter ⬢-Leer-Glyph]. v0.125.0→0.126.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-5 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Ink-Gantt · Verwaltung · Overlays/Drawer/QS-Modal · Lage-Rest · restlicher Cyan/Badge-Feinschliff].)
Stand 2026-07-23 ~20:05 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d4 ~0.5 h (07-23, PR #692, nach Merge von #691. „weiter" → Phase 3d-4: Team · Kann-was-Matrix [Branch frisch von main @e9d47d5]. Team-Screen [staff.component] führt oben eine Kann-was-Matrix: Tabelle Mitarbeiter × Skills — Zeilen = aktive MA, Spalten = aktive Skills [Katalog], Zellen = ★-Könner-Stufe [Niveau 1–3, ·=kein], + Ausbildungsziel-Spalte [„★2 → ★3 · oeffneBearbeiten, Reuse]; aria-label je Zeile, sticky Name-Spalte, horiz. scrollbar, Leer-Guard. Rein aus Live-Signalen [svc.employees/svc.skills, keine Fixtures]. Entscheidung: vorhandene sterne()/oeffneBearbeiten()/Skill-Daten wiederverwendet, kein neuer State [Einfachheit]; Bau-Bug [Doppel-sterne()] erkannt + entfernt [meine Kopie raus, bestehende genutzt, Zell-Fallback || '·']. True-North: „wer kann was" auf einen Blick = Grundlage Zuteilung/Auslastung [Q1]. Reiner Client [Template + 3 Helfer/Computed], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün; Team-Screen rendert Modernist [Leer-Guard ohne Seed-Daten]. Visuell mit Daten braucht laufendes DO [wie Ink-Gantt] — Logik an echte DTOs gebunden, build-verifiziert. v0.124.0→0.125.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-4 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Ink-Gantt · Verwaltung · Werkstatt-Terminal · Overlays/Drawer/QS-Modal · Lage-Rest · Cyan/Badge-Feinschliff].)
Stand 2026-07-23 ~19:50 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d3 ~0.4 h (07-23, PR #691, nach Merge von #690. „weiter" → Phase 3d-3: Takt-Controls Modernist [Branch frisch von main @0e28077]. Assessment des Takt-Screens: Toolbar-Toggles noch cyan/grün; der Gantt selbst trägt Vor-Token-Dual-Theme [dark()→slate/white, ~24 Bindungen] + status-gefärbte Blöcke [nicht Ink-Gantt] + Blöcke brauchen Live-Backend-Daten → Gantt-Refactor = eigene größere Slice, hier bewusst nicht angefasst [Risiko/Verifizierbarkeit]. Gebaut [bounded, verifizierbar]: die Planung/Takt-Toolbar-Toggles entfärbt — asap/jit aktiv [war Cyan] + Auto-Nachführung an [war Grün] → Ink [--tk-text, monochrome neutrale Modi]; Plan ändern [Entwurfs-/Drag-Modus, war Cyan] → Rot [--tk-brand, aktive Bearbeitung = Aufmerksamkeit]. Entscheidung: Ink für neutrale Toggles, Rot nur für aktiven Bearbeitungs-Modus [„Rot = Bedeutung"]. Reiner Client [planning.component.ts, Farbwerte], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Ink-Toggles asap/Auto, roter Plan-ändern-Entwurf]. v0.123.0→0.124.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-3 ✅ + Gantt-Refactor als offene Slice notiert], CHANGELOG, HANDOFF §2. Offen: Gantt-Refactor [Dual-Theme→Token + Ink-Gantt-Blöcke] · Team-Matrix/Verwaltung/Terminal · Overlays/Drawer/QS-Modal · restl. Cyan/Badge-Feinschliff.)
Stand 2026-07-23 ~16:50 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d2 ~0.4 h (07-23, PR #690, nach Merge von #689. Autonomer Redesign-Loop → Phase 3d-2: Monochrome Ort-Chips (Nav) [Branch frisch von main @d373a56] — erledigt den deferrten Teil von Phase 2b. Rail-Chips/Stripes von Rainbow---tk-ws-* → Ink [--tk-text-dim, gezielter sed über den navGroups-Zeilenbereich; badgeColor Groß-C bewusst unberührt]; aktiver Ort wird rot [--tk-brand via CSS .tk-nav.tk-active { --chip: var(--tk-brand) } — Chip+Stripe+Text]; Stripe nutzt jetzt var(--chip) [statt n.color] + Glow entfernt [Modernist flach]; Header-Platz-Punkt + Logo-Kachel-Tönung cyan→rot. Badges bleiben [rot=Gefahr]. Entscheidung: monochrom+Rot nach Brief — die 4 Orte tragen keine Eigenfarbe [12-Workspace-Signaturfarben waren an alte IA gebunden], aktiver Ort = einziger roter Akzent. Reiner Client [shell.component.ts, Farbwerte + 1 CSS-Regel], kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Ink-Chips, aktiver Lage-Ort rot, Header-Punkt rot]. v0.122.0→0.123.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-2 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Toggle/Selektion-Cyan · restliche Badge-Farben · 3-TN-Reihe · Heute kommt/geht · Review · Overlays/Drawer/QS-Modal · Takt-Ink-Gantt/Team-Matrix/Verwaltung/Terminal].)
Stand 2026-07-23 ~16:35 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3d1 ~0.4 h (07-23, PR #689, nach Merge von #688. Autonomer Redesign-Loop [User rejected Rückfrage → mit Empfehlung „Split nach Brief" selbst entschieden] → Phase 3d-1: Accent-Sweep, Primär-Aktionen → Rot [Branch frisch von main @42edd25]. Assessment [Screenshots Takt/Team/Terminal]: Screens schon Modernist, aber ~191 --tk-cyan + ~100 --tk-ws-* zeigen noch cyan/grün/blau. Gezielter, grep-sicherer Slice: die soliden background: var(--tk-cyan)-Füllungen [27 Stellen, 13 Dateien] → var(--tk-brand) [Rot] — das sind Primär-Aktions-Buttons [Assistent-FAB, „Optimierung vorschlagen", „Pin vormerken", „Notiz speichern", Bestätigungen], die JETZT/Now-Linien [Brief: „rote JETZT-Linie", Gantt+Risiko-Timeline] und Highlight-Badges; zugehörige Glows [FAB/Now-Marker] mitgezogen. Entscheidung: nur solide Füllungen [= Primäres] geflippt, NICHT die semantische Selektions-/Live-Cyan [Outlines/Text/Tints] + Toggle-Aktiv [? 'var(--tk-cyan)', ~63] + green/ws-* — kein Bedeutungsverlust, Rest ist Feinschliff [Selektion→Ink, Toggle→Rot/Ink]. Verifiziert: Ambiguity-Check [gantt/orders/detail-panel: waren Now-Linien + primäre Buttons → korrekt rot] + No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Takt: „Optimierung vorschlagen" + FAB jetzt rot, Uhr rot]. Reiner Client [13 Templates, nur Farbwerte], kein Server/DTO/Schema. v0.121.0→0.122.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3d-1 ✅], CHANGELOG, HANDOFF §2. Offen: 3d-Rest [Toggle/Selektion-Cyan · 3-TN-Reihe · Heute kommt/geht · Review · Overlays/Drawer/QS-Modal · Takt-Ink-Gantt/Team-Matrix/Verwaltung/Terminal].)
Stand 2026-07-23 ~16:15 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3c ~0.5 h (07-23, PR #688, nach Merge von #687. Autonomer Redesign-Loop → Phase 3c: Lage · „Braucht dich"-Digest [Branch frisch von main @8d4240f]. Lage-Landing [overview.component] führt oben in der Sidebar einen „Braucht dich"-Digest: dringendste Entscheiden-Einträge [max 4 — Klärfälle/Notfälle zuerst, dann Termin-Konflikte, dann fehlende Ortung; Typ-Label VERSAL + 3px-Ton-Kante], roter Zähler „N → Entscheiden"; Eintrag + Zähler verlinken in den Fluss [volle Ablage inkl. Aktionen]. Rein aus Live-Signalen [svc.klaerfaelle/konflikte/ohneStandort], Leer „✓ Alles im Takt.". Entscheidung: Lage zeigt „was zu entscheiden ist" vorab [True-North Q2], Aktion bleibt im Fluss [kein doppelter Aktions-Ort]. Reiner Client [Template + 2 Computeds], kein Server/DTO/Schema. Bug gefixt: Template-Parse-Fehler [deutsche „…"-Anführungszeichen im title-Attribut → straight-quote terminierte das Attribut; entfernt]. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Sidebar „BRAUCHT DICH" oben]. v0.120.0→0.121.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3c ✅], CHANGELOG, HANDOFF §2. Offen: 3c-Rest/3d [3-TN-Karten-Reihe · Heute kommt/geht · Review · Annahme-Overlay · 620px-Drawer · QS-Modal · Takt/Team/Verwaltung/Terminal].)
Stand 2026-07-23 ~15:45 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3b ~0.5 h (07-23, PR #687, nach Merge von #686. Autonomer Redesign-Loop → Phase 3b: Fluss · Linie/Karte-Toggle [Branch frisch von main @ccf4ff4]. Fluss-Screen [orders] Sicht-Umschaltung „Fluss · Risiko" → „Linie · Karte · Risiko": Linie = 5-Stationen-Pipeline [bestehend], Karte = bestehende OccupancyComponent eingebettet [Selektor app-occupancy, Halle/Buchten + Hof/Parkplätze, Umparken per Drag&Drop + Park-Dialog], Risiko = Timeline [bestehend]; Hinweiszeile je Sicht. Entscheidung [Einfachheit/Reuse]: Karte NICHT neu gebaut — vorhandene self-contained Belegungs-Fläche eingebettet [kein Zirkel-Import, occupancy importiert orders nicht]; „Entscheiden"-Spalte bleibt in allen Sichten rechts [Fluss-Karte + Entscheiden = Spec-Layout]. Tab-Enum 'fluss'|'karte'|'risiko'. Reiner Client, kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Toggle Linie/Karte/Risiko, Karte-Grid + Drag&Drop-Hinweis + Entscheiden-Spalte]. v0.119.0→0.120.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 3b ✅], WORKSPACES.md, CHANGELOG, HANDOFF §2. Offen: 3c+ [inline-Auswahl-Panel · 620px-Drawer · QS-Modal · Lage/Takt/Team/Verwaltung/Terminal-Screens].)
Stand 2026-07-23 ~15:20 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase2b ~0.4 h (07-23, PR #686, nach Merge von #685. „Next; weiter mit PR und merge bis der Design-Umbau komplett fertig ist" [stehende Autorisierung: Redesign-Phasen autonom bauen→PR→merge bis OP-REDESIGN-1 fertig] → Phase 2b: True-North-Strip im Header [Branch frisch von main @01e7c5c]. Die 3 True-North-Leitfragen immer sichtbar in der Shell-Kopfzeile [shell.component.ts trueNorth-computed + Header-Strip]: „Auslastung X % · N Fzg · alle verortet / N ohne Standort · frei ‹Leistung›". Rein aus Live-Insights abgeleitet [insights().auslastungsQuote = Engpass der Gruppen MA/Buchten 0..1→%, .kapazitaet erste machbare, aktiveAuftraege().length, ohneStandortCount()] — kein neuer State/Server. Fehlende Ortung rot [Warnung, Label-getrennt]. Ab lg-Breite [schmale Terminals: ausgeblendet]. Entscheidung: always-on True-North-Antwort in die Shell [direkter True-North-Treffer aus vorhandenen Signalen]; die strukturelle Rail→62px-Top-Tab-Bar + monochrome Ort-Chips bleiben ein eigener größerer Schnitt [gruppierte Rail liefert 4-Orte-IA schon Modernist; Big-Bang-Shell-Rewrite unnötig riskant]. Reiner Client, kein Server/DTO/Schema. Verifiziert: No-Hex + tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Header „… · 0 Fzg · alle verortet · …"]. v0.118.0→0.119.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 2b ✅], CHANGELOG, HANDOFF §2. Offen: Phase 3b+ [Fluss Linie/Karte+Panel · Lage/Takt/Team/Verwaltung/Terminal-Screens · optional Top-Tab-Bar].)
Stand 2026-07-23 ~14:55 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase3a ~0.8 h (07-23, PR #685, nach Merge von #684. „Next" → Phase 3a: Fluss · „Entscheiden"-Spalte [Branch frisch von main @0368f66]. Konzeptionelle Mitte des Redesigns gebaut — „System entscheidet, Mensch bestätigt". Neue geteilte EntscheidenComponent [entscheiden.component.ts], rechte Spalte 360px [xl+] auf dem Fluss-Screen [orders.component, Template in flex-Row gewrappt]. Sammelt nur Live-Signale [svc.klaerfaelle/konflikte/ohneStandort/vorschlaege, KEINE Fixtures — Client-CLAUDE-Regel] zu Vorschlagskarten: 3px-Topline nach Ton [danger=--tk-red Klärfall/Notfall/Termin · warn=color-mix(--tk-red 45%) Ortung · idee=--tk-line Vorschlag], Typ-Label VERSAL, Titel/Body, opt. „Vorschlag"-Block [Tinte-Kante], „✓ So machen" [primär --tk-brand] / „Später", Leer „Alles im Takt.". Aktion ehrlich: „So machen" wendet echte Mutation an [vorschlagVorziehen bei Typ vorziehen] bzw. springt in die zuständige Ansicht [Klärung/Konflikt/Ortung/Idee]; „Später" blendet je Sitzung aus [kommt bei neuer Ableitung wieder]. Entscheidung: Entscheiden-Ablage zuerst [größter Konzept-/True-North-Hebel, aus vorhandenen Signalen ableitbar, kein Server-Change]; Linie/Karte-Toggle, Auswahl-Panel, 620px-Drawer, QS-Modal bewusst Phase 3b+. Reiner Client, kein Server/DTO/Schema/Migration. Verifiziert: No-Hex [nur --tk-*/color-mix] + tsc -p tsconfig.app.json + ng build prod [16 s] grün + Live-Screenshot [Fluss-Linie 5 Stationen + ENTSCHEIDEN-Spalte, Leer-Zustand]. v0.117.0→0.118.0 MINOR. Doku [goldene Regel]: COMPONENTS.md [Entscheiden-Pattern], WORKSPACES.md [§4 Fluss], ops/OP-REDESIGN-1 [Phase 3a ✅], CHANGELOG, HANDOFF §2. Offen: Phase 3b+ [Linie/Karte+D&D · Auswahl-Panel · Auftrag-Drawer · QS-Modal · übrige Ort-Screens].)
Stand 2026-07-23 ~14:30 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase2 ~0.6 h (07-23, PR #684, nach Merge von #683. „merge und phase 2" → Phase 2: Informationsarchitektur auf 4 „Orte" [Branch frisch von main @bdcfa5b]. Navigation von „Kern-Loop/Weitere"-Clustern auf Lage · Fluss · Takt · Team + Verwaltung [admin-gegated] + Werkstatt-Terminal umgestellt [shell.component.ts navGroups()]. Zuordnung [nichts verwaist]: Lage=Hof-Radar·Annahme·Belegung·Tafel; Fluss=Fluss&Risiko·Konflikte&Klärfälle·Vorschläge·Quality-Check; Takt=Planung/Gantt; Team=Mitarbeiter·Prozesse; Verwaltung=Administration·Kosten; Terminal=Meine Arbeit. Alias-Routen /lage /fluss /takt /team /verwaltung /terminal [app.routes.ts]; alle bestehenden Workspace-Routen + Deep-Links intakt, Views unverändert. True-North-Badges [Konflikte/Klärfälle/QM/Vorschläge] erhalten. Entscheidung: additive IA-Umstellung ohne Screen-Umbau [Rail-Rendering bleibt, nur Gruppierung/Labels + Routen] — kleinstmögliche rückwärtskompatible Änderung [Einfachheit]; die 62px-Top-Tab-Bar-Optik + monochrome Ort-Chips + zusammengeführte Ort-Screens [Entscheiden-Spalte, Ink-Gantt, Drawer, Overlays] bewusst Phase 2b/3. Verifiziert: tsc -p tsconfig.app.json + ng build prod grün + Live-Screenshot [Header „Lage · Hof-Radar", Rail-Gruppen = 4 Orte]. Reiner Client [Shell-Nav + Routen], kein Server/DTO/Schema. v0.116.0→0.117.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 2 Nav/IA ✅], design/CLAUDE.md, CHANGELOG, HANDOFF §2. Offen: Phase 2b/3 [Tab-Bar-Optik + Ort-Screens].)
Stand 2026-07-23 ~13:30 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase1 ~0.9 h (07-23, PR #683, nach Merge von #681. „Dark-Mode mitgenerieren" [Antwort auf die Phase-1-Theming-Frage] → Phase 1: Token-Layer (Modernist) [Branch frisch von main @d8b6160]. --tk-*-Token-Layer auf Modernist umgestellt, LIGHT-first: tokens.json trägt jetzt den Hell-Wert als Basis-$value [→ :root, Default], den Dunkel-Wert unter $extensions.taktano.dark → generiert nach [data-theme="dark"] [+ prefers-color-scheme:dark für „system"]. Dark-Mode mitgeneriert [PO 07-23] → beide Themes aus einer Quelle, OP-R9-9 gewahrt, nur die Basis-Achse invertiert [dark-first → light-first]. Modernist-Identität: Marke = Rot #ec3013 [--tk-brand/--tk-red; Cyan nicht mehr Marke], BG #f3f2f2/Text #201e1d, alle --tk-radius-* = 0, Font Archivo für UI+Daten [Zahlen/Zeiten via .font-mono + tabular-nums — löst „Mono für Daten" ab], kein Ambient-Glow [--tk-backdrop-glow: none], Glow-Dots aus. Funktionale Status-/Gantt-Hues erhalten, auf Hell-Grund getunt [bestehende Hell-Werte → Basis, Dunkel-Werte → Override; tuned Paare erhalten — kein Neu-Erfinden]. Mechanik: build.mjs invertiert [Light-Basis/Dark-Override, Extension-Key .light→.dark]; ThemeService [System-Achse prefers-color-scheme:dark, isDark/isLight neu]; index.html [Archivo statt Space Grotesk/JetBrains, theme-color/Favicon #ec3013, Favicon radius 0]; styles.css [color-scheme invertiert + .font-mono{tabular-nums}]. Entscheidungen: [a] Invertieren statt Default-Flag [light ist die ehrliche Basis für eine Light-Marke]; [b] tuned Hue-Paare nur getauscht, nicht neu erfunden [Einfachheit]; [c] Warnungs-Entkopplung [nicht-rein-farblich] bewusst in die Komponenten-Phasen verschoben. Verifiziert: npm run tokens:check [98 Tokens, round-trip] + No-Hex + tsc -p tsconfig.app.json + ng build prod [655 kB initial] grün + Live-Screenshot [Body-BG rgb(243,242,242), Archivo, radius 0, rote Uhr/Alerts — Modernist rendert]. Reiner Token-/Theming-Change, kein Server/DTO/Schema/Migration. v0.115.0→0.116.0 MINOR. Doku: ops/OP-REDESIGN-1 [Phase 1 ✅], design/CLAUDE.md [Vertrag aktualisiert, abgelöste Regeln markiert], DESIGN_TOKENS.md [Phase-1-Banner], CHANGELOG, HANDOFF §2. Offen: Phase 2 = Shell/IA auf 4 Orte [+ Workspace-Signaturfarben, Glass/Glow-Reste, Assistent-FAB-Cyan, Wordmark-Assets].)
Stand 2026-07-23 ~12:55 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-redesign-flusslinie-phase0 ~0.6 h (07-23, PR #681, nach Merge von #680. „Implement: Taktano Neu v2 – Flusslinie" [Claude-Design-Import via Handoff-Zip] → in Anwendung der 07-23-Konvention [#680] Konflikte des neuen Design-Systems „Modernist" gegen den bestehenden Vertrag gesammelt und dem PO zur Entscheidung vorgelegt [AskUserQuestion]. PO-Entscheidung: [1] voller Ersatz von Design-System UND Marke, phasiert [Tokens→Shell/IA→Screens, je grün+mergebar]; [2] „Rot nur für Warnungen" → Taktano-lokale, dokumentierte Ausnahme [drkv-Default + Schwester-Repos MED-/SERA- bleiben rot-für-Warnung]. Phase 0 gebaut [docs-only, kein Code/Schema, keine visuelle Regression]: Entscheidung + Phasen-Roadmap + bewusste Konflikt-Auflösungen [Cyan→Rot #ec3013 Primär/Marke · Dark→Light #f3f2f2/#201e1d · 12 Workspaces→4 Orte Lage/Fluss/Takt/Team+Verwaltung+Werkstatt-Terminal · Radius-Skala→radius 0 · Space Grotesk/JetBrains→Archivo · Glass/Glow→flache 2px-Linien] als ops/OP-REDESIGN-1.md [OP-REDESIGN-1, status offen]; Root-CLAUDE.md §Design-Prinzipien [Taktano-lokale Rot-Ausnahme]; design/CLAUDE.md [Umbau-Banner + neuer Brand-Kopf, bisherige Regeln „gültig bis Phase X ersetzt"]. Konsequenz: Warnungen brauchen fortan nicht-rein-farbliche Kennzeichnung. Verifiziert: doc-consistency [--strict] + gen-ops [Offene-Punkte regeneriert] grün; kein tsc/build nötig [docs-only]. v0.114.0→0.115.0 MINOR [neue Produktrichtung]. Doku: ops/OP-REDESIGN-1, Root-/design-CLAUDE.md, Offene-Punkte, CHANGELOG, HANDOFF §2. Nächster Schritt: Phase 1 = Token-Layer [Modernist] als eigener PR.)
Stand 2026-07-23 ~12:05 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-konvention-designsystem ~0.1 h (07-23, PR #680, nach Merge von #679. Stehende PO-Vorgabe „bei Übernahme eines neuen Design-Systems aus Claude Design: bei Diskrepanzen/Konflikten mit früheren Entscheidungen nachfragen" als verbindliche Governance-Regel in design/CLAUDE.md [§Non-negotiable design rules] festgehalten — ergänzt die Root-Rückfragen-Regel um den Design-System-Fall [Marken-/Farbregeln, --tk-* Tokens, Radius, Komponenten-Rezepte etc.]. Everything-as-Code: Entscheidung als .md-Commit statt nur Chat. Docs-only, kein Code, APP_VERSION unverändert.)
Stand 2026-07-23 ~11:20 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-edit-rollout-abschluss ~0.5 h (07-23, PR #679, nach Merge von #678. „continue with next slice, and merge until all slices are done" → letzter OP-EDIT-1-Editor: Leistungen/Teilschritte [Branch frisch von main @0a8d41e]. Architektur-Befund: der Prozesse-Editor [processes.component.ts] ist durchgängig sofort-anwendend inline — jede Feld-Änderung [Toggle/Blur/Chip/Prozess-Komposition via setLeistungProzess] feuert sofort teilschritt.update/leistung.update mit Ein-Feld-Patch, KEIN Formular/Speichern/baseRev. → Slice A [rev-Optimistik] architektonisch N/A: kein last-write-wins-auf-Save-Fenster [jede Mutation atomar + broadcastet]; rev/baseRev je Feld wäre wirkungslos [Client hat nach jedem Broadcast frische Version]. Force-Fit bewusst abgelehnt [Leitprinzip Einfachheit — keine Komplexität ohne True-North-Nutzen]. Gebaut — Slice B adaptiert: editEnter('prozesse','config') [Constructor] + editLeave [DestroyRef.onDestroy] → Ko-Bearbeiter-Banner oben im Workspace „wird gerade auch bearbeitet — Änderungen wirken sofort für alle, bitte abstimmen" [generische Präsenz-Infra, KEIN Server-Change]; adressiert das reale Stomp-Risiko der geteilten taktungs-harten Live-Konfig. Reiner Client, kein Server/DTO/Migration. OP-EDIT-1-Rollout über ALLE Stammdaten-Editoren KOMPLETT [Arbeitsplatz-Referenz · Schicht · Mitarbeiter · Taxonomie mit A+B; Leistungen/Teilschritte mit B, A N/A] → ops/OP-EDIT-1 status erledigt + Offene-Punkte regeneriert. Verifiziert: tsc [Server + Client] + No-Hex + No-Console grün [ng build in CI, ubuntu-latest]. v0.113.0→0.114.0 MINOR. Doku: ops/OP-EDIT-1 [KOMPLETT ✅/erledigt], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Stand 2026-07-23 ~11:16 UTC.
Session taktano-2026-07-23-next-steps-8vmq5d-edit-rollout-taxonomie ~0.7 h (07-23, PR #678, nach Merge von #677. „OP-EDIT-1 Rest weiter" [Branch frisch von main @330b8f8]. OP-EDIT-1-Muster auf den inline Taxonomie-Editor ausgerollt [administration.component.ts, „Umbenennen"]. Slice A [rev-Optimistik]: TaxonomyValue.rev [monoton, serverseitig]; taxonomie.update prüft baseRev via revVeraltet → veraltete Basis abgelehnt [edit.result{ok:false}], Erfolg quittiert {ok:true}; nutzt bestehenden Kern [test:edit]. Slice B [Präsenz]: generische editEnter('taxonomie',id)/editLeave [KEIN Server-Change]; ✎-Live-Badge in der Liste. Inline-Konflikt-UX [angepasst an den Nicht-Modal-Editor, anders als Arbeitsplatz/Schicht/Mitarbeiter]: bei Ablehnung schließt der Inline-Edit + Banner oben in der Taxonomien-Karte; Liste zeigt Gewinner-Stand via Broadcast, erneutes „Umbenennen" holt frische rev. Entscheidungen: (a) Aktiv-Quick-Toggle bewusst OHNE baseRev [Ein-Feld-Aktion, analog schichtToggle]; (b) alle Schließ-Pfade [OK-Erfolg/Abbrechen/Konflikt] auf EINE schliesseTaxEdit()-Methode [räumt Präsenz]; (c) rev optional → keine Migration. Damit OP-EDIT-1-Rollout auf 4/5 Editor-Gruppen [Arbeitsplatz-Referenz · Schicht · Mitarbeiter · Taxonomien]; Rest: Leistungen/Teilschritte. Verifiziert: tsc [Server + Client] + test:edit/do-migrations + No-Hex + No-Console + Persistenz-Gate grün. v0.112.0→0.113.0 MINOR. CI jetzt auf GitHub-gehosteten Runnern [CI_RUNNER=ubuntu-latest, gesetzt nach dem self-hosted-Runner-Ausfall bei #677 — der Lauf, der self-hosted über 6 Versuche/Stunden hing, lief auf ubuntu-latest in ~1 Min grün]. Doku: ops/OP-EDIT-1 [Taxonomie-Rollout ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Stand 2026-07-23 ~10:54 UTC.
Session taktano-2026-07-22-next-steps-8vmq5d-edit-rollout-mitarbeiter ~0.6 h (07-22, PR #677, nach Merge von #676. „OP-EDIT-1 Rest" [Branch frisch von main @c15eb94]. OP-EDIT-1-Muster auf den Mitarbeiter-Editor ausgerollt [staff.component.ts, Bearbeiten-Dialog]. Slice A [rev-Optimistik]: Mitarbeiter.rev [monoton, serverseitig]; employee.update prüft baseRev via revVeraltet → veraltete Basis abgelehnt [edit.result{ok:false}, Dialog bleibt offen mit Konflikt-Hinweis], Erfolg quittiert {ok:true} → schließt; nutzt bestehenden Kern [test:edit]. Slice B [Präsenz]: generische editEnter('mitarbeiter',id)/editLeave [KEIN Server-Change]; Warn-Banner im Dialog + ✎-Live-Badge in der Liste. Slice C entfällt: schon view-first [Karte + „✎ Bearbeiten"-Knopf]. Entscheidungen: (a) rev guardt gezielt das Stammdaten-Speichern — additive Sub-Aktionen [Skill/Ausbildung/Abwesenheit] heben rev NICHT [Granularität „je Stammdaten-Save", kein Fehl-Konflikt beim parallelen Skill-Zuweisen]; (b) alle 3 Dialog-Schließpfade [Backdrop/×/Schließen] auf EINE schliesseBearbeiten()-Methode zentralisiert [räumt Präsenz zuverlässig]; (c) rev optional → keine Migration [rückwärtskompatibel]. Verifiziert: tsc [Server + Client via tsc -p tsconfig.app.json, da lokaler Node < Angular-CLI-Minimum] + test:edit/do-migrations + No-Hex + No-Console + Persistenz-Gate grün [ng build in CI]; Live-Zwei-Fenster-Konflikt bräuchte DO. v0.111.0→0.112.0 MINOR. Doku: ops/OP-EDIT-1 [Mitarbeiter-Rollout ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer. Rollout-Rest offen: Taxonomien · Leistungen/Teilschritte.)
Stand 2026-07-22 ~17:42 UTC.
Session taktano-2026-07-21-next-steps-8vmq5d-edit-rollout-schicht ~0.7 h (07-21, PR #676, nach Merge von #675. „OP-EDIT-1 Editor-Rollout" [Branch frisch von main @d882249]. OP-EDIT-1-Muster auf den Schicht-Editor ausgerollt [Referenz war der Arbeitsplatz-Editor]. Slice A [rev-Optimistik]: SchichtKatalog.rev [monoton, serverseitig]; schicht.update prüft baseRev via revVeraltet → veraltete Basis abgelehnt [edit.result{ok:false}, Formular bleibt offen mit Konflikt-Hinweis], Erfolg quittiert {ok:true} → schließt; nutzt bestehenden Kern revVeraltet/naechsteRev [test:edit]. Slice B [Präsenz]: generische editEnter('schicht',id)/editLeave [bereich-agnostische editPraesenz-Infra → KEIN Server-Change]; Warn-Banner „wird gerade auch bearbeitet von …" + ✎-Live-Badge in der Liste. Slice C entfällt: Schicht-Editor schon view-first [Liste read-only + „Bearbeiten"-Knopf]. Entscheidungen: rev optional → keine Migration [rückwärtskompatibel]; quick-Toggle „aktiv" bewusst ohne baseRev [Ein-Feld-Aktion]; Quittungs-Effekt um schicht-Zweig erweitert statt dupliziert. Verifiziert: tsc + test:edit/do-migrations/bereitschaft/ausfall/schicht-reserve + ng build + No-Hex + No-Console + Persistenz-Gate grün; Live-Zwei-Fenster-Konflikt bräuchte DO. v0.110.0→0.111.0 MINOR. Doku: ops/OP-EDIT-1 [Schicht-Rollout ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer. Rollout-Rest offen: Taxonomien · Mitarbeiter · Leistungen/Teilschritte.)
Stand 2026-07-20 ~16:20 UTC.
Session taktano-2026-07-20-next-steps-8vmq5d-aufraeum-checkliste ~0.5 h (07-20, PR #675, nach Merge von #674. „OP-SCHICHT-1 Aufräum-Checkliste" [Branch frisch von main @22e5276]. Slice 4 gebaut — Schicht-Ende-Aufräum-Checkliste: konsolidierte Überblick-Karte „🧹 Schicht-Ende-Aufräumen", die vor Feierabend alle offenen Nebenaufgaben an EINER Stelle zeigt. Reine Client-Komposition [D-2, kein Server-Change]: aggregiert drei bereits gebroadcastete Signale — 📍 ohne Standort [ohneStandortCount, Link zu Konflikte], 🌙 hochwertig nicht in der Halle [nachtHalle.reste, Slice 2/3], 🅿️ Umparken offen [umparkAuftraege]. Summe „⚠ N offen"/„✓ bereit fürs Schichtende". Entscheidung [Einfachheit/D-2]: kein Abhaken/keine Persistenz — die offene Arbeit IST der Punkt, jede Zeile klärt sich automatisch, sobald die Lücke zu ist [kein neuer Zustand nötig]; Konsolidierung über vorhandene Signale statt neuer Server-Ableitung. Terrain vorab geprüft: alle drei Signale schon client-seitig da → rein Client. Verifiziert: ng build [Overview +~0,4 kB] + No-Hex + No-Console grün; Live-Zahlen bräuchten DO. v0.109.0→0.110.0 MINOR. Doku: ops/OP-SCHICHT-1 [Slice 4 ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer. Damit sichtbare Schicht-Ende-Sicht komplett [Reserve · Nacht-Halle · Konfig · Checkliste]; offen: Nacht-Zustand als Scheduler-Planungsziel.)
Stand 2026-07-20 ~16:15 UTC.
Session taktano-2026-07-20-next-steps-8vmq5d-nacht-halle-konfig ~0.8 h (07-20, PR #674, nach Merge von #673. „ja" → OP-SCHICHT-1 Slice 3 [Branch frisch von main @b4d8b6b]. Nacht-Halle-Konfig gebaut: Schwelle „hochwertig" + Nacht-Hallen-Buchten admin-editierbar — schließt die in Slice 2 offen gelassene Konfig-Lücke. Modell: optionales persistiertes nachtHalleKonfig {abGueteklasse 1–3; buchtIds[]} [PersistedState + onStart; fehlend = Default Schwelle 2 → keine Migration]. Reine Helfer [insights.ts]: nachtHalleKonfigEffektiv [Klemmung] + istNachtHalleSlot [buchtIds-Allowlist ODER Indoor-Fallback wenn leer] — testbar. DO: Konfig in der Insight-Projektion angewandt [istNachtHalleSlot je Fahrzeug-Bucht + Schwelle], im State-DTO emittiert; Admin-Message nachtHalleKonfig.update [istKostenAdmin-gated, validiert/klemmt/filtert auf existierende Bucht-IDs]. UI: Karte „🌙 Nacht-Halle (Schicht-Ende)" im Administration-Workspace [Güteklasse-Select + Bucht-Chips, sofort-anwendend]. Entscheidungen: ein zentrales Konfig-Objekt [nicht über Buchten verstreut]; buchtIds leer = Fallback [Bestand unverändert]; sofort-anwendend ohne Speichern-Button [wie schichtToggle/autoOptAktiv]. Verifiziert: tsc + test:insights [erweitert: Klemmung, Allowlist/Fallback] + test:do-migrations [onStart geändert] + assistant-tools + operativ + ng build + No-Hex + No-Console + Persistenz-Gate grün; Live-Klick bräuchte DO. v0.108.0→0.109.0 MINOR. Doku: ops/OP-SCHICHT-1 [Slice 3 ✅], Lastenheft §11-Anker, Tests.md, CHANGELOG, HANDOFF §2/Footer. Offen: Aufräum-Checkliste, Nacht-Zustand als Planungsziel.)
Stand 2026-07-20 ~15:10 UTC.
Session taktano-2026-07-20-next-steps-8vmq5d-nacht-halle ~0.8 h (07-20, PR #673, nach Merge von #672. „ja" → OP-SCHICHT-1 Slice 2 [Branch frisch von main @a8ecdc8]. Nacht-Halle-Check gebaut: abgeleiteter Schicht-Ende-Check — welche hochwertigen Fahrzeuge [Güteklasse ≥ Schwelle, Default 2] stehen zum Schichtende noch draußen statt in der Halle? Terrain vorab gesichtet [Gueteklasse 1–3, „Halle/indoor" = INDOOR_TYP_RE auf Bucht-Typ-Label — bestehende Erkennung]. Rein abgeleitet [D-2, insights.ts]: neue Funktion nachtHalleReste [aktive Aufträge, GK≥Schwelle, Standort keine Indoor-Bucht oder unbekannt → Rest, dringlichste zuerst, mit Grund]; InsightSlot.indoor + InsightAuftrag.gueteklasse [beide optional, rückwärtskompatibel]; Leitstand projiziert indoor via INDOOR_TYP_RE auf s.typLabel + gueteklasse, Insights-DTO um nachtHalle erweitert. UI: Überblick-Karte „🌙 Nacht-Halle" neben Standorte [grün „alle drinnen"/amber „N draußen" + Liste; Amber=Hinweis, kein Rot]. Entscheidungen [Einfachheit/Ehrlichkeit]: kein neues Modell/Migration [nur abgeleitet über Güteklasse + Indoor-Regex]; Schwelle-Default 2 als Funktions-Parameter; Konfigurierbarkeit [Schwelle + dedizierte Nacht-Hallen-Buchten] bewusst Folge-Slice [braucht Konfig-Speicher] — ehrlich offen ausgewiesen statt halb gebaut. Verifiziert: tsc + test:insights [erweitert: Schwelle 2 vs. 3, drinnen/draußen/Standard/unbekannt/abgeschlossen] + assistant-tools/matching + ng build + No-Hex + No-Console + Persistenz-Gate grün; Live-Karte bräuchte DO. v0.107.0→0.108.0 MINOR. Doku: ops/OP-SCHICHT-1 [Slice 2 ✅], Lastenheft §11-Anker, Tests.md, CHANGELOG, HANDOFF §2/Footer. Offen: Konfig [Schwelle/Nacht-Halle], Aufräum-Checkliste, Nacht-Zustand als Planungsziel.)
Stand 2026-07-20 ~10:05 UTC.
Session taktano-2026-07-20-next-steps-8vmq5d-schicht-reserve ~1.0 h (07-20, PR #672, nach Merge von #671. „erkläre OP-SCHICHT-1" → erklärt, dann „ja - reserviere fürs Schichtende-Aufräumen 30min [konfigurierbar für Admin pro Schicht]; zeige das im Gantt an" [Branch frisch von main @3151802]. OP-SCHICHT-1 Slice 1 gebaut über den ganzen heterogenen Stack. Terrain vorab per Explore-Agent kartiert [Schicht-Modell · Scheduler-Verfügbarkeit · Editor · Gantt]. Feld aufraeumReserveMin auf SchichtKatalog [Default 30, admin-editierbar pro Schicht, 0…120]. Scheduler-Clou: Abzug an EINER Stelle [mitarbeiterAvailability, nur am spätesten Slot = Schichtende, Pausen-Slots bleiben voll] → weil der CP-SAT-Solver die vorab expandierten avail-Intervalle konsumiert [problem.ts→model.py], wirkt es paritätisch auf TS-Scheduler UND Python-Solver — TS-only. Gantt: grünes Band art:'aufraeumen' [ausfall.ts + AUSFALL_COLOR/AUSFALL_LABEL, --tk-green]. Editor: Number-Input 0…120 im Administration-Workspace + „🧹 X min"-Anzeige. Server-Plumbing: SchichtPatch/Handler/DTO + klemmeReserve [0…120, gerundet], DTO emittiert effektiven Wert inkl. Default. Entscheidungen: Abzug nur am spätesten Slot [sonst Vormittags-Slot fälschlich gekürzt]; Reserve uniform auf alle Schicht-Arten inkl. Überlauf; Default 30 via ?? 30 [keine Migration, optionales Feld; explizite 0 respektiert]. Blast-Radius geprüft: Default 30 verschiebt Makespans → betroffene Fixtures test:ausfall/test:bereitschaft explizit auf aufraeumReserveMin:0 gepinnt; volle Server-Suite [26 Tests] grün. Neuer Selbsttest test:schicht-reserve [14 Prüfungen, CI-Gate]. Verifiziert: tsc + alle Server-Tests + ng build + No-Hex + No-Console + Persistenz-Gate grün; Live-Gantt-Klick bräuchte DO. v0.106.0→0.107.0 MINOR. Doku: ops/OP-SCHICHT-1 [Slice 1 ✅], Lastenheft §11-Anker, Tests.md, ci.yml, CHANGELOG, HANDOFF §2/Footer. Offen: hochwertige Fahrzeuge→Halle, Aufräum-Checkliste, Nacht-Zustand als Planungsziel.)
Stand 2026-07-20 ~09:10 UTC.
Session taktano-2026-07-19-next-steps-8vmq5d-umpark3-skill ~0.5 h (07-19, PR #671, nach Merge von #670. „OP-UMPARK-3 Verfeinerung" [Branch frisch von main @eb3b158]. Umpark-Empfehlung nach Skill-Eignung gewichten — Slice 1 rankte nur nach Bucht-Typ + Kapazität; jetzt zuerst nach Skill-Eignung [Buchten, die den vom aktuellen Schritt geforderten Skill anbieten, Arbeitsplatz.skillIds ⊇ {Skill}], „🎯 teilschritteKatalog.benoetigteSkillId [Instanz→teilschrittId], Bucht-Skills aus arbeitsplaetze().skillIds — beide schon im State, kein Server/DTO. Zwei-Stufen-Sort [Skill, dann Kapazität] → nie leere Liste [Fallback Typ-Empfehlung]. Entscheidungen [Einfachheit/Ehrlichkeit]: von 3 OP-Faktoren nur Skill [einziger mit real matchbaren Daten + Scheduler-Relevanz]; Ausstattung nicht gewichtet [kein Schritt-Anforderungsfeld]; Nähe/G-4 nicht berechnet [kein Standort-/Zonen-Modell → keine erfundene Distanz] — beide als Folge-OP dokumentiert. Verifiziert: ng build [kein Budget-Warning] + No-Hex grün; Klick-Durchlauf bräuchte Live-DO. v0.105.0→0.106.0 MINOR. Doku: ops/OP-UMPARK-3 [Slice 2 ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-step-backstop ~0.5 h (07-19, PR #670, nach Merge von #669. „Next" → empfohlene OP: OP-STEP-1 Slice 4 / Server-Backstop [Branch frisch von main @e5b7984]. Das Sequenz-Gating aus Slice 1 galt nur im Client; jetzt lehnt der Server-Handler teilschritt.aktion 'erledigen' out-of-order-Abschluss ebenfalls ab [Defense-in-Depth]. Gebaut: zwei reine, testbare Prädikate in server/src/operativ/auftrag.ts — istOffenerSchritt + istAktuellerSchritt(auftrag, instanzId) [spiegelt die Client-Frontier-Logik: laufend/pausiert immer aktuell, geplant nur am Front = früheste Startzeit der offenen; echte Parallel-Schritte teilen sie]; Gate im Handler vor dem Doku-/Foto-Gate [Sequenz zuerst, PO-Entscheid]. Befund: kein Self-Test nutzt den Message-Handler out-of-order → regressionssicher. Entscheidungen: nur erledigen gaten, nicht starten [Parallelität/Vorziehen bleiben]; Startzeit-Frontier statt expliziter G-1-Abhängigkeit im DTO [einfachste tragfähige Näherung, deckungsgleich mit Client]. Rein Server, keine DTO-/Schema-Änderung. Verifiziert: neuer Selbsttest test:step-gate [20 Prüfungen, als CI-Gate im Server-Job] + tsc --noEmit grün. OP-STEP-1 damit erledigt [alle 4 Slices], offen nur bedingte „feinere Parallelität". v0.104.1→0.105.0 MINOR. Doku: ops/OP-STEP-1 [Slice 4 ✅, Status erledigt], Lastenheft §11-Anker, Tests.md, ci.yml, CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-umpark4 ~0.5 h (07-19, nach Merge von #668. „OP-UMPARK-4" (Klärungs-OP). Ist-Bestandsaufnahme per Explore-Agent: 8 Auslöse-Stellen von „Umparken" (Belegung: 📍 Standort-Zuweisung/Chip/🅿️ Freiräumen/Drag&Drop; Konflikte: 📍 Standort zuweisen/📍 Umparken; Detail-Panel: 📍 Umparken; Meine Arbeit: ✓ Angekommen). Kern-Erkenntnis: Grundgerüst bereits sauber [1 ReparkService + 1 global gemountetes Modal], Verteilung kontextrichtig → bleibt bewusst. Entscheidungen [PO, im OP festgeschrieben]: 2 sprechende Begriffe [„Standort zuweisen" vs. „Umparken"], einziger Ausreißer „📍 Standort" [Belegung] → „📍 Standort zuweisen" angeglichen; 2 Direkt-Pfade [Drag&Drop + Freiräumen] bleiben bewusst als Komfort, übrige 6 über gemeinsames Modal; Sichtbarkeitsregeln = Ist-Referenztabelle im OP. Rein Wortlaut-Angleich [occupancy.component.ts] + Doku, keine Verhaltensänderung. AskUserQuestion für den Umfang scheiterte am Permission-Stream → empfohlene Variante [Wortlaut+Referenz] gewählt, PO kann bei PR-Review umlenken. Verifiziert: ng build [649,4 kB] + No-Hex + No-Console grün. v0.104.0→0.104.1 PATCH. Doku: ops/OP-UMPARK-4 [erledigt], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-umpark3 ~0.6 h (07-19, PR #668, nach Merge von #667. „OP-UMPARK-3". Slice 1 gebaut [Branch frisch von main @8b15e9d]: Umparken empfiehlt passende Buchten nach aktuellem Schritt. Repark-Modal zeigt oben eine Empfehlungs-Gruppe — Buchten vom geforderten Bucht-Typ des aktuellen/nächsten Schritts mit freier Kapazität [freieste zuerst, Begründung „✅ Empfohlen für ng build [649,2 kB, kein Budget-Warning] + No-Hex + No-Console grün; Klick-Durchlauf bräuchte Live-DO. v0.103.0→0.104.0 MINOR. Doku: ops/OP-UMPARK-3 [Slice 1 ✅], Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-step3 ~0.7 h (07-19, nach Merge von #666. „dann Slice 3". OP-STEP-1 Slice 3 gebaut [Branch frisch von main @16dcf30]: Foto-Vorgaben je Teilschritt als Stammdaten pflegen — schließt die Slice-2-Lücke [„nach Vorgabe" hatte oft keine Daten]. Im Prozesse-Workspace je Teilschritt Pflicht-Foto-Perspektiven + Mindestanzahl editierbar [datalist-Vorschläge Front/Heck/… + freier String G-1, Anzahl≥1, Hinzufügen/Entfernen] + Doku-Pflicht-Toggle → speist Abschluss-Checkliste [Slice 2]. Befund: Server nahm den Patch LÄNGST an [teilschritt.update → setzeTeilschrittFelder normalisiert fotoPflicht/dokuPflicht/dokuAspekte] und emittierte die Werte bereits im Katalog-DTO [buildProzessKatalog/buildTeilschrittKatalog] → rein Client: nur ProzessSchrittDTO-Felder + updateTeilschritt-Patch + Editor [processes.component.ts: fotoAdd/fotoSetAnzahl/fotoRemove, TeilschrittRow+zuRow] fehlten. Entscheidungen: Editor im Prozesse-Workspace [dort leben die Teilschritt-Stammdaten]; datalist statt hartem Enum [G-1]; Server-Normalisierung = Wahrheitsquelle; pro-Zeile eindeutige datalist-ID [kein Duplikat im @for]. Verifiziert: ng build [646,8 kB, processes-Chunk 27,7→31,5, Initial unverändert] + No-Hex + No-Console grün; Klick-Durchlauf bräuchte Live-DO. v0.102.0→0.103.0 MINOR. Damit OP-STEP-1 Slices 1–3 gebaut, offen nur optionaler Server-Backstop. Doku: ops/OP-STEP-1 [Slice 3 ✅], CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-step2 ~0.6 h (07-19, PR #666, nach Merge von #662. „Slice 2, dann Slice 3". OP-STEP-1 Slice 2 gebaut [Branch frisch von main @a3908a3]: geführter Foto-/Doku-Abschluss — zweiter Teil des PO-Befunds. Abschluss-Dialog zeigt sprechende Restliste [abschlussReste(t): fehlende Pflicht-Foto-Perspektiven 📷 + Pflicht-Doku 📝, live] statt vagem „Fotos fehlen"; grün „✓ Alles erfasst" wenn komplett; „✓ Fertig" gesperrt bis dahin. Foto-Block-Überschrift „📷 Pflicht-Fotos [Vorgabe]". Leere Vorgabe klar benannt [ohneNachweisVorgabe] → Slice-3-Hook. Entscheidung: Restliste spiegelt exakt das bestehende Disabled-Gate — keine zweite Wahrheitsquelle. Reiner Client [auftrag-detail-panel.component.ts], kein Server/Schema. Verifiziert: ng build [646 kB, kein Budget-Warning] + No-Hex + No-Console grün; Klick-Durchlauf bräuchte Live-DO mit FOTOS-Binding. v0.101.0→0.102.0 MINOR. Doku: ops/OP-STEP-1 [Slice 2 ✅], CHANGELOG, HANDOFF §2/Footer. Offen: Slice 3 [Vorgabe-Pflege], Server-Backstop.)
Session taktano-2026-07-19-next-steps-8vmq5d-step1 ~0.9 h (07-19, nach Merge von #661. PO-Befund am Auftrag-Detail-Panel [Screenshot]: „nur der aktuelle Prozessschritt darf bearbeitet werden, und bei Abschluss müssen Fotos nach Vorgabe ergänzt werden — besser nutzbar machen?". Diagnose im Code verifiziert [kannSchrittErledigen erlaubte jeden offenen Schritt; Foto-Pflicht-Mechanik existiert, aber schwach/oft leer]. PO wählte via AskUserQuestion: „hart" + „erst Sequenz-Gating". OP-STEP-1 Slice 1 gebaut [Branch frisch von main @fa7a1b7]: nur der aktuelle Schritt fertigmeldbar + „▶ jetzt dran"; spätere gesperrt „🔒 kommt später — erst nach ng build [645 kB, kein Budget-Warning] grün; Klick-Durchlauf bräuchte Live-DO. v0.100.0→0.101.0 MINOR. Doku: ops/OP-STEP-1 + OP-UMPARK-3 + OP-UMPARK-4, Lastenheft §11-Anker, CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-19-next-steps-8vmq5d-edit1c ~0.8 h (07-19, PR #661, nach Merge von #660. „OP-EDIT-1 Slice C" → View-first: read-only Detailansicht + expliziter Bearbeiten-Schritt [Branch frisch von main @79e754e]. Dritter/letzter geplanter Baustein: Stammdaten öffnen zuerst read-only, Bearbeiten ist bewusst. Referenz am Arbeitsplatz-/Bucht-Editor: Liste öffnet über „Anzeigen" eine read-only Detailansicht [Kapazität, Status, Skills/Ausstattung als sprechende Namen, Sperren, rev]; „✎ Bearbeiten" erst von dort [→ Slice-B-Präsenz editEnter]; Abbrechen/Speichern kehrt in die Anzeige zurück. Synergie A+B: Präsenz-Warnung schon in der Anzeige, ✎-Live-Badge in der Liste. Entscheidungen: Detail als eigener Zustand ansichtId [Formular hat Vorrang: ansichtOffen = ansichtId && !formOffen]; Referenz zuerst am Arbeitsplatz-Editor [wo A+B leben], Rollout auf übrige Editoren [Taxonomien/Schichten/Mitarbeiter/Leistungen] = mechanische Folge, bleibt offen; Löschen bleibt eigene Listen-Aktion. Reiner Client, kein Server/Schema/Solver. Verifiziert: ng build [643,8 kB, admin-Chunk 39→44 kB, Initial dank OP-PERF-1 unverändert] + No-Hex [/60-Opacity-Muster wie Bestand] + No-Console grün; Klick-Durchlauf bräuchte Live-DO. v0.99.0→0.100.0 MINOR. Damit OP-EDIT-1 A/B/C gebaut [OP offen nur noch für Editor-Rollout]. Doku: ops/OP-EDIT-1 [Slice C ✅ Referenz], CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-18-next-steps-8vmq5d-edit1b ~0.9 h (07-18, nach Merge von #659. „OP-EDIT-1 Slice B" → Edit-Präsenz — Warnung bei gleichzeitigem Bearbeiten [Branch frisch von main @d92fa2c]. Zweite Hälfte der PO-Anforderung [nach Slice A]: warnen, wenn ein anderes Fenster/Benutzer denselben Datensatz bearbeitet. Mechanik: Server führt transiente editPraesenz-Map je Verbindung → State-Feld bearbeitungen: EditPraesenzDTO[] [live gebroadcastet, nicht persistiert]; Client meldet edit.enter/edit.leave mit stabiler fensterId [crypto.randomUUID, interim bis OP-AUTH-1]; Server räumt Präsenz bei edit.leave UND onClose [verwaiste Sitzung]. Oranges Warn-Banner im Arbeitsplatz-Editor bei fremden Bearbeitern [live reaktiv]. Blockt nicht — Schreiben bleibt möglich, erster Speichervorgang gewinnt [Slice A]. Entscheidungen: Präsenz als eigener transienter Live-State [analog connections, kein Migrations-Aufwand]; Selbst-Ausschluss client-seitig über eigene fensterId [Server muss conn-Id nicht mitteilen → Broadcast-Optimierung bleibt]; edit.enter admin-gegated [kein Spoofing]; Präsenz-Timeout für Zombies bewusst später [onClose deckt Normalfall]. Verifiziert: tsc + ng build [643,7 kB, kein Budget-Warning] + No-Hex + No-Console + persistence:check [kein Schema-Change] + test:do-migrations grün; Zwei-Sitzungen-Durchlauf bräuchte Live-DO. v0.98.0→0.99.0 MINOR. Doku: ops/OP-EDIT-1 [Slice B ✅ + C offen], CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-18-next-steps-8vmq5d-perf1 ~0.7 h (07-18, PR #659, nach Merge von #658. „OP-PERF-1" → Initial-Bundle via Route-Level-Lazy-Loading reduziert, OP-PERF-1 abgeschlossen [Branch frisch von main @7790663]. Der echte Fix zur Sofortmaßnahme aus OP-ALERT-1 Slice 3 [damals nur Budget angehoben]: alle Workspaces außer Shell + Landing-Raum Überblick über loadComponent-Lazy-Routing [app.routes.ts] → 14 Räume je eigener Chunk, erst beim Öffnen geladen. Gemessen [ng build]: Initial-Chunk 935,7→558,8 kB, Total 1,02 MB→643 kB [−37 %]; schwerste ausgelagerte Chunks Planung/Gantt 62 kB · Mitarbeiter 54 kB · Annahme/Administration je 38 kB. Budget gestrafft [angular.json]: maximumWarning 1mb→750kb, maximumError 1,25mb→900kb. Entscheidungen: Landing-Raum eager [kein Lazy-Flash auf kritischem Pfad]; übrige uniform lazy [einfachste Regel, max. Reduktion]; Deep-Links unverändert. Reiner Client, kein Server/Schema/Solver. Verifiziert: ng build [643 kB, kein Budget-Warning] + No-Hex grün; Route-Auflösung durch 14 generierte Lazy-Chunks belegt [voller Klick-Durchlauf bräuchte Live-DO]. v0.97.0→0.98.0 MINOR. Doku: ops/OP-PERF-1 [Umsetzung+Messung, erledigt], CHANGELOG, HANDOFF §2/Footer.)
Session taktano-2026-07-18-next-steps-8vmq5d-edit1a ~1.0 h (07-18, nach Merge von #655. Erklärung OP-PERF-1 [Initial-Bundle via Lazy-Loading reduzieren; Sofortmaßnahme Budget-Anhebung = Headroom, kein Fix] → dann OP-EDIT-1 Slice A: optimistische Nebenläufigkeit für den Arbeitsplatz-Editor [Branch frisch von main @b69948a]. Erster Baustein gegen stilles last-write-wins [Auslöser OP-UMPARK-2 Slice B]. Monotoner Versionsstempel rev je Bucht [nur serverseitig erhöht]; Client sendet beim Speichern baseRev mit; reiner Kern revVeraltet/naechsteRev [server/src/operativ/edit-parallel.ts, test:edit, 9 Prüfungen]; veraltete Basis → Speichern abgelehnt [nicht angewendet/gebroadcastet], per-Verbindungs-Quittung edit.result {ok} schließt das Formular [ok] bzw. zeigt Konflikt-Banner + „Neu laden" [abgelehnt]. Entscheidungen: [a] Ack-basiert statt Broadcast-Heuristik — erst die per-Verbindungs-Quittung schließt das Formular [kein Race durch fremde Broadcasts, keine still verpuffende Änderung]; [b] rückwärtskompatibel [ohne baseRev = altes Verhalten]; [c] Granularität je Datensatz. Slice B [Edit-Präsenz-Broadcast] + Slice C [View-first-Toggle über alle Editoren] bleiben offen. Kein Migrations-Aufwand [rev nested-optional]. Verifiziert: tsc+ng build [1,02 MB, bekanntes OP-PERF-1-Headroom]+No-Hex+test:edit/test:konflikte grün. v0.96.0→0.97.0 MINOR. Doku: ops/OP-EDIT-1 [Slice A ✅ + B/C offen], CHANGELOG, HANDOFF §2/Footer, Tests.md.)
Session taktano-2026-07-18-next-steps-8vmq5d-umpark2bc ~1.4 h (07-18, nach Merge von #653. „OP-UMPARK-2 Slice B / C" → beide gebaut, OP-UMPARK-2 abgeschlossen [Branch frisch von main @5f2132f; Bestandsaufnahme via Explore-Agent]. Slice B: geplante Bucht-Sperre zur Laufzeit anlegbar — arbeitsplatz.update-Patch um sperren [ganze Liste ersetzen], server-validiert via reine validiereSperren [server/src/operativ/sperre.ts]; ArbeitsplatzDTO.sperren; Sperren-Editor im Administration-Workspace [Grund-Dropdown + Von/Bis datetime-local + Beschreibung]. Vorlauf-Konflikt geparkt_vor_sperre [parkendes Auto in aktiver Bucht mit kommender Sperre → rechtzeitig umparken]. Slice C: „🅿️ Freiräumen"-Knopf in der Belegung — wartendes Auto per Klick auf ersten freien Parkplatz [G-4-Umpark-Auftrag OP-UMPARK-1]. Entscheidungen: Sperren als ganze Liste patchen [einfachster Editor-Vertrag]; Slice C manueller Hebel, CP-SAT-Abwägung „warten vs. ausparken" bleibt spätere Solver-Optimierung. Kein Migrations-Aufwand [Sperre-Feld existierte]. Verifiziert: tsc+ng build [1,02 MB]+No-Hex+No-Console+test:konflikte [erweitert]+persistence:check+operativ/do-migrations grün. v0.95.0→0.96.0 MINOR. Doku: ops/OP-UMPARK-2 [Slices B+C, erledigt], CHANGELOG, HANDOFF §4, Tests.md.)
Session taktano-2026-07-18-next-steps-8vmq5d-alarmton ~0.5 h (07-18, PR #653, nach Merge von #651. „Frisch aufsetzen, dann Rest von OP-ALERT-1 (nur Ton); Video als separaten OP." → OP-ALERT-1 Slice 6 — Alarm-Ton am Leit-Bildschirm [Branch frisch von main @70490f2]. Neuer Notfall → akustisches Signal zusätzlich zur Alarm-Optik. Entscheidung: Ton per Web-Audio [Oszillator, Zwei-Ton×3] statt Audio-Datei — kein Binär-Asset [Everything-as-Code], kein Bundle-Ballast; AudioContext erst nach erster User-Geste entsperrt [Browser-Autoplay-Policy → davor rein visuell]; stummschaltbar [localStorage-Toggle 🔔/🔕 im Rail, analog Werker-Modus]; kein Ton beim ersten Laden [Basislinie]. Neuer AlarmtonService [Root-Singleton, Effect auf gesperrteCount], im Shell injiziert. Reiner Client. Damit OP-ALERT-1 rund → erledigt. Video ausgegliedert → neuer OP-ALERT-2 [PO-Entscheid]. Verifiziert: ng build [1,01 MB] + No-Hex + No-Console + Server-tsc grün. v0.94.0→0.95.0 MINOR. Doku: ops/OP-ALERT-1 [Slice 6, erledigt] + ops/OP-ALERT-2 [neu], CHANGELOG, HANDOFF §4.)
Session taktano-2026-07-18-next-steps-8vmq5d ~2.4 h (07-18, vier Slices [Bündel OP-ALERT-1]. Slice 5 (Wahl „Freigabe-Workflow der Leitung"): OP-ALERT-1 Slice 5 — nur die Leitung/der Chef darf die Notfall-Fahrzeug-Sperre aufheben [server-hart im klaerfall.loesen-Gate, interim Chef-Gate wie OP-QS-6, Audit notfall.freigabe.abgelehnt]; Beweisfoto bleibt für alle Pflicht [Chef-Gate dann Foto-Gate]. Entscheidung: Client-Vorgriff [Knopf geblockt mit Grund „🔒 nur Leitung"/„📷 Foto nötig", Detail-Panel + Klärfälle-Detail, notfallFreigabeBlockiert+istChef] statt Rejection-Message-Roundtrip — Client kennt chef+notfallFotos, Server-Gate bleibt Backstop. tsc+ng build [1,01 MB]+No-Hex+No-Console+test:notfall/operativ/abnahme grün. v0.93.0→0.94.0 MINOR. — Slice 4 (Wahl „Alert-Knopf im Werker-Modus"): OP-ALERT-1 Slice 4 — der Werker löst den Notfall/Schaden-Alarm direkt in „Meine Arbeit" aus (🚨-Knopf je Schritt-Karte neben „⚠ Klärfall", Grund-Presets, Pflicht-Freitext; gleicher Server-Pfad auftrag.klaerfall art=notfall, Auslöser-Schritt wandert mit — nichts dupliziert). Solange gesperrt, ist das Beweisfoto [Slice 3] inline erfassbar [uploadNotfallFoto]. Reiner Client, voll verifizierbar [Auslöse-Pfad braucht kein R2]. ng build [1,01 MB < 1,25-MB-Budget] + No-Hex + No-Console grün. v0.92.0→0.93.0 MINOR. — Slice 3 (nach „erst OP-ALERT-1" + Wahl „Foto-/Video-Pflicht am Alarm"): OP-ALERT-1 Slice 3 — Foto-Pflicht am Alarm [Kern der OP]. Notfall braucht ≥1 Beweisfoto, Fahrzeug-Sperre erst danach aufhebbar [server-hart im klaerfall.loesen-Gate, notfallBeweisfotoErfuellt]. Design-Entscheidung: neues Foto-Ziel C notfall an FotoAttachment [polymorph neben teilschritt/mangel] — bewusst getrennt vom QS-Mangel, damit ein pre-existenter Schaden nicht die Mangel-Auswertung je Skill/MA verfälscht [Selbsterklärbarkeit]. Server: Upload ?notfall=1, foto.registriert-Drei-Wege-XOR, AuftragDTO.notfallFotos, Gate. Client: uploadNotfallFoto + 📷-Erfassung/Pflicht-Hinweis/Thumbnails im Detail-Panel. test:notfall erweitert. Nebenbefund: Initial-Bundle überschritt die 1-MB-Budget-Grenze um wenige KB → Budget bewusst auf 1.25mb angehoben [Headroom] + Folge-OP OP-PERF-1 [Lazy-Loading, echter Fix]. Verifiziert: tsc+ng build+No-Hex+No-Console+persistence:check+do-migrations+operativ/abnahme grün. R2-Roundtrip dormant. v0.91.0→0.92.0 MINOR. — Slice 2: Alarm-Sichtbarkeit [PO wählte per AskUserQuestion] — OP-ALERT-1 Slice 2 gebaut [Branch frisch von main nach #648-Merge]. Adressiert die PO-Sorge „der Alarm darf nicht verschwinden": bisher tauchte ein 🚨-Notfall nur im Klärfälle-Tab auf und sah dort gleich aus wie ein regulär eskalierter Klärfall. Neu: globaler, immer sichtbarer Alarm-Chip in der Kopfzeile [rot/tk-pulse, „🚨 N gesperrt", Klick → Klärfälle-Tab, aus jedem Workspace] + eigenes 🚨-Badge in Klärfälle-Liste+Detail [unterscheidbar von „⚠ eskaliert"] + Notfall-Priorität in klaerfaelleSortiert. Rein abgeleitet [D-2, neue Computeds gesperrteFahrzeuge/gesperrteCount], bleibt bis Notfall-Klärfall gelöst. Entscheidung: 🚨-Badge ersetzt „⚠ eskaliert" [Notfall erzwingt eskaliert → kein Doppel-Label]; Rot = Warnung [Marken-Regel]. Reiner Client, kein Server/Schema/Migration. Deckt Teil der Alarm-Optik [OP-KOMM-1]. Verifiziert: ng build + No-Hex + No-Console + Server-tsc grün. v0.90.0→0.91.0 MINOR. Doku: ops/OP-ALERT-1 Slice 2, CHANGELOG, HANDOFF §4. Offen [OP-ALERT-1]: Foto-/Video-Zwang · Alarm-Ton · Werker-Alert-Knopf · Freigabe-Workflow.)
Stand 2026-07-18 ~08:10 UTC.
Session taktano-2026-07-17-next-steps-8vmq5d ~1.1 h (07-17, mehrteilige Session. (a) „app.taktano.com scheint offline" → diagnostiziert: nicht offline, sondern Cloudflare-Access-gated [302 → Access-Login, server: cloudflare, gültige cf-ray]; Re-Deploy des main-Laufs angestoßen [rerun → Attempt 3], Worker neu deployt [Version 8a992fb4], einziger roter Punkt = transienter Grafana-Dashboard-503 [App-unabhängig, best-effort-Inkonsistenz geflaggt]. (b) PO-Frage „wo finde ich ausgelöste Alarme, darf nicht verschwinden" beantwortet [Klärfälle-Tab, erzwungene Eskalation pinnt oben, D-2-persistent; Lücke: kein eigenes 🚨-Label in der Liste → Sichtbarkeits-Slice angeboten]. (c) PO-Frage Bucht-Umparken → Bestandsaufnahme [Explore-Agent] + Policy abgestimmt → OP-UMPARK-2 Slice A: Fahrzeug in gesperrter Bucht gebaut. Neuer Konflikt-Typ geparkt_gesperrt [Hoch] via reine konflikteGeparktInGesperrt(arbeitsplaetze, belegung) — prüft physische Belegung [nicht nur geplante Arbeit wie sperre_kollidiert/arbeitsplatz_fehlt]; rein abgeleitet [D-2, kein State/Migration], greift automatisch bei jedem Broadcast; Client: Label + „📍 Umparken"-Direktknopf [Repark-Modal OP-UMPARK-1]. Policy [PO]: Bucht mit Auto nicht still sperrbar; sofort→sofort umparken [G-4], geplant→vor beginn. PO-Zusatz als eigener OP festgehalten: OP-SCHICHT-1 [Schicht-Ende-Aufräumen: hochwertige Fahrzeuge in die Halle konfigurierbar · nächste Schicht vorbereiten · wenig über Nacht in Arbeit außer Cool-down]. Verifiziert: test:konflikte [erweitert] + tsc + ng build [Node via nvm 22.23.1] + No-Hex + No-Console — grün. v0.89.0→0.90.0 MINOR. Doku: ops/OP-UMPARK-2 + OP-SCHICHT-1, Lastenheft §11.1, IDs.md, Tests.md, CHANGELOG, HANDOFF §4. Offen: Slice B [geplante Sperre zur Laufzeit + Vor-Umparken] · Slice C [Bucht freiräumen — Hebel/CP-SAT] · Alarm-Sichtbarkeits-Slice.)
Stand 2026-07-17 ~19:05 UTC.
Session taktano-2026-07-16-next-steps-mangel-foto ~0.8 h (07-16, „ok, so bauen" [nach Klärungsfrage zur „dedizierten mangel-eigenen R2-Foto-Erfassung"] → OP-QS-1 Slice 4 / M05: dedizierte Mangel-Foto-Erfassung, Branch von main neu. Scope-Entscheidung: FotoAttachment mit polymorpher Ziel-Referenz [teilschrittInstanzId|mangelId]; mangel-eigene Fotos per Direkt-Upload [foto.registriert] statt durch die intricate Offline-Queue zu fädeln [QS ist verbunden → keine Offline-Resilienz nötig, minimaler zweiter Pfad, geringes Regressionsrisiko]. Subsystem-übergreifend: model/types [FotoAttachment], leitstand.ts [Endpoint ?mangel=, foto.registriert-Ziel-Auflösung, fotosByMangel-Merge im DTO + Gate], auftrag.ts [istAbnahmebereit zählt mangel-eigene Fotos], Client [uploadMangelFoto + 📷-Knopf je Mangel]. Verifiziert: test:beweisfoto [+3 Fälle] + test:abnahme/operativ/do-migrations [keine Migration nötig] + tsc + ng build + No-Hex + No-Console — grün. Grenze: R2-Roundtrip dormant [kein FOTOS-Binding], via Typecheck/Build/Selbsttest verifiziert. Liefert Beweismittel-Mechanik auch für OP-ALERT-1. v0.88.0→0.89.0 MINOR. PR #646. Offen: Video-Erfassung · manuelles behoben+Vier-Augen · Auswertung · admin-Kategorien.)
Stand 2026-07-16 ~08:10 UTC.
Session taktano-2026-07-15-next-steps-pflichtfoto ~0.5 h (07-15, „OP-QS-1 Folge-Slice" → OP-QS-1 Slice 3: Pflicht-Beweisfoto für schwere Mängel (baut auf M05 #644 auf, Branch von main neu). Slice-Wahl: von den offenen OP-QS-1-Punkten den gewählt, der direkt auf dem gerade gemergten M05 aufbaut UND voll verifizierbar ist (kein Live-R2, anders als die mangel-eigene Upload-Erfassung). Regel: schwerer/kritischer Mangel [M03] braucht ≥1 Beweisfoto → istAbnahmebereit blockt bis dokumentiert, auch nach Behebung [Beweislage]. Entscheidung: leicht/mittel ohne Zwang [Friktion], statusunabhängig. Gebaut: pure mangelBrauchtBeweisfoto + Gate-Regel [auftrag.ts]; Client-Gate-Spiegel offenePunkte + „📷 Beweisfoto nötig"-Hinweis [amber]. Verifiziert: test:beweisfoto [erweitert um 5 Gate-Fälle] + test:abnahme + tsc + ng build + No-Hex — grün. Doku: Lastenheft §11.1 Slice 3, ops/OP-QS-1, Tests.md, HANDOFF-Footer v0.88.0. v0.87.0→0.88.0 MINOR. PR #645. Offen: mangel-eigene R2-Foto-Erfassung [speist OP-ALERT-1].)
Stand 2026-07-15 ~09:58 UTC.
Session taktano-2026-07-15-next-steps-beweisfoto ~0.6 h (07-15, „Go" → OP-QS-1 Slice 2 / M05: Beweisfotos am Mangel (nach Merge von #642+#643, Branch von main neu). Scope-Entscheidung (Einfachheit + Verifizierbarkeit): statt einen mangelId-Zielpfad durch die intricate Offline-Foto-Queue (IndexedDB/3 Varianten/ack-Drain) zu fädeln [groß, regressionsanfällig, R2 im Env dormant → nicht live verifizierbar], die bestehenden Teilschritt-Fotos am Mangel projizieren [abgeleitet/D-2]. Gebaut: pure beweisfotosZuMangel [auftrag.ts]; DTO-Cleanup geteilter FotoRefDTO+toFotoRef [dedupt Teilschritt-Foto-Mapping] + MangelDTO, AuftragDTO.maengel reicht Fotos durch [leitstand.ts]; Client Mangel.fotos + QS-Thumbnail-Leiste je aktivem Mangel. Verifiziert: test:beweisfoto [neu, CI-Gate] + Regression operativ/qs-nacharbeit/leistung/mangel-status + tsc + ng build [+ TS2345-Fix: r2Key kann falsy → || ''] + No-Hex — alle grün. Doku: Lastenheft §11.1 M05, ops/OP-QS-1 Slice 2, Tests.md, HANDOFF-Footer v0.87.0. v0.86.0→0.87.0 MINOR. Offen: dedizierte mangel-eigene Foto-Erfassung + Pflicht-Foto schwere Mängel [speist OP-ALERT-1].)
Stand 2026-07-15 ~07:35 UTC.
Session taktano-2026-07-14-next-steps-op-qs-1 ~0.7 h (07-14, „OP-QS-1" + „ja" nach Slice-Zuschnitt-Vorschlag → OP-QS-1 Slice 1: Mangel-Status-Workflow (nach dem Merge von OP-ALERT-1 #642, Branch von main neu aufgesetzt). Zuschnitt-Entscheidung: die 3-Stufen-Statusmaschine offen→in_nacharbeit→behoben vor die Foto-Doku gezogen — rein domänen-/testbar (kein Live-R2, hier nicht verifizierbar), macht die zuvor implizite „in Nacharbeit"-Stufe explizit; Foto-Beweismittel am Mangel wird Slice 2 (speist dann auch OP-ALERT-1). Gebaut: MangelStatus 3-stufig [leistung.ts]; markiereMangelInNacharbeit-Helfer + Abnahme-Gate/erledige-Behoben-Logik auf „nicht behoben" geweitet [auftrag.ts]; Übergänge in nacharbeitEinplanen/nacharbeitErfassen [leitstand.ts]; Migration v22 [Backfill laufende Nacharbeit → in_nacharbeit]; Client Status-Badges im QS-Workspace [offen=amber·in Nacharbeit=cyan·behoben=grün, Rot bleibt Warnung]. Verifiziert: test:mangel-status [neu, CI-Gate] + test:do-migrations v0→v22 + Regression operativ/qs-nacharbeit/nacharbeit/abnahme/leistung + tsc + ng build + No-Hex — alle grün. Doku: Lastenheft M06 + §11.1, ops/OP-QS-1 in-arbeit, Tests.md. v0.85.0→0.86.0 MINOR. PR #643. Offen: Foto-Beweismittel M05 · manuelles „behoben"+Vier-Augen · Auswertung je Kategorie/Skill/MA · admin-Kategorien G-1.)
Stand 2026-07-14 ~22:00 UTC.
Session taktano-2026-07-14-next-steps-8vmq5d ~0.9 h (07-14, „was als nächstes?" → nach Stand-Sichtung [HANDOFF §7 + Live-OP-Übersicht] 4 Optionen vorgeschlagen, OP-ALERT-1 empfohlen; AskUserQuestion scheiterte am Permission-Stream, User „continue" → mit der Empfehlung fortgefahren. OP-ALERT-1 Slice 1: Notfall-/Schaden-Alert gebaut. Design-Entscheidung [Leitprinzip Einfachheit]: Alert = Klärfall-Variante [Diskriminator art:'regulaer'|'notfall' am KlaerfallKontext], keine Parallel-Mechanik — genau wie OP-ALERT-1 selbst es fordert. Zusatzregeln des Notfalls: Hard-Stop laufender Schritte + erzwungene Eskalation + Fahrzeug gesperrt [fahrzeugGesperrt, abgeleitet D-2]. Neuer Domänen-Helfer meldeNotfall; DO-Zweig + Audit-Event notfall.gemeldet; Migration v21 [Backfill art:'regulaer']. Client: auftragNotfall + auffälliger 🚨-Knopf/Grund-Formular im geteilten Detail-Panel + gesperrt-Badge. Verifiziert: test:notfall [neu, CI-Gate] + test:do-migrations [v0→v21] + operativ + tsc + ng build [Node via nvm auf 22.23.1 gehoben, Repo-Node 22.22.2 < CLI-Minimum] + No-Hex-Gate — alle grün. Doku: neues docs/architektur/Notfall-Alert.md [pyramidal, Mermaid-State, Slice-Plan] + Landkarte + Lastenheft §5.1 + ops/OP-ALERT-1.md in-arbeit + Offene-Punkte regeneriert. v0.84.0→0.85.0 MINOR. Offene Folge-Slices: Foto-Zwang OP-QS-1 · Alarm-Optik OP-KOMM-1 · Werker-Knopf · Freigabe-Workflow.)
Stand 2026-07-14 ~21:15 UTC.
Session taktano-2026-07-14-r7-p1-fortschritts-indikator ~0.7 h (07-14, „was als nächstes?" → PO wählte „R7-P1 Fortschritts-Indikator" aus 4 Optionen [direkter True-North-2-Treffer, Spec bereits in Lastenheft §7.1 ausgearbeitet, nur die Symbol-Kette selbst fehlte noch]. Gebaut: neue geteilte FortschrittsIndikatorComponent — 🚗-Kette Annahme→Teilschritte→Ausgabe, Farbe je Schritt-Status. Design-Findung live: Emoji-Glyphen tragen selbst keine CSS-Farbe [color wirkt nicht auf Farb-Emoji] — per Playwright-Screenshot entdeckt [alle Autos sahen trotz unterschiedlicher Status gleich rot aus], behoben durch satt eingefärbten Chip/Ring hinter dem Symbol statt Emoji-Einfärbung; zweiter Bug [instanzId === focusInstanzId() matcht null === null für beide Endpunkte] ebenfalls per Screenshot-Vergleich gefunden und gefixt. Dedupe: teilschrittStatusColor/teilschrittStatusIcon neu in labels.ts statt der bisherigen Kopien in zwei Komponenten. Verdrahtet an 3 Stellen [Fluss-Karte kompakt · Fly-in-Header kompakt · Aufträge-Detailpanel ausführlich]. HTML-Fallstrick vermieden: <span role="button"> statt <button> [Kette sitzt auf der Karte in einem bereits klickbaren <button>]. ng build grün. Live End-to-End verifiziert [wrangler dev + ng serve, Playwright]: Karten-Kette, Detailpanel-Kette [Klick öffnet Fly-in fokussiert], Fly-in-Kopf-Kette. Lastenheft §7.1 + WORKSPACES.md nachgezogen. v0.83.0→0.84.0 MINOR. PR #641.)