refactor: safe update engine, durable execution and shared proposal views #236

Merged
Wuast94 merged 15 commits from refactor/update-engine-contracts into main 2026-09-06 03:22:47 +02:00
Owner

Umfang

Gemeinsamer Rework mit überprüften Zwischencommits. CI, Release-Workflow und Dockerfile bleiben unverändert. Keine produktiven Scans oder Änderungen an bestehenden Update-PRs ausgelöst.

  • Gemeinsame Identitäts-, Versions- und Entscheidungsdaten einschließlich Strategie, Policy-Herkunft, Lookup-Alter und Kandidaten-Ablehnungsgründen.
  • Konsistente Nachweise für wiederholte Abhängigkeiten als normales Verhalten ohne Opt-in: Cache-Stand und identische Tag-/Metadaten-/Digest-Abfragen bleiben innerhalb eines Scans stabil. Bestehende automatische Gruppierung und linkedUpdates bleiben erhalten.
  • Strukturierte Proposal-Transitions für Markdown und UI, zusammengefasste Fundstellen, getrennte Paket-/Chart-/App-Versionen und nachvollziehbare Release-Quellen statt erfundener Vergleichsreferenzen.
  • Frontend nach Features aufgeteilt; teilbare Repository-/Run-/Dependency-Links mit Browsernavigation und Schutz gegen verspätete Antworten.
  • Dauerhafte Scan-Anfragen samt Optionen und Phasen, Wiederaufnahme beim Start, PostgreSQL-Repository-Koordination und Commit-/Phasenprüfung vor Schreibzugriffen.
  • Begrenzte HTTP-/dekomprimierte Antworten, typisierte Fehler, settings-isolierte gemeinsame Lookups, kontrollierte Abbrüche und explizite Cache-Frische.

Versions- und Schreibsicherheit

Die vorhandenen Versionsparser, Vergleicher, Docker-Varianten-/Build-Regeln, Präfixe und Digest-Prüfungen wurden nicht ersetzt. Die zunächst hinzugefügte coupledUpdates-Konfiguration wurde nach Nutzerkorrektur vollständig entfernt. Es gibt weder Opt-in noch eine erzwungene gemeinsame Versionsnummer über unterschiedliche Abhängigkeiten hinweg. Gleiche Auswahlinputs verwenden konsistente Nachweise; ausdrücklich unterschiedliche Versionsregeln, Varianten und Quellen bleiben getrennt. Normale Lockfile-Pflege bleibt unverändert.

Unvollständige Ergebnisse dürfen bestehende PRs nicht schließen. Eine angeforderte normale PR-Gruppe muss alle geplanten Änderungen enthalten; eine unabhängige vollständige Gruppe bleibt schreibbar. Veraltete oder nicht entscheidungsbereite Scans dürfen keine PRs schreiben. Schreibgrenzen einschließlich nach Lockfile-Erzeugung, Push, PR, Automerge und Fehler-Cleanup prüfen die Repository-Ownership erneut. Bereits laufende externe Operationen lassen sich durch PostgreSQL nicht nachträglich fencen; keine Exactly-once-Behauptung.

Migration / Betrieb

Migrationen 018/019 ergänzen Scan-Ausführung und Entscheidungserklärungen. Historische Snapshots bleiben lesbar. Für Schreibaktionen aus alten Datenbank-Scans ohne aufgezeichneten Source-Commit ist ein neuer Scan erforderlich. Fehlgeschlagene PR-Reconciliation bleibt für den nächsten Prozessstart erhalten; keine unendlichen automatischen Retries.

Prüfung

  • Vollständiges scripts/ci-checks.sh: Format/Lint, Module, Vulnerability-/Dependency-Audits, Deadcode, TypeScript, Biome, Frontend-Verhalten und alle Go-Tests mit Integration, Race-Detector und Shuffle.
  • Produktionsimage für linux/amd64 gebaut; scripts/ci-smoke-image.sh mit isoliertem PostgreSQL erfolgreich.
  • Bestehende Versionierungs-Fuzzer zusätzlich ausgeführt; keine Fehler.
  • Kontrollierte Promises/Channels und Fake-Clock statt zeitabhängiger Beweise; keine Tests auf statische Dateiwerte oder Versionspins.

