Commit Graph

146 Commits

Author SHA1 Message Date
schalli ee2b0256b5 docs(quick-260922-hk4): Akte - Bilder im Dateibereich, Rundgang mit Selbstheilungs-Befund
Tessera CI/CD / Lint & Type Check (push) Successful in 50s
Tessera CI/CD / Tests (push) Successful in 1m16s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m4s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:36:04 +02:00
schalli 80a0d23ccf docs(quick-260922-ge2): Akte - XFrame-Ausschnitt, neun Pruefpunkte bestanden, Rahmenhoehen-Befund festgehalten
Tessera CI/CD / Lint & Type Check (push) Successful in 44s
Tessera CI/CD / Tests (push) Successful in 1m10s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m56s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 12:27:55 +02:00
schalli 2c01f9d783 docs(quick-260922-frg): Akte - Tray-Update-Befund: Proxy-401 vor alpha, Client nennt jetzt den Grund
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m11s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m27s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m3s
Plan mit Messungen (API am Proxy vorbei 200, Proxy 401 Basic von zwei
Netzen), Zusammenfassung des Executors, Zeile in der Quick-Tabelle und
Stopp-Punkt: die Behebung des Passwortschutzes liegt beim Nutzer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 11:28:06 +02:00
schalli 31ca115796 docs(quick-260921-qd3): Akte - XFrame-Widget gebaut, Browser-Rundgang ohne Befund; Stand nach beiden Widgets
Tessera CI/CD / Lint & Type Check (push) Successful in 48s
Tessera CI/CD / Tests (push) Successful in 1m9s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 19s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m46s
Plan, Zusammenfassung mit abgehakter Pruefliste und die Zeile in der
Quick-Tabelle von STATE.md; Stopp-Punkt: beide bestellten Widgets fertig,
nichts offen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 19:29:07 +02:00
schalli 8686b1a673 docs(quick-260921-pi9): Akte - Bilderrahmen-Widget gebaut, zehnpunktiger Browser-Rundgang bestanden
Tessera CI/CD / Lint & Type Check (push) Successful in 47s
Tessera CI/CD / Tests (push) Successful in 1m11s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m4s
Plan, Zusammenfassung (mit Rot-Nachweis, curl-Rundgang, abgehakter
Pruefliste und den drei im Rundgang gefundenen Befunden) sowie die Zeile in
der Quick-Tabelle von STATE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 19:22:32 +02:00
schalli 6def5396e4 docs(quick-260921-oxm): Akte - beide IMAP-Befunde behoben, Rot-Nachweis festgehalten
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 18:04:32 +02:00
schalli f23671ac6c docs(quick-260921-oxm): Plan fuer die beiden IMAP-Befunde
Tessera CI/CD / Lint & Type Check (push) Successful in 52s
Tessera CI/CD / Tests (push) Successful in 1m13s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 28s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m0s
- B-06 (STARTTLS wird nicht erzwungen) und B-05 (Anhangs-Dateiname)
- Ausgangsmessung der Zaehler festgehalten

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 17:59:22 +02:00
schalli ad834076c2 docs(quick-260921-m34): 288 any auf 15 gesenkt, jede verbliebene mit Urteil
Tessera CI/CD / Lint & Type Check (push) Successful in 49s
Tessera CI/CD / Tests (push) Successful in 1m6s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m0s
Zusammenfassung mit Urteilsregister und STATE.md zum Quick-Vorgang
260921-m34.

Der groesste Posten war ein einziges Missverstaendnis: 105 Stellen
trugen eine Zusicherung an der Mandantenbindung, die nie noetig war -
prisma.$extends() liefert laengst einen getypten Klienten.

Die tenantId-Frage wurde hergeleitet statt nach Bequemlichkeit
entschieden: string ohne Fragezeichen, belegt aus Pflichtspalte im
Schema, Bestandstyp und dem Super-Admin-Zweig der Mandantenpruefung -
der diesen Typ gar nicht liest und deshalb nicht zu totem Code werden
kann. Der Waechter blieb ueber den ganzen Lauf unveraendert.

