Implement and archive Phase 5 help system
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Verification Report: phase-5-07-hilfesystem
|
||||
|
||||
Stand: 2026-09-07. Proposal, Design, neun Aufgaben sowie vier Anforderungen
|
||||
mit sechs Szenarien wurden gegen den aktuellen Code und ausführbare Tests geprüft.
|
||||
|
||||
## Ergebnis
|
||||
|
||||
| Dimension | Ergebnis |
|
||||
| --- | --- |
|
||||
| Completeness | 9/9 Aufgaben; 4/4 Anforderungen umgesetzt |
|
||||
| Correctness | 6/6 Szenarien zugeordnet und geprüft |
|
||||
| Coherence | Eingebettete docs als einzige Textquelle; vorhandene App-, Fenster-, Designer- und Renderingpfade |
|
||||
| Offene Befunde | 0 CRITICAL, 0 WARNING, 0 SUGGESTION |
|
||||
|
||||
## Anforderungen und Szenarien
|
||||
|
||||
Implementierung: `crates/tb-ide/src/help.rs`, Dispatcher in `app.rs`,
|
||||
Renderaufruf in `render.rs`, Property-Kontext in `designer.rs`.
|
||||
Neue Nachweise: `crates/tb-ide/tests/help.rs`.
|
||||
|
||||
| Requirement / Scenario | Implementierung und Nachweis |
|
||||
| --- | --- |
|
||||
| Mitgelieferte Dokumente / Start außerhalb des Repositorys | `DOCUMENTS` bindet elf aktuelle docs-Dateien und den verlinkten PLAN direkt per `include_str!` ein. `Catalog` erzeugt Index und Contents aus diesen Seiten. `help_works_from_a_directory_without_checkout` startet den Testprozess in einem temporären Verzeichnis ohne docs; `offline_help_child` öffnet dort dieselbe `App`, alle Hilfe-Einstiege sowie Sprach-, Bibliotheks-, Forms-, IDE-Referenz und Tutorial mit TestBackend. Der normale tb-Einstieg benutzt diese App unabhängig vom Arbeitsverzeichnis. |
|
||||
| Markdown / Schmales Hilfefenster | `Page::parse` verarbeitet CommonMark einschließlich Tabellen mit pulldown-cmark; `layout` berechnet Fließtextzeilen anhand der Zellbreite. Code und Tabellen behalten ihre vollständigen Zeichen und sind horizontal scrollbar. `Position` speichert Seite, Block, Zeichenoffset und Linkfokus. `markdown_blocks_escapes_links_and_unicode_layout` prüft Listen, Formatierung, Escapes, Links, Unicode und verlustfreie Blockprojektion bei vier Breiten. `code_and_tables_remain_reachable_after_resize_and_horizontal_scroll` und `links_history_resize_scroll_and_focus_use_real_events` prüfen schmale TestBackend-Fenster, echte Scrolltasten und Resize bei erhaltenem Leseanker und Linkfokus. |
|
||||
| Kontextsensitive Themenwahl / Property und BASIC-Funktion | `token_at`, `normalize`, `Catalog::search`, `help_context` und `design_help_context` verbinden BASIC-Tokens samt Typsuffix mit Dokumentabschnitten und Designerklasse/-eigenschaft. `command_target` bildet konkrete Befehls-IDs ab. `context_functions_properties_commands_and_unknown_queries` prüft F1 auf `lEfT$`, Form.Caption im aktiven Property-Wertfeld, den fokussierten Save-Project-Menübefehl, Mehrdeutigkeit und unbekanntes Suchwort. `every_command_and_forms_alias_resolves_and_invalid_alias_fails` prüft alle Menübefehle beider Modi und alle Properties der 19 Forms-Klassen. |
|
||||
| Links und Verlauf / Rücksprung mit Leseposition | `Help::visit`, `follow`, `back`, `focus_link`, `help_key` halten Navigation und Fenstersitzung zusammen. `links_history_resize_scroll_and_focus_use_real_events` folgt nach Scrollen per Enter einem Link und stellt mit Alt+F1 exakt Seite, Offset und Linkfokus wieder her. Esc restauriert das vorherige Fenster; `help_preserves_fullscreen_and_does_not_modify_designer_or_source` prüft zusätzlich Output-Vollbild, Designerzustand und Suchergebnis-Rücksprünge. |
|
||||
| Links und Verlauf / Grenze des Verlaufs | `Help::visit` hält maximal 20 Rücksprungzustände. `twenty_back_steps_end_of_contents_and_all_entries` führt 25 Wechsel und anschließend die letzten 20 Rücksprünge aus. Weiteres Zurück verändert keinen Zustand und zeigt den Grenzhinweis. Ctrl+F1 folgt der Contents-Dateireihenfolge und bleibt am Ende mit Hinweis stehen. |
|
||||
| Hilfe-Einstiege / Tutorial folgen | Alle sieben Help-Einstiege sind angebunden; About zeigt die gebaute Paketversion und Autoren. `twenty_back_steps_end_of_contents_and_all_entries` bedient Menüs und Shortcuts. `docs/tutorial.md` wurde gegen New Project/Form, Toolbox-Platzierung, Caption/F2, F12-Ereignisauswahl, Startdatei, F9/F8/F5 und die vorhandenen Designer-/Debugger-/Ausführungstests abgeglichen. Alle Tutorialverweise werden durch `Catalog::validate` geprüft. Der zusätzliche durchgehende Tutorial-/Designer-Abnahmelauf bleibt gemäß Aufgabe 3.3 in Change 08. |
|
||||
|
||||
## Weitere Vertragsprüfungen
|
||||
|
||||
- `catalog_links_and_missing_targets_are_checked` prüft sämtliche internen
|
||||
Kataloglinks und Überschriftenanker. Absichtlich fehlende Dateien, Anker,
|
||||
ungültige Prozentkodierungen und Pfade außerhalb des Katalogs schlagen fehl.
|
||||
Doppelte Überschriften einschließlich Namenskollisionen erhalten eindeutige Anker.
|
||||
- Kontextaliasse werden durch dieselbe Zielauflösung geprüft; ein absichtlich
|
||||
falscher Befehlsanker erzeugt einen Fehler. Klasse und Property stammen aus
|
||||
der vorhandenen Forms-Metadatenquelle, die Texte weiterhin aus docs.
|
||||
- `right_click_configuration_and_external_link_follow` prüft den Optionsschalter,
|
||||
sichtbare externe URLs und Enter auf einem externen Ziel. Es erfolgt kein
|
||||
Shell-Auftrag; die Hilfe besitzt keinen Datei-, Prozess- oder Netzwerkpfad.
|
||||
Die bestehende App-Regression belegt weiterhin Rechtsklick-Zustellung an ein
|
||||
laufendes BASIC-Programm mit Output-Fokus.
|
||||
- Index sortiert Themen und Abschnitte alphabetisch, Contents bildet die
|
||||
Dokument-/Überschriftenhierarchie ab. Suche ohne Treffer erhält das Suchwort
|
||||
und bietet Index/Contents an; Mehrdeutigkeit erzeugt eine bedienbare Linkliste.
|
||||
- `docs/hilfe.md`, `docs/tastatur.md` und `docs/tutorial.md` sind normale
|
||||
eingebettete Markdown-Seiten. Es gibt weder eine zweite Referenzsammlung
|
||||
noch externe Renderer. Die Build-Abhängigkeit pulldown-cmark 0.13.4 wurde
|
||||
nach Prüfung der CommonMark-/Tabellen-API und MIT-Lizenz ohne Default-Features
|
||||
aufgenommen. Darstellungsbreiten und Fenster verwenden vorhandene Bibliotheken.
|
||||
|
||||
## Behobene Befunde
|
||||
|
||||
- Frühes Rechtsklick-Routing fing anfangs Programmmauseingaben ab. Kontext-Hilfe
|
||||
respektiert jetzt den laufenden Output-Fokus; die bisherige App-Regression besteht.
|
||||
- Hilfe aus Output-Vollbild wurde vom Vollbild verdeckt. Öffnen und Schließen
|
||||
sichern und restaurieren nun auch diesen Fokuszustand.
|
||||
- Allgemeine Menügruppen waren für einzelne Befehle zu ungenau. Eine exhaustive
|
||||
Zuordnung der konkreten Befehls-IDs verweist auf die jeweiligen Bedienabschnitte;
|
||||
der Katalogtest sichert die Ziele ab.
|
||||
- Einfache Überschriftenzähler konnten bei einem bereits vorhandenen Suffix
|
||||
kollidieren. Eine Menge der vergebenen Anker verhindert solche Kollisionen.
|
||||
- Benachbarte Inline-Spans gleichen Stils werden zusammengefasst, damit
|
||||
kombinierende Unicode-Zeichen bei der Terminaldarstellung zusammenbleiben.
|
||||
- Die bisherige Phase-07-Platzhalterdarstellung und die vollständig überholte
|
||||
Feature-Phasen-Sperre wurden entfernt. Hilfe und Bedienungsübersicht zeigen
|
||||
den implementierten Stand; die native Exporterzeugung bleibt Phase 6.
|
||||
|
||||
## Abschlussprüfungen
|
||||
|
||||
- `cargo test -p tb-ide`: 79 Tests bestanden, keine Fehler oder Ignore-Fälle;
|
||||
zusätzlich ein erfolgreicher Offline-Kindprozess mit derselben Hilfe-App.
|
||||
Enthalten sind elf Hilfetests sowie alle bestehenden App-, Dokument-, Editor-,
|
||||
Designer-, Debugger- und Ausführungstests.
|
||||
- `cargo clippy --workspace --all-targets -- -D warnings`: bestanden.
|
||||
- `cargo fmt --all -- --check`: bestanden.
|
||||
- `git diff --check`: bestanden.
|
||||
- `openspec validate --all --strict`: 23/23 gültig. Bestehende INFO-Hinweise
|
||||
zu langen Anforderungstexten sind keine Validierungsfehler.
|
||||
|
||||
Keine Prüfdimension des Changes wurde ausgelassen. Der zusätzliche Gesamtweg
|
||||
in Change 08 gehört wie geplant zur späteren Phasenabnahme. Es bestehen keine
|
||||
offenen Befunde; der Change ist zur Synchronisierung und Archivierung bereit.
|
||||
Reference in New Issue
Block a user