Skip to content

feat(mla): #94 Gemeinsame Fixtures + Fehler-/Stale-Modelle - #108

Merged
Toqsick merged 9 commits into
mainfrom
feature/mla-94-fixtures
Sep 30, 2026
Merged

Toqsick merged 9 commits into
mainfrom
feature/mla-94-fixtures

Conversation

@Toqsick

@Toqsick Toqsick commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Dritter MLA-Next-Kern-Arbeitsblock nach #93: Issue #94 — Gemeinsame Fixtures + Fehler-/Stale-Modelle ([Next 0.0.3]). Basis e4c1346, 9 Commits, SDD-Ausführung mit je Task Implementer + Two-Reviewer-Gate; Details im Handoff docs/mla-next/VERIFY.md → „Handoff #94".

Was drin ist

  • test/fixtures/ (neu): fünf echte, geschwärzte Zorin-Ausgaben (zorin_df/ps/uptime/free/loadavg.txt — Capture exakt der Produktions-Aufrufe inkl. LC_ALL-Parität) plus sieben synthetische Edge-Vektoren + README.md (Capture-Kommandos, Schwärzungsregeln, GTK-/Python-Track-Nutzung).
  • Leak-Check additional/python/tests/test_fixture_leak_check.py: stdlib-unittest, läuft bei jedem CI-Lauf mit; MUST_FLAG/MUST_NOT_FLAG-Vektoren (inkl. enge port=/host:port-Muster, Uhrzeiten bleiben unberührt); auf allen zwölf *.txt leer.
  • Zustandsmodell in la_core: ProbeState { unknown, running, ok, stale, failed } + ProbeStatus<T> — stale nur über markStale() aus ok (behält data/observedAt), kein stillschweigender Weg zurück zu ok (IPC_CONTRACT.md:16); 8 neue Tests.
  • Parser-Tests beider Tracks lesen die Fixtures: test/system_parsers_test.dart + packages/la_core/test/parsers_test.dart laden alle 12 Dateien, Inline-Duplikate entfernt, Erwartungswerte an die echten Captures gepinnt (Asserts teils gestrafft).

