OpenSpec-Baseline: Phasen 0/1 als Specs nachgeruestet

Change "baseline-phasen-0-1" (Explore/Retrofit des umgesetzten Stands),
per Archiv in die Haupt-Specs uebernommen und validiert:
- sprach-frontend (6 Requirements: Lexik, Literal-Typisierung,
  Anweisungs-Grammatik, Semantik, Non-Feature-Abweisung, Diagnostik)
- laufzeitfehler (2: Katalog 1-480, Unprintable error)
- textbildschirm (5: dynamische Groesse, PRINT/Scroll, Cursor-API,
  Farbpalette/Blink, Unicode-Zellenmodell)
- kompat-testkorpus (2: byte-genaue Sollausgaben, Frontend-Meilenstein)

Workflow ab jetzt je Phase: Explore -> Proposal -> Umsetzung -> Archiv.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-02 09:47:01 +02:00
parent 5152fde8bc
commit da23d52036
11 changed files with 528 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
# textbildschirm Specification
## Purpose
Der emulierte Textbildschirm ist die Rendering-Grundlage für `PRINT`,
`LOCATE`, `COLOR`, `CLS` und später die Forms-Engine: Unicode-Zellenpuffer
mit dynamischer Terminalgröße und klassischer 16-Farben-Palette auf
Ratatui.
## Requirements
### Requirement: Dynamische Terminalgröße mit Mindestmaß
Der Bildschirm SHALL der Terminalgröße folgen (Puffer per `resize`
anpassbar; Inhalt bleibt oben links erhalten, Cursor wird geklemmt).
Die Mindestgröße ist 80×25: kleinere Werte werden auf 80×25 geklemmt,
und ist die Render-Fläche kleiner als 80×25, SHALL nur ein Hinweis
„Terminal zu klein" mit Ist- und Mindestgröße gerendert werden.
#### Scenario: Vergrößertes Terminal
- **WHEN** der Bildschirm auf 120×40 gesetzt wird
- **THEN** sind alle 120 Spalten und 40 Zeilen adressierbar (`LOCATE 40, 120`)
#### Scenario: Zu kleines Terminal
- **WHEN** die Render-Fläche 60×20 misst
- **THEN** erscheint statt des Puffers der Hinweis mit Minimum 80×25
### Requirement: PRINT-Semantik mit Umbruch und Scrollen
`print` SHALL Zeichen an der Cursorposition ausgeben, am rechten Rand
umbrechen und am unteren Rand des Scrollbereichs den Bereich um eine
Zeile nach oben scrollen; `\n` bricht um, `\r` setzt an den Zeilenanfang.
`VIEW PRINT oben TO unten` SHALL das Scrollen auf den Bereich begrenzen;
ohne eigene Einstellung folgt der Scrollbereich der Bildschirmgröße.
#### Scenario: Scrollen in VIEW-PRINT-Bereich
- **WHEN** der Scrollbereich Zeilen 35 umfasst und in Zeile 5 ein Umbruch erfolgt
- **THEN** scrollen nur die Zeilen 35; Kopfzeilen außerhalb bleiben unverändert
### Requirement: 1-basierte Cursor-API mit Bereichsprüfung
`LOCATE`, `CSRLIN` und `POS` SHALL 1-basiert arbeiten; `LOCATE`
außerhalb der aktuellen Bildschirmgrenzen SHALL als Fehler abgewiesen
werden (Basis für Laufzeitfehler 5).
#### Scenario: Grenzprüfung
- **WHEN** bei 80×25 `LOCATE 26, 1` aufgerufen wird
- **THEN** wird der Aufruf abgewiesen
### Requirement: Klassische Farbpalette und Blink-Simulation
Der Bildschirm SHALL die klassische Palette abbilden (Vordergrund 015,
Hintergrund 07) und auf ANSI-Indexfarben mappen (klassisch 1 = Blau ↔
ANSI 4 usw.). Blinkende Vordergrundfarben (1631) SHALL als „hell"
simuliert werden (Farbe 16, Intensitätsbit gesetzt) — kein echtes
Terminal-Blinken.
#### Scenario: Blink wird hell
- **WHEN** `COLOR 17, 0` gesetzt wird (blinkend Blau)
- **THEN** wird mit heller Vordergrundfarbe 9 gerendert
### Requirement: Unicode-Zellenmodell
Der Puffer SHALL Unicode-Zeichen speichern (keine CP437-Emulation);
aktuell gilt strikt 1 Zeichen = 1 Zelle. (Zeichen mit Darstellungsbreite
2 belegen künftig zwei Zellen — beschlossene Änderung, Umsetzung in
Phase 3 als eigenes Change.)
#### Scenario: Umlaute und Symbole
- **WHEN** `Ä☃` ausgegeben wird
- **THEN** belegen `Ä` und `☃` je genau eine Zelle