Risiken und technische Schulden: Der fremde Tutor und falsche Rückmeldungen wiegen am schwersten

Das Monorepo hat zwei große Risiken der Vorlage beseitigt: Der Kern driftet nicht mehr (ehemals R-001), und keine Version wird mehr vergessen (ehemals R-014). Dafür sind neue entstanden: eine Abhängigkeit beim Build und ein Repository, dessen tutor.md die Chat-KI eines Kindes anleitet (R-024). Die Zwei-Faktor-Pflicht für die Organisation gilt seit dem 24.09.2026 (R-017, erledigt). Die alten Einzel-Repos, die neben dem Monorepo weiterliefen, sind seit dem 23.09.2026 gelöscht (R-016). Der Product Owner hat am 23.09.2026 über mehrere Risiken und Schulden entschieden; die Tabellen nennen jeweils die Entscheidung.

Risiken

Wahrscheinlichkeit (W) und Auswirkung (A) in drei Stufen: niedrig = 1, mittel = 2, hoch = 3. Priorität = W × A: 6–9 hoch, 3–4 mittel, 1–2 niedrig. Die Tabelle ist nach Priorität geordnet; erledigte Risiken stehen am Ende. Die Einschätzungen von W und A sind abgeleitet, nicht vom Team bestätigt.

Seit dem 23.09.2026 schützt ein Branch-Schutz main (8.2 M-15): PR-Pflicht, Pflicht-Check test-und-build, kein Force-Push, kein Löschen. Admins dürfen ihn umgehen. Er mindert R-004, R-005, R-015 und R-024. Die Einstufung nach dem Vibe-Coding Risk Radar (Tier 2) und ihre Maßnahmen stehen in ADR-023.

ID Risiko W A Prio Maßnahme

R-002

Tutor-Anbindung bricht. claude.ai lädt tutor.md nicht oder ändert den Parameter ?q=.

2

3

hoch (6)

Statischer Fallback-Link und llms.txt-Link auf jeder Startseite; TalkItOver-Provider „copy“ (Szenario 6; QS-16). Der Product Owner beobachtet formlos beim Arbeiten mit dem Tutor, ob claude.ai tutor.md lädt (entschieden am 23.09.2026).

R-004

Falsche Rückmeldung in allen Apps zugleich. Ein Fehler im Kern-Prüfer oder in einem Generator meldet eine richtige Antwort als falsch; im Monorepo trifft ein Kern-Fehler sofort jede App.

2

2

mittel (4)

Eine Rundungsregel mit Business Rules (8.7; QS-6, QS-7); Vertragstest für jede Kompetenz jeder App (8.3); der Pflicht-Check test-und-build verhindert den Merge bei rotem Test (8.2 M-15). Rundung und Formregeln fachlich bestätigt (23.09.2026).

R-003

Aufgabennummer zeigt eine andere Aufgabe. Ein geänderter Generator oder umbenannter Parameter bricht alte Tutor-Links.

2

2

mittel (4)

Vertrag im llms.njk jeder App (8.9); QS-3. Bewusst akzeptiert: Der Product Owner hat am 23.09.2026 entschieden, keinen Test einzuführen, der Aufgaben alter Nummern einfriert. Ein alter Tutor-Link kann nach einer Generator-Änderung eine andere Aufgabe zeigen. Ebenso akzeptiert (L-038, 24.09.2026): Im Zufall-Trainer steht das Gegenereignis jetzt hinter der 1. Pfadregel (Platz 4 statt 2). Die Ergebniszeile des Tests nummeriert nach Position, eine alte Zeile wie „2 ✓“ meint also eine andere Seite; eine alte Testnummer kann andere Aufgaben ergeben. Gespeicherte Ergebnisse hängen an der Kompetenz-ID und bleiben richtig.

R-015

Eleventy als Abhängigkeit. Ein Update bricht den Build, das Projekt wird aufgegeben, oder eine kompromittierte Version einer transitiven Abhängigkeit schleust Code in die Ausgabe (T-012).

2

2

mittel (4)

