[Refactor] adapter.py Monolith (3.422 Zeilen) aufspalten #12

Closed
opened 2026-08-24 14:58:27 +00:00 by ARIA · 1 comment
Owner

gateway-plugin/adapter.py ist ein Monolith mit 3.422 Zeilen. Die Ruff-Komplexitäts-Schwellen (PLR0911/0912/0913/0915) wurden in docs/18 "just above the current maxima" gesetzt – das ist eine Aktennotiz, keine Lösung.

Problem: LLM-Wartung (Qwen) addiert Code, sie refaktort nicht von sich aus. In 6 Monaten ist das wahrscheinlich 5.000+ Zeilen. Jetzt ist der billigste Moment zum Aufspalten.

Vorschlag: adapter.py in fokussierte Module zerlegen (z.B. dispatch, channel-frames, media-frames, setup/interactive_setup, frame-builder). protocol.py (844 Zeilen) ebenfalls prüfen.

Akzeptanz:

  • adapter.py < ~1.000 Zeilen, Aufgabentrennung klar
  • Ruff-Komplexitäts-Schwellen wieder auf sinnvolle Defaults
  • Alle 86 Tests + 64 Hermes-Suite-Tests weiterhin grün
gateway-plugin/adapter.py ist ein Monolith mit 3.422 Zeilen. Die Ruff-Komplexitäts-Schwellen (PLR0911/0912/0913/0915) wurden in docs/18 "just above the current maxima" gesetzt – das ist eine Aktennotiz, keine Lösung. Problem: LLM-Wartung (Qwen) addiert Code, sie refaktort nicht von sich aus. In 6 Monaten ist das wahrscheinlich 5.000+ Zeilen. Jetzt ist der billigste Moment zum Aufspalten. Vorschlag: adapter.py in fokussierte Module zerlegen (z.B. dispatch, channel-frames, media-frames, setup/interactive_setup, frame-builder). protocol.py (844 Zeilen) ebenfalls prüfen. Akzeptanz: - adapter.py < ~1.000 Zeilen, Aufgabentrennung klar - Ruff-Komplexitäts-Schwellen wieder auf sinnvolle Defaults - Alle 86 Tests + 64 Hermes-Suite-Tests weiterhin grün
ARIA added the enhancement label 2026-08-24 15:00:01 +00:00
ARIA self-assigned this 2026-08-24 15:00:18 +00:00
Author
Owner

Erledigt in PR #15.

Aufspaltung — adapter.py von 3.493 auf ~857 Zeilen, klare Aufgabentrennung:

  • Module-level-Helfer: hooks, classify, pickers, commands, setup, defaults, secrets
  • Frame-Handler-Mixins: inbound, tool_frames, push_frames, media_frames, picker_frames, channel_frames, query_frames
  • mixin_base: IrisAdapterBase (nur Deklarationen für geteilte Attribute)
  • adapter.py hält jetzt nur noch IrisAdapter (Komposition der 7 Mixins + BasePlatformAdapter), register() und die test-seitigen Re-Exports

Mixins stehen im MRO vor BasePlatformAdapter, damit ihre Methoden die Base überschreiben; super()-Aufrufe (z. B. send_image) landen weiterhin bei BasePlatformAdapter. Keine zirkulären Imports; dispatch.py / http_server.py (aufrufen nur Instanzmethoden) bleiben unverändert.

Ruff-Schwellen — PLR0911/0912/0913/0915 auf Ruff-Defaults (12/50/6/5) zurück, statt „just above the current maxima" (das rückt die Latte jedes Mal nach unten, wenn Code wächst). Die wirklich komplexen Funktionen (Frame-Builder, die das Wire-Schema spiegeln, QR-Matrix-Builder, Dispatch-Tabelle) tragen jetzt ein explizites # noqa: PLR09xx als geprüfte, eingefrorene Ausnahme. Neuer Code wird an den Defaults gemessen.

Verifikation:

  • Alle 125 Tests grün (94 test_android + 31 test_android_http), 0 Fehlschläge
  • Keine neuen Ruff-Fehler (im Plugin nur die bestehenden, out-of-scope PLR2004/PLW2901)
  • protocol.py (850 Zeilen) geprüft: zusammenhängende Wire-Protokoll-Schicht, kein Aufspalten nötig
  • Live am Demo-Gerät verifiziert (Gateway läuft, Pairing + Messaging OK)
Erledigt in PR #15. **Aufspaltung** — `adapter.py` von 3.493 auf ~857 Zeilen, klare Aufgabentrennung: - Module-level-Helfer: `hooks`, `classify`, `pickers`, `commands`, `setup`, `defaults`, `secrets` - Frame-Handler-Mixins: `inbound`, `tool_frames`, `push_frames`, `media_frames`, `picker_frames`, `channel_frames`, `query_frames` - `mixin_base`: `IrisAdapterBase` (nur Deklarationen für geteilte Attribute) - `adapter.py` hält jetzt nur noch `IrisAdapter` (Komposition der 7 Mixins + `BasePlatformAdapter`), `register()` und die test-seitigen Re-Exports Mixins stehen im MRO vor `BasePlatformAdapter`, damit ihre Methoden die Base überschreiben; `super()`-Aufrufe (z. B. `send_image`) landen weiterhin bei `BasePlatformAdapter`. Keine zirkulären Imports; `dispatch.py` / `http_server.py` (aufrufen nur Instanzmethoden) bleiben unverändert. **Ruff-Schwellen** — `PLR0911/0912/0913/0915` auf Ruff-Defaults (12/50/6/5) zurück, statt „just above the current maxima" (das rückt die Latte jedes Mal nach unten, wenn Code wächst). Die wirklich komplexen Funktionen (Frame-Builder, die das Wire-Schema spiegeln, QR-Matrix-Builder, Dispatch-Tabelle) tragen jetzt ein explizites `# noqa: PLR09xx` als geprüfte, eingefrorene Ausnahme. Neuer Code wird an den Defaults gemessen. **Verifikation:** - Alle 125 Tests grün (94 `test_android` + 31 `test_android_http`), 0 Fehlschläge - Keine neuen Ruff-Fehler (im Plugin nur die bestehenden, out-of-scope `PLR2004`/`PLW2901`) - `protocol.py` (850 Zeilen) geprüft: zusammenhängende Wire-Protokoll-Schicht, kein Aufspalten nötig - Live am Demo-Gerät verifiziert (Gateway läuft, Pairing + Messaging OK)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ARIA/iris_x_hermes#12