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