Vier Befunde gemeldet statt still repariert. Zwei brauchen eine
Entscheidung, beide wuerden Verhalten aendern - darunter ein
sicherheitsrelevanter: die IMAP-Einstellung STARTTLS erzwingt nichts,
weil die gesetzte Option in imapflow 1.4.3 nicht existiert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 17:35:00 +02:00
schalli 8d845e732e docs(quick-260921-m34): Plan fuer die 288 any im Backend, auf Messungen gebaut
Drei Aufgaben statt einer Sammelaktion, geschnitten nach Form und Risiko.
Die Formen wurden nicht geschaetzt, sondern durch Probeumbauten am echten
Baum gemessen (jeder danach zurueckgenommen):

- 105 mal forTenant(...) as any: die Zusicherung war nie noetig, tsc meldet
  ohne sie genau einen Folgefehler.
- 13 der 15 Stellen in prisma-tenant.extension.ts fallen ebenso.
- Sechs Controller auf einen getypten Request: genau ein Fehler, und der
  ist ein echter Befund im Bestandscode.
- Die drei addCronJob-Stellen sind gemessen nicht aufloesbar und bekommen
  das Urteil bleibt.

Erwartetes Ergebnis 20 bis 40 verbleibende Befunde, nicht null: wer die
letzten Stellen erzwingt, tauscht eine ehrliche Warnung gegen eine
unehrliche Behauptung.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 16:09:33 +02:00
schalli a6181e2751 docs(quick-260921-ldf): Wackeltest als Produktfehler nachgewiesen und behoben
Zusammenfassung, Debug-Akte und Knowledge-Base-Eintrag zum Quick-Vorgang
260921-ldf.

Die zentrale Frage war, ob hinter dem Wackeltest aus CI-Lauf 395 ein
echter Nutzerfehler steckt. Sie ist gemessen beantwortet, nicht
geschaetzt: ein MutationObserver ueber jeden DOM-Commit zeigt den
Zustand "Vorschaubild sichtbar, Haekchen aus" bei JEDEM Oeffnen als
echten, festgeschriebenen DOM-Zustand, der ohne act() zwei volle
Makrotask-Runden haelt. Zwischen zwei Makrotasks darf der Browser
zeichnen - der Nutzer kann das also sehen. Was nicht erreichbar ist:
jemand schickt ab und das Bild fehlt, denn die Korrektur kommt binnen
Millisekunden.

Stabilitaet: 20 von 20 vollen Laeufen gruen, je 531 Tests. Die
Zusammenfassung ordnet das ehrlich ein - bei einer Ausgangsrate von
1:17 waeren 20 gruene Laeufe auch ohne Fix zu rund 30 Prozent zu
erwarten. Der tragende Beleg ist der deterministische: den falschen
Zwischenzustand gibt es nicht mehr, und Test 14/15 sind gegen den Stand
davor in fuenf von fuenf Laeufen rot.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 15:50:37 +02:00
schalli 8d604b855a docs(quick-260921-jt4): Barrierefreiheit 30 -> 1, vier Restposten erledigt
Tessera CI/CD / Lint & Type Check (push) Successful in 53s
Tessera CI/CD / Tests (push) Successful in 1m14s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 19s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m38s
Zusammenfassung und STATE.md zum Quick-Vorgang 260921-jt4.

Der Planer hat zwei Vorgaben des Orchestrators widerlegt: der
vorgesehene Rueckfallweg mit role und Tastaturhandler tauscht gemessen
drei Befunde gegen einen neuen, und vier der elf vermeintlichen
Klick-Befunde sind onError-Handler an Bildern, also gar keine
Bedienung. Alle fuenf ARIA-Befunde waren Beschriftungen auf rollenlosen
Elementen, die Vorleseprogramme still verwerfen.

