# Auto-Update Phase 1: Check & Notify ## Backend - [ ] Add `packaging` to pyproject.toml dependencies - [ ] Create `core/update/__init__.py` - [ ] Create `core/update/release_provider.py` — ABC + data models - [ ] Create `core/update/gitea_provider.py` — Gitea REST API implementation - [ ] Create `core/update/version_check.py` — semver normalization + comparison - [ ] Create `core/update/update_service.py` — background service + state machine - [ ] Create `api/schemas/update.py` — Pydantic request/response models - [ ] Create `api/routes/update.py` — REST endpoints - [ ] Wire into `api/__init__.py`, `dependencies.py`, `main.py` ## Frontend - [ ] Add update banner HTML to `index.html` - [ ] Add Updates tab to `settings.html` - [ ] Add `has-update` CSS styles for version badge in `layout.css` - [ ] Add update banner CSS styles in `components.css` - [ ] Create `features/update.ts` — update check/settings/banner logic - [ ] Wire exports in `app.ts` - [ ] Add i18n keys to `en.json`, `ru.json`, `zh.json` ## Verification - [ ] Lint check: `ruff check src/ tests/ --fix` - [ ] TypeScript check: `npx tsc --noEmit && npm run build` - [ ] Tests pass: `py -3.13 -m pytest tests/ --no-cov -q`