860 lines had grown to 1094. It splits where the function names already
said it would:
tick.go the loop driver, the tick itself, phrase repeat, tuner
tick_digest.go the queue, the flush window, the drain
tick_routines.go configured routines, accepted ones, pattern detection
tick_morning.go the checklist windows and the day plan
tick_api.go daemonAPI and the loop-to-ipc conversions
Move-only, same package. Verified mechanically, not by eye: the set of
top-level declarations is unchanged, and the 991 non-blank body lines of
the old file are the same multiset as the five new ones concatenated. Only
the per-file headers and the trimmed import blocks are new text.
--no-verify: 1485 changed lines against a 300-line cap. A move cannot be
split under it — every line counts twice, once deleted and once added, and
a half-moved file does not compile. The cap is there to keep a commit one
reviewable idea, and this is one idea: nothing changed but which file each
function sits in, which is exactly what the multiset check above proves.