Laufzeitnachweis vom Orchestrator: drei Monatswechsel holen die
Quellenliste nur noch einmal statt viermal, der Termin-Abruf mit
identischem Zeitraum ist weg. Der 5-Minuten-Auffrischer ist per
gestellter Uhr als intakt belegt, nicht per Warten im Browser - zwei
solche Messversuche waren ungueltig, weil das Werkzeug die Seite
zwischendurch neu laedt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 15:23:10 +02:00
schalli 7557c9aafe docs(quick-260921-jt4): Plan fuer 30 a11y-Befunde und vier Restposten
29 der 30 Fundstellen werden behoben, eine bleibt begruendet stehen.
Loesungswege vorab empirisch an Biome 2.5.0 geprueft: der in D-01 als
Rueckfall genannte Weg (role+tabIndex) taeuscht -- er tauscht drei Befunde
gegen einen neuen useSemanticElements-Befund und wird deshalb nirgends
benutzt.

Zwei Annahmen der Auftragsbeschreibung beim Nachlesen korrigiert:
vier der elf Klick-Befunde sind onError-Handler an img-Elementen, und
alle fuenf ARIA-Befunde sind aria-label auf rollenlosen Elementen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 14:35:29 +02:00
schalli 6cc0d02e97 docs(quick-260921-iwr): 30 Stellen geprueft, kein echter Fehler darunter
Tessera CI/CD / Lint & Type Check (push) Successful in 53s
Tessera CI/CD / Tests (push) Failing after 11m29s
Tessera CI/CD / Desktop-Pakete bauen (push) Has been skipped
Tessera CI/CD / Build & Publish Images (push) Has been skipped
Zusammenfassung und STATE.md zum Quick-Vorgang 260921-iwr. Damit ist
der fehlerverdaechtige Lint-Rueckstand vollstaendig geprueft.

Beide Verdachtsmomente widerlegt, durch Messung statt Argument: die
LDAP-Seite nutzt fuer die Liste, die wirklich waechst und schrumpft,
laengst eine stabile Kennung; und im Cert-Manager enden alle vier Pfade
mit einer 83-Byte-Schrottdatei bei 400, nie 500 - node-forge wirft,
statt still ein falsches Zertifikat zu bauen.

Ein Fund dreht die Richtung um: bei grants/page.tsx waere die
Korrektur schaedlich, dort ist die Positionsnummer fuer die
Eindeutigkeit noetig.

Geaendert: 5 Stellen. 25 bleiben bewusst stehen und bleiben in der
Zaehlung sichtbar, mit Begruendung je Stelle in der Akte.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 14:10:51 +02:00
schalli 8716fa5234 feat(quick-260921-iwr): Rundenliste der Stoppuhr per Test belegt, MergeTab-Entfernen abgesichert
- Wirkungslose eslint-disable-Zeile in stopwatch-widget.tsx ersetzt durch
  Sachhinweis: Zeilen halten keinen Zustand, Rundennummer wird aus Laenge
  und Position berechnet. Keine neue Unterdrueckung, ARRAYKEY bleibt bei 19.
- Neuer Testfall in stopwatch-widget.test.tsx: zwei Runden nacheinander,
  neuere Runde steht oben, Rundennummern 2/1 stimmen zu ihrer eigenen Zeit.
- Neue MergeTab.test.tsx: Entfernen der mittleren Datei laesst genau erste
  und dritte Datei mit eigenem Namen und eigenem Entfernen-Knopf uebrig.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 13:55:42 +02:00
schalli cfba3c9532 docs(quick-260921-i8x): fuenf Fehlerklassen geprueft, kein echter Fehler darunter
Tessera CI/CD / Lint & Type Check (push) Successful in 54s
Tessera CI/CD / Tests (push) Successful in 1m35s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 19s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m10s
Zusammenfassung und STATE.md zum Quick-Vorgang 260921-i8x.

Zwoelf Stellen einzeln beurteilt: sieben gleichwertig oder Absicht,
zwei Haertungen, drei idiomatisch korrekt. Kein echter Defekt.

Die eine Stelle mit echtem Wert ist safe-next.ts, der Schutz gegen
Weiterleitung auf fremde Seiten. Der Kommentar behauptete Escapes,
die rohen Bytes zeigten eingebettete Steuerzeichen. Jetzt echte
Escapes; Gleichwertigkeit ueber alle 65536 Codepunkte nachgerechnet,
54 abgelehnte Zeichen, null Abweichung, vom Orchestrator unabhaengig
gegen ein eigenes Referenzmuster gegengeprueft.

