311 Commits
Author SHA1 Message Date
patrickandClaude Sonnet 5 78b07d671f feat(mobile): MOBILE-003 Draft-first-Muster auf Mangelmeldung ausgeweitet
CI / backend-tests (push) Successful in 3m18s
CI / frontend-build (push) Successful in 21s
Gleiches Offline-Queue-Muster wie bei der Kontroll-Erfassung
(offline/queue.ts) jetzt auch für Mangelmeldung: sofort lokal
speichern statt auf Server-Antwort zu warten, Foto wird mit
gequeued und nach erfolgreicher Mangel-Erstellung separat
hochgeladen. useOnlineStatus/SyncStatus decken jetzt beide Queues ab.

Bewusst begrenzter Scope (Nutzer-Entscheidung): kein genereller
Offline-Layer für alle Schreib-Endpunkte, nur Kontrolle + Mangel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 20:14:39 +02:00
patrickandClaude Sonnet 5 aceef65418 fix(identity): Label-Design vergrößert (QR + Name)
CI / backend-tests (push) Successful in 3m14s
CI / frontend-build (push) Successful in 20s
Nutzer-Feedback: QR-Code (25mm) und Klartext-Name (9pt) auf gedruckten
Etiketten waren zu klein. QR-Zielgröße auf 38mm, Klartext-Zeile auf
13pt fett angehoben - gilt für Code128- und QR-Label gleichermaßen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 20:02:46 +02:00
patrickandClaude Sonnet 5 536b2edc4d feat(inspections): INSP Phase 2 - Admin-UI + Dashboard-Lesepfad-Ergänzung
CI / backend-tests (push) Successful in 3m16s
CI / frontend-build (push) Successful in 20s
Prüfarten-Verwaltung + Objekttyp-Zuordnung im Admin-Frontend
(PruefartenSection.tsx, neue Endpunkte GET/PUT/DELETE
/objekttypen/{id}/pruefarten), Prüfhistorie + FAILED-Ampel-Badge je
Geräte-Exemplar (GeraeteInstanzenListe.tsx).

Dashboard-Lesepfad ergänzt (nicht ersetzt): bevorstehende_prueftermine()
zeigt ein Gerät mit fehlgeschlagener Prüfung jetzt auch dann, wenn
naechste_pruefung datumsbasiert noch als "gueltig" gelten würde.

Bewusst NICHT umgestellt: naechste_pruefung-Berechnung bleibt auf
Objektposition.pruefintervall_monate (nicht objekttyp_pruefart),
Fristen-Dienst/ASSET-010 bleiben unverändert - siehe Kachel-DoD.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 19:53:38 +02:00
patrickandClaude Sonnet 5 e5dc80c3a6 feat(foundation): FOUND-013 optionales Error-Tracking (GlitchTip)
CI / backend-tests (push) Successful in 3m14s
CI / frontend-build (push) Successful in 21s
Zielserver-Entscheidung durch optionales Install-Script aufgelöst statt
festgeschrieben: deploy/glitchtip-install.sh installiert GlitchTip per
Docker Compose auf einem beliebigen, selbst gewählten Host - nichts
automatisch/ungefragt.

DSN wird zur Laufzeit über eine neue Admin-GUI-Seite ein-/ausschaltbar
(Systemeinstellung-Singleton, GET/PATCH /einstellungen/sentry), statt
nur per .env - kein Redeploy zum Umschalten nötig. Frontend lädt
@sentry/react nur dynamisch nach, wenn tatsächlich aktiv.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 19:35:47 +02:00
patrickandClaude Sonnet 5 11e6ed4332 feat(warehouse): WH-006 Inventur & Bestandskorrektur
CI / backend-tests (push) Successful in 3m8s
CI / frontend-build (push) Successful in 19s
Inventurlauf je Lagerort (inkl. Unter-Lagerorte), Sollmenge wird beim
Start aus Bestand gesnapshotted, Abweichung erzeugt beim Abschluss
automatisch Korrekturbuchung + Audit-Log statt stiller Anpassung.
Teil-Inventur erlaubt (ungezählte Positionen blockieren nicht).
Backend-Grundgerüst von fastapi-expert-Subagent, Review/Frontend/
Tests-Ergänzung/Doku durch Hauptagent.

