Files
admin/.wiki/concepts/sched-admin-client-openapi.md

57 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: sched admin-client openapi — F&F раунд 2026-08-18
type: concept
tags: [sched, ff, openapi, admin-api, python, codegen, f&f-round]
related: [[openapi-generator-3-1-spec-gotchas]], [[sched-fnf-r8-verification-stand]]
updated: 2026-08-18
---
# sched admin-client openapi — F&F раунд
Живая проверка claim'а sched openapi-spec: **«клиент на любом ЯП одной
командой»**. Вердикт: **claim подтверждён с оговорками** — генерация одной
командой работает, но 3.1-спека до «любого ЯП без правок» не дотягивает
(8 операций требуют raw-обхода).
## Что делал / ожидал / получил
| | |
|---|---|
| Что | Python-клиент из опубликованной спеки `@sched/admin-api/openapi.json` 0.1.2 (verdaccio subpath-export, идентична репо), `openapi-generator` 7.24.0 (`-g python`, JDK 25) |
| Ожидал | типизированная десериализация всех ответов, зелёный сьют, зелёный smoke |
| Получил | сьют **24/24** (3 прогона), smoke **19/19**, все 15 путей/21 операция живые — НО клиент в сыром виде падает на 8 операциях (pydantic ValidationError) из-за пробелов спеки; обход — `raw_ops.py` (сгенерированный пакет не тронут) |
## Deliverables
- **Код**: `sched/examples/admin-client-python/` — коммит `e89e868` (запушен):
`openapi.json` (пин 0.1.2), `generate.ps1` (одна команда), `sched_admin_client/`
(сгенерированный, checked-in), `tests/` (TDD 24/24), `smoke.py` (19/19),
`raw_ops.py` (обход), `README.md` (F&F-таблица по всем путям).
- **Репорт**: `sched/.agents/inbox/2026-08-18T19-15-43Z-admin-fnf-openapi-client-report.md`
(F&F-формат: что→ожидал→получил→дока+гладкое).
- **Таска**: `[sched-admin-client-openapi]` 🟢 закрыта 2026-08-18.
## Находки (в репорт, спеку НЕ чинил — импл sched, TDD)
- **F-1** `/health`: спека `security: []`, daemon с ключом 401-ит даже health (письменный стенд :8080 непригоден для безключевых клиентов).
- **F-2 (главный)** mutation-ответы `{}` вместо `{task/run/schedule:…}` → генераторы врут; объявить схемы ответов.
- **F-3** `const: true` → строковый enum `('true')` ломает boolean.
- **F-4** oneOf+discriminator `Schedule``actual_instance=None`, контент только через raw JSON.
- **F-5** top-level `dedupKey` в POST /schedules молча игнорится (ключ — внутри `schedule`).
- Механика генераторных граблей — [[openapi-generator-3-1-spec-gotchas]].
## Как повторить
```powershell
cd sched/examples/admin-client-python
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-25.0.2.10-hotspot"
.\generate.ps1
pip install -r requirements.txt pytest
SCHED_ADMIN_URL=http://127.0.0.1:8127/api python -m pytest tests/ -v
python smoke.py --url http://127.0.0.1:8127/api
```
Стенд раунда: published `@sched/daemon` 0.3.4, `--admin-port 8127`, NO AUTH,
scratch sqlite (`/tmp/sched-acpy-stand/acpy.db`). Письменный `:8080` — под ключом
(`SCHED_ADMIN_KEY=dev-key`), `:8123` — стейл-билд (health 0.1.8, нет POST /tasks).