Bewusst nicht angefasst: die NUL-Maskierung in ldap.service.ts nach
RFC 4515 - genau dieses Zeichen zu treffen ist ihr Zweck.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 13:36:37 +02:00
schalli f85c91be01 fix(web): Steuerzeichen in safe-next.ts als Unicode-Escapes statt Rohbytes
FORBIDDEN_CHARS_RE in sanitizeNextPath bestand aus drei rohen Steuerbytes
(NUL, US, DEL) statt Escapes - jeder Editor, Formatierer oder Minifier in
der Kette kann solche Bytes stillschweigend verschlucken. Umgeschrieben auf
Unicode-Escapes fuer den Bereich U+0000 bis U+001F und U+007F. Zeichenmenge
ueber alle 65536 Codepunkte aus U+0000 bis U+FFFF als unveraendert
nachgewiesen (54 abgewiesene Codepunkte, Bitmap-SHA-256
3d58108b87e4641e506602cc701a66d11ec19cf20551937fada1826f50ecbe64 vor und
nach dem Umbau identisch). Kommentar korrigiert: die vorherige Behauptung,
Escapes seien "am Edge" noetig, war falsch - zwischen den beiden
Escape-Schreibweisen gibt es zur Laufzeit keinen Unterschied.

Quick-Vorgang 260921-i8x, Task 1/3.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 13:26:25 +02:00
schalli 287799a6fc docs(quick-260921-gof): 21 Effekt-Abhaengigkeiten beurteilt, im Browser nachgemessen
Tessera CI/CD / Lint & Type Check (push) Successful in 52s
Tessera CI/CD / Tests (push) Successful in 1m9s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m50s
Zusammenfassung, Verifikation und STATE.md zum Quick-Vorgang 260921-gof.

Ergebnis der Einzelbeurteilung: nur 2 echte Defekte, 15 Fallen (das
naive Eintragen der Abhaengigkeit haette eine Abruf-Schleife erzeugt),
3 bewusste Ausnahmen, 1 Ballast. Die gefaehrlichste Stelle war
calendar-widget.tsx: showToday setzt bei jedem Klick ein frisches Date,
der naive Umbau haette jeden Druck auf den Monatstitel bis zum
Exchange-Server durchschlagen lassen.

Im Browser nachgemessen statt nur behauptet: Dashboard 62 s Ruhe ohne
zusaetzlichen Abruf, Monatstitel dreimal gedrueckt mit null zusaetzlichen
Abrufen nach dem ersten, Stoppuhr echtzeitgetreu ueber 6 s und ueber
4 Runden monoton, dazu acht weitere Ansichten je 20-25 s ruhen gelassen
mit genau einem Abruf je Endpunkt.

Warnungen 467 -> 446, useExhaustiveDependencies 0, web-Tests 66/462 ->
67/477, api unveraendert, type-check 4/4, pnpm lint 5/5.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 13:00:15 +02:00
schalli 54fdf699dc docs(quick-260921-gof): Plan fuer die 21 Effekt-Abhaengigkeiten in React
Alle 21 Befunde der Regel useExhaustiveDependencies einzeln beurteilt und
in vier Klassen eingeteilt: 2x Defekt, 15x Falle, 3x Absicht, 1x Ballast.
Die Vorgabe kennt nur A/B/C -- Biome meldet aber auch ueberfluessige
Abhaengigkeiten, deshalb die vierte Klasse fuer reinen Ballast.

Acht Befunde sind dieselbe t-Falle aus dem Vorgang 260921-bi2: die
Testattrappen fuer next-intl liefern bei jedem Durchlauf eine frische
Funktion, t in eine Abhaengigkeitsliste einzutragen ist hier belegbar
eine Abruf-Schleife. Einheitlicher Griff: uebersetzten Text vor dem Hook
als Zeichenkette festhalten (Wertvergleich statt Identitaetsvergleich).

