textmachine/docs/NEAR_TERM_PLAN.md

127 lines
15 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.

# Ближайший горизонт — 35 промтов
> Рабочая записка оркестратора №23. **Только порядок и зоны**, не заказы. Живёт до исполнения, потом в архив.
> Долг живёт строками `BACKLOG.md`, решения — нотами. Разобрано со старшим коллегой 11.09, его правки внесены.
>
> ⚠ **Раскладка (слово владельца 11.09):** одновременно лежат промты РАЗНЫХ зон — бэкенд · платформа ·
> полигон · фронт. **Двух промтов одной зоны быть не может**; слот освобождается закрытием пака актом.
## Критерий полноты базового функционала — ответ на сомнение владельца
**Фронт размораживать, когда каждый шаг пути имеет на бэкендах: (а) смонтированную дверь по канону,
(б) СОДЕРЖИМОЕ, которое эта дверь отдаёт, (в) словарь исходов, которым она отказывает.** Реестр требований
целиком критерием быть не может — 🔶 стоит у 24 строк из 45, «без 🔶 на ядре» не наступит никогда.
По этому критерию путь ОДНОГО гостя zh→ru полон до последнего шага, а неполнота сидит в **трёх местах**:
1. **ВХОД — ⛔ ФОРМУЛИРОВКА ИСПРАВЛЕНА 11.09 ЗАМЕРОМ, ДВЕ ТРЕТИ ЕЁ БЫЛИ МОЕЙ ОШИБКОЙ.** Пере-снято:
**(а)** пригласительного гейта и allow-list действительно НЕТ — учётку получает кто угодно, прошедший
провайдера (греп `invite|allowlist|AllowedDomains` по `platform/internal` и `cmd`: живых механизмов 0
при контрольных 204 Go-файлах); **(б)** грант новичку 0 — это НЕ дыра, а **ратифицированное решение
владельца** (`D39.176` п.1: «никаких квот, живём на покупке API; бонусы зачисляются из админки»), и он же
работает экономическим гейтом закрытой беты: аккаунт заводится, но без ручного пополнения не может
ничего; **(в)** «лимита размера загрузки нет» — **НЕВЕРНО**: байтовый потолок стоит на маршруте интейка,
`platform/internal/httpapi/server.go:98`=`UploadLimits{MaxBytes: 64 << 20, Deadline: 10 * time.Minute}`,
механизм — `http.MaxBytesReader` (`middleware.go:22`).
⇒ **Живой остаток — операционная гигиена, и `D39.176` п.1 прямо называет её инженерной, без слова
владельца:** число аплоадов ничем не ограничено · у статуса `rejected` нет выхода · каталоги-сироты никто
не подметает. Плюс три ряда регистра (`PD-162` · `PD-455` · `PD-448`). Платформа, дни.
**Продуктовых квот и фри-тир-лимитов НЕ ПРОЕКТИРОВАТЬ**`D39.176` п.1 закрыл вопрос целиком.
2.**СОДЕРЖИМОЕ УЗЛА ПОДПИСИ БАНКА** — человеческий узел потока показывает ПУСТОТУ: у секции предложений
читателя нет (`json:"proposed` — 0 хитов при 356 json-тегах), живой экран 04.09 отдал `total 0, signed 0`.
3. **ВТОРАЯ ПАРА** — японская книга получает китайскую транскрипцию. «Требуется проекту», не показу zh→ru.
Условное (4): **CORS/same-origin**`Access-Control` 0 хитов при 201 Go-файле; предусловие прогона B.
**«Качественно готовы» имеет ВТОРОЕ чтение, и его надо назвать владельцу:** качество перевода на целевом
жанре не измерено и кодом не обещано. Эта готовность наступает только ПОСЛЕ настоящей книги — то есть после
прогона, а не до него.
## Горизонт
| № | зона | предмет | цена | чем заперт |
|---|---|---|---|---|
| 1 | **полигон** | **прогон A**: короткая настоящая книга до ФАЙЛА, платный провайдер | **≈$0.250.40** | словом владельца о платном прогоне |
| 2 | **бэкенд** | структура глав, ДИЗАЙН — ок владельца получен | $0 | слот занят до закрытия движковой сессии; 5 врезок в пак |
| 3 | **платформа** | операционная гигиена входа (аплоады · выход из `rejected` · сироты) + `PD-162` · `PD-455` · `PD-448` | дни | ничем (⚠ предмет пере-определён 11.09 замером — см. дыру 1) |
| 4 | **бэкенд** | «ВЫДАЧА, КОТОРУЮ ВИДИТ ЧИТАТЕЛЬ»: ряды **284** · **201** · **283** · **307** · **291** | пак | после глав |
| 5 | **фронт** | поверхность показа | пак | разморозка + пункты 13 |
## Прогон A — точечно (пере-написано 11.09 после разбора со старшим коллегой)
**ПРЕДМЕТ — строка 16: цена книги, ДОВЕДЁННОЙ ДО КОНЦА, не измерена ни разу.** Цикл замкнут живьём 04.09
(`D39.194` п.1: скачанный EPUB прошёл `epubcheck`), но книги, дошедшей до `exports.complete = true`, через
API не было: 04.09 упёрлось в потолок (`PD-440`, с тех пор лечено `D39.206`/`D39.208`). Прогон A ведёт одну
настоящую книгу от двери до ФАЙЛА и печатает, чем каждый узел предъявлен.
**ЛОКАЛЬНОЙ МОДЕЛИ НЕТ** (слово владельца 11.09 — на машине нет видеокарты): провайдер `local` смотрит в
`http://127.0.0.1:11434/v1`, а на хосте нет ни `nvidia-smi`, ни `ollama`, ни слушателя на 11434 (контроль:
слушателей всего 5, на 11434 — 0). Значит настоящие узлы можно пройти только платно.
**ТРИ МОИ ОШИБКИ В ЭТОМ РАЗДЕЛЕ, СНЯТЫЕ РАЗБОРОМ 11.09:**
1. **«Книга со стенда P9»** — на P9 (27.08) стояла встроенная трёхглавая ЗАГЛУШКА (`seed` «demo.txt») и
крафтовая проба в 1222 байта на `fake_provider.py`. Настоящая короткая книга — это 04.09:
`books/gu-zhenren/coldrun-v16/guzhenren-ch1-10.gb18030.txt` (10 глав, 14 юнитов). Брать **главы 13**
(≈4 юнита, глава 1 двухъединичная — пере-проверить манифестом ДО фриза).
2. **«Пробой 27.08 оборвался на правке банка»** — неверно: транскрипт показывает preview → apply →
`already_applied``409` на противоречии → resume → `ready 6/6`. Он не оборвался, а кончился там, где
кончался тогдашний контракт: без провайдера, без настоящей книги и без двери выгрузки.
3. **«Заглушка годится только как двадцатиминутный дым»** — наоборот: **$0-дым по заглушке ОБЯЗАТЕЛЕН
фазой 0.** Он валидирует драйвер, сборщики следов и дверь выгрузки бесплатно; без него первая же
инфраструктурная осечка сожжёт «холодность» платной книги.
**ДЕНЬГИ — ДВА ЧИСЛА, И Я ЗНАЛ ТОЛЬКО ОДНО.** Ожидаемая трата ≈ **$0.30** (замер 08.09: 10 глав за
`committed=$1.259217`). Но машинный КАП — это ХОЛД, а не ожидание: на `c1` книжный бонд
`book_once = budget_usd 1.00 + classify_budget_usd 1.00 = $2.00`, поэтому холд трёхглавой книги ≈ **$2.32.5**,
и грант обязан быть не меньше, иначе допуск откажет. ⇒ **владельцу называются оба: «ждём ≈$0.30, кап ≈$2.5».**
**Предусловия, которых в плане не было (замерены 11.09):** артефакта контраста майнинга нет НИ ОДНОГО на
файловой системе (`CheckMiningContrast` откажет на старте и оставит `failed`-прогон, после которого книга уже
не холодная) · `eval/.venv` не существует, jieba не установлен · кластер Postgres опущен · `epubcheck`/`java`
на хосте нет. Всё это ставится ДО фриза.
**Фриз** — sha коммита ПЛЮС бинари, собранные из `git worktree add <путь> <sha>`: сборка из главного дерева
даёт `vcs.modified=true` от любого untracked-файла, и драйвер обязан отказывать по `go version -m`.
⚠ Прогону A **запрещено чинить найденное** — только пинги. Приёмка узла — по ТРЁМ независимым следам
(Postgres · диск и systemd · HTTP), не по самоотчёту движка. Ожидаемый исход каждого шага пишется ДО
прогона. ⛔ **Претрейн:** 蛊真人 узнаётся моделями 4 из 5 ⇒ пре-рег объявляет, что клеймов О КАЧЕСТВЕ пак
не делает вовсе; узлы судятся механизмом (кадры, флаги, леджер), а не чтением текста.
## Решения владельца, уже полученные (носитель — ЗДЕСЬ; заведён 11.09, прежде его не было ни в одном доке)
-**ПЛАТНЫЙ ПРОГОН A РАЗРЕШЁН** (слово 11.09: «Разрешаю»). Ожидание ≈$0.30, машинный кап ≈$2.5 (холд, см.
раздел выше). ⚠ Санкция названа ЗДЕСЬ, потому что опровергатель 11.09 поймал: промты ссылались на неё как
на факт, а в дереве её не было ни строкой — «известное со слов» не носитель.
-**Остановка остаётся ЖЁСТКОЙ, деньги терять ДОПУСТИМО, но остановка обязана быть КОРРЕКТНОЙ** — без
гонок, без половинчатых состояний, с верным возобновлением (`D39.240`).
-**Автономия смены (11.09):** решения принимаю сам, советуясь со старшим коллегой; мерило — главные
ценности продукта (качественный консистентный перевод длинных книг), затем архитектура и чистый код,
необходимый рефакторинг и отсутствие велосипедостроения.
## Что решает владелец — ОСТАЛОСЬ
- **Определение показа:** аудитория и вход · какая книга · один гость или несколько · **бюджет времени**
(`ПТ-19` называет скорость киллерфичей, а времени у экрана никто не мерил).
- **Деньги гостя на показе** — стенд сеет $25, продукт 0; дневного потолка в шаблоне намеренно нет.
- Какую из двух «готовностей» он имел в виду — полноту функционала или качество перевода.
- **Пять вопросов банка памяти**, поднятых аудитом 11.09 (стоп или флаг на разъехавшемся термине · входит ли
ГОЛОС в приоритет №1 · один перевод у НЕподписанного термина · накапливать ли банк между прогонами ·
остановка на подпись — опция или свойство продукта). Носитель разбора — `docs/research/34-*`.
## Вычеркнуто
Лендинг (строка **384**) — отдельная поверхность. Брокер конкурентности — решается определением «один гость».
Корректность остановки — после A, объёмом по его уликам; четыре однострочника «без мусора» идут приложением
к пункту 4, kill-харнесс — следующим слотом.
## Мои ошибки, снятые разбором — чтобы не повторить
1. «По рецепту P9» — рецепт идёт мимо фронта и обрывается до последней трети.
2. «Второй контур наблюдения» как условие — гейтил бы прогон стройкой ненужного ему.
3. «Приоритет №1 не исполняется кодом вовсе» — **неверно**: консистентность держится инъекцией банка и
пост-проверкой, которая ФЛАГУЕТ и ОТГРУЖАЕТ. Это «нет ОТКАЗА», а не «нет носителя».
4. «Прогон A — зона платформы» — **нет, полигона**: он не пишет кода зон, это эксперимент с пре-регистрацией.
Слот платформы поэтому свободен.
5. **«Вход» как дыра из трёх частей** — две части оказались не дырами (грант ратифицирован, байтовый
потолок построен), и я объявил их отсутствующими, не спросив дерево. Замер и правка — в самой дыре 1.