Außerdem: 00_index.md Status-Abgleich (FLEET-006, ASSET-011/012,
PERS-008, INSP-001..004 waren bereits umgesetzt, aber im Index noch
als offen markiert).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 18:39:46 +02:00
patrickandClaude Sonnet 5 bc1542a5e9 feat(loadout): LOAD-007 Gemeinsame Sollmenge über mehrere Standorte
CI / backend-tests (push) Successful in 3m3s
CI / frontend-build (push) Successful in 18s
Objektposition kann optional einer sollmengen_gruppe zugeordnet werden;
Fehlbestand-Prüfung erfolgt dann gegen die Gruppen-Summe statt die
eigene Sollmenge. Fehlbestand bleibt an der Position verankert, die
die Unterdeckung real festgestellt hat (kein Standort-Raten), wird
aber gruppenweit gesucht/aufgelöst, damit Deckung durch eine andere
Position im Verbund den Fehlbestand korrekt schließt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 18:15:22 +02:00
patrickandClaude Sonnet 5 c18e4481b6 feat(maint): MAINT-008 Lieferanten-/Dienstleister-Verzeichnis
CI / backend-tests (push) Successful in 3m2s
CI / frontend-build (push) Successful in 18s
ExterneStelle (ASSET-011) um Kategorie erweitert statt zweites
Adressbuch anzulegen; Wartungsauftrag optional mit dienstleister_id
verknuepfbar, Freitext werkstatt_name bleibt als Fallback bestehen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 17:43:42 +02:00
patrickandClaude Sonnet 5 3d596ab456 feat(assets): ASSET-012 Ressourcen-Buchungskalender (Verfügbarkeitsprüfung)
CI / backend-tests (push) Successful in 2m59s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 16:51:17 +02:00
patrickandClaude Sonnet 5 1ad693073e feat(assets): ASSET-011 externer Verleih mit Rückgabe-Tracking
CI / backend-tests (push) Successful in 2m59s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 16:16:14 +02:00
patrickandClaude Sonnet 5 63ac9ecf2c fix(tests): admin-Token für Geräteinstanz-Anlage in PERS-008-Tests nutzen (CI-Fix)
CI / backend-tests (push) Successful in 2m57s
CI / frontend-build (push) Successful in 19s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:46:06 +02:00
patrickandClaude Sonnet 5 163c881b82 feat(personal): PERS-008 Einweisungspflicht-Warnung bei Geräteausgabe
CI / backend-tests (push) Failing after 2m53s
CI / frontend-build (push) Successful in 21s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:41:58 +02:00
patrickandClaude Sonnet 5 80bd79ad4d docs(arbeitskacheln): 5 neue Kacheln aus vertieftem HiOrg-Server-Vergleich (PERS-008, ASSET-011/012, MAINT-008, LOAD-007)
CI / backend-tests (push) Successful in 2m54s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:35:16 +02:00
patrickandClaude Sonnet 5 52bf7d9ec9 feat(assets): ASSET-007 Material-Sets (Kits), ASSET-008 Consumable-Doku korrigiert
CI / frontend-build (push) Successful in 19s
CI / backend-tests (push) Successful in 2m55s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:22:02 +02:00
patrickandClaude Sonnet 5 0aa5d6d249 feat(fleet): FLEET-006 Fahrzeug-Einsatzhistorie über OPS-002
CI / backend-tests (push) Successful in 2m51s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:11:17 +02:00
patrickandClaude Sonnet 5 7219762a4c docs(arbeitskacheln): FLEET-004 Index-Status korrigiert (war bereits vollständig umgesetzt)
CI / backend-tests (push) Successful in 2m52s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:08:34 +02:00
patrickandClaude Sonnet 5 ad4483e18c fix(inspections): pruefung.geraet_instanz_id FK mit ON DELETE CASCADE (CI-Fix, DELETE /geraete/{id} war blockiert)
CI / backend-tests (push) Successful in 2m50s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:02:10 +02:00
patrickandClaude Sonnet 5 25437ec070 feat(inspections): INSP-001..004 Phase 1 generisches Pruefart-System additiv (Dual-Write, FAILED-Ampel)
CI / backend-tests (push) Failing after 2m53s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 14:57:30 +02:00
patrickandClaude Sonnet 5 8e4c2608e3 feat(foundation): FOUND-006 strukturiertes Logging, FOUND-010 DB-Backup-Timer, IDENT-010 GTIN-Materialabgleich
CI / backend-tests (push) Successful in 2m50s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 14:07:22 +02:00
patrickandClaude Sonnet 5 fdeae8b5e3 docs(arbeitskacheln): FOUND-013 Error-Tracking (GlitchTip) geplant, Index-Statuszeilen auf Ist-Stand nachgezogen
CI / backend-tests (push) Successful in 2m50s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 13:33:01 +02:00
patrickandClaude Sonnet 5 ddd1b446a2 feat(einsatz): Epic 16 Einsatz-Nachdokumentation (OPS-001/002/003 kombiniert)
CI / backend-tests (push) Successful in 2m48s
CI / frontend-build (push) Successful in 19s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 13:07:47 +02:00
patrickandClaude Sonnet 5 46a65ba6ff feat(readiness): READY-001 an/abschaltbare Bereitschafts-Kriterien (abgespeckte Regel-Engine)
CI / backend-tests (push) Successful in 2m48s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 12:51:02 +02:00
patrickandClaude Sonnet 5 d41d04c26c feat(ui): UI2-002/003/004/005 Sheet-Navigation, FormField-Einsatz, Skeleton, Table-Wrapper
CI / backend-tests (push) Successful in 2m45s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 12:37:16 +02:00
patrickandClaude Sonnet 5 91cfb1087f feat(notif): NOTIF-003 proaktive Wartungsfälligkeits-Benachrichtigung
CI / backend-tests (push) Successful in 2m46s
CI / frontend-build (push) Successful in 17s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 12:17:57 +02:00
patrickandClaude Sonnet 5 d095db4172 docs(arbeitskacheln): FLUT-001 auf Ist-Stand nachgezogen (v0.1.0-v0.5.0), FLUT-002 als offene Frage dokumentiert
CI / frontend-build (push) Successful in 17s
CI / backend-tests (push) Successful in 2m44s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 12:06:42 +02:00
patrickandClaude Sonnet 5 1457496763 fix(tests): admin-Token für Geräteinstanz-Anlage nutzen statt mitarbeiter (CI-Fix ASSET-010)
CI / backend-tests (push) Successful in 2m43s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:56:43 +02:00
patrickandClaude Sonnet 5 24db5a056f feat(custody): ASSET-010 Gerät-Ausgabe/Rücknahme mit optionalem QR-Signier-Flow
CI / backend-tests (push) Failing after 2m42s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:52:07 +02:00
patrickandClaude Sonnet 5 1147ec0872 feat(ui): UI2-001/006/007/009/010 Design-Tokens, Toast, AlertDialog, Formular-a11y
CI / backend-tests (push) Successful in 2m38s
CI / frontend-build (push) Successful in 17s
chore(agents): Flutter/iOS/Swift-Subagenten aus claude-subagents-Repo übernommen

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:36:42 +02:00
patrickandClaude Sonnet 5 eeb87d889d feat(permission): ZUST-003 Standort-Scoping für granulare Rollen-Berechtigungen
CI / backend-tests (push) Successful in 2m38s
CI / frontend-build (push) Successful in 17s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:22:34 +02:00
patrickandClaude Sonnet 5 e7e6c4c8af fix(tests): hash-Feld bei direkter Historie()-Konstruktion ergänzen, Erwartungswert korrigiert (CI-Fix FILE-008)
CI / backend-tests (push) Successful in 2m33s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:12:10 +02:00
patrickandClaude Sonnet 5 429ece3c65 feat(historie): FILE-008 manipulationssicheres Audit-Journal (Hash-Kette je Ressource)
CI / backend-tests (push) Failing after 2m34s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 11:08:07 +02:00
patrickandClaude Sonnet 5 a1ad2d6cef feat(readiness): READY-006 täglicher Bereitschafts-Snapshot mit Trend-Dashboard und Akte-Historie
CI / backend-tests (push) Successful in 2m32s
CI / frontend-build (push) Successful in 19s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:54:08 +02:00
patrickandClaude Sonnet 5 bb0c601b2f feat(foundation): FOUND-008 gemeinsame Fristen-Normalisierung (Dringlichkeits-Ampel)
CI / backend-tests (push) Successful in 2m28s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:42:06 +02:00
patrickandClaude Sonnet 5 04a255429d feat(wartung): MAINT-007 Tankbuch/Kraftstoffverbrauch je Fahrzeug
CI / backend-tests (push) Successful in 2m30s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:32:10 +02:00
patrickandClaude Sonnet 5 96499d655f fix(api): import_export-Router vor objekte/geraet_instanz registriert (Routenkonflikt /objekte/export, CI-Fix)
CI / backend-tests (push) Successful in 2m28s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:13:56 +02:00
patrickandClaude Sonnet 5 76a984ad56 fix(tests): login als Helper-Funktion statt Fixture importieren (CI-Fix FOUND-007)
CI / backend-tests (push) Failing after 2m26s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:09:15 +02:00
patrickandClaude Sonnet 5 807c818405 feat(foundation): FOUND-007 CSV-Import/Export für Objekte und Geräteinstanzen
CI / backend-tests (push) Failing after 2m28s
CI / frontend-build (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 10:04:56 +02:00
patrickandClaude Sonnet 5 eaafeeb89c fix(admin): Download-Link auf aktuelle APK-Version v0.5 korrigiert
CI / backend-tests (push) Successful in 2m28s
CI / frontend-build (push) Successful in 17s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 08:38:50 +02:00
patrickandClaude Sonnet 5 15bbab258b feat(admin): Download-Link für FLUT-001 Scan-Prototyp im Portal
CI / backend-tests (push) Successful in 2m52s
CI / frontend-build (push) Successful in 48s
Admin-only Hinweis mit Link auf die APK unter /downloads/ - reine Sondierung,
kein Produktivstand.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 01:06:45 +02:00
patrickandClaude Sonnet 5 1e8d66f636 feat(akte): FILE-009 Freitext-Notizen an beliebiger Ressource
CI / backend-tests (push) Successful in 2m39s
CI / frontend-build (push) Successful in 20s
Polymorphes akte_notiz-Modell (gleiches entitaet_typ/entitaet_id-Muster wie
Dokument/Historie/Mangel), CRUD-Endpunkte, NotizenPanel im Akte-Grid. Löschen
nur durch Autor oder Administrator.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 00:49:47 +02:00
patrickandClaude Sonnet 5 9c6426190e docs(arbeitskacheln): Open-Source-/HiOrg-Vergleich ausgewertet, 14 neue Kacheln ausgearbeitet
Vergleich mit InvenTree, Snipe-IT, Grocy, Shelf.nu, Resgrid, KP Front, FleetMS,
HiOrg-Server ergibt neue Kacheln (ASSET-010 Custody, FILE-008 Hash-Audit-Journal,
FILE-009 Notizen, NOTIF-003, MAINT-007 Tankbuch, ZUST-003 Standort-Scoping,
FOUND-007 Import/Export, FOUND-008 Fristen-Dienst, READY-006 Statistik-Dashboard,
UI2-006..010) sowie Referenz-Ergänzungen bei bestehenden Lücken. Alle Design-
Entscheidungen (Datenmodell, Sicherheitsanforderungen bei ASSET-010) geklärt.

Neues Epic 23 (Flutter-Begleit-App, Sondierungs-Prototyp FLUT-001) inkl. geklärtem
TLS-Blocker (Domain mabea.perlbach-edv.de mit Let's-Encrypt-Zertifikat statt
selbstsigniertem Server-Zertifikat).

Alle Kacheln bleiben offen/ungeplant, nur ausgearbeitet, keine Implementierung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 00:49:32 +02:00
patrickandClaude Sonnet 5 3e39c3b7fd fix(frontend): @vitejs/plugin-react auf v6 für Vite-8-Kompatibilität
CI / backend-tests (push) Successful in 2m26s
CI / frontend-build (push) Successful in 24s
CI schlug fehl (ERESOLVE): @vitejs/plugin-react@4.7.0 kennt nur Vite
bis v7 als Peer-Dependency, lief lokal nur weil node_modules bereits
force-aufgelöst war. v6.1.1 unterstützt Vite 8 nativ, sauberes
npm install ohne --force jetzt möglich, 0 vulnerabilities.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 22:46:50 +02:00
patrickandClaude Sonnet 5 e10123fae7 chore(frontend): Vite-Major-Upgrade auf v8 (npm audit fix)
CI / backend-tests (push) Successful in 2m27s
CI / frontend-build (push) Failing after 3s
Schließt alle 6 gemeldeten Schwachstellen (esbuild-Dev-Server-CVE,
GHSA-67mh-4wv8-2f99), betraf nur den lokalen Dev-Server, kein
Produktions-Impact. Vite 5->8, vitest 2->5, vite-plugin-pwa 0.20->1.3.
tsc/build/vitest lokal geprüft, 0 vulnerabilities.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 22:41:48 +02:00
patrickandClaude Sonnet 5 7dc6446a56 feat(personal): PERS-001/002 Person fachlich von Benutzer getrennt
CI / backend-tests (push) Successful in 2m29s
CI / frontend-build (push) Successful in 28s
Neue Tabelle person (Migration 0034, Backfill bestehender Benutzer 1:1
per Zeilennummer, keine Datenverluste). Benutzer.person_id optional -
Login kann bestehende Person verknüpfen oder legt automatisch eine neue
an (Rückwärtskompatibilität zum bisherigen Anlegen-Flow). /personen-CRUD
(admin-only), neue PersonSection.tsx im Personal-Tab, BenutzerSection
um Personen-Auswahl erweitert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 22:31:46 +02:00
patrickandClaude Sonnet 5 847c303a97 feat(wartung): MAINT-005 Ersatzteile/Kosten je Wartungsauftrag
CI / backend-tests (push) Successful in 2m22s
CI / frontend-build (push) Successful in 25s
Neue Tabelle wartungsauftrag_teil (Migration 0033), CRUD-Endpunkte
/wartungsauftraege/{id}/teile, UI-Panel in WartungSection.tsx mit
Summenanzeige. Backlog Epic 22 (UI-Redesign Runde 2, Kacheln UI2-001..005)
als geplant ergänzt, Umsetzung folgt separat.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 22:06:02 +02:00
patrickandClaude Sonnet 5 3b5cf8feab feat(identity): IDENT-003 konfigurierbare Nummernschemata je Objekttyp
CI / backend-tests (push) Successful in 2m24s
CI / frontend-build (push) Successful in 27s
Neue Stammdaten-Tabelle nummernschema (Migration 0032): Präfix + Stellenzahl
einmal je Objekttyp festlegen statt bei jeder Objekt-Anlage manuell
einzutippen (Fehlerquelle - Tippfehler, uneinheitliche Schreibweise,
falsches Präfix für den Typ). GET /objekte/naechster-code akzeptiert jetzt
objekttyp_id als Alternative zu praefix; ohne konfiguriertes Schema bleibt
der bisherige manuelle Präfix-Weg nutzbar (Rückwärtskompatibilität).

Admin-UI: Nummernschema-Pflege direkt in der Objekttyp-Verwaltung
(ObjekttypSection). ObjektAnlegenFormular versucht zuerst das Schema des
gewählten Objekttyps, fällt bei 404 auf manuelles Präfix zurück.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 20:23:14 +02:00
patrickandClaude Sonnet 5 15f783fb5e feat(personal): PERS-004 Einsatzfunktionen (Gruppenführer/Melder/...)
CI / backend-tests (push) Successful in 2m17s
CI / frontend-build (push) Successful in 26s
Neue Stammdaten-Tabelle einsatzfunktion (Migration 0031), benutzer bekommt
optionales einsatzfunktion_id-Feld - analog zu einheit_id modelliert, eine
Person hat im Regelfall genau eine primäre Einsatzfunktion. Bewusst
getrennt von den technischen App-Rollen (RolleTyp), die nur steuern, was
jemand in MABEA tun darf, nicht welche Funktion er im Einsatz hat.

CRUD-Endpunkt /einsatzfunktionen nach Kategorie-Muster, Duplikat-Prüfung
vorab (Projekt-Konvention). Admin-UI: Auswahl + Inline-Neuanlage in der
Benutzerverwaltung (BenutzerSection).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 20:07:16 +02:00
patrickandClaude Sonnet 5 b7d9581b90 feat(identity): IDENT-009 QR-/Code-Neuvergabe mit Historie
CI / backend-tests (push) Successful in 2m20s
CI / frontend-build (push) Successful in 27s
POST /objekte/{id}/code-neu-vergeben und /objektpositionen/{id}/code-neu-
vergeben (admin-only) - z.B. bei beschädigtem/verlorenem Etikett. Alter
Code bleibt über die bestehende Audit-Infrastruktur (Historie-Tabelle,
Prompt 13) nachvollziehbar statt eine eigene Versions-Tabelle zu brauchen:
GET /historie?entitaet_typ=objekt&entitaet_id=... zeigt alter_wert/
neuer_wert des Codes. Duplikat-Prüfung explizit vorab (Projekt-Konvention,
siehe geraet_instanz.py::erstelle).

Frontend: "Code neu vergeben"-Aktion in der Objektakte (nur Admin), inline
statt window.prompt (Accessibility-Vorgabe aus dieser Session).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 18:13:53 +02:00
patrickandClaude Sonnet 5 08ce8efe55 fix(backend): Hersteller/Modell-Duplikatprüfung vorab statt über UNIQUE-Constraint
CI / backend-tests (push) Successful in 2m17s
CI / frontend-build (push) Successful in 27s
Testsuite-get_db-Override macht kein Rollback bei Exceptions (dokumentierter
Fund 2026-09-05) - ein Flush-Fehlschlag über IntegrityError hinterlässt die
geteilte Test-Session im PendingRollbackError-Zustand für jeden folgenden
Request im selben Test. Projekt-Konvention laut geraet_instanz.py::erstelle
ist deshalb explizites Vorab-Prüfen statt Verlassen auf den DB-Constraint -
hier nachgezogen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 14:56:05 +02:00
patrickandClaude Sonnet 5 2dd7e574e6 feat(identity): IDENT-005 Hersteller/Modell-Stammdaten
CI / backend-tests (push) Failing after 2m16s
CI / frontend-build (push) Successful in 26s
Neue Tabellen hersteller/modell (Migration 0030), CRUD-Endpunkte
(/hersteller, /modelle) nach bestehendem Kategorie-Muster, inkl. 409 bei
Duplikaten (IntegrityError abgefangen wie in personal.py). geraet_instanz
bekommt optionales modell_id-Feld - verknüpft eine konkrete Geräteinstanz
(mit Seriennummer, IDENT-004) mit ihrem Hersteller/Modell.

Ergänzt Material.hersteller (bleibt unverändert als Freitext) um eine
normalisierte Variante gezielt für Geräte mit Seriennummer - keine
Datenmigration bestehender Freitext-Werte (Scope dieser Kachel).

Bewusst kein neues Admin-UI-Screen für die Pflege (Scope-Grenze der
Kachel) - Hersteller/Modell aktuell nur über die API verwaltbar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 14:51:15 +02:00
patrickandClaude Sonnet 5 ae09433c11 feat(dokumente): DOC-004 Original-vs-Kopie-Kennzeichnung
CI / backend-tests (push) Successful in 2m16s
CI / frontend-build (push) Successful in 27s
Neues Feld ist_original (Boolean, Migration 0029) - explizit beim Upload
und beim Ersetzen (DOC-003) setzbar, kein Default in eine Richtung erraten.
Wird beim Ersetzen bewusst NICHT vom Vorgänger übernommen (neue Version
könnte ein nachgereichtes Original sein, das eine bisherige Kopie ersetzt,
oder umgekehrt). Frontend: Checkbox "Original (nicht nur Kopie/Scan)" im
Upload-Formular, "Original"-Badge in der Dokumentenliste.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 12:16:25 +02:00