Kalender: showToday muss zuerst identitaetserhaltend werden, sonst loest
der naive Griff bei jedem Druck auf den Monatsknopf einen Termin-Abruf
bis zum Exchange-Server aus. Nachweis am laufenden System ueber das
Netzwerkprotokoll des Browsers, nicht per fetch aus der Seite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 12:15:40 +02:00
schalli 525f212e39 docs(quick-260921-fi3): erzwungener Passwortwechsel an der API durchgesetzt
Tessera CI/CD / Lint & Type Check (push) Successful in 48s
Tessera CI/CD / Tests (push) Successful in 1m5s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m22s
Plan, Zusammenfassung, Verifikation und STATE.md zum Quick-Vorgang
260921-fi3.

Befund: auth.service legt mustChangePassword in den JWT, jwt.strategy
liess das Feld beim Auspacken fallen. request.user.mustChangePassword
war damit immer undefined und der global registrierte
ForcePasswordChangeInterceptor hat seit seiner Einfuehrung nie
blockiert. Durchgesetzt wurde der Zwangswechsel allein von der
Web-Middleware; jeder Weg daran vorbei umging ihn. Gemessen: eine
Sitzung mit mustChangePassword=true erhielt auf GET /users 200 samt
vollstaendiger Benutzerliste.

Behoben, und belegt bei gleicher Rolle und gleicher Route:
GET /modules/active liefert 403 FORCE_PASSWORD_CHANGE mit Zwang und
200 ohne. Neue Spezifikationen gegen den alten Stand 6 von 12 rot,
danach 12 von 12 gruen, vom Verifier unabhaengig nachgestellt.
Der Browser-Ablauf wurde vollstaendig durchgespielt: niemand wird
ausgesperrt, der Wechsel gelingt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 11:56:17 +02:00
schalli 116041b7fd docs(quick-260921-bi2): gemeldetes Symptom Passwortwechsel widerlegt
Tessera CI/CD / Lint & Type Check (push) Successful in 47s
Tessera CI/CD / Tests (push) Successful in 1m9s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m51s
Der Lint-Durchlauf meldete, die Seite change-password leite nach
erfolgreichem Wechsel nicht weiter und lasse die Person bei erzwungenem
Wechsel stehen. Am laufenden System durchgespielt: trifft nicht zu.
Middleware leitet auf /change-password, der Wechsel landet auf /,
mustChangePassword steht danach auf false, Weiternavigieren geht.

changePasswordAction setzt das neue Sitzungs-Cookie und ruft redirect('/')
serverseitig; die ungenutzten router/setUser im Seitenmodul waren
Ueberbleibsel, kein Symptom. Entfernung des toten Codes war richtig,
die daraus abgeleitete Diagnose nicht.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 11:05:58 +02:00
schalli c001a081c2 docs(quick-260921-bi2): Lint-Rueckstand 2923 -> 465, Akte und Verifikation
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m5s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m24s
Tessera CI/CD / Build & Publish Images (push) Successful in 4m15s
Zusammenfassung, Verifikation und STATE.md zum Quick-Vorgang 260921-bi2.

