groupRuns keyed on the commit alone, so a scheduled job firing against an
unchanged branch tip folded every day into one row with the newest
timestamp and status. krz/skunky-art's nine daily instances runs on
32e337bd1c showed as one row of nine identical chips.
Runs are now keyed on the commit and created_at. A push queues its jobs
in one loop and they share the timestamp to the second; a schedule's are a
day apart. Over krz/skunky-art's current 50 builds that gives 23 runs: nine
dated instances rows, and each push still one row of three chips.
The count line said "15 runs" above 23 builds. It names both now.
feedLines folds the same way and has no queue moment to key on — its
events are recorded per job when a build finishes — so it splits on a
repeated job name. That fixes "ran 9 jobs on" for nine separate days, at
the cost of the oldest scheduled line on a commit folding in the push's
jobs; TestFeedLinesScheduleAbsorbsPushJobs records that.
A second-resolution created_at means a queue loop that straddles a second
boundary would show one push as two rows. None of the 15 pushes in
krz/skunky-art's history does.
Closes #240