You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Audit aller 13 zuletzt gemergeden PRs (PRs #50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 63, 64, 65) am 2026-05-16 ergab 77 Review-Findings, davon 41 unaddressed. Dieses Issue listet die unadressierten Findings priorisiert. Audit-Report (read-only): /tmp/pr-review-audit-label-printer-hub.md lokal.
Neue Governance-Rule review-feedback-policy.md (im homelab-management Repo) verhindert dass das wieder passiert: alle Reviews müssen vor Merge adressiert sein, Bot-Reviews bekommen ≥15 min Wartezeit nach letztem Push.
Was
Audit aller 13 zuletzt gemergeden PRs (PRs #50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 63, 64, 65) am 2026-05-16 ergab 77 Review-Findings, davon 41 unaddressed. Dieses Issue listet die unadressierten Findings priorisiert. Audit-Report (read-only):
/tmp/pr-review-audit-label-printer-hub.mdlokal.Neue Governance-Rule
review-feedback-policy.md(im homelab-management Repo) verhindert dass das wieder passiert: alle Reviews müssen vor Merge adressiert sein, Bot-Reviews bekommen ≥15 min Wartezeit nach letztem Push.Adressiert (zu verifizieren)
Offene Findings — KRITISCH
print_service.py:88-102— submit-then-pause race condition (tape-mismatch queue path). Worker kann Job dequeuen+printen BEVOR PAUSED-Transition durchläuft.mark_cancelleddocs erlauben PRINTING-Cancel. Code ist OK (queued-only restricted in Phase 6a impl), aber spec/plan dokumentieren das alte Verhalten. (Niedrige Prio: Code richtig.)Offene Findings — WICHTIG (Code-Bugs)
print.py:124—resume_printerdokumentiert 409 für "already active" aber returned das NIE. Broken contract.print_queue.py:stop()— setzt nicht_done_eventfür in-flight jobs.wait_for_job()Callers hängen bis Timeout.print.py:154—resume_jobdokumentierterror_code=invalid_statein 409, implementiert aber nur plain HTTPException.Offene Findings — MEDIUM (Performance + Cleanup)
events.py:152— kein initial state snapshot auf SSE connect. Clients sehen leere Widgets bis nächstes Event.event_bus.py:98—unsubscribe()clears nicht_droppedentries. UUIDs leaken über Reconnects.config.py— SSE Settings haben keineField(gt=0)Validation.sse_queue_size=0→ unbounded queue.pyproject.toml+ci.yml—slowmarker als "excluded from CI" dokumentiert aber CI excluded nicht. Wall-clock-Tests laufen in jedem CI-Run..env.example— fünf neuePRINTER_HUB_SSE_*env vars fehlen.tape_change_producer.py:46— hardcoded PT-series Tape-Lookup in einem generischen Service. Verletzt Plugin-Konvention (app/printer_models/<series>.py). Wird Problem bei QL-series.snmp_helper.py:110— neueSnmpEnginepro SNMP-Query erstellt. Init lädt MIBs, perf-impact.main.py:182—TemplateLoader.load_dir+ModelRegistry.ensure_discoveredsync I/O in async lifespan. Blockiert event-loop bei Startup.main.py:374—_LifespanManagerin main.py (490 lines, >400 limit). Sollte nachapp/utils/asgi.py.print_service.py:117— Label-data resolution duplikat zwischenon_tape_mismatch=queuepath und happy path.main.py:112,119—_build_backend()undfactoryalsAnytyped. Verletzt mypy strict policy.README.md:5— Codecov badge URL embed Token?token=JRG4PDU2QXin public repo.backend/docs/ptouch-integration.md:10— Doc sagtptouch.LaminatedTape*mm, Code usesptouch.Tape*mm. Doc ≠ code.tests/unit/test_config_printer.py:23—Settings()loadet.envdefault. Non-hermetic für devs mit lokaler.env. SollteSettings(_env_file=None).label_renderer.py—_load_font()ruftImageFont.truetype()pro text element. Keinlru_cache.template.py— validator error message sagt "got None or 0" auch wenn negative values rejected. Misleading.snipeit/plugin.py:55—httpx.AsyncClientperlookup()call. Connection-Pool disabled. TODO existing, not fixed.snipeit/plugin.py:67— Response payloaddict[str, Any]. ViolatesAnypolicy.snipeit/plugin.py:52— Kein Test assertsAuthorization: Bearer ...Header. Future refactor könnte auth silently droppen.events.py:208—sse_events_published_totalincrement in per-subscriber loop. Einepublish()mit N Clients = N counts. Metric name "published" misleading.lookup_service.py—_clientstypedstrstatt_AppName = Literal[...]. Static analysis verliert type safety.Offene Findings — MEDIUM (DOCS — Spec/Plan-Bugs)
Diese betreffen die spec/plan-Markdowns; das Implementations-Code ist richtig — die Dokumentation aber irreführend für nächste Implementer.
LABEL_HUB_WEBHOOK_API_KEY(falsch) stattPRINTER_HUB_WEBHOOK_API_KEY/api/print/...baseline falsch (existierende Routes auf/print,/jobs)ProblemDetailmodulpfad inkonsistent (errors.pyvsschemas/problem.py)InvalidJobStateErrorreferenced; nicht im code, Phase 5 raisesValueError/healthztag inkonsistent (systemvsmeta)/jobsbaseline inkorrekt.gitlab-ci.yml(project uses GitHub Actions)poetry/uv(project uses hatchling/pip)LABEL_HUB_DATABASE_URL(correct:PRINTER_HUB_DATABASE_URL)npm run typecheck(project:mypy app)sse-flush@dockersuffix fehlt in der spec (plan ok)integrations/README.md:87— guidance für 3rd-party plugins falsch (Settings.extra="ignore")integrations/README.md:25— Beispielsettings.myapp_urlohne Hinweis dass bundled plugins die Field in config.py adden müssenlookup_service.py— error message computessorted(self._clients)stattself.available_apps(already sorted)Plan
Lessons Learned (process)
Neue Rule
.claude/rules/review-feedback-policy.md:Refs #14, #18, #19, #22