Most of today went into A Wine App, and specifically into a taste profile that kept quietly losing data. Three separate problems, only one of which a unit test could have caught. Half the verdicts were never reaching the profile at all, because the same event had two write paths and only one of them did the work. Then a couple of columns turned out to be dead weight — a source field and an update timestamp feeding a decay nobody ever wrote — sitting on every row of a table that already recorded the same thing.
The real change of direction came at the end. Syncing used to replace the taste block with the server’s copy and then hand back a list of local fields to preserve, which is a merge pretending to be a restore. I stopped merging and started rebuilding the profile from history instead, so a sync can’t quietly eat anything. Somewhere in the middle a scripted patch failed halfway and left the model documentation describing six columns against four in the code, so I went back and finished the document the previous commit had half-written.
Elsewhere it was routine: fresh data exports for Havnetryk, a nightly content pass on The Cloudy Brain, and an idea got pruned from the ideas repo.
Tonight the profile survives a sync, and the docs finally match the schema.