Files
TerminalBasic/openspec/specs/sprachinventar/spec.md

89 lines
4.6 KiB
Markdown

# sprachinventar Specification
## Purpose
Das Sprachinventar ist das Messinstrument für die Leitplanke
„Vollständigkeit ist das Soll": eine gepflegte Liste aller in der
Original-Hilfe des Vorbilds dokumentierten Anweisungen, Funktionen und
Metabefehle mit Abdeckungsstatus, gegen die sich der Implementierungsstand
jederzeit prüfen lässt.
## Requirements
### Requirement: Vollständiges Inventar der Original-Hilfe
`docs/inventar.md` SHALL jede in der Original-Hilfe des Vorbilds
dokumentierte Anweisung, Funktion, Metabefehl, Operator-Schlüsselwort und
Klausel als eigenen Eintrag führen. Darüber hinaus SHALL es das
**Forms-Objektmodell** führen: je Klasse ihre Eigenschaften, Methoden und
Ereignisse als eigene Einträge. Ein dokumentiertes Element MUST NOT
fehlen; Vollständigkeit gegenüber der Quelle geht der Kürze vor. Jeder
Eintrag SHALL Name, Art (Anweisung/Funktion/Metabefehl/Eigenschaft/
Methode/Ereignis), Themengruppe, Status, Fundstelle und Quelle tragen.
Für Einträge des Objektmodells SHALL die Quelle die Forms-Referenz sein,
weil die Themenliste der Original-Hilfe sie nicht führt.
#### Scenario: Dokumentiertes Element ist erfasst
- **WHEN** die Original-Hilfe die Anweisung `VIEW PRINT` dokumentiert
- **THEN** enthält das Inventar einen Eintrag `VIEW PRINT` mit Art, Gruppe, Status und Fundstelle
#### Scenario: Non-Feature ist erfasst, nicht weggelassen
- **WHEN** `PEEK` als Non-Feature deklariert ist
- **THEN** steht `PEEK` mit Status `Non-Feature` im Inventar und die Fundstelle verweist auf den Abschnitt „Abweichungen" der Sprachreferenz
#### Scenario: Eigenschaft einer Steuerelementklasse ist erfasst
- **WHEN** die Forms-Referenz für `TextBox` die Eigenschaft `SelStart` führt
- **THEN** enthält das Inventar einen Eintrag für `TextBox.SelStart` mit Art `Eigenschaft`, Status und Quelle Forms-Referenz
#### Scenario: Ereignis einer Klasse ist erfasst
- **WHEN** die Forms-Referenz für `Form` das Ereignis `Resize` führt
- **THEN** enthält das Inventar einen Eintrag für `Form_Resize` mit Art `Ereignis`
### Requirement: Festes Statusvokabular
Der Status eines Eintrags SHALL genau einen von drei Werten tragen:
`implementiert` (Frontend senkt ab und die Laufzeit führt aus),
`offen` (dokumentiert, noch nicht verfügbar) oder `Non-Feature`
(vom Projektinhaber abgelehnt und in der Sprachreferenz unter
„Abweichungen" gelistet). Ein Eintrag mit Status `Non-Feature` MUST eine
Fundstelle in der Sprachreferenz nennen.
#### Scenario: Unzulässiger Status
- **WHEN** ein Eintrag den Status `teilweise` trägt
- **THEN** schlägt die Inventarprüfung mit Nennung des Eintrags fehl
#### Scenario: Non-Feature ohne Fundstelle
- **WHEN** ein Eintrag den Status `Non-Feature` trägt, aber keine Fundstelle nennt
- **THEN** schlägt die Inventarprüfung mit Nennung des Eintrags fehl
### Requirement: Automatischer Abgleich Inventar gegen Implementierung
Ein automatischer Test SHALL das Inventar gegen den tatsächlichen
Implementierungsstand prüfen und bei jeder Divergenz fehlschlagen. Als
`implementiert` markierte Elemente MUST im Frontend eine Signatur besitzen
und MUST NOT auf einen „nicht verfügbar"-Marker absenken; als `offen`
markierte Elemente MUST auf einen solchen Marker absenken oder ohne
Signatur sein; als `Non-Feature` markierte Elemente MUST zur Compile-Zeit
mit „Feature unavailable" abgewiesen werden. Der Test MUST das
divergierende Element, seinen Inventarstatus und den vorgefundenen
Zustand benennen.
#### Scenario: Inventar hinkt der Implementierung hinterher
- **WHEN** `LOCATE` implementiert wurde, im Inventar aber noch `offen` steht
- **THEN** schlägt der Abgleich fehl und nennt `LOCATE`, Status `offen` und den Befund „implementiert"
#### Scenario: Inventar behauptet zu viel
- **WHEN** ein Eintrag `implementiert` trägt, das Element aber weiterhin auf den „nicht verfügbar"-Marker absenkt
- **THEN** schlägt der Abgleich fehl und nennt das Element
#### Scenario: Abdeckungsstand ist abrufbar
- **WHEN** der Abgleich läuft
- **THEN** nennt er die Zahl der Einträge je Status als Abdeckungsstand
### Requirement: Keine stillen Lücken bei dokumentierten Elementen
Ein Element mit Status `offen` MUST bei Verwendung eine benannte
Ablehnung erzeugen — entweder eine Compile-Diagnose oder den Laufzeitfehler
für nicht verfügbare Funktionen —, die das Element namentlich nennt. Ein
generischer Syntaxfehler oder „unbekannter Bezeichner" für ein
dokumentiertes Element MUST NOT auftreten (Guiding Principle).
#### Scenario: Offenes Element wird namentlich abgewiesen
- **WHEN** ein Programm eine im Inventar als `offen` geführte Anweisung verwendet
- **THEN** nennt die Ablehnung den Namen der Anweisung, nicht nur „Syntaxfehler"