## 1. Belege

- [x] 1.1 Eigenschaften, Methoden und Ereignisse je Klasse aus Original-Hilfe, `CONSTANT.BI` und den Beispielprojekten in `klassen-und-eigenschaften.md` dieses Changes zusammenstellen (Typ, Wertebereich, Vorgabewert, Schreibbarkeit zur Laufzeit); verifiziert durch die Datei mit Quellenangabe je Zeile
- [x] 1.2 Signaturen der Ereignisprozeduren und die Regeln für Steuerelement-Arrays belegen; verifiziert durch einen Abschnitt in derselben Datei, der jede Signatur der Forms-Referenz gegenüberstellt

## 2. Frontend: Objektsprache

- [x] 2.1 `!` am folgenden Token entscheiden (D3); verifiziert durch Lexer-Tests für beide Bedeutungen im selben Modul
- [x] 2.2 Punktpfade in der Semantik nach D2 auflösen, mit Diagnose statt impliziter Variablen; verifiziert durch Sema-Tests für unbekanntes Objekt, unbekannte Eigenschaft und unveränderten UDT-Feldzugriff
- [x] 2.3 Eigenschaftstabelle je Klasse aus 1.1 im Frontend führen und Typ/Schreibbarkeit prüfen; verifiziert durch Sema-Tests für Typkonflikt und schreibgeschützte Eigenschaft
- [x] 2.4 `IF TYPEOF … IS klasse`, Datentypen `FORM`/`CONTROL` als Parametertypen, Metabefehl `$FORM`; verifiziert durch Parser- und Sema-Tests je Konstrukt
- [x] 2.5 Ereignisprozeduren erkennen und ihre Parameterlisten prüfen; verifiziert durch Sema-Tests für richtige Signatur, falsche Signatur und gewöhnliche `SUB` mit Unterstrich
- [x] 2.6 Absenkung ins HIR: Objektzugriff als Objekt-/Eigenschaftsindex, Ereignisprozeduren mit ihrer Zuordnung; verifiziert durch `cargo test -p tb-frontend`

## 3. Laufzeit: Formularmodell

- [x] 3.1 Formular- und Steuerelementobjekte mit Eigenschaftsspeicher und Vorgabewerten aus 1.1; verifiziert durch Unit-Tests für Vorgabewerte und Wertebereichsprüfung (Fehler 5)
- [x] 3.2 Lade-/Entladezyklus mit `Form_Load` und `Form_Unload (Cancel)`; verifiziert durch Unit-Tests, darunter das verhinderte Entladen
- [x] 3.3 `SHOW`/`HIDE`, Sichtbarkeit, implizites Laden beim Zugriff; verifiziert durch Unit-Tests für „HIDE entlädt nicht" und implizites Laden
- [x] 3.4 Steuerelement-Arrays: `LOAD ctl(i)`, `UNLOAD ctl(i)`, Fehler 362 für Entwurfszeit-Elemente; verifiziert durch Unit-Tests je Fall
- [x] 3.5 `SCREEN`-Objekt mit `ActiveForm`, `ActiveControl`, `Height`/`Width` aus der aktuellen Terminalgröße; verifiziert durch Unit-Tests, darunter einer nach Größenänderung

## 4. Modalität und Dispatch

- [x] 4.1 Modales `SHOW` als Frame-Marke (D4) mit Fortsetzung nach dem Entladen; verifiziert durch einen VM-Test, der die Anweisung nach `SHOW 1` erst nach dem Entladen ausführt
- [x] 4.2 Stapelregeln der Modalität mit den Fehlern 400–403; verifiziert durch Unit-Tests je Fehlercode
- [x] 4.3 Ereignisdispatch: Ereignis der Warteschlange auf `Name_Ereignis` abbilden und mit Argumenten aufrufen (D5); verifiziert durch VM-Tests für vorhandene und fehlende Prozedur
- [x] 4.4 Mausereignisse aus `phase-4-ereignisschleife` an die Formularereignisse übergeben (Taste, Umschaltzustand, Position in Zellen); verifiziert durch einen Test, der `Form_MouseDown` mit den erwarteten Argumenten sieht
- [x] 4.5 Nachweis, dass keine neuen Zustellpunkte entstehen; verifiziert durch einen Test, der die Zustellpunkte der Ereignissteuerung gegenprüft

## 5. Inventar und Dokumentation

- [x] 5.1 `docs/inventar.md` um Art `Eigenschaft`/`Methode`/`Ereignis` und die Spalte Quelle erweitern, Einträge aus 1.1 eintragen (Status zunächst `offen`); verifiziert durch `inventar_stimmt_mit_code_ueberein`
- [x] 5.2 Abgleichstest auf die neuen Arten ausdehnen; verifiziert durch einen Testfall, der eine falsch gesetzte Eigenschaft im Inventar erkennt
- [x] 5.3 Einträge dieses Changes auf `implementiert` setzen; verifiziert durch denselben Test
- [x] 5.4 `docs/sprachreferenz.md` §12 ausformulieren und `docs/forms-referenz.md` um die Belege aus 1.1 ergänzen; verifiziert durch die Abschnitte
- [x] 5.5 PLAN.md: Punkte „Formular-Modell" und „Ereignisdispatch" abhaken; verifiziert durch die aktualisierte Liste

## 6. Abnahme

- [x] 6.1 Der Dreizeiler aus proposal.md wird namentlich abgewiesen statt falsch übersetzt; verifiziert durch einen Test, der die drei Diagnosen prüft
- [x] 6.2 `cargo test` grün und `openspec validate phase-4-objektmodell --strict` ohne Befund; verifiziert durch beide Kommandos
