6.0 KiB
Phase 5 – kontrollierte EPG-Reparatur
Stand: 2026-08-25, Live-Austausch und technische Sofortvalidierung abgeschlossen.
Gewählte Methode
Methode C: atomarer Austausch gegen eine offline gebaute kompakte DB. Das
Schema, alle Indizes und user_version=6 sind identisch. Die persistenten
Tabellen android_metadata, indextable und mappingtable wurden zeilengleich
übernommen; channelmapversiontable war und bleibt leer. Ausschließlich die
EPG-Nutzlasttabellen (Schedule, Now/Next, FVP und FastIP) beginnen leer.
Diese Methode vermeidet 3.071.250 Einzel-Deletes, die Auto-Vacuum- Seitentransporte und eine große temporäre Schreiblast. Der Austausch erfolgt erst nach Prozess-Stopp und erneuter Hash-/DAC-/SELinux-Prüfung über eine 159.744-Byte-Temporärdatei im originalen Datenbankverzeichnis.
BEFORE
/data: 5.089.920 KiB gesamt, 3.613.240 KiB benutzt, 1.355.544 KiB frei, 73 % belegt.- Original: 1.742.053.376 Byte, Inode 131613, Owner/Group
system:system, Mode660, Labelu:object_r:system_app_data_file:s0. - Original-SHA-256:
71403743206d5082aae56c4a947f3429f5c3d54b908c4abe2eb0ca66e06694ba. - Schedule: 3.071.250 Zeilen; zum Snapshotzeitpunkt vollständig abgelaufen.
- Journal: vorhanden, 0 Byte; kein offener Channels-Prozess und kein durch
lsofsichtbarer EPG-Handle im abschließenden Preflight.
Rollback-Gates
| Gate | Ergebnis |
|---|---|
| PC-Snapshot | PASS – Größe und SHA-256 verifiziert |
| adopted-storage-Snapshot | PASS – gleicher SHA-256 |
| Original integer | PASS – integrity_check und quick_check = ok |
| Kandidat lokal getestet | PASS – Schema identisch, FK-Check leer |
| Abhängigkeiten | PASS – Sender/Favoriten und Recordings/Reminder extern; benötigte Mappings erhalten |
| Prozess stoppbar/offene Verbindung | PASS – Preflight ohne PID/Handle; vor Commit erneut geprüft |
| Owner/Group/Mode/Label | PASS – bekannt; Tempdatei muss exakt entsprechen |
| freier Peak-Speicher | PASS – Kandidat benötigt nur 159.744 Byte intern |
| Rücksicherung | PASS – vorab definierter, hash-gegatterter atomarer Restore vom USB-Snapshot |
Alle 14 vom Auftrag geforderten Gates sind erfüllt. Bei jeder Abweichung bricht das Swap-Skript vor dem Rename ab und entfernt nur seine exakt benannte Temporärdatei.
ACTION
Ausgeführt: org.droidtv.channels kontrolliert gestoppt; PID-Freiheit geprüft;
Original- und Kandidatenhash erneut prüfen; Kandidat in dasselbe Verzeichnis
kopieren; Mode, Owner, Group, SELinux-Label und Hash prüfen; unmittelbar vor
dem atomaren mv nochmals PID-Freiheit prüfen; danach sync und Live-Hash.
AFTER
COMMIT_OK; neue DB 159.744 Byte, Inode 140395,system:system, Mode 660, Labelu:object_r:system_app_data_file:s0.- Commit-SHA-256 entsprach exakt dem offline geprüften Kandidaten:
1ae978c7ca9333c6a0528ad535a732f116deb7213321e9d0bd9c0d377a25aa5b. - Nach normalem Providerstart führte Channels den erwarteten Mapping-Sync aus;
die konsistente Nachkopie hat SHA-256
67f8834a7e56d3b84b47f0c75b3781703915b0d1f93e93c42312c69796e6cb36. - SQLite:
quick_check=ok,integrity_check=ok, FK-Check leer, Version 6, 39 Seiten, Freelist 0, Auto-Vacuum FULL. - Zeilen: Schedule 0; Now/Next 0;
indextable358 undmappingtable203. - Zwei konsistente Nachmessungen mehrere Minuten auseinander waren bytegleich.
- Die unabhängigen Hashes von
RecordingsRemindersList.db,tv.dbundlist.dbblieben gegenüber dem Preflight unverändert.
Speicher
| Messwert | Vorher | Nachher | Differenz |
|---|---|---|---|
/data frei (df -k) |
1.355.512 KiB | 3.056.912 KiB | +1.701.400 KiB = 1.661,52 MiB = 1,62258 GiB |
/data Belegung |
73 % | 39 % | −34 Prozentpunkte |
| EPG-Datei | 1.742.053.376 B | 159.744 B | −1.741.893.632 B = 1.701.068 KiB = 1.661,20 MiB |
| Schedule-Zeilen | 3.071.250 | 0 | −3.071.250 |
ROLLBACK
phase5-epg-rollback.json stellt ausschließlich die EPG-DB aus dem
verifizierten USB-Snapshot über eine neue Tempdatei und atomaren Rename wieder
her. Auch dieser Pfad prüft PID, Hash, Mode, Owner/Group und SELinux-Label vor
dem Commit. Er wird nur bei fehlgeschlagener Funktionsvalidierung ausgeführt.
VALIDATION
VALIDATED LIVE (softwareseitig): ADB blieb erreichbar; WLAN blieb
CONNECTED/VALIDATED; Android meldet internes und adopted Volume NORMAL;
Channels, EPGData, PlayTV und TVInput liefen. Der Provider öffnete die DB und
führte erfolgreiche Queries sowie den Sync von 358 Channels/203 Mappings aus.
Keine SQLite-Exception, Korruptionsmeldung, ANR oder Crashloop trat auf. Der
einzige neue Exit war der dokumentierte USER REQUESTED Force-Stop.
Der nach zwei Minuten geloggte Philips-Stale-Cleanup lief erneut und blieb ohne
Mutation – reproduzierbarer Beleg für BUG-001. Im Einstellungsmodus loggte der
Sync zunächst Mode Guide/WatchTV: false. Nach echtem TV-/Guide-Betrieb wuchs
die DB kontrolliert auf 806.912 Byte. Die dritte konsistente Momentaufnahme
enthielt 59 Now-, 48 Next- und 1.041 Schedule-Zeilen; Schedule reichte lokal vom
25.08.2026 19:00 bis 01.09.2026 02:50. integrity_check=ok, 197 Seiten,
Freelist 0. Aktuelle EPG-Neubefüllung ist damit VALIDATED LIVE.
Der normale kanonische Sync reduzierte den internen Spiegel im späteren Snapshot von 358/203 auf 357/202 Index-/Mapping-Zeilen. Da der Kandidat anfangs exakt 358/203 enthielt und die App selbst den späteren Sync ausführte, ist dies kein Beleg für blind gelöschte Senderdaten; die sichtbare Senderliste bleibt dennoch zu prüfen.
Folgende Punkte bleiben USER VALIDATION REQUIRED:
- Live-TV-Bild/Ton und Senderwechsel prüfen.
- Senderliste und Favoriten öffnen und stichprobenartig vergleichen.
- Im bereits neu befüllten Guide Now/Next und zukünftige Sendungen visuell stichprobenartig prüfen.
- Vorhandene Aufnahmen/Timer/Reminder anzeigen (nichts neu programmieren nötig).
- Prüfen, ob die Speicherwarnung verschwunden ist.
USB-Snapshot und vorab geprüfte Rollback-Konfiguration bleiben bis zum Abschluss dieser Sichtprüfung erhalten.