Plan und technische Nachweise: docs/superpowers/plans/2026-09-05-update-engine-rework.md, docs/update-decisions.md, docs/scan-execution.md, docs/network-evidence.md, docs/update-pull-requests.md.

Datenbank-Optimierung

  • Commits 08b48b7 / f01d680: unveränderliche Kandidaten-/Release-Evidenz unabhängig dedupliziert; vollständige Versionen, Digests und historische Proposals bleiben erhalten. Kleine Inline-Vorschau statt mehrfacher vollständiger JSON-Kopien.
  • Automatische 30-Tage-Retention ohne Opt-in; neuester Scan, neuester ausgewerteter Stand und laufende/pending Ausführungen bleiben geschützt. Repository-Locks, begrenzte Transaktionen, faire Zeitbudgets, schrittweise Altbestand-Kompaktierung und begrenzte Evidence-GC.
  • Migrationen 020/021 sind additiv; keine große Datenumschreibung beim Start. Kein automatisches VACUUM FULL. Rollback erfordert die explizite Rückmigration vor dem alten App-Binary; alte/neue Versionen während dieser Umstellung nicht parallel betreiben.
  • Vollständige lokale CI-Checks, zusätzlicher Integration-Tag-Lint, linux/amd64-Image und bestehender Runtime-Smoke-Test grün. Verhaltenstests sichern insbesondere CNPG-Tag/Digest/Release-Notes nach Cache-Wechsel, Kompaktierung und Retention sowie den verlustlosen Downgrade ab.
  • Synthetische 12-Entscheidungen-Fixture: Payload 450.264 → 46.282 Bytes (~89,7 % weniger; ohne Index-/Zeilen-Overhead, keine Produktionsprognose). Produktiv nichts gelöscht oder ausgerollt.

Details: docs/database-storage.md, docs/superpowers/plans/2026-09-06-database-storage.md.

