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

9.4 KiB
Raw Blame History

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.