Exakt gepinnt, package-lock.json, npm ci (8.2 M-12); Build-Prüfung auf externe Ressourcen (M-02; QS-2). Die Ausgabe ist reines HTML, das auch ohne Eleventy weiterläuft. Ein Update, das den Build bricht, kommt wegen des Pflicht-Checks nicht nach main (8.2 M-15).

R-018

Lizenz offen. Das Repository hat keine LICENSE; die Karten-Einträge nennen lizenz: "". Schulen, Lehrkräfte und edugo dürfen Inhalte und Code rechtlich nicht weiterverwenden; eingebundene Fremdinhalte (TalkItOver, Lehrplantexte, Video-Verweise) sind nicht systematisch geprüft, die Stichprobe zu ADR-019 war nur eine Stichprobe.

2

2

mittel (4)

[OPEN] Weiter offen (Stand 23.09.2026). Lizenz festlegen (Code und Inhalte getrennt?), LICENSE anlegen, kartenEintrag.lizenz füllen. Lizenz von TalkItOver steht im Dateikopf (8.2 M-06). Seit 25.09.2026 prüft der Pflicht-Check die Lizenzen aller Abhängigkeiten und die Lizenzköpfe unter vendor/ (8.2 M-24, ADR-029); die Lizenz des Projekts selbst bleibt offen.

R-020

Apps werden schwer auffindbar. Mit rund 20 Apps je Schuljahr wächst die Zahl der Kompetenzseiten; ein Kind findet die passende Seite nicht mehr, wenn eine Auswahl zu viele Treffer zeigt.

2

2

mittel (4)

Navigation über Bundesland, Klassenstufe und Fach statt Volltextsuche (ADR-020); Mathe-Karte mit land und jahrgang (8.14). Neu bewerten, sobald eine Auswahl mehr als eine Handvoll Kompetenzen zeigt.

R-011

Doku-Build blockiert das Deployment aller Apps. pages.yml baut Site und Doku in einem Lauf; scheitert docToolchain (Download, Java, PlantUML, Gradle-Build des unveröffentlichten v4, TD-9), geht keine App-Änderung live. In PRs, die src/docs ändern, baut doku.yml die Doku vorab (TD-22 erledigt); Ausfälle von außen (Download, Cache) bleiben möglich.

2

2

mittel (4)

Die zuletzt deployte Fassung bleibt online; der Fehler steht im Actions-Log (8.4); Cache je gepinntem Commit (8.2 M-13). Doku-Build und Ausgabeprüfung in PRs, die src/docs ändern (doku.yml, TD-22 erledigt). Scheitert der Doku-Build, behebt Claude ihn per PR, der Product Owner merged; der Branch-Schutz erzwingt den PR (8.2 M-15; entschieden am 23.09.2026).

R-021

„Zurück zu Claude“ in mobilen In-App-Browsern ungetestet. Öffnet die Claude-App einen Link in einer eingebetteten Ansicht, kann window.close() wirkungslos sein oder window.closed falsch melden; im zweiten Fall sieht das Kind weder einen geschlossenen Tab noch den Hinweis. Die Zwischenablage kann dort ebenfalls fehlen.

2

2

mittel (4)

Nachprüfung nach 300 ms mit aria-live-Hinweis, Rückfall auf ein markiertes Feld ohne Zwischenablage (ADR-021; Szenario 7). Der Product Owner hat „Zurück zu Claude“ am 24.09.2026 getestet: Es „hat bestens funktioniert“; Gerät und Browser sind nicht festgehalten. [OPEN] Test in der Claude-App auf Android und iOS; bis dahin sagt tutor.md, dass das Kind die Zeile einfügen soll.

R-023

Tutor beurteilt den Rechenweg falsch. Er liest Handschrift auf dem Foto falsch oder wertet einen richtigen, aber ungewohnten Schritt als Fehler (ADR-022).

2

2

mittel (4)

Der Tutor nennt nur den ersten falschen Schritt und stellt eine Leitfrage, statt zu korrigieren; das Kind kann widersprechen. Das Ergebnis prüft weiter die App (8.7). Kein automatischer Test; nur der Tutor-Dialog (8.3).

R-022

Fotos der Handschrift beim Chat-Anbieter (T-014). Das Kind schickt ein Foto je Kompetenz, erst in der Klassenarbeit-Phase (ADR-022), nicht zu jeder Aufgabe; darauf können Name, Schule oder Aufnahmeort stehen. Das Zwei-Phasen-Modell senkt die Zahl der Fotos deutlich.

