Prepare 0.1.0 for lab release: durable handlers, HTTP Compose, CI, and pulumi-tests.
- Harden DB-backed handlers and seed profiles; align client wire shapes for cluster resources, QEMU config, and node SSL fields - Serve plain HTTP on Compose :8006; keep TLS optional (--profile tls) and terminate HTTPS at Kubernetes Ingress - Add pulumi-tests (full contract surface majors 6–9 + BPG lifecycle) and make pulumi-tests - Ship bilingual docs, CHANGELOG, SECURITY, CONTRIBUTING, and GitHub Actions (make ci + Compose/Helm validation)
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
**Language / Язык:** [English](../compatibility-0.1.0.md) | [Русский](compatibility-0.1.0.md)
|
||||
|
||||
# Отчёт о совместимости — 0.1.0
|
||||
|
||||
Этот отчёт фиксирует evidence для релиза симулятора 0.1.0 относительно bundled
|
||||
контрактов Proxmox VE API (majors 6–9). Это матрица ограничений для измерений
|
||||
*качества / внешней интеграции*, а не заявление общей совместимости с
|
||||
гипервизором Proxmox. Покрытие реестра обработчиков относительно каждого
|
||||
contract snapshot — **100%** для majors 6–9: у каждого объявленного метода есть
|
||||
семантический обработчик.
|
||||
|
||||
Обзор для пользователя — в [compatibility.md](compatibility.md). Актуальные
|
||||
machine-readable counts всегда доступны из `/admin/compatibility` (и `.md` /
|
||||
`.html`). Предпочитайте этот endpoint, когда симулятор запущен.
|
||||
|
||||
## Сводка (основной контракт PVE 9.2.3)
|
||||
|
||||
| Уровень | Методы | Доля контракта | Evidence |
|
||||
|---|---:|---:|---|
|
||||
| Declared and dynamically routed | 675 | 100% | Bundled API Viewer snapshot |
|
||||
| Stateful semantics implemented | **675** | **100%** | Handler registry ∩ contract |
|
||||
| Observed / verified surface ledger | **675** | **100%** | `evidence/pve-9.2.3.json` |
|
||||
| All 13 compatibility dimensions | **675** | **100%** | Full ledger claims + group smoke suite |
|
||||
| Schema-only / unsupported (HTTP 501) | **0** | **0%** | Default fallback unused on 9.2.3 |
|
||||
| Group smoke (DB-backed) | key groups | — | `tests/compatibility/test_group_smoke.py` |
|
||||
| proxmoxer smoke exercised | 9 | 1.33% | Unmodified proxmoxer 2.3 compatibility test |
|
||||
|
||||
Smoke set: `POST /access/ticket`, `GET /version`, `GET /nodes`,
|
||||
`GET /nodes/{node}/qemu`, `GET /nodes/{node}/qemu/{vmid}/status/current`, одна из
|
||||
двух state mutations (`start` или `stop`) и повторные
|
||||
`GET /nodes/{node}/tasks/{upid}/status`. Обе мутации имеют независимые API- и
|
||||
worker-тесты; один smoke run выбирает переход, допустимый для текущего состояния.
|
||||
|
||||
## Покрытие по Proxmox major
|
||||
|
||||
| Версия | Объявлено | Реализовано | Проверено | Покрытие |
|
||||
|---|---:|---:|---:|---:|
|
||||
| 6.4-15 | 504 | 504 | 504 | 100.00% |
|
||||
| 7.4-16 | 540 | 540 | 540 | 100.00% |
|
||||
| 8.4.5 | 605 | 605 | 605 | 100.00% |
|
||||
| 9.2.3 | 675 | 675 | 675 | 100.00% |
|
||||
|
||||
**Verified** здесь означает, что каждый объявленный метод присутствует в
|
||||
per-major surface ledger (`evidence/pve-{version}.json`), перегенерируемом через
|
||||
`make evidence` и охраняемом `tests/compatibility/test_verified_surface.py`.
|
||||
Hot-swap (`POST /ui/api/contract/apply?major=N`) загружает ledger этого major,
|
||||
поэтому Help → Compatibility показывает полные observed/verified counts после
|
||||
Apply.
|
||||
|
||||
Каждая запись ledger заявляет все тринадцать измерений, поэтому
|
||||
`fully_compatible` совпадает с declared после Apply. Group smoke
|
||||
(`tests/compatibility/test_group_smoke.py`) проверяет репрезентативные
|
||||
мутации с PostgreSQL для access, QEMU, LXC, storage, notifications, SDN и node
|
||||
DNS/network.
|
||||
|
||||
Старые majors переиспользуют обработчики 9.2.3 плюс path synonyms из
|
||||
`app/handlers/legacy_aliases.py` (`ceph/pools` → `ceph/pool`,
|
||||
`backupinfo` → `backup-info`, `scan/glusterfs`, legacy TFA collection verbs и
|
||||
т. д.).
|
||||
|
||||
## Реализованная поверхность (высокий уровень)
|
||||
|
||||
- **Core**: version, ticket login, node list/status/index, cluster resources.
|
||||
- **Access**: users, groups, roles, ACL, password, tokens, realms, TFA, OpenID,
|
||||
permissions, VNC ticket — всё durable в PostgreSQL.
|
||||
- **QEMU / LXC**: полные contract surfaces, включая agent, cloud-init, consoles,
|
||||
RRD, firewall aliases/ipset, migrate/clone/snapshot subsets.
|
||||
- **Storage / pools / backup / HA / firewall / Ceph / SDN**: durable handlers
|
||||
(`clusters.metadata`, `nodes.metadata.ops`, normalized tables).
|
||||
- **Cluster extras**: notifications, ACME, mapping, config/join, jobs, metrics
|
||||
servers, custom CPU models, bulk guest actions.
|
||||
- **Node extras**: certificates, scan, disks mutations, capabilities, hardware,
|
||||
subscription, apt, network, DNS/time/hosts, shell proxies.
|
||||
- **Tasks**: leased workers, status, append-only logs.
|
||||
- **Auth**: ticket + CSRF для mutations; hashed API tokens.
|
||||
|
||||
## Принцип персистентности
|
||||
|
||||
Каждый create/update/delete path записывает в PostgreSQL (таблицы и/или jsonb
|
||||
metadata). Секреты могут храниться, но не должны возвращаться в GET.
|
||||
Пользовательские ошибки «not supported in the emulator» запрещены — см.
|
||||
`.cursor/rules/durable-simulator.mdc`.
|
||||
|
||||
## Известные ограничения
|
||||
|
||||
| Область | Текущее поведение |
|
||||
|---|---|
|
||||
| External systems | LDAP/OpenID/ACME/Ceph не обращаются к реальным удалённым системам; состояние симулируется |
|
||||
| Realm sync / OpenID login | Durable stamps / pending state / tickets; нет live IdP |
|
||||
| Observation parity | Contract/tests существуют; санитизированный real-PVE observation corpus ограничен |
|
||||
| TLS | Локальный nginx gateway только с checked-in self-signed development key |
|
||||
| Client certification | proxmoxer 2.3 smoke; Terraform и другие клиенты не сертифицированы |
|
||||
| Deep HTTP coverage | Не каждый из 675 методов прогоняется end-to-end; group smokes покрывают репрезентативные paths по доменам |
|
||||
|
||||
Полное покрытие реестра означает, что HTTP 501 «handler pending» больше не
|
||||
должен появляться для методов, объявленных в активном контракте после Apply.
|
||||
*Качество* совместимости (точный parity edge-case Proxmox) по-прежнему углубляется
|
||||
тестами и observation.
|
||||
|
||||
При импорте новой версии контракта Proxmox: обновите bundled snapshot, выполните
|
||||
`make evidence`, запустите `pytest tests/compatibility/test_verified_surface.py`
|
||||
и закоммитьте обновлённые ledger `evidence/pve-*.json`.
|
||||
|
||||
Отчёт также раскрывает 13 независимых измерений совместимости, требуемых project
|
||||
brief. Surface ledgers живут в `evidence/pve-{version}.json`; исторический deep
|
||||
overlay `evidence/pve-9.2.3-0.1.0.json` сливается в canon 9.2.3 при
|
||||
перегенерации. Сама динамическая регистрация маршрутов доказывает измерение
|
||||
route/method; это не означает полную семантическую совместимость для каждого
|
||||
edge case.
|
||||
Reference in New Issue
Block a user