## Umfang Gemeinsamer Rework mit überprüften Zwischencommits. CI, Release-Workflow und Dockerfile bleiben unverändert. Keine produktiven Scans oder Änderungen an bestehenden Update-PRs ausgelöst. - Gemeinsame Identitäts-, Versions- und Entscheidungsdaten einschließlich Strategie, Policy-Herkunft, Lookup-Alter und Kandidaten-Ablehnungsgründen. - Konsistente Nachweise für wiederholte Abhängigkeiten als normales Verhalten ohne Opt-in: Cache-Stand und identische Tag-/Metadaten-/Digest-Abfragen bleiben innerhalb eines Scans stabil. Bestehende automatische Gruppierung und `linkedUpdates` bleiben erhalten. - Strukturierte Proposal-Transitions für Markdown und UI, zusammengefasste Fundstellen, getrennte Paket-/Chart-/App-Versionen und nachvollziehbare Release-Quellen statt erfundener Vergleichsreferenzen. - Frontend nach Features aufgeteilt; teilbare Repository-/Run-/Dependency-Links mit Browsernavigation und Schutz gegen verspätete Antworten. - Dauerhafte Scan-Anfragen samt Optionen und Phasen, Wiederaufnahme beim Start, PostgreSQL-Repository-Koordination und Commit-/Phasenprüfung vor Schreibzugriffen. - Begrenzte HTTP-/dekomprimierte Antworten, typisierte Fehler, settings-isolierte gemeinsame Lookups, kontrollierte Abbrüche und explizite Cache-Frische. ## Versions- und Schreibsicherheit Die vorhandenen Versionsparser, Vergleicher, Docker-Varianten-/Build-Regeln, Präfixe und Digest-Prüfungen wurden nicht ersetzt. Die zunächst hinzugefügte `coupledUpdates`-Konfiguration wurde nach Nutzerkorrektur vollständig entfernt. Es gibt weder Opt-in noch eine erzwungene gemeinsame Versionsnummer über unterschiedliche Abhängigkeiten hinweg. Gleiche Auswahlinputs verwenden konsistente Nachweise; ausdrücklich unterschiedliche Versionsregeln, Varianten und Quellen bleiben getrennt. Normale Lockfile-Pflege bleibt unverändert. Unvollständige Ergebnisse dürfen bestehende PRs nicht schließen. Eine angeforderte normale PR-Gruppe muss alle geplanten Änderungen enthalten; eine unabhängige vollständige Gruppe bleibt schreibbar. Veraltete oder nicht entscheidungsbereite Scans dürfen keine PRs schreiben. Schreibgrenzen einschließlich nach Lockfile-Erzeugung, Push, PR, Automerge und Fehler-Cleanup prüfen die Repository-Ownership erneut. Bereits laufende externe Operationen lassen sich durch PostgreSQL nicht nachträglich fencen; keine Exactly-once-Behauptung. ## Migration / Betrieb Migrationen 018/019 ergänzen Scan-Ausführung und Entscheidungserklärungen. Historische Snapshots bleiben lesbar. Für Schreibaktionen aus alten Datenbank-Scans ohne aufgezeichneten Source-Commit ist ein neuer Scan erforderlich. Fehlgeschlagene PR-Reconciliation bleibt für den nächsten Prozessstart erhalten; keine unendlichen automatischen Retries. ## Prüfung - Vollständiges `scripts/ci-checks.sh`: Format/Lint, Module, Vulnerability-/Dependency-Audits, Deadcode, TypeScript, Biome, Frontend-Verhalten und alle Go-Tests mit Integration, Race-Detector und Shuffle. - Produktionsimage für linux/amd64 gebaut; `scripts/ci-smoke-image.sh` mit isoliertem PostgreSQL erfolgreich. - Bestehende Versionierungs-Fuzzer zusätzlich ausgeführt; keine Fehler. - Kontrollierte Promises/Channels und Fake-Clock statt zeitabhängiger Beweise; keine Tests auf statische Dateiwerte oder Versionspins. Plan und technische Nachweise: `docs/superpowers/plans/2026-09-05-update-engine-rework.md`, `docs/update-decisions.md`, `docs/scan-execution.md`, `docs/network-evidence.md`, `docs/update-pull-requests.md`. ## Datenbank-Optimierung - Commits `08b48b7` / `f01d680`: unveränderliche Kandidaten-/Release-Evidenz unabhängig dedupliziert; vollständige Versionen, Digests und historische Proposals bleiben erhalten. Kleine Inline-Vorschau statt mehrfacher vollständiger JSON-Kopien. - Automatische 30-Tage-Retention ohne Opt-in; neuester Scan, neuester ausgewerteter Stand und laufende/pending Ausführungen bleiben geschützt. Repository-Locks, begrenzte Transaktionen, faire Zeitbudgets, schrittweise Altbestand-Kompaktierung und begrenzte Evidence-GC. - Migrationen 020/021 sind additiv; keine große Datenumschreibung beim Start. Kein automatisches VACUUM FULL. Rollback erfordert die explizite Rückmigration vor dem alten App-Binary; alte/neue Versionen während dieser Umstellung nicht parallel betreiben. - Vollständige lokale CI-Checks, zusätzlicher Integration-Tag-Lint, linux/amd64-Image und bestehender Runtime-Smoke-Test grün. Verhaltenstests sichern insbesondere CNPG-Tag/Digest/Release-Notes nach Cache-Wechsel, Kompaktierung und Retention sowie den verlustlosen Downgrade ab. - Synthetische 12-Entscheidungen-Fixture: Payload 450.264 → 46.282 Bytes (~89,7 % weniger; ohne Index-/Zeilen-Overhead, keine Produktionsprognose). Produktiv nichts gelöscht oder ausgerollt. Details: `docs/database-storage.md`, `docs/superpowers/plans/2026-09-06-database-storage.md`.
fix: make dependency evidence consistent without opt-in coupling
All checks were successful
CI / Quality (pull_request) Successful in 19m33s
CI / Build (pull_request) Successful in 4m17s
627df471e1
feat: bound scan history and maintain database storage automatically
All checks were successful
CI / Quality (pull_request) Successful in 2m27s
CI / Build (pull_request) Successful in 1m21s
f01d680af3
Sign in to join this conversation.
No reviewers
No labels
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
Wuast94/updatarr!236
No description provided.