docs: update plans, backlog

This commit is contained in:
2026-09-27 11:11:13 +05:00
parent e703451474
commit 2fc7801162
14 changed files with 463 additions and 311 deletions
+27 -18
View File
@@ -1,18 +1,19 @@
# План: платформа — общее ядро, API и PWA
> **Статус (2026-09-09):** план-набросок. WASM-ядро и CLI уже описаны в
> `docs/roadmap.md` (фазы 3–8) и здесь не дублируются — этот план добавляет то,
> чего в roadmap нет: **API** (фаза 9, возможная монетизация) и **PWA** (фаза
> 10, оффлайн + установка). Оба стартуют после wasm-фаз; PWA не ждёт API и может
> идти раньше.
> **Статус: active.** Этот план добавляет к `docs/roadmap.md` то, чего там нет:
> **API** (фаза 9, возможная монетизация) и **PWA** (фаза 10, оффлайн +
> установка), плюс шрифты (раздел 4 — частично относится к фазе 8, поэтому
> решения-phase 8 здесь дублируются). WASM-ядро, эталоны и CLI — фазы 2–8
> `docs/roadmap.md`, они здесь не пересказываются. Оба трека стартуют после
> wasm-фаз; PWA не ждёт API и может идти раньше.
## 0. Решения
- **Одно ядро — три потребителя.** Rust-крейт `core/` (roadmap фаза 3) даёт:
- **Одно ядро — три потребителя.** Rust-крейт `core/` (roadmap фаза 4) даёт:
wasm-пакет для сайта (фаза 5), нативный CLI (фаза 6), серверный слой API (фаза
9). Единый контракт — JSON-пайплайн `{tool, params}` (заложен в roadmap §0);
эталонные файлы и harness (фазы 2, 4, 7) гарантируют одинаковый результат во
всех рантаймах.
9). Единый контракт — JSON-пайплайн `{tool, params}` (заложен в roadmap §0,
реализуется в фазе 11); эталонные файлы и harness (фазы 2, 3, 7) гарантируют
одинаковый результат во всех рантаймах.
- **API — нативный Rust на сервере, не wasm.** В браузере wasm нужен ради
доставки и песочницы; на сервере крейт линкуется напрямую — быстрее и проще.
Исключение — edge-воркеры (см. спайк ниже): там исполняется тот же
@@ -29,7 +30,7 @@
- [ ] **[A1]** Спайк сервера: (а) axum/actix + нативный `core/` на VPS против
(б) wasm-артефакт фазы 5 на edge (CF Workers). Сравнить: стоимость, лимиты
памяти/времени на больших картинках, сложность деплоя и rate-limiting.
Решение зафиксировать здесь.
Решение записать в §0 этого файла.
- [ ] **[A2]** Контракт: `POST /v1/process` — multipart (image) + JSON-пайплайн
→ изображение/архив; лимиты размера, коды ошибок; OpenAPI-спека.
- [ ] **[A3]** Ключи и лимиты: Bearer-ключи, free tier (N запросов/мес), rate
@@ -63,7 +64,8 @@
## 3. Порядок и связи
- WASM-ядро, эталоны, CLI — `docs/roadmap.md` фазы 2–8 (не дублируются).
- WASM-ядро, эталоны, CLI — `docs/roadmap.md` фазы 2–8; пайплайн как продуктовая
фича — фаза 11 того же документа.
- PWA — после S1 `plan-seo.md`; API — после фаз 5–7.
- Синергия с дистрибуцией: «works offline, installable» и публичный API —
аргументы для Product Hunt / alternative.to / GitHub (plan-seo S4c) и для
@@ -71,11 +73,16 @@
## 4. Шрифты: лицензирование и DOM-free рендер текста
Текст — единственный класс операций, который roadmap (фаза 8) держит в TS из-за
canvas. Для CLI/API его всё равно придётся рендерить в Rust, поэтому решение:
**перевести text-инструменты в ядро** (в браузере canvas-рендер остаётся
TS-фолбэком для A/B). Два вопроса — легальность шрифтов в дистрибутиве и рендер
без DOM.
Текст — один из canvas-зависимых классов, которые roadmap (фаза 8) держит в TS
(там их четыре: текст, градиенты, штампы, `ctx.filter`); для текста выбран курс
на реимплементацию, остальные классы не переносятся. Для CLI/API текст всё равно
придётся рендерить в Rust, поэтому решение: **перевести text-инструменты в
ядро** (в браузере canvas-рендер остаётся TS-фолбэком для A/B). Два вопроса —
легальность шрифтов в дистрибутиве и рендер без DOM.
**Когда начинать:** блока F1–F4 нет — они не привязаны к фазе roadmap, но F5/F6
без них бессмысленны (нечего рендерить). Реализуется всё это в фазе 8, поэтому
лицензирование стоит закрыть до неё, а не после.
### Лицензирование (решить до выбора шрифтов, backlog «Font Style»)
@@ -90,8 +97,10 @@ TS-фолбэком для A/B). Два вопроса — легальност
право класть TTF в дистрибутив CLI/API — у OFL/Apache таких ограничений
нет, у прочих «free»-лицензий бывают.
- [ ] **[F3]** Паспорт шрифта в `core/fonts/<name>/` (или эквивалент): файл(ы),
LICENSE, источник, версия, хеш; CI-проверка «у каждого файла шрифта есть
паспорт». Браузер грузит шрифты из бандла, не из ОС и не с
LICENSE, источник, версия, хеш; **новый гейт** «у каждого файла шрифта
есть паспорт» — его ещё нет, проектируется здесь и добавляется в
`pnpm verify` по правилам `docs/quality-gates.md` (решение о fail-режиме —
`docs/decisions.md`). Браузер грузит шрифты из бандла, не из ОС и не с
`fonts.googleapis.com`-CDN (сторонний запрос = утечка IP пользователя,
противоречит «no tracking»), — одинаковый результат у всех пользователей и
во всех рантаймах.