Skip to content

Automation: API-Auth, Postfach und Kalender, Excel im Browser, ausführbare Fehlerfälle (LRN-12) - #28

Open
hernstev97 wants to merge 10 commits into
mainfrom
feat/lrn-12-automation-depth
Open

hernstev97 wants to merge 10 commits into
mainfrom
feat/lrn-12-automation-depth

Conversation

@hernstev97

Copy link
Copy Markdown
Owner

Löst LRN-12. Der Automation-Kurs hält jetzt, was area.yaml verspricht: Excel und Web-APIs mit Authentifizierung. Dazu kommen Postfach und Kalender, Logs und Geheimnisse und Fehlerfälle, die als Code-Übungen im Browser scheitern statt nur beschrieben zu werden.

Was neu ist

Modul Track Ort Übungen (code)
API-Authentifizierung – Schlüssel, Tokens und Signaturen Daten & Web Unterwegs 13 (5)
Postfach und Kalender automatisieren Betrieb Unterwegs 12 (5)
Fehlerfälle ausführbar machen Betrieb Unterwegs 13 (5)
Logs und Geheimnisse im Betrieb Betrieb Unterwegs 12 (5)
Datenformate (Ausbau: openpyxl) Daten & Web Unterwegs 11 → 14
Scraping & Browser (Ausbau: storage_state, Waits, Trace, route) Daten & Web Am PC 11 → 14
  • API-Authentifizierung: 401 gegen 403, API-Key im Header, Basic (RFC 7617), Bearer (RFC 6750), OAuth 2.0 mit client_credentials (ohne Refresh-Token, RFC 6749 §4.4.3) und Refresh-Token mit Rotation (§6, RFC 9700), Token-Cache mit injizierter Uhr, genau eine Erneuerung bei 401, HMAC-Webhooks mit dem Testfall aus der GitHub-Doku. Die Fake-API liefert 401 und bricht nach fünf Anfragen mit „Endlosschleife?“ ab.
  • Postfach und Kalender: UID, UIDVALIDITY, Flags und PERMANENTFLAGS, BODY.PEEK[] statt BODY[], $Verarbeitet als Verarbeitungszustand, Anhänge unter sicheren Namen speichern und versenden, ICS nach RFC 5545 erzeugen und lesen, Google Calendar und Microsoft Graph als Konzept.
  • Fehlerfälle: Fake-Uhr, Full Jitter und Deadline, Retry nach Statuscode mit Retry-After als Zahl und HTTP-Datum, Lockfile mit O_EXCL und flock, Checkpoint nach der Wirkung mit os.replace, Deduplizierung mit UNIQUE, INSERT OR IGNORE und rowcount.
  • Logs und Geheimnisse: JSON-Formatter, Lauf-ID per ContextVar-Filter am Handler oder LoggerAdapter, INVOCATION_ID, Rotation, Schwärzen; keyring, .env, LoadCredential, Actions-Secrets, Ablauf bei einem geleakten Token.
  • Projekte: api-melder mit OAuth-Refresh (neuer Schritt und neue Abnahme, alte IDs bleiben), neues Projekt postfach-rechnungen am PC (IMAP, Anhänge, Excel, ICS, LoadCredential, flock).
  • Nachschlagen: 15 neue Karten, 12 Begriffe, sechs Spickzettel-Abschnitte, area.yaml mit neuem Outcome, kurze Verweise aus sechs bestehenden Lektionen.
  • Plattform: openpyxl 3.1.5 und et_xmlfile 2.0.0 liegen als reine Python-Wheels in vendor/pyodide (zusammen rund 270 KB) und laden wie pytest per Dateiname, sobald Code openpyxl importiert. pnpm verify installiert dieselben Versionen. Handbuch und README nennen das.

Automation: 13 → 17 Module, 152 → 208 Übungen (code 45 → 69), 45 → 60 Karten, 4 → 5 Projekte, 48 → 60 Begriffe, 38 → 54 h. 20 der 24 neuen Code-Übungen lösen echte Fehler aus (401, 503-Folgen, Absturz zwischen Wirkung und Checkpoint, belegter Lock, kaputte Signatur, Pfad im Anhangnamen, Duplikat nach Neustart).

