Files
lernbar/DEVLOG.md
T
Florian WildeandClaude Opus 5 1af5613e9b Baustein 2: Inhalte einlesen und pruefen, Handouts, Suche, Glossar
Die fachlichen Inhalte liegen als Dateien unter content/ und werden beim
Start eingelesen, geprueft und in den Speicher geladen.

- Inhaltslader mit Zod-Schemata und Querverweispruefung
- Fehlermeldungen nennen Datei und Zeile, gesammelt statt beim ersten
  Fehler geworfen; die Anwendung startet bei Fehlern nicht
- npm run inhalte:pruefen prueft ohne Start
- Handout-Ansicht mit festem Aufbau, Uebersicht nach Themenbloecken
- Volltextsuche mit Gewichtung und Trefferausschnitt
- Gelesen-Markierung je Handout
- Glossar mit Suche und automatischer Verlinkung in den Handouts
- Beispielinhalte: 4 Wochen, 12 Handouts, 24 Merkkarten, 4 Aufgaben,
  4 Checklisten, 2 Lernzielkontrollen, 24 Glossareintraege
- rahmenplan.yaml aus FIAusbV 2020 und KMK-Rahmenlehrplan, mit Fundstellen
- gray-matter entfernt, YAML-Kopf wird selbst herausgeloest
- npm run screenshots nimmt die Bilder fuer die Anleitung auf
- 39 neue Tests, insgesamt 68

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

75 lines
4.4 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 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. -->