Files
TerminalBasic/openspec/changes/archive/2026-09-06-phase-5-03-editor-und-inkrementelle-uebersetzung/verification.md

120 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Verifizierung: phase-5-03-editor-und-inkrementelle-uebersetzung
Stand: 2026-09-06. Abgleich gegen proposal.md, design.md, tasks.md und
specs/ide-editor/spec.md; Implementierung und Korrekturen im Arbeitsverzeichnis.
| Dimension | Ergebnis |
| --- | --- |
| Vollständigkeit | 15/15 Aufgaben, 7/7 Anforderungen, 10/10 Szenarien |
| Korrektheit | Ereignistests, Compiler-Differentialtests und Release-Messung bestanden |
| Kohärenz | Gemeinsames Dokumentmodell, regulärer Lexer/Parser/Sema und bestehender Linker; keine neue Abhängigkeit |
| Offene Befunde | 0 CRITICAL, 0 WARNING, 0 SUGGESTION |
## Anforderungs- und Szenariozuordnung
Alle Code- und Testpfade sind relativ zur Repositorywurzel angegeben.
| Anforderung / Szenario | Umsetzung | Nachweis |
| --- | --- | --- |
| Editorbewegung und Änderungen / Zusammengesetzte Bearbeitung | `tb-ide/src/editor.rs`: editor_key, editor_insert, editor_scroll; `documents.rs`: View, replace_ranges, undo; TerminalGuard aktiviert Bracketed Paste | `crates/tb-ide/tests/editor.rs`: cua_unicode_overwrite_wordstar_and_shared_undo; crlf_navigation_word_boundaries_readonly_and_normalization_keep_views |
| Suchen und Ersetzen / Leere und verkürzende Ersetzung | editor.rs: Search, matches, find_next, replace_matches; gemeinsame Dialogfelder und Dispatcher | search_scope_direction_wrap_and_shortening_replace_all: Richtung, Wortgrenzen, Case, Auswahlbereich, Ctrl+Backslash, F3-Rücksprung, leere/verkürzende Ersetzung und Undo |
| Zeilenprüfung und Normalisierung / Nutztext unverändert | `tb-frontend/src/editing.rs`: normalization_edits mit Keywordpositionen und Tokenvergleich; editor.rs: line_leave | `crates/tb-frontend/tests/editing.rs`: normalization_protects_tokens_and_is_idempotent; IDE-Zeilen-/Mehransichtstest |
| Zeilenprüfung und Normalisierung / Unvollständiger Block | Parser markiert ausschließlich fehlende Blockabschlüsse am EOF als unvollständig; keine zweite Fragmentgrammatik | incomplete_is_parser_context_not_a_second_grammar; line_leave_incomplete_invalid_disabled_and_current_revisions |
| Prozeduren und Deklarationen / Wiederholtes Speichern | new_procedure, Signaturen mit DEFtype-Kontext; gemeinsamer Project::save_file-Hook mit Projektauflösung; Save Project benutzt denselben Hook | declaration_maintenance_and_procedure_generation_are_transactional; deftype_context_does_not_leak_from_another_procedure; procedures_and_shared_save_hook_preserve_drafts_and_frm_code; external_include_revision_and_project_context_declarations |
| Prozeduren und Deklarationen / Unfertigen Entwurf speichern | Bei Parser-/Compilefehlern keine teilweise DECLARE-Pflege, unveränderter Entwurf mit begründeter Meldung; Handdeklarationen bleiben erhalten | Frontend-Test prüft unvollständigen Block, Syntaxfehler und konfliktbehaftete Handdeklaration; IDE-Test speichert und liest den Entwurf sowie FRM-Code erneut |
| Include-Ansichten und Diagnosen / Gleichnamige Quellzeilen | Included File öffnet das physische Dokument; Included Lines ist markiert und schreibgeschützt; goto_diagnostic verwendet Datei, physische Zeile und Spalte einschließlich FRM-Offset | includes_and_diagnostic_selection_use_original_physical_files: zwei Includes mit Fehlern auf Zeile 1; zusätzlicher Schreibschutz-/Scrolltest |
| Korrekte inkrementelle Übersetzung / Private Änderung | ProjectCompiler cached Parsing und unverknüpfte Produkte; Importvertragsvergleich ignoriert verschobene fremde Prozedurzeilen | `crates/tb-vm/tests/incremental.rs`: cached_private_edits_parse_and_compile_only_changed_modules; Zähler prüfen auch private Änderungen mit zusätzlicher Zeile vor einer weiteren Prozedur |
| Korrekte inkrementelle Übersetzung / Transitive Änderung | Bestehende Exportauflösung faltet Konstanten transitiv; Schlüssel enthalten benötigte importierte Konstanten, TYPE-/Prozedurtabellen und Forms-Katalog; COMMON wird frisch gelinkt | constants_types_common_removed_symbols_and_order_match_full_compiler; unused_constants_do_not_invalidate_independent_units_and_declare_changes_do; includes_source_ids_data_and_forms_relink_without_patching_old_products |
| Nachweisbarer Instant Compile / Reproduzierbare Messung | `crates/tb-vm/benches/compile.rs`: bestehender Referenzgenerator, Vollcompile und Cacheänderungen einschließlich Auflösung/Link und Modulzählern | Release-Messung unten und in docs/tbvm-design.md |
Die Kürzel `tb-ide/src` und `tb-frontend/src` in der Tabelle stehen jeweils unter
`crates/`. Tests ohne wiederholten Pfad stehen in den genannten editing.rs-
beziehungsweise editor.rs-Testdateien.
## Ergänzende Korrektheitsprüfung
- Differentialtests vergleichen **vollständige TBC-Bytes** erfolgreicher Cache-
und Vollcompiles. Damit stimmen Instruktionen, Tabellen und Quellzuordnung
überein; Fehlerfälle vergleichen die vollständigen formatierten Diagnosen.
- Abgedeckt sind private Änderungen, Konstante→transitiver Verbraucher,
gelöschte Symbole, TYPE-Layout, COMMON-Typ, DECLARE-Signatur, Modulreihenfolge,
zusätzliche Includedatei/Quell-ID, DATA, Strings, Prozedurverweise sowie der
Wechsel eines Controls zum Array und geänderte Index-Anfangswerte.
- Gültig→fehlerhaft→gültig liefert niemals einen alten Erfolg als aktuellen
Stand. Kompilate **und Diagnosen** sind revisionsgebunden. Noch ungeöffnete
Includes werden frisch gelesen; bereits geöffnete Puffer bleiben gemäß
Dokumentmodell maßgeblich gegenüber externen Dateiänderungen.
- Copy/Paste benutzen die interne Zwischenablage zwischen IDE-Fenstern.
CRLF, Unicode, Tabs und breite Zeichen werden über Eingabeereignisse geprüft;
TestBackend prüft die sichtbare Auswahl. Normalisierung und Speicherpflege
erhalten Cursor und Auswahl anderer Ansichten.
- Die bestehende Dokument-/IDE-Regression bleibt erhalten. Angepasste Erwartungen
betreffen die jetzt verfügbare Copy-Funktion, den zusätzlichen Diagnostics-
Menüpunkt und neue DECLARE-Zeilen beim Speichern. Der reine Fenstertest schaltet
Syntax Checking für seinen absichtlich ungültigen Text `abc` aus; die neuen
Editor-Tests prüfen aktivierte Prüfung und Fehlerdialoge ausdrücklich.
## Behobene Befunde aus den Prüfrunden
1. DECLARE-Pflege zunächst ohne Projektkontext: auf tatsächliche Include-,
Modul- und Forms-Auflösung im gemeinsamen Speicherhook umgestellt. Generierte
Deklarationen stehen nach TYPE-/DEFtype-Angaben vor den Prozeduren.
2. Positionsverschiebung bei Normalisierung/Speichern: disjunkte Textänderungen
und gemeinsames Positionsremapping erhalten Cursor, Auswahl und Lesezeichen;
Undo bleibt eine Dokumenttransaktion.
3. Weitere Schreibwege in Included Lines: Undo, Load Text, Prozedurerzeugung,
Ersetzen und Editieraktionen sind dort gesperrt; Lesen/Scrollen und Rückkehr
zum Original bleiben möglich.
4. CRLF- und Wortbewegung: Navigation/Entfernen behandeln CRLF gemeinsam,
Ctrl+Rechts berücksichtigt den Beginn des Wortbereichs und Auswahlkollaps
folgt der Bewegungsrichtung.
5. DEFtype-Kontext: keine Übernahme aus einer fremden Prozedur; Includes und der
aktuelle Block werden berücksichtigt. Prozedurnamen werden projektweit geprüft.
6. Cacheinvalidierung: verschobene fremde Quellzeilen sind kein Importvertrag;
unbenutzte importierte Konstanten invalidieren unabhängige Produkte nicht.
7. Diagnosegültigkeit: Quellenänderungen machen auch alte Diagnosen ungültig;
die Diagnoseauswahl prüft vor der Navigation erneut den Revisionssatz.
8. Doppeltes Menü-Mnemonic und Clippy-Hinweise beseitigt.
## Validierung
- `cargo test --workspace`: **529 bestanden, 0 fehlgeschlagen, 2 bestehende
Tests ignoriert**. Die ignorierten Tests sind der bewusste Golden-File-Generator
und der externe VBDOS-Korpus mit erforderlichem `TB_VBDOS_REPO`.
- `cargo clippy -p tb-ide -p tb-vm -p tb-frontend --all-targets -- -D warnings`:
bestanden.
- `cargo fmt --all -- --check`, `cargo build -p tb-ide`, `git diff --check`:
bestanden.
- `openspec validate --all --strict --json`: alle aktiven Changes und Hauptspecs
gültig.
- Tatsächlicher PTY-Smoke-Test mit `target/debug/tb`, 100×30 und isoliertem
temporären Arbeits-/Konfigurationsverzeichnis: Bracketed Paste eines
PRINT-Statements, Enter/Line Leave und Normalisierung, Exit mit Discard;
Exit-Code 0, identischer termios-Zustand, Cursor sichtbar, Alternate Screen und
Bracketed Paste deaktiviert, keine Dateien erzeugt. Kein Emulator/GUI nötig.
Release, macOS/aarch64, Apple M5 Max, 2026-09-06:
| Referenz | Vollcompile | Änderung mit Cache | Neu / wiederverwendet | Bewertung |
| --- | ---: | ---: | ---: | --- |
| 508 Zeilen | 1,21 ms | 0,74 ms | 1 / 0 | < 50 ms erfüllt |
| 49.760 Zeilen / 20 Module | 103 ms | 22,10 ms | 1 / 19 | < 1 s erfüllt |
Cachewerte sind der Median von sieben Änderungen einschließlich Invalidierung
und Link; der bisherige Vollcompile-Harness misst das beste Einzelmodul aus zehn
Läufen und einen Projektlauf. Die Messung umfasst 335.421 Projektinstruktionen.
## Bewertung
Keine offenen Befunde im Scope dieses Changes. Keine spezifizierte Funktion
wurde zurückgestellt. VM-Start/Continue und die Verwendung des aktuellen
Kompilats im Laufprozess gehören zum abhängigen Change 04; native Erzeugung
bleibt Phase 6. Der Change ist implementiert und verifiziert.
## Synchronisation und Archivierung
Am 2026-09-06 wurden alle sieben Anforderungen und zehn Szenarien in
`openspec/specs/ide-editor/spec.md` übernommen. Alle 18 Hauptspecs bestanden
die strikte Validierung vor der Archivierung. Der Change wurde anschließend
archiviert; relative Links und Abhängigkeiten der Folgechanges wurden angepasst.