Kernbefund: Biomes als "safe" eingestufte Korrektur style/useImportType
zerstoert in apps/api die NestJS-Abhaengigkeitsspritze — das erzeugte
__metadata("design:paramtypes", [...]) kollabiert zu [Function, ...] und
die API startet nicht mehr, waehrend tsc gruen bleibt und alle 1124
API-Tests gruen bleiben (kein Test ruft createTestingModule auf).
Deshalb ein zweiter, auf apps/api/** begrenzter overrides-Eintrag.

Nachweis fuer "kein Verhaltenswechsel" ist nicht die Testsuite, sondern
ein sha256 ueber alle 593 erzeugten __metadata-Zeilen (6e1583f1...),
vor und nach dem Umbau identisch. Dazu Klicktest am laufenden System
mit den echten Abbildern: API healthy, Abbrechen legt nichts an,
Speichern legt an, ADMIN sieht auf der SUPER_ADMIN-Zeile nur Details,
abgewiesene Server-Antworten erscheinen sichtbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 10:02:44 +02:00
schalli e7c2c4c6a9 docs(quick-260921-bi2): Plan fuer den Lint-Rueckstand (2923 -> 466)
Drei Durchgaenge nach Risikoklasse: Konfiguration, maschinelle Fixes
plus toter Code, Barrierefreiheit von Hand. Alle Zielzahlen sind beim
Planen probeweise ausgefuehrt, gemessen und zurueckgenommen worden.

Wichtigster Befund: style/useImportType darf in apps/api nicht
maschinell laufen. emitDecoratorMetadata plus NestJS bedeutet, dass die
Korrektur 61 von 65 Dateien mit Abhaengigkeitsdaten zerstoert — bei
gruenem tsc und gruenen 1124 Tests, weil kein Test den Container
startet. Der Plan begrenzt die Regel auf apps/web und verankert als
Nachweis einen sha256 ueber die erzeugten __metadata-Zeilen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 08:39:32 +02:00
schalli 6de5eb4f07 docs(quick-260921-a1d): Benutzerverwaltung meldet abgewiesene Aktionen (WINDOWS #36)
Tessera CI/CD / Lint & Type Check (push) Successful in 55s
Tessera CI/CD / Tests (push) Successful in 1m11s
Tessera CI/CD / Desktop-Pakete bauen (push) Failing after 11m56s
Tessera CI/CD / Build & Publish Images (push) Has been skipped
Zusammenfassung und Verifikation zum Quick-Vorgang 260921-a1d,
Registereintrag #36 geschlossen, STATE.md nachgezogen.

Nachgewiesen: alle drei zuvor stillen Stellen (Liste laden, Formular
speichern, Loeschen) zeigen den Servertext oder eine uebersetzte
Ersatzmeldung; fuer einen ADMIN entfallen Bearbeiten und Loeschen in der
SUPER_ADMIN-Zeile. apps/api blieb unangetastet — der Zielrollen-Riegel
im Controller bleibt die wirksame Grenze. Web-Tests 66 Dateien / 459
Tests gruen (vorher 65/447), type-check Exit 0, pnpm lint 5/5.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 07:41:19 +02:00
schalli 24f51e932d docs(quick-260921-a1d): Plan fuer WINDOWS #36 (stille 403-Antworten)
Drei Aufgaben: Loeschweg end-to-end sichtbar (Tracer), Formular- und
Ladeweg nachziehen, Aktionsknoepfe der SUPER_ADMIN-Zeile fuer ADMIN
nicht anbieten. Texte ueber next-intl in de/en, Serverpruefung
unangetastet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 07:24:05 +02:00
schalli 551d25075f docs(quick-260921-9ie): Biome lauffaehig, Lint-Tor scharf (WINDOWS #35)
Plan, Zusammenfassung und Verifikation zum Quick-Vorgang 260921-9ie,
Registereintrag #35 geschlossen, STATE.md nachgezogen.

Nachgewiesen: pnpm lint fuehrt 5 von 5 Workspace-Aufgaben aus (vorher
"No tasks were executed") und endet auf dem Bestand mit Exit 0; eine
Wegwerfdatei mit debugger laesst denselben Aufruf mit Exit 1 und
noDebugger-Befund scheitern. Repo-weit 0 parse-Fehler, 0 Fehler.
Die Regelgruppe security bleibt unangetastet auf error.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
2026-09-21 07:13:20 +02:00
schalli 55aa287296 docs(quick-260918-gza): Fehlermeldung — Herkunft ausweisen (Browser/Desktop-App, OS, App-Version)
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m6s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m43s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m7s
Plan, Ausfuehrungsbericht, Verifikation (9/9 must_haves) und Aktenstand;
lokaler Nachweis per Playwright/mailhog fuer Browser- und Desktop-Marker-Fall.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016g2npLxzH5gZpg8s2S6vKh
2026-09-18 12:48:01 +02:00
schalli efbd6e8974 docs(quick-260917-kgc): Aktenstand — Update in der Desktop-App, alle Nachweise erbracht, Wiedereinstieg bereinigt
Tessera CI/CD / Lint & Type Check (push) Successful in 53s
Tessera CI/CD / Tests (push) Successful in 1m5s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 18s
Tessera CI/CD / Build & Publish Images (push) Successful in 4m22s
Quick 260917-kgc (Plan/Recherche/Bericht/Verifikation) und Schnellfix a6d1a64
in der Quick-Task-Tabelle; Nachweise in allen sechs Berichten nachgetragen
(Playwright lokal, CI-Laeufe 382-384, Windows-Test-VM: In-App-Update
7479cb4 -> a6d1a64). Ueberholte .continue-here-Dateien entfernt,
Desktop-Client-Todo geschlossen.

Dieser Push aendert nichts unter apps/desktop -- er ist zugleich der
Beweisfall 2 des CI-Desktop-Skips (Pakete aus dem Zwischenspeicher).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016g2npLxzH5gZpg8s2S6vKh
2026-09-18 11:29:14 +02:00
schalli 5a444ec8f2 docs(quick-260917-jdf/jdh/jdd/jn2): Aktenstand — Bildmarke in Akzentfarbe, CI-Desktop-Skip, Favoriten-Symbol/-Sortierung, Desktop-Server-Adresse
Tessera CI/CD / Lint & Type Check (push) Successful in 47s
Tessera CI/CD / Tests (push) Successful in 1m5s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m21s
Tessera CI/CD / Build & Publish Images (push) Successful in 4m20s
Vier Quick-Tasks mit Plan, Bericht und Verifikation; Browser-Nachweis der
Web-Teile lokal erbracht (Kacheln #284a7b bei #0057b8, Proxy-Symbol trotz
Zertifikatsfehler, Direktbild bei interner Adresse, Sortierung ueber Reload).
Offen: CI-Beweis des Desktop-Skips nach diesem Push, Windows-VM-Probe der
Client-Aenderungen mit dem CI-Paket.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:10:20 +02:00
schalli 4c93555a50 docs(quick-260917-h2s): Aktenstand — Desktop-Erkennung, Beta-Hinweis, deutscher Installer; Browser-Nachweise gsh/gyd/h2s
Tessera CI/CD / Lint & Type Check (push) Successful in 47s
Tessera CI/CD / Tests (push) Successful in 1m2s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 4m54s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m54s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 12:46:09 +02:00
schalli 98fad866bf docs(quick): Aktenstand 260917-gyd (Web-Robustheit) + Plan 260917-h2s (Desktop-Erkennung, Beta-Label, deutscher Installer)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 12:31:56 +02:00
schalli 4778824c73 docs(quick-260917-gyd): Plan — Ruecksprung nach Anmeldung, Sitzungswaechter bei toter API-Sitzung, Widgets-Seite uebersetzt
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 12:23:49 +02:00
schalli 7929f843ec docs(quick-260917-gsh): Aktenstand — Akzentfarbe als Hex-Code, Bildmarke in Akzentfarbe
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 12:19:03 +02:00
schalli f6eda20fcb docs(quick-260917-gsh): Plan — Akzentfarbe als Hex-Code eingebbar, Bildmarke uebernimmt Akzentfarbe 2026-09-17 12:12:18 +02:00
schalli a0e4c2103f docs(quick-260917-eta): Aktenstand — Tray „Beenden"/„Öffnen" der Desktop-App repariert, Windows-VM-Bedienprobe
Tessera CI/CD / Lint & Type Check (push) Successful in 49s
Tessera CI/CD / Tests (push) Successful in 1m3s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m3s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m54s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:49:40 +02:00
schalli 26714bd964 docs(quick-260917-eta): Plan — Idempotenz-Hinweise, Fix und CHANGELOG liegen bereits als 68a69c6/9ba7456 vor
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:48:42 +02:00
schalli f3d6b97ece docs(quick-260917-eta): Plan — Desktop-Client Tray: „Beenden“ beendet (ExitRequested nur bei code None verhindern), „Öffnen“/Linksklick per unminimize zurückholen, CHANGELOG
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:47:47 +02:00
schalli 280aab6cf0 docs(quick-260917-e15): Aktenstand — Desktop-Client-Icon (T statt "1"), Benchmark nach VM-Umbau, HANDOFF abgearbeitet
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m4s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m6s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m8s
- STATE.md: Quick-Task-Zeile 260917-e15, Session Continuity, Last activity
- HANDOFF.json entfernt (einmaliges Uebergabe-Artefakt, in dieser Sitzung abgearbeitet)
- config.json: git.allow_default_branch_commits = true — Projekt committet
  per branching_strategy "none" direkt auf main; ohne den Schalter blockiert
  der Pre-Commit-Guard des Executors jeden Quick-Task
- SUMMARY des Quick-Tasks

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:17:43 +02:00
schalli c1c3130dfe docs(quick-260917-e15): Plan — Desktop-Client-Icon: Satz mit resvg (tauri icon) statt ImageMagick-MSVG neu erzeugen, gedrehte gelbe Kachel zurueck (T statt 1)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:11:58 +02:00
schalli 7110512d83 docs(quick-260916-k2z): Mehrfach-Kreise je Kalender am Tag; Zusammenfassung, Aktenstand
Tessera CI/CD / Lint & Type Check (push) Successful in 48s
Tessera CI/CD / Tests (push) Successful in 1m6s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m58s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 14:38:40 +02:00
schalli 45b20a9fd4 docs(quick-260916-k2z): Plan — Kalender-Widget: mehrere Kalender am selben Tag als kleine Kreise je Kalender (max. 3, Rest grau gebuendelt)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 14:33:09 +02:00
schalli f79c6bbe8c docs(quick-260916-jvj): Plaketten in Kalenderfarbe, Aufzaehlungspunkte; Zusammenfassung, Aktenstand
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 14:27:34 +02:00
schalli 5313fbc019 docs(quick-260916-jvj): Plan — Kalender-Plaketten in Kalenderfarbe, Farbpunkt je Tooltip-Zeile, Aufzaehlungspunkte in Markdown-Ansichten (globals.css), Changelog
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 14:23:30 +02:00
schalli 6003f21431 docs(quick-260916-j4f): Nachtraege — Tooltip-Umbruch, Notiz-Farbmodus, Changelog-Stichpunkte; Zusammenfassung, Aktenstand
Tessera CI/CD / Lint & Type Check (push) Successful in 49s
Tessera CI/CD / Tests (push) Successful in 1m4s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m59s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:57:44 +02:00
schalli 4f823c3e66 docs(quick-260916-j4f): Plan — Nachträge: Kalender-Tooltip bricht lange Titel um (min-w-0 break-words, Breite/Klemmung aus TOOLTIP_WIDTH_PX), Notiz-Widget folgt dem Tessera-Farbmodus (useTheme + mounted-Guard wie changelog-view), CHANGELOG.md auf Stichpunkte gestrafft (Soll-Vorlage übernehmen, dann löschen)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:52:49 +02:00
schalli 48db8e2408 docs(quick-260916-iex): Notiz-Haekchen, Favoriten-Titel, Link-Widget entfernt; Zusammenfassung, Aktenstand
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:46:06 +02:00
schalli 3c890afd92 docs(quick-260916-iex): Plan — Dashboard-Widgets: Notiz-Häkchen in der Ansicht abhakbar (components-Override nach rehypeSanitize, Sofort-Speichern), Favoriten-Widget mit optionalem Titel (Kopfzeile im Notiz-Look, FavoritesConfig, i18n), Link-Widget komplett entfernt (Web/API-DTO/Migration DELETE/Docs/Changelog)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:32:02 +02:00
schalli 5d5d4ac2a7 docs(quick-260916-htc): Kalender-Widget — Monatsraster + Naechste Termine, drei Einstellungen; Zusammenfassung, Aktenstand
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:15:12 +02:00
schalli 785c791dd4 docs(quick-260916-htc): Plan — Kalender-Widget nach Vorbild personal-dashboard: Monatsraster + Nächste Termine, Einstellungen showMonth/maxEvents/lookaheadDays, i18n de/en, Tests, Changelog, Handbuch 2026-09-16 13:02:28 +02:00
schalli a60c168587 docs(quick-260916-hiv): Kalenderquellen-Formular — URL-Platzhalter je Typ + EWS-Hinweis; Zusammenfassung, Aktenstand
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 12:49:28 +02:00
schalli a5f30d432d docs(quick-260916-hiv): Plan — Kalenderquellen-Formular: URL-Platzhalter je Typ (EWS/Graph/CalDAV/ICS) + grauer EWS-Hinweis, i18n de/en, Komponententest, Changelog 2026-09-16 12:44:50 +02:00