Files
lernbar/DEVLOG.md
T
Florian WildeandClaude Opus 5 bb592ad2bd Baustein 4: Merkkarten mit Wiederholung nach Zeitabstand
- Abgespecktes SM-2 mit drei Bewertungsstufen statt sechs
- Abstaende 1, 3, dann Abstand mal Leichtigkeit; gedeckelt bei 180 Tagen
- "nochmal" bringt die Karte in derselben Sitzung wieder
- Taeglicher Stapel, gedeckelt auf 20 Karten, ueberfaellige zuerst
- Fuenf Faecher zur Anzeige, abgeleitet aus dem Abstand
- Filter nach Themenblock fuer gezieltes Ueben
- Lernmodus fuers Handy: grosse Flaechen, Antippen, Wischen, kein Hover;
  am Rechner zusaetzlich Leertaste und Tasten 1/2/3
- Tabellen karte und karten_verlauf, jede Bewertung wird mitgeschrieben
- Merkkarten zaehlen im Wochenfortschritt mit, gelernt ab Fach 4
- Kopfzeile am Handy einzeilig, Tipp-Hervorhebung abgeschaltet
- 29 neue Tests, insgesamt 133

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 11:16:40 +02:00

139 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Arbeitstagebuch
Zeiten in Europe/Berlin. Jeder Abschnitt entspricht einem Baustein aus dem
[Fahrplan](ROADMAP.md).
Format: `HH:MM–HH:MM (Dauer) · was gemacht wurde`
---
## 2026-09-10 · Baustein 4 – Merkkarten
| Von | Bis | Dauer | Tätigkeit |
|---|---|---|---|
| 11:00 | 11:20 | 0:20 | Wiederholungsverfahren: SM-2 auf drei Bewertungsstufen eingedampft, Fächer, Stapelauswahl |
| 11:20 | 11:35 | 0:15 | 29 Tests dazu – einer schlug an, der Test war falsch, nicht der Code (siehe unten) |
| 11:35 | 11:50 | 0:15 | Migration, Schema, Repository, Serveraktion für die Bewertung |
| 11:50 | 12:15 | 0:25 | Lernmodus: Karte, Umdrehen, Wischen, Tastatur; Kartenübersicht mit Fächern |
| 12:15 | 12:30 | 0:15 | Durchstich am Rechner und am Handy, zwei Mängel am Handy behoben |
| 12:30 | 12:40 | 0:10 | Karten in den Wochenfortschritt gehängt, Dokumente nachgezogen |
**Summe Baustein 4: rund 1 h 40 min**
### Was aufgefallen ist
- Ein Test schlug fehl: „gibt einen leeren Stapel zurück, wenn nichts fällig
ist". Der Code lieferte eine nie gelernte Karte zurück – und hatte recht.
Eine Karte ohne Fälligkeitsdatum muss immer fällig sein, sonst käme sie nie
dran. Ich habe die Erwartung korrigiert und den Fall in zwei Tests getrennt.
- „nochmal" muss die Karte **in derselben Sitzung** wiederbringen. Sie nur auf
morgen zu legen, wäre folgenlos gewesen – man drückt „nochmal" ja gerade,
weil man sie jetzt noch einmal sehen will.
- Am Handy legte der Browser beim Antippen eine blaue Fläche über die ganze
Lernkarte. `-webkit-tap-highlight-color: transparent` behebt das; ohne einen
Blick auf ein echtes Gerätemaß wäre es nie aufgefallen.
- Die Kopfzeile brauchte am Handy drei Zeilen und schob die Karte nach unten.
Jetzt: Marke und Bedienung in einer Zeile, Navigation darunter zum Schieben.
- Der Stapel wird bei 20 Karten gedeckelt. Ohne Deckel sitzt jemand nach drei
Wochen Pause vor 52 Karten und macht es gar nicht.
---
## 2026-09-10 · Baustein 3 – Wochenplan
| Von | Bis | Dauer | Tätigkeit |
|---|---|---|---|
| 09:05 | 09:20 | 0:15 | Datenmodell der Wochenplanung, Migration, Drizzle-Schema |
| 09:20 | 09:45 | 0:25 | Planungslogik als reine Funktionen: erzeugen, verschieben, umsortieren, „welche Woche ist dran", Überschneidungen; dazu die Fortschrittsrechnung |
| 09:45 | 09:55 | 0:10 | 36 Tests dafür – liefen beim ersten Anlauf durch |
| 09:55 | 10:10 | 0:15 | Repository-Schicht, Wochensicht aus Inhalt + Planung + Fortschritt |
| 10:10 | 10:35 | 0:25 | Wochenansicht, Startseiten für beide Rollen, Wocheneinzelansicht |
| 10:35 | 10:55 | 0:20 | Wochenplanseite: verlegen, umsortieren mit Ziehen und Tastatur, Zustand, Notizen |
| 10:55 | 11:10 | 0:15 | Durchstich im Browser, Screenshots, Dokumente nachgezogen |
**Summe Baustein 3: rund 2 h 05 min**
### Was aufgefallen ist
- Beim Umsortieren war die erste Idee, die Termine mitzuziehen. Falsch: Dann
entstehen Lücken und Überschneidungen. Richtig ist, die Folge der
Kalenderwochen als festen Rahmen zu behandeln und nur die Zuordnung zu
ändern – der Plan bleibt so immer lückenlos.
- Der Lint-Fehler „azubiId is defined but never used" im Verlegen-Formular war
kein Stilproblem, sondern ein echter Bug: Dem Formular fehlte das versteckte
Feld, das die Serveraktion ausliest. Ein Lauf hätte den Fehler zwar auch
gezeigt, aber erst nach dem Klick.
- Ziehen und Ablegen allein reicht nicht. Wer mit der Tastatur arbeitet, kommt
damit nicht weiter, deshalb tun es die Pfeilknöpfe und Alt + Pfeil genauso.
- Die Erfolgsmeldung nach „Wochen einplanen" ist nicht zu sehen, weil das
Formular danach verschwindet – die erscheinende Planliste ist die
Rückmeldung. Kein Fehler, aber es hat mich im Testskript zunächst gekostet.
---
## 2026-09-10 · Baustein 2 – Inhalte
| Von | Bis | Dauer | Tätigkeit |
|---|---|---|---|
| 07:05 | 07:15 | 0:10 | Remote eingetragen, Push scheitert an fehlenden Zugangsdaten – zurückgestellt, Arbeit läuft weiter |
| 07:15 | 07:25 | 0:10 | Ausbildungsrahmenplan und Lernfelder aus den Quellen geholt statt geraten (FIAusbV Anlage, KMK-Rahmenlehrplan) |
| 07:25 | 07:50 | 0:25 | Beispielinhalte geschrieben: 12 Handouts mit Merkkarten, 4 Wochenpläne, 4 Aufgaben, 4 Checklisten, 2 Lernzielkontrollen, 24 Glossareinträge |
| 07:50 | 08:20 | 0:30 | Inhaltslader: YAML-Dokumentmodell für Zeilennummern, Zod-Schemata, Fehlersammler, Querverweisprüfung |
| 08:20 | 08:35 | 0:15 | Handout-Ansicht, Übersicht nach Blöcken, Volltextsuche, Glossar mit automatischer Verlinkung |
| 08:35 | 08:50 | 0:15 | 39 neue Tests; zwei echte Fehler dabei gefunden (siehe unten) |
| 08:50 | 09:00 | 0:10 | Screenshot-Skript, Bilder aufgenommen, Fahrplan und Änderungsprotokoll nachgezogen |
**Summe Baustein 2: rund 1 h 55 min**
### Was aufgefallen ist
- Die Zeilennummer in der Fehlermeldung war den Aufwand wert. Beim ersten Lauf
gegen die echten Inhalte kam sofort `content/glossar.yaml:8 – Expected string,
received number`: `formen: [169.254]` hatte YAML als Gleitkommazahl gelesen.
Ohne Zeilenangabe hätte ich das in 24 Einträgen gesucht.
- `gray-matter` liefert beim zweiten Einlesen desselben Textes ein Objekt ohne
das Feld `matter` – im Betrieb fällt das nie auf, im Test sofort. Den YAML-Kopf
selbst herauszulösen ist zehn Zeilen Arbeit und beseitigt gleich zwei Probleme.
- Zod-Schemata mit `.default()` haben verschiedene Ein- und Ausgabetypen. Mit
`z.ZodType<T>` erzwingt TypeScript Gleichheit und leitet den falschen Typ ab;
`<S extends z.ZodTypeAny>` mit `z.output<S>` ist die richtige Form.
- Der Auftrag nennt für den Rahmenplan `C1` bis `C4`. Die Verordnung führt in
Abschnitt F aber **fünf** integrativ zu vermittelnde Positionen. Ich habe alle
fünf aufgenommen – sonst fehlt in der Abdeckung ausgerechnet die Position, die
2020 neu dazugekommen ist („Vernetztes Zusammenarbeiten unter Nutzung digitaler
Medien"). Siehe ENTSCHEIDUNGEN.md, E10.
---
## 2026-09-10 · Baustein 1 – Fundament
| Von | Bis | Dauer | Tätigkeit |
|---|---|---|---|
| 00:15 | 00:20 | 0:05 | Auftrag gesichtet, fehlende Stackvorgabe geklärt (Next.js 15 + React 19 + TypeScript), Repository angelegt |
| 00:20 | 00:28 | 0:08 | Abhängigkeiten installiert; `better-sqlite3` auf v12 gehoben, weil es für Node 24 sonst keine fertige Binärdatei gibt und der Bau über Visual Studio scheiterte |
| 00:28 | 00:40 | 0:12 | Datenbankschicht: Drizzle-Schema, eigener Migrationslauf mit Prüfsummen, Verbindung als Prozess-Singleton |
| 00:40 | 00:52 | 0:12 | Zeitrechnung (Europe/Berlin, ISO-Kalenderwochen), Argon2id, serverseitige Sitzungen, Rechteregeln als reine Funktionen |
| 00:52 | 01:10 | 0:18 | Gestaltung: Farbwelt Petrol/Bernstein, helle und dunkle Darstellung, Bedienelemente, Druckansicht |
| 01:10 | 01:25 | 0:15 | Anmeldung, Rahmenlayout, Startseite, Verwaltung (Konto und Ausbildung anlegen, Passwort, Sperren) |
| 01:25 | 01:32 | 0:07 | Erstes Ausbilderkonto über Skript angelegt, Typprüfung und Bau grün, Server geprüft |
| 01:32 | 01:50 | 0:18 | Dockerfile, docker-compose, Lebenszeichen, `update.sh` mit Rückfall, Sicherung und Wiederherstellung |
| 01:50 | 02:05 | 0:15 | Fahrplan, Änderungsprotokoll, Arbeitstagebuch, Entscheidungen, README |
**Summe Baustein 1: rund 1 h 50 min**
### Was aufgefallen ist
- Der Auftrag verweist zweimal auf einen „Kopf des Prompts" (Stack, Anmeldung),
der nicht mitgeliefert wurde. Die Anmeldung war aus den technischen Vorgaben
ableitbar, der Stack nicht – dafür gab es eine Rückfrage.
- `npm` blockiert seit Version 11 Installationsskripte fremder Pakete.
`better-sqlite3`, `esbuild` und `unrs-resolver` mussten einmalig über
`npm approve-scripts` freigegeben werden. Das gehört in die README, sonst
läuft ein Fremder in genau diese Wand.
- Windows und LF: ohne `.gitattributes` hätte Git die Shell-Skripte mit CRLF
ausgecheckt, und der Linux-Container hätte sie nicht mehr gestartet.
---
<!-- Neue Bausteine werden oben angefügt, damit der aktuelle Stand zuerst steht. -->