3

1

mittel (3)

Die App überträgt nichts; tutor.md bittet um ein Foto nur des Blatts, ohne Namen (8.2 M-18). Bewusst akzeptiert vom Product Owner am 24.09.2026: Ob Fotos in den Chat gehen, entscheiden das Kind und seine Eltern in ihrem Chat-Werkzeug.

R-027

Dreistufige Bäume passen nicht auf das Handy. Ein Baum mit drei Zügen und mehr als zwei Ergebnissen (bis 27 Blätter) ist hochkant breiter als 279 px und liegt quer (600 px); auf 360 px muss das Kind scrollen oder das Handy drehen (QS-12).

3

1

mittel (3)

Zweistufige Bäume stehen hochkant und passen (ADR-024; src/zufall/test/baum-layout.test.js); über quer liegenden Bäumen steht auf schmalen Hochkant-Bildschirmen ein Dreh-Hinweis aus reinem CSS (8.12). Bewusst akzeptiert vom Product Owner am 24.09.2026. Seit L-040 (24.09.2026) stehen dreistufige Bäume mit zwei Ergebnissen je Stufe hochkant; die Seite „Gegenereignis“ zeichnet dreistufige Bäume als „gelb / nicht gelb“ und braucht den Dreh-Hinweis nicht mehr.

R-024

Übernommenes Repository leitet die Chat-KI eines Kindes an (T-015). tutor.md ist ein Prompt; wer main ändern kann, gibt der KI Anweisungen, während sie mit einem Kind spricht, etwa über einen Link auf eine fremde Seite, deren Inhalt sich nach dem Review ändert.

1

3

mittel (3)

Link-Allowlist im Build (8.2 M-22); Zwei-Faktor-Pflicht (M-21); Secret Scanning mit Push Protection (M-19); Branch-Schutz (M-15); Review jedes PRs (M-08, R-026). Fremder Text in einem gemergten PR bleibt Sache des Reviews (ADR-023).

R-025

Lernschaden. Eine falsche Rückmeldung oder ein falsches Beispiel bringt einem Kind still etwas Falsches bei; kein System fällt aus, niemand merkt es. Das Vibe-Coding Risk Radar misst diesen Schaden nicht (ADR-023).

1

3

mittel (3)

Property-Based Tests für Term-Parser, Termgleichheit und Rundung (QZ-3; 8.3), sie fanden gleich #30 (behoben); Vertragstest für jede Kompetenz; Rundungs- und Formregeln fachlich bestätigt (R-004, R-012).

R-031

Fremde Anfrage nach einer Eingabe ungetestet (ATAM AR-3, SP-4). Der Build erkennt fremde Hosts nur an Mustern im Quelltext, e2e/extern.spec.js prüft nur das Laden. Setzt JavaScript eine URL zur Laufzeit zusammen und lädt sie nach einer Eingabe, merkt es kein Check (QS-1, QZ-1).

1

3

mittel (3)

Build-Prüfung auf externe Ressourcen und Importe (8.2 M-02; QS-2); ESLint im Pflicht-Check (M-20); das KI-Review prüft Datenschutz in jedem PR (M-23). [OPEN] Die Übungsrunde in e2e/uebung.spec.js zusätzlich auf fremde Requests prüfen.

R-005

Konto oder Token übernommen (T-001): veränderte Apps oder tutor.md für alle Kinder.

1

3

mittel (3)

Zwei-Faktor-Pflicht (8.2 M-21), Secret Scanning mit Push Protection (M-19), M-08, M-11.

R-006

Prompt Injection über tutor.md/llms.txt (T-002).

1

3

mittel (3)

Review jedes PRs, tutor.md < 120 Zeilen, enge Rolle (8.2 M-08, M-09); nur Links auf die Allowlist (M-22).

R-007

Kompromittierte talkitover.js beim nächsten Update (T-004).

1

3

mittel (3)

Vendored statt CDN, Diff im PR (8.2 M-06). [OPEN] Keine Prüfsumme gegen die Quelle.

R-008

