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

73 lines
5.0 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: **«клиент на любом ЯП одной
командой»**. Вердикт round 1: **claim подтверждён с оговорками** (8 операций
требуют raw-обхода). Вердикт round 2 (0.2.0/0.3.5): **claim подтверждён
полностью** — все находки F-1..F-5 закрыты, raw-обход удалён, клиент
типизированный end-to-end.
## Round 2 — ретест фиксов (0.2.0 / daemon 0.3.5), 2026-08-18
| | |
|---|---|
| Что | `generate.ps1` заново против `@sched/admin-api@0.2.0` (tarball spec byte-identical pinned), сьют+smoke против `@sched/daemon@0.3.5` (:8127, no auth) |
| Ожидал | все 5 находок закрыты, `raw_ops.py` не нужен |
| Получил | **все 5 закрыты**; сьют **24/24** (3 прогона), smoke **19/19****полностью через типизированный клиент, 0 операций на обходе**; `raw_ops.py` **удалён**; F-1/F-5 подтверждены живьём на keyed-инстансе (:8128): health 200 open, /tasks 401 без ключа, 400 на неизвестные поля schedule body/patch |
Deliverables round 2: коммит sched `d658ff0` (пример обновлён: openapi.json
0.2.0, tests/smoke typed-only, raw_ops удалён, README+generate.ps1); репорт
`sched/.agents/inbox/2026-08-18T22-55-00Z-admin-openapi-fixes-round2-retest.md`.
Механика фиксов и генераторные грабли — [[openapi-generator-3-1-spec-gotchas]].
## Round 1 — 2026-08-18 (0.1.2 / daemon 0.3.4)
| | |
|---|---|
| Что | 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"
$env:Path = "$env:JAVA_HOME\bin;" + $env:Path # генератор спавнит java из PATH, не из JAVA_HOME
.\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
```
Стенд round 2: published `@sched/daemon` 0.3.5, `--admin-port 8127`, NO AUTH,
scratch sqlite (`/tmp/sched-acpy-stand/acpy.db`). Round 1 стоял на 0.3.4.
Письменный `:8080` — под ключом (`SCHED_ADMIN_KEY=dev-key`), `:8123` — стейл-билд
(health 0.1.8, нет POST /tasks).