- Add startWecker mutation: starts wecker.py via subprocess if not already ringing - Add stopWecker mutation: kills the running wecker process via SIGTERM if ringing - Both mutations handle the 'already ringing' / 'not ringing' edge cases gracefully - Update README with API documentation for the new mutations - Add comprehensive tests (unit + GraphQL endpoint)