PM service-completion: 'Mark serviced today' button + API endpoint

Closes the PM-overdue loop end-to-end. Iter 63 surfaced PM-overdue tools; iter 86 makes resolving the overdue trivial — POST /api/v1/tools/{id}/mark-serviced (tools:write) updates lastServicedAt and creates a structured AUDIT ToolEvent. Optional `at` body field for back-dating historical service records. UI button appears on /tools/{id} when pmIntervalDays > 0; mechanics finishing service tap it and the PM-overdue chip + dashboard widget clear on the next render. 6 new tests cover the 404 / no-interval-gate / back-dating / structured-prefix paths.