Geteiltes Schulgerät zeigt Selbsteinschätzung, letzten Test und Video-Merker (T-006).

2

1

niedrig (2)

Nur Stufen, keine Namen (8.2 M-07).

R-009

YouTube nach Klick erhält IP-Adresse und Browserdaten (T-005).

2

1

niedrig (2)

Zwei-Klick mit Hinweis, youtube-nocookie (8.2 M-03; QS-1).

R-010

GitHub Pages ändert sich oder fällt aus.

1

2

niedrig (2)

_site/ läuft auf jedem statischen Webserver; die Adresse ist eine Zeile (8.15; QS-23).

R-029

Original-Harness-Rad ändert sein URL-Format oder seine Schicht-ids. Link und Einbettung in 8.16 zeigen dann einen falschen oder leeren Stand (ADR-025); betroffen ist nur die Doku, kein Kind.

2

1

niedrig (2)

Die ids stehen fest in scripts/harness-rad-original.js; eine unbekannte id bricht den Generator ab, und test/build/harness-rad-original.test.js rechnet die Abdeckung aus der URL so nach wie das Original. Das statische SVG und die Tabelle bleiben die maßgebliche Darstellung (8.16).

R-026

Review hängt an einer Person. Der Product Owner sieht jeden PR durch und merged ihn (Sampling Review 100 %, ADR-023). Technisch erzwingen lässt sich eine Freigabe nicht: Ein einzelner Maintainer kann seinen eigenen PR nicht freigeben, und Admins dürfen den Branch-Schutz umgehen. Ein eiliger Merge lässt KI-generierten Code ungelesen durch.

1

2

niedrig (2)

Pflicht-Check mit Tests, ESLint, npm audit und Build-Prüfungen (8.2 M-15, M-20); CodeQL (M-19). Seit #24 prüft vor jedem Merge ein KI-Review in frischem Kontext; der Check ki-review ist nur für den geprüften Stand grün (M-23, ADR-027). Rest: Autor und Reviewer posten über dasselbe Konto, ein Review aus demselben Modell teilt dessen blinde Flecken, und ein PR kann den Check selbst ändern (Security-Review S-010). Bewusst akzeptiert vom Product Owner am 25.09.2026: Er liest als Maintainer jeden PR. [OPEN] Der Product Owner macht ki-review zum Pflicht-Check (Aufruf in M-23).

R-032

ATAM-Abschnitt als Formalie (ADR-030). Der Check ki-review prüft nur, dass das Review bei einer Architekturänderung den Abschnitt „Architektur (ATAM)“ enthält, nicht seinen Inhalt. Ein Reviewer, der ihn pflichtschuldig füllt, lässt eine Entscheidung ungeprüft gegen die Szenarien durch.

2

1

niedrig (2)

Feste Gliederung in werkzeuge/review/ki-review.md (Szenarien, SP/TP, R-IDs, Pugh-Matrix gegen QZ-1…QZ-5); der Product Owner liest jeden PR vor dem Merge (R-026); die ATAM-Baseline je Quartal fängt, was die Reviews übersehen (Anhang Bewertungen).

R-012

Termprüfung irrt an den Prüfstellen oder bei der Form (ADR-009).

1

2

niedrig (2)

Feste Prüfstellen, Form nur als Hinweis (8.7.1; QS-19). Formregeln vom Domain Expert bestätigt (23.09.2026).

R-013

Alte Seite nach Deployment. Eine bis zu zehn Minuten alte HTML-Seite im Cache fordert URLs ihres alten Hashes an; Pages liefert die neuen Dateien.

1

2

niedrig (2)

?v=<Hash> an jeder Referenz (8.10; QS-20); neu laden hilft. [OPEN] max-age=600 für HTML lässt sich auf Pages nicht ändern.

R-030

Barrierefreiheit nur stichprobenartig geprüft (ATAM AR-6, SP-6). axe-core prüfte je App eine Kompetenzseite; eine neue Seitenform, etwa ein Baum oder ein Termfeld, konnte WCAG 2.2 AA verletzen, ohne dass ein Check rot wird (QS-27). Seit 25.09.2026 prüft axe jede Seite; offen bleibt, was axe nicht erkennt, und jeder Zustand nach der geladenen Übung (Lösung, Rückmeldung).