Abnahme (alle Boxen, Details in docs/mla-next/ISSUES.md → #94)

  • Fixtures an einem Ort, beide Tracks lesen sie, kein Duplikat
  • Schwärzung dokumentiert; Leak-Check leer (tatsächliche Garantie: Hosts/IPs//home-Pfade leer; Ports in port=/host:port-Form geprüft, bloße Dienstports dokumentiert behalten)
  • Tests je Zustand + Übergang ok → stale + Fehlerpfad
  • Abgrenzung zu QA3 ([V1.0] QA3 Fixture-Bibliothek #87): Basis geliefert, Bestand unberührt

Gates (2026-09-30, auf 8bddeb6/1ad1c55)

la_core format 0 changed · analyze No issues found! · dart test +60 (52+8) · la_probe compile + display-less --version · Root format 0 changed · flutter analyze clean · flutter test +200 · Python Ran 53 tests / OK (49+4) · check-versions konsistent. Vollständige Tabelle im Handoff.

Reviews

Je Task Reviewer A (Korrektheit) + B (Vollständigkeit), alle clean (Task 4 mit einer Fix-Runde + Re-Review); Final-Whole-Branch-Review: A READY_FOR_PR, B NEEDS_FIXES → Fix 8bddeb6 (Brave-Crash-Client-ID geschwärzt, Port-Umgang dokumentiert + Leak-Check erweitert, ISSUES-Wortlaut präzisiert, Plan-Erratum) → Re-Review READY_FOR_PR, keine offenen Findings.

Nicht ausgeführt (ehrlich benannt)

build-deb.sh lokal (kein Paketbezug; CI baut mit diesem PR), CI für den Branch vor dem PR, manuelle Gate-0-Checks (BASELINE §3 — unverändert offen, von #94 unberührt). Merge nur nach gesonderter Freigabe.

Toqsick and others added 9 commits September 30, 2026 05:17
Task 1 von 5 zu #94: test/fixtures/ wird die eine Ablage für Parser-Fixtures
beider Test-Tracks.

- Fünf echte, geschwärzte Zorin-Ausgaben (zorin_*.txt) mit den exakten
  Produktions-Aufrufen capturiert (df ohne LC_ALL mit deutschem Locale,
  ps nach pcpu sortiert, uptime/free unter LC_ALL=C, /proc/loadavg);
  zorin_ps.txt auf die ersten 60 von 682 Zeilen gekürzt (dokumentierte
  Abweichung).
- Schwärzung nach den Plan-Regeln (/home|/media -> user, URLs ->
  example.invalid, IPs entfernt) plus jenseits der Regeln: QEMU-Serial,
  MAC, Bind-IPs, Xwayland-Auth-Suffix, eine Konto-URL und der
  Domain-Anteil im Brave-Installationspfad. Alles in
  test/fixtures/README.md dokumentiert, inklusive der bewusst behaltenen
  Reste (UID 1000, Chromium-Sitzungswerte).
- Sieben synthetische Edge-Vektoren aus den bisherigen Inline-Samples von
  test/system_parsers_test.dart unverändert übernommen (Doppelgerät,
  Mountpoint mit Leerzeichen, Kernel-Thread-Zeile, drei
  Uptime-Wortlautvarianten, fehlender Swap).
- Neu: additional/python/tests/test_fixture_leak_check.py (stdlib
  unittest) - LeakDetection mit den verbindlichen MUST_FLAG-/
  MUST_NOT_FLAG-Vektoren und FixturesClean, das jede *.txt-Datei in
  test/fixtures/ gegen die Musterkategorien (IPv4, IPv6-Heuristik,
  /home//media mit erlaubtem Namen user, TLD-Allowlist, user@host)
  prüft. README.md wird nicht gescannt, weil es die Regeln selbst
  dokumentiert (Begründung im Docstring).
- Keine Dart-Dateien angefasst; die Umschaltung der Parser-Tests auf die
  Fixtures ist Task 3.

Gates: Python 53 Tests OK (49 bestehende + 4 neue, RED zuvor beobachtet:
FixturesClean 2x FAIL wegen fehlendem Verzeichnis); flutter test +200,
analyze sauber, dart format 0 changed (nur zur Seite proving, dass die
neuen Nicht-Dart-Dateien inert sind).

Co-Authored-By: Claude Code <noreply@anthropic.com>
…#94)

Task 2 von 5 zu #94: die fuenf Beobachtungszustaende unknown/running/ok/
stale/failed als getrennte Werte in la_core, nach dem Vertrag aus
docs/mla-next/IPC_CONTRACT.md.

- Neu: ProbeState-Enum und finale Wertklasse ProbeStatus<T> mit den
  Konstruktoren unknown/running/ok/failed; ok traegt data + observedAt,
  failed nur error. stale ist ein UI-/Transportzustand und nur ueber
  den privaten _stale-Konstruktor erreichbar.
- markStale() ist nur aus ok gueltig (sonst StateError) und erhaelt
  data und observedAt; stale -> stale wirft ebenfalls, ein stiller
  Rueckweg stale -> ok existiert nicht - frische Beobachtungen bauen
  ein neues ok.
- Wertgleichheit ueber alle vier Felder (state/data/observedAt/error),
  hashCode via Object.hash, sprechendes toString.
- Barrel la_core.dart um export 'src/probe_status.dart'; ergaenzt
  (alphabetisch nach probe_registry).
- TDD: probe_status_test.dart zuerst angelegt, RED beobachtet
  (Compile-Fehler: Couldn't find constructor 'ProbeStatus' /
  Undefined name 'ProbeState' bei 52 weiterhin gruenen Bestands-
  tests), dann implementiert, dann GREEN mit 8 neuen Tests.

Gates: dart pub get OK; dart format --output=none 0 changed (nach
einmaligem Nachformatieren der beiden neuen Dateien); dart analyze
"No issues found!"; dart test +60: All tests passed! (52 bestehende
+ 8 neue).

Co-Authored-By: Claude Code <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings September 30, 2026 04:56

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Toqsick
Toqsick merged commit 31277a2 into main Sep 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants