| 4498a011 | Third hardening pass on jimitrack and the tracker web app | no-body-in-particular | 4 h ago |
| 31d956d1 | jimitrack: fix self-deadlock on WARNONCE#/WARNAUDIO#/WARNMOTOR# | no-body-in-particular | 4 h ago |
| ed1901c2 | Second hardening pass on jimitrack and the tracker web app | no-body-in-particular | 12 h ago |
| abdd7f60 | Harden jimitrack against hostile input on port 9000 | no-body-in-particular | 13 h ago |
| 03ccfd5c | Twenty two bytes to port 9000 killed the daemon | no-body-in-particular | 1 days ago |
| 25774ce9 | gmtime in a threaded server: every timestamp shared one static buffer | no-body-in-particular | 1 days ago |
| 407e3a15 | A third pass: accented fence names were blanked, and silently unenforced | no-body-in-particular | 1 days ago |
| 50d37a3b | A second review pass: six more defects, two of them data-destroying | no-body-in-particular | 1 days ago |
| f7e42325 | Three classes of defect found in a review of the device server | no-body-in-particular | 1 days ago |
| b789a130 | Add EVENT to the basic protocol | no-body-in-particular | 1 days ago |
| 0ce75af8 | Harden read-only view token and stop captcha replay | no-body-in-particular | 1 days ago |
| 21d925d1 | Send the reset mail from an address that exists | no-body-in-particular | 6 days ago |
| 85d16d0e | Accept the passwords the message says are accepted | no-body-in-particular | 6 days ago |
| 3179f813 | Keep the connection bar hidden until there is something to say | no-body-in-particular | 9 days ago |
| c90f3d06 | Say which fences are awake, and where the wearer stands against them | no-body-in-particular | 9 days ago |
| b9187922 | Let a fix land on a fence edge without calling it an escape | no-body-in-particular | 9 days ago |
| bf130607 | Stop Safari zooming into a tapped field, and remember the chosen range | no-body-in-particular | 9 days ago |
| 9ce20f0a | Read every time in one timezone, and space the track arrows by zoom | Claude | 9 days ago |
| 53ef0edd | Stop a wandering fix raising an alarm, and put the red dot where it happened | Claude | 9 days ago |
| 1c5b0fed | Add a tool to remove wifi entries filed in the wrong place | Claude | 14 days ago |
| 568cc9ab | Only learn a wifi position from a device that is standing still | Claude | 14 days ago |
| 0785fc42 | Resolve a wifi position by consensus across access points | Claude | 17 days ago |
| 064e7b85 | Keep the add-a-fence row reachable in a folder with many fences | no-body-in-particular | 27 days ago |
| 3d42243a | Put delete on the fence rows and drop the table beneath them | no-body-in-particular | 27 days ago |
| a62f5b58 | Restore renderFences, which the folder tree commit deleted | no-body-in-particular | 27 days ago |
| b6020f56 | Show the geofence folders as an expandable directory list | no-body-in-particular | 27 days ago |
| f169ba4a | Stop geofence.php and disabled_alarms.php warning on every request | no-body-in-particular | 27 days ago |
| 87bc4002 | Merge min-speed-interval into main | no-body-in-particular | 27 days ago |
| 96f22739 | Keep geofences in folders that can be switched off together | no-body-in-particular | 27 days ago |
| 25ee58e6 | Repair the password reset form and stop mailing broken links | no-body-in-particular | 27 days ago |
| 09087587 | Keep the captcha's background colour instead of rendering it black | no-body-in-particular | 27 days ago |
| d098f13d | Close a panel without reloading the page | Claude | 29 days ago |
| 9c4b6517 | Summarise sleep in the event list, leave only the asleep flag on the chart | Claude | 2026-09-06 |
| 445451fa | Revert "Re-fit the chart axes when the range or the visible series change" | no-body-in-particular | 2026-09-06 |
| 7e80b80b | Re-fit the chart axes when the range or the visible series change | Claude | 2026-09-06 |
| 403ff067 | Stop measuring speed over intervals too short to measure one | Claude | 2026-09-06 |
| 6c823922 | Anchor the range on now when its width changes | no-body-in-particular | 2026-09-01 |
| 655265a6 | Let the init script actually supervise, and actually stop | no-body-in-particular | 2026-08-30 |
| 50ee732c | Quieten the warnings every request was writing to the error log | no-body-in-particular | 2026-08-30 |
| 2941f8ae | Redraw the map when the date changes, and keep the range following the clock | no-body-in-particular | 2026-08-30 |
| e3bc5133 | Stop recording a repeated position as though it were a new fix | no-body-in-particular | 2026-08-30 |
| b7020730 | Record what removing the poll actually cost: nothing | no-body-in-particular | 2026-08-29 |
| daf7e149 | Stop asking the watch for readings it is already taking | no-body-in-particular | 2026-08-29 |
| 56a491e9 | Stop "removed" becoming a permanent veto on the recovery | no-body-in-particular | 2026-08-29 |
| df88e750 | Record the rest-activity metrics instead of acking and dropping them | no-body-in-particular | 2026-08-28 |
| 048a558a | Two more splice sources, and stamp the log with a clock that moves forwards | no-body-in-particular | 2026-08-28 |
| 17d736b6 | Audit every command against the stock firmware, and undo a comma I added | no-body-in-particular | 2026-08-27 |
| ab8dcb24 | TEMP# was setting a one minute temperature cycle by accident | no-body-in-particular | 2026-08-27 |
| 7788e07e | Write down what the reboot is recovering from, and that we did not cause it | no-body-in-particular | 2026-08-27 |
| e1071523 | I blamed IWBPSQ for a gap that was a reboot | no-body-in-particular | 2026-08-27 |