1

2

niedrig (2)

axe-core im Pflicht-Check browser seit 25.09.2026 für jede Kompetenzseite jeder App, im Ausgangszustand und mit geladener Übung (nr=1), dazu Übersicht, Start-, Test- und Kartenseiten; die Liste kommt aus e2e/seiten.js, neue Seiten laufen mit (#56, ADR-026). Der erste Lauf fand einen Verstoß im anklickbaren Pfadbaum, behoben in 0.11.4. Kontrast der Fachfarben im Build (QS-17); Handarbeit nach 8.6. W von 2 auf 1 gesenkt: eine neue Seitenform fällt jetzt im Check auf.

R-033

Keine Content Security Policy (Security-Review S-005). GitHub Pages setzt keine Header. Fände sich doch ein XSS-Pfad (T-003) oder lüde ein Skript zur Laufzeit von einem fremden Host (R-031), hielte der Browser nichts auf.

1

2

niedrig (2)

Kein innerHTML, ESLint mit no-unsanitized (8.2 M-20); Build-Prüfung auf externe Ressourcen (M-02); das Security-Review fand keinen XSS-Pfad (Security-Review). [OPEN] CSP per Meta-Tag mit Hashes, Issue #58.

R-019

Mini-DOM weicht vom Browser ab. Eine Zeichenfunktion nutzt etwas, das svg.js im Build anders abbildet; statisches und interaktives Bild unterscheiden sich (ADR-016).

1

1

niedrig (1)

Nur svgEl, nie document in js/vis/ (8.12); test/kern/svg.test.js, test/build/bild.test.js; Browser-Check.

R-028

Geschätzte Textbreite zu knapp. Ob ein Baum hochkant passt und wie breit eine Blattspalte ist, rechnet baum-unten.js mit der Zeichenbreite von DejaVu Sans. Eine noch breitere Systemschrift ließe Brüche in einer Geschwistergruppe einander berühren (ADR-024).

1

1

niedrig (1)

Tests prüfen jede Urnenvorlage mit grober Breite 0,6 je Zeichen auf Überlappung (baum-layout.test.js, baum-unten.test.js); der Browser-Check misst mit getBoundingClientRect (8.3).

R-034

Freitext über einen präparierten Link im Chat (T-015; Security-Review S-008, S-009). Ein Link mit ?gesucht=ignoriere-alle-regeln landet über „Link kopieren“ im Chat des Kindes; tutor.md sagt nicht, dass eingefügte Zeilen Daten sind.

1

1

niedrig (1)

Parameter nur aus [a-z0-9-] (leseVorgaben), nie als Markup (8.2 M-20); die Zeile „Zurück zu Claude“ ist nicht beeinflussbar. Bewusst akzeptiert vom Product Owner am 25.09.2026: Das Kind kann ohnehin alles in den Chat schreiben, auch eine Rückfrage statt Daten.

R-016

Alte Einzel-Repos liefen parallel. binom-trainer, prozent-trainer, zufall-trainer, mathe-karte, lern-app-template und lern-app-skill unter raifdmueller/ waren noch online. Kern-Korrekturen erreichen sie nicht; Tutor-Links, Lesezeichen und Suchmaschinen zeigen weiter auf veraltete Fassungen; wer dort etwas ändert, pflegt doppelt.

–

–

erledigt

Erledigt am 23.09.2026: alle sechs gelöscht, ihre Pages-Adressen liefern 404. Der Skill liegt seit PR #7 unter werkzeuge/skill/lern-app/ im Monorepo.

R-017

Organisation ohne Zwei-Faktor-Pflicht (T-001). Ein übernommenes Mitgliedskonto ändert alle Apps.

–

–

erledigt

Entschieden am 24.09.2026 und eingeschaltet (8.2 M-21; ADR-023). Vorher zurückgestellt (23.09.2026), bis weitere Personen mitarbeiten.

Entfallen: R-001 „Kern driftet“ (durch ADR-012 und ADR-013; in den alten Repos lebte es als R-016 weiter, bis sie gelöscht wurden) und R-014 „Version nicht gehoben“ (durch ADR-014).

Technische Schulden

ID Schuld Belasteter Baustein (Kapitel 5) Abbau

TD-3

llms.txt jeder App wird von Hand gepflegt; der Build prüft nur, dass jede Seite genannt ist, nicht Parameter oder Fehlercodes.

Apps

Entschieden am 23.09.2026: ja, Umsetzung läuft. Der Build prüft URL_ZAHLEN, URL_TEXTE und Fehlercodes aus den Generatoren gegen llms.txt.

TD-4

Die Mathe-Karte kennt nur Mathe und nur das Gymnasium; Physik- und Chemie-Apps haben keine Karte.

Mathe-Karte

Karte für weitere Fächer und Schulformen (edugo).

TD-5

Der Browser-Test (360/1280 px, ohne JS, 0 fremde Requests, Deep Link, Schnelltest) lief nicht in CI, sondern von Hand mit Playwright.

Tests und CI

Erledigt am 24.09.2026 (#26): Playwright und axe-core im eigenen Workflow browser.yml, Job browser (8.3, ADR-026). Pflicht-Check seit 24.09.2026.

TD-7

7 von 57 Testdateien nennen im Kopf keinen Use Case; die Exponent-Grenze in bruch.js ist ungetestet.

Tests und CI, Kern

Kopfzeile // Use Case: … ergänzen; Test für MAX_EXPONENT.

TD-9

docToolchain v4 ist unveröffentlicht; scripts/dtc-v4.sh klont main-4.x@6de96fb7, baut lib/ mit Gradle und ruft dtcw auf (R-011).

Architektur-Doku

Nach dem Release von v4.0.0: Skript löschen, dtcw direkt nutzen, Cache-Schritt in pages.yml löschen (docToolchain#1704).

TD-10

Fremde Hosts im Theme (#1705): gepatchte Kopien von main.min.*.css und asciidoctor.css ohne @import in src/site/assets/css/; von der Zeilengrenze ausgenommen (eleventy.config.js, THEME_KOPIEN).

Architektur-Doku

Nach dem Fix beide Kopien und die Ausnahme löschen.

TD-11

Kein Schlüssel für theme-color (#1700): src/site/templates/header.gsp ist eine Kopie des Theme-Kopfs mit zwei Änderungen.

Architektur-Doku

Nach dem Fix header.gsp löschen.

TD-12

Markenfarbe erreicht theme-v4.css nicht (#1706); lern-app.css setzt die Selektoren neu.

Architektur-Doku

Nach dem Fix Farbregeln löschen.

TD-13

Unsichtbarer Suchplatzhalter (#1702); Regeln in lern-app.css.

Architektur-Doku

Nach dem Fix Regeln löschen.

TD-14

Navigationsleiste verdeckt die Startseite (#1699); <style> in landingpage.gsp.

Architektur-Doku

Nach dem Fix <style>-Block löschen.

TD-15

Theme-manifest.json mit absoluten Pfaden (#1701); eigene Datei in src/site/assets/.

Architektur-Doku

Nach dem Fix je nach Default behalten oder löschen.

TD-16

landingpage.gsp landet im Output (#1703); pages.yml löscht sie.

Tests und CI (pages.yml)

Nach dem Fix die rm-Zeile löschen.

TD-17

Je Kompetenzseite war nur ein Video vorgesehen (video: { id, titel, kanal }).

Layout (kompetenz.njk)

Erledigt am 24.09.2026 (Lektorat L-023): videos: [{ ueberschrift, id, titel, kanal, hinweis? }] im Front Matter, eine Karte #video-1, #video-2 … je Video unter „Video dazu“; initVideos wandelt jede .video-karte um. video: gilt weiter. Erste Nutzerin: prozent/veraenderung (Senkung, Erhöhung).

TD-18

Die Vorschau zeigt „≈“ auch bei exakten Werten (src/kern/js/zahlantwort.js:160).

Kern

Entschieden am 23.09.2026, PR in Arbeit: „=“ bei exakt darstellbarem Wert, mit Test (BR-5).

TD-19

Die neuen Zufall-Seiten 7 und 8 (ergebnisformen, pfade-uebersetzen) sind inhaltlich nicht durchgesehen.

Apps (src/zufall/)

Entschieden am 23.09.2026: Der Product Owner oder der Lernende sieht die Seiten fachlich durch.

TD-20

Das Hilfsskript für neue Kompetenzen (scripts/neue-kompetenz.mjs der Vorlage) ist nicht portiert; die Schritte stehen nur in CLAUDE.md.

Build

Entschieden am 23.09.2026: kommt mit der nächsten App. Ein Skript legt die drei Dateien mit rotem Test an und trägt die Zeile in KOMPETENZEN ein.

TD-21

Optionale Überschrift „Die Formel“ im Seitengerüst fehlt (offen aus PR #2).

Layout

Optionales Front-Matter-Feld im Gerüst.

Erledigt: TD-1 (Kern kopiert) und TD-2 (Prozent/Zufall nicht migriert) durch ADR-012 und die Migration in PR #2; TD-6 (APP.uebersicht ungelesen) entfällt, das Layout verlinkt „Alle Apps“; TD-8 (Pages-Modus uneinheitlich) galt nur noch für die alten Repos und ist mit R-016 erledigt; TD-17 (nur ein Video je Seite) mit L-023; TD-5 (Browser-Test nur von Hand) mit #26; TD-22 (Doku-Build nur nach dem Merge) und TD-23 (Doku ohne Prüfung auf externe Ressourcen) mit doku.yml, das in PRs mit Änderungen an src/docs die Doku baut und die Ausgabe prüft.

Risikothemen: Drei Themen bedrohen drei Geschäftsziele

Die Risikothemen fassen die Befunde der ATAM-Bewertung vom 25.09.2026 zusammen (IDs AR, SP und TP dort). Anders als der datierte Bericht im Anhang zeigen sie den laufenden Stand; die nächste Bewertung schreibt sie fort.

RT-1: Ein Fehler trifft alle Apps zugleich (AR-1, AR-2, SP-1, SP-2, TP-1, TP-3). Das Monorepo macht Korrekturen billig und Fehler teuer. Bedroht ist das Ziel, dass ein Kind der Rückmeldung trauen kann (QZ-3); der Schaden ist Lernschaden, der still bleibt (R-025). Property-Tests und der Vertragstest je Kompetenz sind die Gegenwehr; sie wirken nur, solange jede Kern-Änderung sie erweitert.

RT-2: Der Vertrag mit dem Tutor bewegt sich (AR-4, AR-5, SP-3, TP-2). Die App übt, Claude unterrichtet; beide verbinden nur Links und Texte. Bedroht ist die Tutor-Anbindung (QZ-2) und damit das Lernmodell der Apps. Zwei Ursachen liegen außerhalb des Repositorys (claude.ai), eine ist bewusst akzeptiert (R-003).

RT-3: Die Prüfer sehen nur Stichproben (AR-3, AR-6, AR-7, SP-4, SP-6). Build und Browser-Tests prüfen das Laden jeder Seite, aber nicht jede Interaktion und nicht jede Seitenform; das Review hängt an einem Konto. Bedroht sind die Zusagen an Eltern und Schulen: kein Datenabfluss (QZ-1) und Zugänglichkeit (QZ-5). Daraus stammen R-030 und R-031.

Die Bewertungen selbst stehen datiert im Anhang Bewertungen:

Offene Fragen: Nur die Lizenz ist noch offen

Der Product Owner hat am 23.09.2026 alle übrigen Fragen beantwortet: Rangfolge der Qualitätsziele (Kapitel 1.2), Zielwerte (Kapitel 10), die ADRs mit Status „Accepted (inferred)“ (Kapitel 9), R-002, R-003, R-011, R-016, R-017, TD-3, TD-5, TD-17 bis TD-20, TD-22, TD-23 und den Rückmelde-Kanal (8.4). Der Domain Expert hat Rundungs- und Formregeln bestätigt (8.7).

Product Owner

  • Unter welcher Lizenz stehen Code und Inhalte (R-018)? Getrennt für Code und Texte?

Architekt

Keine offenen Fragen.

Entwickler

Keine offenen Fragen.

Domain Expert (Mathe-Didaktik)

Keine offenen Fragen.

Betrieb

Keine offenen Fragen.