Files
TerminalBasic/openspec/changes/archive/2026-09-06-spezifikationsabgleich-und-regressionsnachweise/review-initial.md

7.2 KiB
Raw Blame History

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 V01V03 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, frm.rs:122, frm.rs:131, forms.rs:269, forms.rs:531.

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:

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.

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, inventar-quellen.tsv:148, inventar-quellen.tsv:153.

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),2Syntax 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 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:

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. V01V03 vor der abschließenden Synchronisierung und Archivierung beheben und nachprüfen.