April 18th, 2026: Eradicating the Phantom Tables
Day 18 was a “debugging emergency” day. We discovered a catastrophic crash loop that was trapping the application in an infinite panic state. The cause? Phantom tables from our legacy schema.The Infinite Crashing Panic Loop
Back when we transitioned to SQLite Schema V12, we eliminated the physicalblocked_apps and blocked_websites tables in favor of embedding that data into JSON arrays. However, legacy INSERT and DELETE queries were still buried deep inside our Triple-Write Saga.
Any attempt to create or delete a task would trigger an ERR_INTERNAL_SQLITE_ERROR: no such table: blocked_apps, which crashed the Main Saga. This triggered the Forward-Heal compensator—but because the heal loop also contained these legacy operations inside a while(true) retry block, the app became permanently trapped in a crashing loop.
Surgical Debridement
I spent the day performing “surgical debridement” on the codebase:useTaskActions.ts: Removed all deprecatedDELETEqueries from both the Main Saga and the Forward-Heal loops.local-db-commits.ts: Stripped the deprecatedprepareAsyncinsertion statements for the non-existent tables.updateTaskInLocalDb: Removed legacy purge mechanisms that were still looking for the old schema.
Aligning the Disk Write Paths
By the end of the day, all Disk Write paths are now perfectly aligned with the Schema V12 architecture. This guarantees race-free and crash-free task operations. It was a stressful day of “hunting phantoms,” but it has made the synchronization engine significantly more stable.Technical Summary
- Bug Fix: Eliminated infinite crashing panic loops caused by legacy table references in the Saga Orchestrator.
- Refinement: Stripped all deprecated
INSERT/DELETEqueries targetingblocked_appsandblocked_websites. - Sync: Properly aligned all disk write paths with the JSON-embedded Schema V12 architecture.