diff --git a/docs/NEAR_TERM_PLAN.md b/docs/NEAR_TERM_PLAN.md index c9bc59d9..0be48c89 100644 --- a/docs/NEAR_TERM_PLAN.md +++ b/docs/NEAR_TERM_PLAN.md @@ -201,16 +201,12 @@ API не было: 04.09 упёрлось в потолок (`PD-440`, с тех - **Деньги гостя на показе** — стенд сеет $25, продукт 0; дневного потолка в шаблоне намеренно нет. - Какую из двух «готовностей» он имел в виду — полноту функционала или качество перевода. - ⛔ **ПЯТЬ ВОПРОСОВ ПО СТРУКТУРЕ ГЛАВ** (дизайн `backend/docs/CHAPTER_STRUCTURE_DESIGN.md` §11; носителя вне документа не было до 11.09 — заведён аудитом смены). **В-1** каким номером глава зовётся в глазах пользователя, если адрес стал контентным · **В-2** что происходит с уже переведёнными книгами при перекрое · **В-3** платит ли кто-нибудь за пере-нарезку · **В-4** когда твердеет НАРЕЗКА (это деньги) · **В-5** когда твердеет ВИД (это читатель). ⚠ Последние два разделены сознательно: схлопнутый вопрос получил бы схлопнутый ответ, а платит за разницу перекрой. Ни одна из двух точек затвердевания D-нотой НЕ ратифицирована. -- ⛔ **ДЕНЬГИ ЗА ПУСТОТУ — КТО ПЛАТИТ. Новый вопрос 11.09, куплен прогоном A, и он ПРОДУКТОВЫЙ, а не инженерный.** - Замер: 4 вызова из 27 вернулись без пригодного текста и стоили **$0.106472 = 25.4 % цены книги**; три из - них дали РОВНО 0 знаков. Деньги списаны с читателя — они в `cost_usd`, и арифметика движка безупречна. - Инженерную половину («не лечить удвоением потолка, классифицировать прежде») я решаю сам и она уже в паке. - **Владельческая половина одна: считается ли доставленная пустота РЕАЛЬНЫМ расходом читателя.** Варианты: - **(а)** платит читатель, но видит пометку класса — честно и дёшево, механизм пометки уже есть (`degraded`); - **(б)** платит продукт — движок не выставляет счёт за генерацию, которую сам же признал негодной; дороже, - и требует решить, что делать, когда негодность спорна; **(в)** платит читатель и не видит ничего — так - сегодня, и это единственный вариант, который я не рекомендую ни при каких условиях. ⚠ Цена вопроса растёт - с числом читателей, а не с числом книг. Носители — ряды **415** · **414** · **422**. +- ✅ **ДЕНЬГИ ЗА ПУСТОТУ — РЕШЕНО 17.09, акт `D39.258` п.1: ПЛАТИТ ЧИТАТЕЛЬ.** ⛔ **И это было ПОДТВЕРЖДЕНИЕ, а не новое + решение — дефект носителя мой:** тот же план выше несёт «за всё платит читатель» словом 11.09, а здесь сорока строками + ниже держал вопрос открытым с тремя вариантами, и я задал его владельцу заново. Замер, ради которого вопрос заводился, + остаётся фактом: 4 вызова из 27 вернулись без пригодного текста и стоили **$0.106472 = 25.4 % цены книги**, три из них + дали РОВНО 0 знаков. ⇒ доставленная пустота считается реальным расходом читателя; **инженерная половина — пометка класса + у негодной выдачи (`degraded`) — за оркестратором и решается без владельца.** Носители — ряды **415** · **414** · **422**. - **Пять вопросов банка памяти**, поднятых аудитом 11.09 (стоп или флаг на разъехавшемся термине · входит ли ГОЛОС в приоритет №1 · один перевод у НЕподписанного термина · накапливать ли банк между прогонами · остановка на подпись — опция или свойство продукта). Носитель разбора — `docs/research/34-*`. ⚠ **15.09: вопрос «накапливать ли банк между прогонами» получил числа и стал блокером пункта 10.** diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 60b9076e..cf7856ba 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-16, голова D39.257 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **97** живых дока в `docs/` (пере-счёт 11.09) (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, **12** в `backend/docs`, 9 в `frontend/docs` — ⚠ ⚠ испр. 11.09: из 97 ВРЕМЕННЫХ **три** (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 108 (major 1) (major 1), всего рядов 466 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-16, голова D39.258 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **97** живых дока в `docs/` (пере-счёт 11.09) (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, **12** в `backend/docs`, 9 в `frontend/docs` — ⚠ ⚠ испр. 11.09: из 97 ВРЕМЕННЫХ **три** (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 108 (major 1) (major 1), всего рядов 466 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). > ⛔ **ПЯТЬ ПОТОКОВ РАБОТЫ — состояние на 07.09 (пере-снято лендингами смены №23).** > **(1) ПОЛИГОН — «ремонт прибора»** (`docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md`, строки 319 · 300 · 265 · 143): > ⚠ **ЕДИНСТВЕННЫЙ ПОТОК, НЕ СДВИНУВШИЙСЯ ЗА СМЕНУ — сессия по промту так и не стартовала.** Блокирующая линза diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index 5cdd1278..f1b3a26c 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.257; титул — носитель головы, бампать при каждом аппенде) +# Реестр D-нот — карта актуальности v2 (D1–D39.258; титул — носитель головы, бампать при каждом аппенде) > ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не > место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы, @@ -316,3 +316,4 @@ | D39.255 | 16.09 | **АКТ: бэкенд-пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» ПРИНЯТ С НАЗВАННЫМ ОСТАТКОМ** (29 путей, +3634/−168, $0). Пак пережил потерю сессии и сдан по правилу остановки П4. Приёмка — пять приборов: батарея 23/23 · **мой собственный полный каталог 441/441, 0 unexpected, 437 пойманных и 4 записанные выжившие, `tree_sha` совпал с её прогоном** · две оси агентов вне сдачи (26 подтверждений и 79 пере-снятых чисел, мажоров 0). ⛔ Деньги: пере-классификация `cancelled` с `rework` на `carried` меняет счёт слотов у книг В ПОЛЕ — шире, чем заявляла сдача; исход 15.09 в силе, семантика переноса — ряд 232. ⭐ Ратифицировано снятие гейта `DispFlagged` у эдит-числителя (эррата к `D39.19` п.4): гейт прятал ОПЛАЧЕННОЕ эхо; цена — несопоставимость замеров через правку. ⚠ Три опубликованных ключа качества сменили смысл, остаток называл два | ЖИВОЕ: ряды 291 и 379 закрыты (379 — ЗАМЕРОМ: на мутанте `answered &&` пин падает 8/8 против 7/8 в ряду, п.9); остаток — ряды 375, 232 и новые 453–456 | жив | бэкенд деньги | | D39.256 | 16.09 | **РЕШЕНИЕ ВЛАДЕЛЬЦА: банк переезжает в КНИГУ-ПРОДОЛЖЕНИЕ подписанным ПЛЮС решённым движком.** Закрывает подпункт В1 §6 итога консилиума (умолчания у него не было) и ряд 460. «Только подписанное» отвергнуто: подпись опциональна (`D39.67`) ⇒ у некурированной книги это «не перенести ничего». ⭐ Подтверждено ЗАМЕРОМ того же дня: 25 из 26 смен передачи при БАЙТ-ИДЕНТИЧНОМ входе, включая окна KWIC ⇒ смены — эффект якоря, а не знание. ⛔ Пути переноса между книгами НЕТ ни строчкой ⇒ решение есть двухзонный заказ (платформа: перенос при заведении продолжения; движок: форма слоя) | ЖИВОЕ: ряд 460 закрыт; стройка заведена новой строкой | жив | банк деньги | | D39.257 | 16.09 | **АКТ: бэкенд-пак «БАНК — ЧТО МОЖНО УЗНАТЬ И ПОЧИНИТЬ ЗА $0» ПРИНЯТ С НАЗВАННЫМ ОСТАТКОМ** (29 путей, $0). Пять приборов: батарея 24/24 · **мой прогон её 37 мутаций — 37 run, 0 unexpected** · три оси вне сдачи · числа пере-сняты ТРЕТЬИМ прибором, парсер-свободно · деньги: 0 платных путей при контроле 192 файла. ⭐ Посылка `D39.256` перестала быть посылкой: 25 из 26 смен при идентичном входе, и компаратор НЕ слеп (движение входа у 4 из 56 и 8 из 51 неменявшихся). ⛔ Мажоры: сдача сдвинула 25 якорей живых доков и отчёт молчит (хук warn-only ⇒ стало бы нормой); арм `unresolved` считается по знаменателю, из которого сам вычтен. ⚠ Остаток: полный прогон каталога (267) не закончен | ЖИВОЕ: якоря перенаведены лендингом; новые ряды на арм знаменателя, регистр цели, пустой реестр и персистенцию §4.4 | жив | банк бэкенд | +| D39.258 | 17.09 | **РЕШЕНИЯ ВЛАДЕЛЬЦА 17.09** — три. (1) Пустота оплачивается ЧИТАТЕЛЕМ: это ПОДТВЕРЖДЕНИЕ слова 11.09, а вопрос висел открытым по моей вине — план нёс ответ и сорока строками ниже спрашивал его заново. (2) Перенос банка в продолжение — СУЩЕСТВУЮЩИМ механизмом сид-YAML, новых сущностей не вводить; третий источник отклонён. ⚠ Наследуется ограничение: термин сида дверью правок не решается. (3) Стандарт промтов назван словом: высокие стандарты художественного перевода, чистый код и рефакторинг вместо заплаток, техдолг не копить | ЖИВОЕ: ряд 461 пере-формулирован; за владельцем остались ряд 330, твердение нарезки и приоритет | жив | банк деньги промты | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 85fc356e..f0d76371 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.257 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.258 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто: > ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+). @@ -3936,3 +3936,26 @@ bought NOTHING». ⇒ **`tmctl manifest` есть НИЖНЯЯ граница, > одного бинаря дают разные числа на одном сырье). ⚠ Чинится эрратой к акту, а НЕ правкой кода задним числом: акт > описывает то, что было принято, и подгонять его под желаемое нельзя. +## D39.258 — РЕШЕНИЯ ВЛАДЕЛЬЦА 17.09: пустота оплачивается читателем (подтверждение, носитель себе противоречил), перенос банка идёт БЕЗ новых сущностей, и стандарт промтов назван словом (17.09, оркестратор №23) + +**1. ДЕНЬГИ ЗА ПУСТОТУ — ПЛАТИТ ЧИТАТЕЛЬ. Это ПОДТВЕРЖДЕНИЕ, а не новое решение.** Слово 17.09: «Платит читатель, я вроде бы это уже решал. Разве это не записано?» — записано, +`NEAR_TERM_PLAN.md` несёт «за всё платит читатель» словом 11.09. ⛔ **Дефект был мой и в носителе:** тот же план сорока строками ниже держал вопрос ОТКРЫТЫМ с тремя +вариантами, и я задал владельцу вопрос, ответ на который хранил сам. Противоречие снято, вопрос из плана убран. ⇒ доставленная пустота считается реальным расходом читателя; +инженерная половина (пометка класса `degraded` у негодной выдачи) остаётся за оркестратором и решается без него. + +**2. ПЕРЕНОС БАНКА В ПРОДОЛЖЕНИЕ — СУЩЕСТВУЮЩИМ МЕХАНИЗМОМ, НОВЫХ СУЩНОСТЕЙ НЕ ВВОДИТЬ.** Слово 17.09: «Давай не вводить новые сущности, банк который подписан или +автоподписан и который переносится на следующую книгу или следующие главы идет просто вот как текущий банк… не вводить лишний код». ⇒ **предложение третьего источника +(отдельный слой «унаследованное») ОТКЛОНЕНО.** Сверено деревом: механизм есть — авто-банк пишется той же сид-YAML схемой, на которой говорит весь конвейер, и его +доккомментарий прямо называет цель «строку можно перенести в дельту копипастой» (`backend/internal/pipeline/mining.go:791`=`the same seed-YAML schema everything else`); +загрузчиков под неё шесть в `membank`. ⚠ **Ограничение, которое из-за этого наследуется и должно быть названо, а не обойдено:** термин, попавший в сид, дверью правок банка +не решается (`backend/internal/membank/decisions.go:194`=`A term of the seed cannot be decided here`) ⇒ перенесённая строка правится тем же путём, каким правится сид +сегодня. Ряд **461** пере-формулирован под это решение. + +**3. СТАНДАРТ ПРОМТОВ НАЗВАН СЛОВОМ ВЛАДЕЛЬЦА 17.09** и входит в каждый бэкенд-промт: писать «согласно нашим проектным высоким стандартам по решению проблемы +художественного перевода»; «не хакайте вместе с сессиями плохие решения или те что не работают, пусть пишут чистый код и там где надо рефакторинг»; техдолг не копить. +⇒ в промте это НЕ лозунг, а проверяемый пункт: там, где чистое решение требует перестройки, заказывается перестройка, а не заплатка, и отчёт называет, что было +отрефакторено и почему. + +**4. Что этим актом НЕ решено и остаётся за владельцем:** ряд **330** (что движок делает с противоречием у НЕподписанного термина — алгоритм распознавания спроектирован +консилиумом, открыто только действие, и оба выхода стоят денег) · когда твердеет НАРЕЗКА · какую «готовность» владелец имеет в виду. Вопросы заданы 17.09 отдельным блоком. +