Files
hms-mediaengine/STATUS.md
T
HMS MediaEngine Agent b2610e35e5 Phase 2 abgeschlossen: Renderer-State-Sync über echte IPC (§6.2, §6.4)
- RemoteStateMirror (Renderer): Snapshot-Pflicht nach (Re-)Connect,
  Deltas mit neu/geaendert/geloescht, Deltas vor erstem Snapshot werden
  abgelehnt (Re-Sync), Duplikate/Veraltete idempotent
- RendererStateLink (Control Core): connect_and_sync mit Pflicht-Snapshot,
  sync_if_changed versendet Deltas seit letzter gesendeter Revision,
  Reconnect loest immer neuen Snapshot aus (kein halber Zustand)
- End-to-End-Integrationstests ueber echtes TCP-Loopback ohne Mocks:
  Snapshot->Delta-Kette, Reconnect-Re-Sync, Delta-vor-Snapshot-Ablehnung,
  Duplikat-No-Op
- Gesamtsuite 297 gruen, Ruff gruen
2026-09-11 01:33:47 +02:00

120 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STATUS
Stand: 2026-09-11
## Aktuelle Phase
**Phase 1 Fundament und Netzwerkbasis** unter der **Build-first-Strategie
(ADR-0008)**: Die Phasen 15 werden plattformneutral vollständig gebaut;
Gate 0 und alle renderer-nahen Abnahmen werden gesammelt in einem späteren
Windows-Durchlauf validiert. Auftraggeber-Freigabe für die Reihenfolgeabweichung
vom 2026-09-11, dokumentiert in ADR-0008 gemäß PLAN.md §1.
## Letzter grüner Commit
- siehe `git log` und `TEST_REPORT.md` jede Etappe endet mit grünem pytest
und Ruff und wird sofort nach Forgejo gepusht.
## Bestandene Gates
- keine; **Gate 0 bleibt offen** bis zum Windows-Hardware-Durchlauf
(Testplan in ADR-0008)
## Arbeitsweise (ADR-0008)
- Build-first: plattformneutral fertig bauen, Hardware-Validierung gesammelt
am Ende (Windows-Durchlauf).
- Kein Gate wird als grün gemeldet, solange der Windows-Durchlauf offen ist.
- Renderer-Nähe ausschließlich über den Backend-Vertrag (§12.6); Korrekturen
bleiben lokal im Adapter.
## Laufende Arbeit
Phase 0 (abgeschlossen, soweit ohne Hardware möglich):
- [x] Repository, Pflichtdokumente, ADRs 00010003
- [x] GStreamer-Pin 1.28.6, Kernpakete, Control Core, Renderer-Spike
- [x] Beispielplugins (Passthrough, Gaussian Blur mit 3 AQ-Varianten), Tools
- [x] 121 Unit-/Integrationstests grün, Ruff grün (Belege: TEST_REPORT.md)
Phase 1 (plattformneutral abgeschlossen, ADR-0008):
- [x] IPC-Verbindung Control Core ↔ Renderer: Handshake (hello/welcome),
vollständiger Snapshot nach Verbindung, Deltas mit monotoner Revision,
Command-Acks idempotent über message_id, Heartbeat 500 ms in beide
Richtungen, Re-Sync nach Reconnect, ausschließlich Loopback (§6.2)
- [x] SQLite-Persistenz (WAL, Migrationen mit Backup, Integritätscheck,
Projekt-/Einstellungs-/Plugin-Status-CRUD, §24)
- [x] Launcher/Supervisor: echte Kindprozesse, portable Umgebung, freie
Portwahl, kontrolliertes Beenden (terminate→kill) mit Recovery-
Markierung, Restart-Policy mit Crashloop-Erkennung (§6.1A, §26.2, §26.4)
- [x] Cluster-Nachrichtenhülle: Pflichtfelder, Sequenzen, Revisionen,
Trace-ID, Idempotenz-Tracker mit vorwärts-only-Statuskette (§6.5)
- [x] Node-Registry: online/degraded/stale/offline über Schwellen,
UI-Kategorien discovered/paired/unknown/incompatible/offline,
Doppel-Node-ID-Fehler, IP-Wechsel erhält node_id (§6.3, §6.5)
- [x] Paarung: kurzlebige PIN (TTL 120 s, Versuchslimit), sichtbarer
Fingerprint, Token nur als Hash mit Scopes read/control/content_sync/
admin, Ablauf und sofortiger Widerruf (§6.3, §27.1, ADR-0010)
- [x] Discovery-Modell: mDNS-Service _hmsmedia._tcp.local. mit TXT ohne
Secrets, Capability-Digest, persistente manuelle Fallback-Liste
(ADR-0009)
- [x] Node-Identität + Rollen in der App-Verkabelung: Control Core lädt
persistente node_id (Launcher/Produktion) bzw. Dev-ephemeral,
Registry registriert die eigene Node, Endpunkte /system/identity
und /cluster/nodes nach UI-Kategorien (§3.6, §6.3, §27.1)
- [ ] mDNS-Echtnetz-Betrieb mit zeroconf auf Zielsystemen (Modell fertig;
Multicast-Test gehört zu Gate 1, ADR-0009)
Phase 2 (im Bau):
- [x] Domänenmodell: Project/Composition/Layer/Source/EffectInstance/
MediaAsset/OutputSurface/PresetScene mit Validierungen (§10.1)
- [x] Medien-Engine: PlaybackController (Play/Pause/Stop/Retrigger, Loop/
Once/Ping-Pong, In/Out, ±4x Speed, Ende-Ereignis), PreloadSlot für
atomaren Clipwechsel, MediaLibrary mit Duplikaterkennung und Bank-
Slots, ContentManifest mit SHA-256 und Chunk-Hashes (§12, §13, §6.4)
- [x] Project-State-Store mit monotonen Revisionen, Snapshot/Delta
(neu/geändert/gelöscht), Szenenaktivierung als Zielzustand,
Projekt-/Livezustand getrennt (§6.4, §24.2, §18.1)
- [x] Servergruppen + Zielrouting: All/Node/Output/Group, Zielregeln
selected/tag_query/all, Commit-Vorschau (§6.3, §10.1, §17.5)
- [x] Clock-Offset-/Drift-Messung: RTT-Min-Filter (≤2× Min), Drift erst
ab 1 s Fenster, Showzeit→lokale-Zeit-Abbildung (§6.4)
- [x] zeitgestempelte Preset-Aktivierung: Vorlauf 200 ms, Arm/Execute/
Ack, FAILED bei fehlender Arm-Bestätigung (§6.5)
- [x] Renderer-Anbindung: RemoteStateMirror (Renderer) + RendererStateLink
(Control Core) über IPC; Pflicht-Snapshot nach (Re-)Connect, danach
Deltas (neu/geändert/gelöscht), Deltas vor Snapshot abgelehnt,
Duplikate idempotent; End-to-End-Integrationstest über echtes
TCP-Loopback ohne Mocks (§6.2, §6.4)
## Nächste drei Aufgaben
1. Phase 3: Plugin-Loader/Lifecycle (discovered→…→active/quarantined) und
Registry mit Backend-Adapter-Vertrag (§14)
2. Pflicht-Generatoren: hms.generator.solid, gradient, checker_grid,
stripes_chaser, noise_clouds, plasma, wave_bars, shapes, drops_ripples,
starfield (§15.1)
3. Pflicht-Filter: hms.fx.transform2d … feedback_trails mit HLSL/GLSL/GLES
(§15.2)
## Ausstehende Hardware-Validierung (ADR-0008 Testplan)
Nur auf echtem Windows mit GPU messbar; nichts davon gilt als erledigt:
- D3D11-Hardwaredecode aktiv; D3D11Memory durchgängig ohne CPU-Rundweg
- Framezeit p50/p95/p99; DMX → sichtbarer Frame p95 ≤ 2 Frames
- Adaptive-Quality-Wechsel ohne Stall; Golden Images; Shader-Compile auf GPU
- Portable Onefolder-Ausgabe auf sauberem Rechner (§29.6)
- Rust-Renderkern-Kompilierung und GStreamer-Plugin-Bindung (ADR-0004)
## Bekannte Blocker
- Windows-Referenzhardware fehlt in der Entwicklungsumgebung
(Linux-Container, CPU-only) Kernblocker, durch ADR-0008 gemanagt.
- Rust-Toolchain (cargo) fehlt im Container: Rust-Quellcode wird entwickelt,
das Kompilierungsgate erfolgt im Windows-Durchlauf.
- pnpm fehlt im Container: wird für Phase 5 über Node-Corepack aktiviert
(kein Installationsblocker).