--- description: Add a background BaseService - the service class with config_fields and run_once, registration in main.py, init_db columns if it stores state, and docs. argument-hint: allowed-tools: Read, Grep, Edit, Write, Bash(python *) --- Add a background service: **$ARGUMENTS** Mirror an existing service - read `devplacepy/services/base.py` (BaseService) and `NewsService` first. 1. Create `devplacepy/services/_service.py` extending `BaseService`: declare `config_fields` (the `ConfigField` specs are rendered on `/admin/services`), and implement `async def run_once(self) -> None` with extensive INFO and DEBUG logging and specific (not bare) exception handling. Full type hints; no comments or docstrings. 2. If it stores state, ensure the table columns and indexes in `init_db()` (dataset auto-syncs the schema; `CREATE INDEX IF NOT EXISTS`; if the table is soft-deletable, write born-live `deleted_at`/`deleted_by` on insert and add the index). 3. Register it in `main.py` startup: `service_manager.register(YourService())`, under the same `DEVPLACE_DISABLE_SERVICES` guard as the others. It then auto-appears on `/admin/services`. 4. If it calls an LLM, default its endpoint to `config.INTERNAL_GATEWAY_URL` and authenticate with the internal gateway key, like the other AI consumers. 5. Emit audit events via `record_system` for any state change it makes. 6. Document it in `AGENTS.md` (Background services section) and in `README.md` if user-visible. 7. Validate with `hawk` on the touched files and `python -c "from devplacepy.main import app"`.