# Verifikation vom 06.09.2026 Historischer Befundstand vor der Korrektur; der Inventartest liegt inzwischen in tb-cli. Change: `spezifikationsabgleich-und-regressionsnachweise`. Geprüft wurde der aktuelle Arbeitsbaum auf `c8b92f06190d77714865e0018b090348f372d77e`: Proposal, Design, sieben Tasks, vier Delta-Specs mit sechs Requirements und 18 Szenarien, betroffene Hauptverträge, Code, Tests und Abschlussreport. **Ergebnis: drei offene Befunde. Die vorherige Aussage „keine offenen Befunde“ ist durch diese Nachprüfung überholt.** | Dimension | Ergebnis | |---|---| | Vollständigkeit | 7/7 Tasks formal abgehakt; die inhaltliche Abnahme ist wegen V01–V03 noch offen | | Korrektheit | Bestehende Suite grün, fünf unabhängige Soll-Gegenproben schlagen fehl | | Kohärenz | Bestehende Architektur und TBC-Version erhalten; Inventarnachweis und Import-Erhaltungszusage sind noch zu weitgehend | | Befunde | 0 CRITICAL, 3 WARNING; davon V01 mit hoher, V02/V03 mit mittlerer Auswirkung | ## V01 — Index des Elterncontainers geht beim FRM-Import verloren (hoch) **Fundstellen:** [frm.rs:87](../../../../crates/tb-ui/src/frm.rs#L87), [frm.rs:122](../../../../crates/tb-ui/src/frm.rs#L122), [frm.rs:131](../../../../crates/tb-ui/src/frm.rs#L131), [forms.rs:269](../../../../crates/tb-ui/src/forms.rs#L269), [forms.rs:531](../../../../crates/tb-ui/src/forms.rs#L531). Der neue PARENT-Anfangswert erhält nur die Objekt-ID. Die Rekursion übergibt ebenfalls nur `Some(object)`; `set_initial_at` verwirft einen vorhandenen Index, und der Getter ergänzt grundsätzlich `None`. Ein Kind von `Group(1)` bekommt damit `Group(0)` als Parent. Die neue Regression prüft unterschiedliche unindizierte Frames, aber kein Kind innerhalb eines Frame-Arrays. **Reproduktion:** FRM mit `Frame Group, Index = 0` und einem zweiten `Frame Group, Index = 1`, darin `TextBox Probe`. Anschließend: ```basic DIM p AS CONTROL p = Probe.Parent Form1.Hide PRINT p.Index END ``` Soll: `1`. Ist: `0`. Derselbe Fehler tritt nach `tbc build` und Löschen der FRM-Quelle beim Ausführen der TBC-Datei auf. Beide Gegenproben schlagen fehl. Das ist auch für den akzeptierten Fremdbestand relevant: `graphics.frm` enthält indizierte Frames mit untergeordneten Controls. **Vertrag:** Forms-Steuerelement-Arrays, vollständige Forms-Anfangsbeschreibungen im TBC sowie Task 2.4; der aktuelle Abschlussreport behauptet außerdem den Erhalt der Array-Eltern. Die neue PARENT-Unterstützung erfüllt diesen Erhalt noch nicht vollständig. **Behebung:** Eltern als vollständige Objektreferenz einschließlich Arrayindex über Import, Anfangswerte, PARENT-Zugriff und davon abhängige Containerpfade führen. Einen indizierten Elterncontainer im Quell- und TBC-Rundlauf prüfen; den bestehenden Test mit gleichen Control-Namen in zwei Formularen erhalten. ## V02 — Inventarprüfung akzeptiert ein falsches Laufzeitziel (mittel) **Fundstelle:** [inventar.rs:725](../../../../crates/tb-cli/tests/inventar.rs#L725). `pruefe_kompilat` prüft lediglich, ob die im Kompilat vorkommenden Builtin-IDs irgendwelche vorhandenen Bindungen haben und die Tabellenreferenzen gültig sind. Es prüft nicht, ob das erzeugte Ziel dem untersuchten Inventareintrag entspricht. Damit kann ein falsch abgesenktes Element weiterhin als implementiert bestätigt werden. **Reproduktion:** Die normale Probe `PRINT TIMEZONEKNOWN` wird kompiliert. Anschließend ersetzt die Gegenprobe ausschließlich den erzeugten CallBuiltin von TIMEZONEKNOWN (156) durch TIMER (54); beide haben null Argumente und eine vorhandene Runtime-Bindung. Der bestehende Prüfer liefert weiterhin `Ok(())`. Die Soll-Assertion, dass er diese Divergenz melden muss, schlägt fehl. **Vertrag:** Delta `sprachinventar`, Requirement „Automatischer Abgleich Inventar gegen Implementierung“, Task 2.1 und Design D1. Der Nachweis soll den tatsächlichen Implementierungspfad des jeweiligen Elements prüfen, nicht nur die Existenz eines beliebigen ausführbaren Ziels. **Behebung:** Die erwartete Absenkung bzw. das beobachtbare Verhalten mit dem konkreten Inventareintrag verbinden. Neben Unsupported und fehlender Bindung auch eine gültige, aber falsche Zielbindung sowie eine verschwundene Absenkung negativ prüfen. Das betrifft auch Forms-Methoden/-Eigenschaften, deren bloßes Vorhandensein in gültigem Bytecode noch keinen passenden Dispatch beweist. ## V03 — Weitere gültige Non-Feature-Syntaxformen liefern nur Syntaxfehler (mittel) **Fundstellen:** [parser.rs:199](../../../../crates/tb-frontend/src/parser.rs#L199), [inventar-quellen.tsv:148](../../../../tests/support/inventar-quellen.tsv#L148), [inventar-quellen.tsv:153](../../../../tests/support/inventar-quellen.tsv#L153). Der neue Parserpfad behandelt CIRCLE, WINDOW und IOCTL. Andere ausdrücklich verbotene Grafikformen erreichen weiterhin nicht die vorgeschriebene Feature-unavailable-Diagnose. Die festen Inventarvorlagen erfassen davon nur Syntaxvarianten, die der allgemeine Aufrufparser bereits versteht. **Reproduktionen mit `tbc check`:** - `PSET (1,1),2` → `Syntax error` in Spalte 11. - `DIM a%(15)` gefolgt von `PALETTE USING a%(0)` → `Expected: expression` in Zeile 2, Spalte 9. Beide sind gültige Syntaxformen ausgeschlossener Funktionen. Erwartet wird jeweils die benannte Compile-Diagnose `Feature unavailable`, nicht ein allgemeiner Syntaxfehler. Beide Soll-Gegenproben schlagen fehl. **Vertrag:** Delta `sprach-frontend`, Requirement „Compile-Zeit-Abweisung deklarierter Non-Features“ verlangt diese Diagnose für jede Verwendung; Task 1.1 verlangt die benannte Abweisung weiterhin verbotener Formen. **Behebung:** Die besondere Syntax der verbleibenden ausgeschlossenen Formen vor dem allgemeinen Aufrufparser erkennen oder bis zur Non-Feature-Diagnose parsen. Die CLI-/Inventarproben um Koordinaten mit Farbargument und PALETTE USING ergänzen; die erlaubte Grafikuntermenge weiter positiv prüfen. ## Ausgeführte Prüfungen - `cargo test --workspace`: **476 bestanden, 0 fehlgeschlagen, 2 ignoriert**. - Gesonderter Fremdtest mit dem dokumentierten Checkout und Commit: **bestanden**, sieben Einstiege jeweils zweimal, mit den festgelegten Menü-, Exit-, Dialog- und Spin-Zuständen. - `openspec validate --all --strict`: **16 bestanden, 0 Fehler**; vorhandene Hinweise zu Textlängen sind informativ. - `git diff --check`: bestanden. - Neue unabhängige Soll-Gegenproben: **fünf fehlgeschlagen**, zugeordnet zu den drei Befunden oben. Produktcode, bestehende Tests und Sollbilder wurden während dieses Reviews nicht geändert. Die [Gegenproben](review-probes.py) sind reproduzierbar und erzeugen Dateien nur in einem temporären Verzeichnis. Sie bauen die CLI, prüfen die vier CLI-Fälle und kompilieren für die Zielmutation eine temporäre Kopie des bestehenden Inventarprüfers: ```sh python3 openspec/changes/archive/2026-09-06-spezifikationsabgleich-und-regressionsnachweise/review-probes.py ``` Der Aufruf liefert derzeit Status 1. Keine GUI, kein Emulator und kein Netzwerkzugriff sind erforderlich. Keine Verifikationsdimension wurde übersprungen. Die grünen bestehenden Tests und die sieben engen Fremdprogrammsequenzen widerlegen die zusätzlich reproduzierten Fehler nicht. **Abnahme:** Noch nicht vollständig spezifikationskonform. V01–V03 vor der abschließenden Synchronisierung und Archivierung beheben und nachprüfen.