Entscheidungen, die ich getroffen habe

  • Eigene Module statt Ausbau für Logs/Geheimnisse und Fehlerfälle. cli-werkzeuge hat schon 14 Übungen, robustheit 11; der Stoff hätte beide über den Richtwert gedrückt. Die alten Module verweisen in einem Satz auf die neuen, ihre Übungen bleiben unverändert.
  • scraping-browser ist „Am PC“, weil die Praxisaufgabe einen echten Browser startet. Die neuen Code-Übungen dort laufen mit Fakes auch unterwegs. datenformate ist „Unterwegs“; dafür habe ich seinen Code auf Handybreite gebracht.
  • „client_credentials und Refresh-Token“ aus dem Issue lehre ich als zwei Wege: Dienstkonten bekommen laut RFC kein Refresh-Token, Nutzer-Tokens schon.
  • Fortschritt: Durch den Umbau ändert sich der geprüfte Teil von datenformate/pipeline, csv-quote, json-typen, id-verlust, excel-cache und die Checkliste von scraping-browser/fixture-browser. Frühere Lösungen dieser sechs Übungen zählen nicht mehr; IDs sind unverändert.
  • Lokale Gegenproben statt nur Doku: imaplib-Code und Musterlösungen liefen gegen GreenMail 2.1.8 in Docker (nur 127.0.0.1), ICS-Lösungen gegen die Bibliothek icalendar in beide Richtungen, alle Playwright-Beispiele und die Praxislösung mit Python-Playwright 1.63 offline über route, LoadCredential in einer User-Unit.

Belege

  • pnpm content:check: Automation ohne Hinweis (die 11 Hinweise betreffen Narrative wie auf main).
  • pnpm verify: alle Bereiche 1413 Prüfungen, 0 Fehler (vor den Review-Korrekturen); danach Automation 226 Prüfungen, 0 Fehler.
  • pnpm test 329/329, pnpm lint, pnpm build grün.
  • Eigener Pyodide-Lauf mit src/python/harness.py: alle 208 Automation-Prüfungen bestehen, jede Musterlösung grün, jeder Starter scheitert.
  • pnpm test:e2e: 59/59, darunter „automation: every runnable solution passes in the actual browser runtime“. Der Viewport-Test aus LRN-31 lief hier grün; angefasst habe ich ihn nicht.
  • Im Browser durchgeklickt, auch mobil: jede Lektion und jede Übung der fünf Unterwegs-Module bei 360 px, dazu Bereich, Projekte und Spickzettel bei 1280 px. Keine Seite scrollt seitlich, kein lesbarer Codeblock scrollt, kein Skriptfehler. Code-Übungen mit openpyxl, 401-Fakes, Lockfile, Lauf-ID und ICS im Browser gelöst.
  • Unabhängige Prüfung durch einen zweiten Agenten: 7 Muss- und rund 20 kleinere Befunde, alle eingearbeitet (eigener Commit).

Offen

  • Frage an Steven: Editierbare Blöcke (Lektionsblöcke mit „Ausführen“, Code-Editoren) haben unter 640 px fest 16 px Schrift und fassen bei 360 px nur 27 Zeichen. Sie scrollen deshalb seitlich, wie schon im Combat-Kurs. Lesbarer Code passt auf 35 Zeichen. Soll die Editorschrift auf dem Handy kleiner werden? Das betrifft alle Kurse und ist hier nicht geändert.
  • Der eingeklappte „Testcode ansehen“-Kasten kann bei 360 px seitlich scrollen.
  • XOAUTH2 gegen echte Anbieter und keyring sind nur gegen die Doku geprüft, ohne echte Konten.
  • Überschneidungen: HANDBUCH (Laufzeitumgebung, verify-Absatz) und README (Zeilen 11, 23, 78). Die offenen PRs Neuer Kurs Godot 4 für Gestaltung & 2D-Prototypen mit Screenshots aus Editor und Spiel (LRN-23) #22–Neuer Kurs Sounddesign & interaktive Musik für Handy und PC (LRN-28) #26 ändern dort andere Stellen (HANDBUCH um Zeile 71, 152, 240, README Zeilen 1–6); ich erwarte keinen Konflikt.

Screenshots

Handy, 360 px
Lektionskopf von API-Authentifizierung mit der Marke „Unterwegs“ Der Starter mit Endlosschleife scheitert sichtbar an der Fake-API: „Mehr als 5 Anfragen – Endlosschleife?“
Excel-Übung im Browser gelöst: zwei Blätter, Format, Formel, Text mit „=“, leere Liste ICS-Beispiel passt ohne seitliches Scrollen in den Codekasten

