Release v1.1.4 #12

Merged
AxonByteDev merged 5 commits from beta into main 2026-09-17 16:47:43 +00:00
Owner
  • chore: Sicherheits-Updates und verbindliche Versionen (#11)
  • feat: Zeitpläne laufen in der eigenen Zeitzone statt fest in UTC (#10)
  • feat: Matrix-Benachrichtigungen pro Ereignis schaltbar (#6)
  • fix: Matrix-Bot-Befehl "!update" entfernen (#5)
  • fix: Fremder Verlauf bei neu angelegten Scripts/Servern
- chore: Sicherheits-Updates und verbindliche Versionen (#11) - feat: Zeitpläne laufen in der eigenen Zeitzone statt fest in UTC (#10) - feat: Matrix-Benachrichtigungen pro Ereignis schaltbar (#6) - fix: Matrix-Bot-Befehl "!update" entfernen (#5) - fix: Fremder Verlauf bei neu angelegten Scripts/Servern
Beim Löschen eines Scripts blieben ScriptRun- und ScriptSchedule-Zeilen liegen.
Da SQLite Primärschlüssel wieder vergibt (max(id)+1 der vorhandenen Zeilen), bekommt
das nächste neu angelegte Script dieselbe ID — und zeigte damit den Verlauf und die
Zeitpläne seines Vorgängers an. Dasselbe galt für Server (Scans, Läufe, Doku sowie
Ziel- und Zeitplanlisten).

- delete_script/delete_server räumen ihre Kind-Zeilen jetzt mit auf
- cleanup_orphaned_records() beim Start entfernt Altlasten aus bestehenden Datenbanken:
  echte Waisen und bereits "adoptierte" Läufe, die vor dem Anlegen ihres Scripts bzw.
  Servers stattgefunden haben
- Tests für beide Löschpfade, ID-Wiederverwendung und die Startbereinigung

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Befehl startete ein Update vollautomatisch ohne PTY. DEBIAN_FRONTEND=noninteractive
unterdrückt zwar debconf-Abfragen, nicht aber dpkg-Rückfragen zu geänderten
Konfigurationsdateien — dann hängt der Lauf, ohne dass über Matrix geantwortet werden kann.

- _cmd_update() samt Dispatch-Eintrag und Hilfetext-Zeile entfernt
- README-Feature-Liste angepasst
- Tests: !update wird als unbekannter Befehl beantwortet, !hilfe unverändert

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bisher verschickte PatchPilot bei eingerichtetem Matrix-Zugang alle Benachrichtigungen,
ohne dass einzelne Ereignisse abschaltbar waren.

- Neue Settings notify_scan_available / notify_update_result / notify_self_update,
  Default "true" — bestehende Installationen verlieren keine Benachrichtigungen
- notifications.send_if(key, message) prüft den Schalter; nicht gesetzte Schlüssel gelten
  als aktiv. Die Testnachricht in den Einstellungen bleibt ungefiltert
- Aufrufer umgestellt: scheduler.py (Scan), updates.py (beide Update-Pfade),
  self_update.py (PatchPilot-Update verfügbar)
- Settings.tsx: drei Schalter im Matrix-Bereich, greifen sofort
- Tests für Default, Ein/Aus und die Unabhängigkeit der einzelnen Ereignisse

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Scan, Update-Prüfung und Script-Zeitpläne waren fest auf UTC verdrahtet — die Uhrzeit musste
man selbst umrechnen. Gespeichert wird jetzt die eingegebene Ortszeit plus die Zeitzone;
die Umrechnung übernimmt APScheduler bei jedem Lauf, sodass ein Zeitplan auch nach der
Zeitumstellung zur richtigen Ortszeit läuft (eine einmalige Umrechnung nach UTC täte das nicht).

Backend:
- _make_trigger(cron_expr, tz) mit _safe_tz(): unbekannte Zonen fallen auf UTC zurück,
  statt den Zeitplan zu verhindern
- neue Settings scan_cron_tz / update_check_cron_tz und Spalte scriptschedule.timezone,
  jeweils Default "UTC" — bereits gespeicherte Zeitpläne laufen unverändert weiter
- _iso_z() rechnet next_run_time erst nach UTC, sonst entstünde im Frontend aus
  "...+02:00" ein ungültiges "...+02:00Z"

Frontend:
- src/lib/timezone.ts erkennt die Browser-Zone und schickt sie beim Speichern mit
- CronPicker (Einstellungen) und Zeitplan-Formular (Scripts) zeigen die tatsächliche Zone
  statt "UTC"; bei abweichend gespeicherter Zone weist ein Hinweis auf die Umstellung
  beim nächsten Speichern hin

Tests: Zeitumstellung (Sommer/Winter), UTC-Fallback, Z-Suffix der Nächster-Lauf-Anzeige,
Settings- und Zeitplan-Endpunkte inkl. Default ohne mitgeschickte Zone.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Alle bekannten Schwachstellen in den Abhängigkeiten beseitigt und die Lücke geschlossen,
durch die sie unbemerkt bleiben konnten: es gab weder gepinnte Versionen noch ein Audit.

Abhängigkeiten:
- react-router-dom 6.30.4 -> 7.18.4. Der 6er-Zweig bekam für GHSA-wrjc-x8rr-h8h6 und
  GHSA-337j-9hxr-rhxg keinen Fix mehr; 7.18.4 behebt alle drei Advisories und läuft ohne
  jede Quelltext-Änderung (Imports aus react-router-dom gelten in v7 weiter)
- vite 5.4.21 -> 7.3.6 (behebt GHSA-fx2h-pf6j-xcff/high, GHSA-4w7w-66w2-5vf9,
  GHSA-v6wh-96g9-6wx3 und bringt esbuild >= 0.25), vitest 3.2.7 -> 4.1.11
  (GHSA-82fw-gwwq-j7x9). Bewusst Vite 7 statt 8: Vite 8 erzwingt @vitejs/plugin-react 6
  samt neuer Peer-Abhängigkeiten, ohne zusätzlichen Sicherheitsgewinn

Reproduzierbarkeit:
- requirements.in (direkte Abhängigkeiten) + requirements.txt als vollständig gepinnter
  Lock, erzeugt mit uv pip compile --universal. Der Container braucht dafür kein
  Zusatzwerkzeug, pip install -r requirements.txt genügt
- damit ist aus dem Repo ablesbar, was in einem Image steckt, und ein Audit sagt etwas aus

Audits (es gibt keinen CI-Runner, also in publish.sh):
- run_local_checks() führt jetzt pip-audit -r requirements.txt und npm audit
  --audit-level=high aus und bricht das Release bei Funden ab
- pip-audit in requirements-dev.txt aufgenommen

Basis-Image:
- node:20-alpine -> node:22-alpine, Node 20 ist seit 2026-04-30 End-of-Life.
  python:3.12-slim bleibt (gepflegt bis 2028-10-31)

Dokumentation:
- docs/SECURITY-NOTES.md: Pin-/Lock-Verfahren, Audit-Befehle, die Entscheidungen zu
  react-router 7 und Vite 7, EOL-Daten der Basis-Images und eine Wartungsroutine

Geprüft: pip-audit und npm audit ohne Befund, 92 Backend-Tests, ruff, tsc, eslint, vitest,
vite build, Vite-Dev-Server und ein vollständiger docker build.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
AxonByteDev/PatchPilot!12
No description provided.