- Wochenplan ist die Startseite des Azubis: Thema, Leitfrage, fuenf Tage mit Theorie und Praxis, Fortschrittsbalken, was noch offen ist - Ausbilder sieht je Azubi die laufende Woche mit Stand und offenen Punkten - /woche/<nr> fuer jede Woche, Ausbilder waehlt ueber ?azubi= den Stand; Zugriff wird serverseitig bei jedem Aufruf geprueft - Tabelle wochenplanung mit geplantem und tatsaechlichem Datum, Zustand und Notiz fuer den Azubi - Verschieben per Datumsfeld, wahlweise mit allen folgenden Wochen - Reihenfolge per Ziehen und Ablegen sowie per Tastatur (Alt + Pfeil) - Warnung bei sich ueberlappenden Terminen - Plan entsteht automatisch beim Anlegen eines Azubikontos - Planungs- und Fortschrittslogik als reine Funktionen, 36 Tests dafuer - Insgesamt 104 Tests Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
150 lines
7.4 KiB
Markdown
150 lines
7.4 KiB
Markdown
# Änderungsprotokoll
|
||
|
||
Alle nennenswerten Änderungen an der Lern-Bar stehen hier.
|
||
Aufbau nach [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
|
||
Versionsnummern nach [Semantischer Versionierung](https://semver.org/lang/de/).
|
||
|
||
## Wie versioniert wird
|
||
|
||
- **Patch** (0.1.**x**) – Fehlerbehebungen, Textkorrekturen, Inhaltsänderungen
|
||
- **Minor** (0.**x**.0) – ein neuer Baustein aus dem [Fahrplan](ROADMAP.md)
|
||
- **Major** (**x**.0.0) – 1.0.0 ist die erste abnahmefähige Fassung; danach
|
||
nur noch bei Änderungen, die einen Eingriff beim Betrieb erfordern
|
||
(Datenformat, Umgebungsvariablen, Betriebsablauf)
|
||
|
||
Eine Fassung wird so festgeschrieben:
|
||
|
||
```bash
|
||
npm version minor -m "Fassung %s" # hebt package.json und setzt ein Git-Etikett
|
||
git push --follow-tags
|
||
```
|
||
|
||
Vor `npm version` wandert der Abschnitt „Unveröffentlicht" unter eine neue
|
||
Überschrift mit Nummer und Datum.
|
||
|
||
---
|
||
|
||
## [Unveröffentlicht]
|
||
|
||
## [0.3.0] – 2026-09-10
|
||
|
||
Der Wochenplan wird zur Startseite, und der Ausbilder kann ihn umplanen.
|
||
|
||
### Hinzugefügt
|
||
|
||
- **Wochenplan als Startseite des Azubis**: Woche, Thema, Leitfrage, Wochenziel,
|
||
die fünf Tage mit Theorie- und Praxisteil, hervorgehobener heutiger Tag,
|
||
Fortschrittsbalken und eine Liste dessen, was noch offen ist
|
||
- Der Ausbilder sieht auf seiner Startseite je Azubi die laufende Woche mit
|
||
Fortschritt und offenen Punkten, mit Sprung in die Wocheneinzelansicht
|
||
- `/woche/<nr>` zeigt jede beliebige Woche; der Ausbilder wählt über `?azubi=`,
|
||
wessen Stand er sieht – geprüft wird das serverseitig bei jedem Aufruf
|
||
- Tabelle `wochenplanung` mit geplantem und tatsächlichem Datum, Zustand
|
||
(`geplant` / `laufend` / `abgeschlossen`) und einer Notiz für den Azubi
|
||
- Wochenplanseite für den Ausbilder:
|
||
- Plan aus den Wochen des Repositorys erzeugen und fehlende Wochen anhängen
|
||
- Woche auf ein neues Datum verlegen, wahlweise mit allen folgenden Wochen;
|
||
ein beliebiges Datum wird auf den Montag seiner Woche gerundet
|
||
- Reihenfolge per Ziehen und Ablegen ändern – die Terminfolge bleibt fest,
|
||
nur die Zuordnung wechselt, damit der Plan lückenlos bleibt
|
||
- Dasselbe mit der Tastatur über Alt + Pfeil hoch/runter, damit die Funktion
|
||
nicht auf die Maus angewiesen ist
|
||
- Zustand je Woche setzen; beim Start wird das tatsächliche Datum vermerkt
|
||
- Notiz je Woche, die der Azubi in seiner Wochenansicht sieht
|
||
- Warnung, wenn sich nach einem Einzelverschieben Termine überlappen
|
||
- Der Wochenplan entsteht automatisch, sobald ein Azubikonto angelegt wird
|
||
- Fortschrittsrechnung als reine Funktion über Zählwerte, damit sie mit den
|
||
weiteren Bausteinen wachsen kann, ohne sich zu verzweigen
|
||
- 36 Tests für Planerzeugung, Verschieben, Umsortieren, „welche Woche ist dran"
|
||
und die Fortschrittsrechnung
|
||
|
||
### Angemerkt
|
||
|
||
- Praxisaufgaben, Checklisten und Lernzielkontrollen erscheinen im
|
||
Fortschritt bereits mit ihrer Sollzahl, lassen sich aber erst mit den
|
||
Bausteinen 5 bis 8 abhaken. Das ist Absicht: Die Woche zeigt, was ansteht,
|
||
auch wenn die Anwendung es noch nicht mitzählen kann
|
||
|
||
## [0.2.0] – 2026-09-10
|
||
|
||
Die Inhalte kommen ins Spiel: Handouts, Suche, Glossar – alles aus Dateien
|
||
im Repository, beim Start geprüft.
|
||
|
||
### Hinzugefügt
|
||
|
||
- Inhaltslader für `content/`: YAML und Markdown mit YAML-Kopf, Prüfung über
|
||
Zod-Schemata, Aufbau aller Querverweise
|
||
- **Fehlermeldungen mit Datei und Zeile.** Fehler werden gesammelt statt beim
|
||
ersten geworfen – wer zehn Tippfehler eingebaut hat, sieht sie in einem
|
||
Durchgang. Die Zeilennummer stammt aus dem YAML-Dokumentmodell, nicht aus
|
||
einer Schätzung
|
||
- Geprüft wird unter anderem: Existenz jeder referenzierten Kennung, Zugehörigkeit
|
||
jedes Handouts zu genau einer Woche (in beide Richtungen), Kürzel passend zum
|
||
Themenblock, Berufsbildpositionen und Lernfelder gegen `rahmenplan.yaml`,
|
||
lückenlose Wochennummerierung, doppelte Kennungen, Glossarverweise ins Leere
|
||
- `npm run inhalte:pruefen` prüft ohne Start und meldet zusätzlich, welche
|
||
Berufsbildpositionen bisher von keinem Inhalt berührt werden
|
||
- Handout-Ansicht mit dem festen Aufbau: Kürzel, Titel, „Worum es geht",
|
||
Das Wesentliche, Übersicht, hervorgehobener Merksatz, eingeklappte
|
||
Prüfungsfrage; dazu die Zuordnung zu Rahmenplan, Lernfeld und Woche
|
||
- Handout-Übersicht nach Themenblöcken, Filter je Block, Lesestand je Block
|
||
- Volltextsuche über Titel, Kurzbeschreibung, Merksatz, Merkkarten und
|
||
Fließtext – mit Gewichtung und Trefferausschnitt, unempfindlich gegen
|
||
Umlaute und Großschreibung
|
||
- „Als gelesen markieren" je Handout, gespeichert je Benutzer
|
||
- Glossar mit Suche; Begriffe werden in den Handouts automatisch verlinkt –
|
||
höchstens einmal je Seite, nie in Code, Überschriften oder bestehenden
|
||
Verweisen. Der Verweis ist ein echter Link mit Erklärung im title-Attribut,
|
||
damit er auch am Handy und mit der Tastatur nutzbar ist
|
||
- Neu einlesen bei Dateiänderung im Entwicklungsbetrieb; schlägt das fehl,
|
||
bleibt der bisherige Stand aktiv und der Fehler steht im Protokoll
|
||
- Beispielinhalte: 4 Wochen, 12 Handouts mit 24 Merkkarten, 4 Praxisaufgaben,
|
||
4 Checklisten, 2 Lernzielkontrollen mit Musterlösungen, 24 Glossareinträge
|
||
- `content/rahmenplan.yaml` mit allen Berufsbildpositionen der FIAusbV 2020
|
||
(Abschnitte A, C und F, hier als A1–A10, B1–B3, C1–C5) samt amtlicher
|
||
Fundstelle sowie allen zwölf Lernfeldern des KMK-Rahmenlehrplans
|
||
- `npm run screenshots` nimmt die Bilder für die Anleitung automatisiert auf
|
||
|
||
### Geändert
|
||
|
||
- `gray-matter` entfernt: Der YAML-Kopf wird selbst herausgelöst. Die Bibliothek
|
||
merkt sich Ergebnisse und lieferte beim zweiten Einlesen desselben Textes ein
|
||
anderes Objekt; außerdem stimmt der Zeilenversatz für Fehlermeldungen jetzt
|
||
garantiert
|
||
|
||
## [0.1.0] – 2026-09-10
|
||
|
||
Erster Baustein: das Fundament steht, die Anwendung lässt sich starten,
|
||
anmelden und verwalten.
|
||
|
||
### Hinzugefügt
|
||
|
||
- Projektgerüst mit Next.js 15 (App Router), React 19, TypeScript
|
||
- SQLite über Drizzle ORM; der gesamte Datenzugriff liegt hinter einer
|
||
Repository-Schicht, damit ein späterer Wechsel auf PostgreSQL kein Umbau ist
|
||
- Eigener Migrationslauf: `src/lib/db/migrationen/*.sql` werden beim Start
|
||
einmalig angewendet und mit Prüfsumme vermerkt; nachträgliche Änderungen an
|
||
bereits angewendeten Dateien lassen die Anwendung mit klarer Meldung abbrechen
|
||
- Anmeldung mit Argon2id, serverseitigen Sitzungen, HttpOnly-Cookie und
|
||
`SameSite=Lax`; im Cookie steht nur ein Zufallswert, gespeichert wird dessen
|
||
SHA-256-Abdruck
|
||
- Zwei Rollen (`ausbilder`, `azubi`); die Rechteregeln liegen als reine
|
||
Funktionen in `src/lib/auth/regeln.ts` und sind vollständig testbar
|
||
- Verwaltungsbereich für den Ausbilder: Azubikonto samt Ausbildung anlegen,
|
||
Eckdaten ändern, Passwort setzen, Konto sperren und entsperren
|
||
- Gestaltung in Petrol/Bernstein, helle und dunkle Darstellung mit Umschalter
|
||
in der Kopfzeile, nur Systemschriften, keine Ressourcen von außen
|
||
- Zeitrechnung für Europe/Berlin und Kalenderwochen nach ISO 8601
|
||
- Mehrstufiges Dockerfile, `docker-compose.yml` mit einem Dienst und einem
|
||
Volume, Lebenszeichen unter `/api/gesundheit`
|
||
- `update.sh` für den Linux-Server: sichert, holt den Quelltext, baut, schaltet
|
||
um und fällt bei fehlendem Lebenszeichen automatisch auf die vorherige
|
||
Fassung zurück
|
||
- `sicherung.sh` und `wiederherstellen.sh` für Datenbank und Anhänge
|
||
- `npm run konto:anlegen` für das erste Ausbilderkonto
|
||
|
||
[Unveröffentlicht]: #unveröffentlicht
|
||
[0.3.0]: #030--2026-09-10
|
||
[0.2.0]: #020--2026-09-10
|
||
[0.1.0]: #010--2026-09-10
|