Track „Betrieb“ mit den neuen Modulen Postfach und Kalender und Fehlerfälle

Lernziele des Bereichs mit Excel, OAuth 2.0 und Postfach

Scraping & Browser mit der Marke „Am PC“ und den neuen Lernzielen

Neues Projekt „Rechnungseingang aus dem Postfach“

🤖 Generated with Claude Code

hernstev97 and others added 10 commits October 24, 2026 03:25
openpyxl 3.1.5 und et_xmlfile 2.0.0 liegen als reine Python-Wheels in
vendor/pyodide und laden wie pytest per Dateiname, sobald Code openpyxl
importiert. pnpm verify installiert dieselben Versionen in seine
uv-Umgebung.

datenformate trägt jetzt place: unterwegs. Zwei neue Abschnitte zeigen
Arbeitsmappen, Blätter über Namen, Kopfzeilen als Vertrag, Formeln ohne
Neuberechnung, data_only, Zahlenformate und fremden Text, der mit "="
beginnt. Neu: blattreihenfolge (output), excel-bericht und
excel-nach-kopf (code). Alle Codezeilen passen auf 360 px; dafür
ändern sich der geprüfte Code von pipeline, csv-quote, json-typen,
id-verlust und excel-cache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Track „Daten & Web“, nach web-apis, place: unterwegs. 401 gegen 403,
API-Key im Header, Basic nach RFC 7617, Bearer nach RFC 6750, OAuth 2.0
mit client_credentials (ohne Refresh-Token, RFC 6749 §4.4.3) und
Refresh-Token mit Rotation (§6, RFC 9700), Token-Cache mit injizierter
Uhr, genau eine Erneuerung bei 401 und HMAC-Webhook-Signaturen mit dem
Testfall aus der GitHub-Dokumentation.

13 Übungen, davon fünf code: basic-header, token-cache,
einmal-erneuern (Starter mit Endlosschleife, Fake-API liefert 401 und
bricht nach fünf Anfragen ab), refresh-rotation (invalid_grant) und
webhook-signatur (Nicht-ASCII im Header darf nicht abstürzen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Track „Betrieb“, nach robustheit, place: unterwegs. Fake-Uhr, deren
Wartefunktion die Zeit vorstellt, Full Jitter und Deadline, Retry nach
Statuscode mit Retry-After als Zahl und als HTTP-Datum, Lockfile mit
O_EXCL und flock, Checkpoint nach der Wirkung mit os.replace,
Deduplizierung mit UNIQUE, INSERT OR IGNORE und rowcount.

Die fünf code-Übungen lösen echte Fehler aus: 503-Folgen gegen eine
Deadline, ein simulierter Wettlauf beim Lockfile, eine fremde Sperre,
ein Absturz zwischen Wirkung und Checkpoint, eine kaputte
Checkpoint-Datei und ein Neustart über eine zweite sqlite-Verbindung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Track „Betrieb“, nach fehlerfaelle, place: unterwegs. JSON-Formatter,
Lauf-ID per ContextVar-Filter am Handler oder LoggerAdapter (auch
merge_extra seit 3.13), INVOCATION_ID und _SYSTEMD_INVOCATION_ID,
Journal oder RotatingFileHandler (rotiert nur mit maxBytes und
backupCount > 0), ein Filter, der Geheimnisse schwärzt, Secrets aus
keyring, .env, LoadCredential und Actions-Secrets, Ablauf bei einem
geleakten Token. systemd-Aussagen sind gegen systemd.exec(5) geprüft,
LoadCredential zusätzlich in einer User-Unit ausprobiert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Track „Betrieb“, nach benachrichtigungen, place: unterwegs. IMAP-Modell
mit UID, UIDVALIDITY, Flags und PERMANENTFLAGS, imaplib mit
Zertifikatsprüfung, BODY.PEEK[] statt BODY[], $Verarbeitet als
Verarbeitungszustand, Anhänge lesen, unter sicheren Namen speichern und
versenden, ICS nach RFC 5545 (CRLF, Faltung nach Oktetts, Escaping,
UID, DTSTAMP), Google Calendar API und Microsoft Graph als Konzept mit
Sync-Token, 410 und Delta-Abfragen.

Die Antwortformen der Fake-IMAP-Objekte stammen aus einem Lauf gegen
einen lokalen GreenMail-Server; die Musterlösungen von
postfach-verarbeiten und anhaenge-speichern liefen dort ebenfalls. Die
ICS-Lösungen sind gegen die Bibliothek icalendar in beide Richtungen
geprüft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
place: pc, weil die Praxisaufgabe einen echten Browser startet. Neue
Abschnitte zu storage_state (Datei wie ein Passwort behandeln),
Warten mit Ziel und Zeitgrenze (expect wirft AssertionError, Aktionen
TimeoutError), Tracing und Screenshot nur bei Fehlern und
Netzwerk-Mocking mit route (Glob muss die ganze URL treffen).

Neu: route-handler und belege-bei-fehler (code, mit Fakes für Route,
Tracing und Page), route-muster (bug). fixture-browser deckt jetzt
storage_state, expect_response, Trace und Screenshot ab; ihre
Checkliste ändert sich. Alle Playwright-Beispiele und die
Musterlösung liefen lokal mit Python-Playwright 1.63, offline über
route.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…N-12)

