- 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>
139 lines
7.9 KiB
Markdown
139 lines
7.9 KiB
Markdown
# 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. -->
|