api-melder bekommt OAuth 2.0 mit Token-Cache, Rotation und genau einer
Erneuerung bei 401 (neuer Schritt oauth-refresh, neue Abnahme
token-erneuerung; bestehende IDs bleiben). Neues Projekt
postfach-rechnungen (am PC): IMAP mit BODY.PEEK[] und $Verarbeitet,
sichere Anhänge, Excel-Übersicht, ICS-Termine, LoadCredential, flock
und JSON-Logs.

15 neue Interview-Karten (60) und 12 Glossarbegriffe (60). area.yaml
nennt die neuen Themen, ein Outcome für Postfach und Kalender kommt
dazu. web-apis, benachrichtigungen, cli-werkzeuge, robustheit,
deployment-ci und zeitsteuerung verweisen in der Lektion auf die neuen
Module; ihre Übungen bleiben unverändert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ywright (LRN-12)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zeilennummern kosten im Bug-Block Platz; eine Zeile mit 35 Zeichen
scrollte seitlich. Fehlerzeile und Korrektur bleiben gleich.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- signatur-ueber-json neu geschnitten: genau eine falsche Zeile (die
  HMAC-Eingabe), Vergleich auf Bytes, Parsen erst nach der Prüfung.
- storage_state speichert IndexedDB nur mit indexed_db=True (seit 1.51).
- ics-falten prüft jetzt, dass das Fortsetzungs-Leerzeichen mitzählt.
- ics-termin: Hinweis zu Zeiten ohne Zone war falsch (astimezone wirft
  nicht).
- json-formatter-Prompt zeigt ö statt eines wörtlichen ö.
- journalctl _SYSTEMD_INVOCATION_ID findet nicht die Meldungen von
  systemd selbst; --invocation ab systemd 257 genannt.
- KI-Regel im Projekt postfach-rechnungen: Fehlersuche bleibt bei dir.
- Kleinere Präzisierungen: 403 und Scope, systemctl start auf laufende
  Dienste, fsync gegen Stromausfall, open(..., "a") für flock,
  SEQUENCE bei geänderten Terminen, RFC-5545-SHOULD, header_value für
  Cookies, Formen statt Diagramme bei openpyxl, Zirkelbezug, close()
  im Read-only-Modus, EnvironmentFile im Spickzettel.
- Weitere richtige Antworten akzeptiert (unkeyword, +FLAGS.SILENT,
  BODY.PEEK[] ohne Klammern, bearer), Tests ergänzt (anderer 400,
  leere Credential-Datei, PUT/PATCH/DELETE), Prompts eindeutiger.
- scraping-browser hat wieder fünf Modulquellen, Füllwörter raus,
  README nennt openpyxl in vendor/pyodide.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 24, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1c17c38c-3604-4ff0-8698-5e961c87771b
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hernstev97

Copy link
Copy Markdown
Owner Author

CI-Stand für 1150e9b: check, verify und convex grün. e2e scheitert nur an „real content fits phone, tablet and desktop viewports“ (h1 nicht sichtbar). Dasselbe Fehlerbild hat der nächtliche Lauf auf main (Run 39918103896, Commit 7c08705) und die Läufe davor; das ist LRN-31 und hier bewusst nicht angefasst. Lokal lief der Test auf diesem Branch grün. Der PostgreSQL-Test war flaky und bestand im Retry. Damit ist ci-ok rot, so wie auf main.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant