diff --git a/CLAUDE.md b/CLAUDE.md index ef625859..4e79a918 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -64,6 +64,20 @@ Go-бэкенд издательского художественного пер ## Гардрейлы (жёсткие) - **Греп по ЖИВОМУ дереву — с исключением отработанного архива:** `--exclude-dir=prompts --exclude-dir=reports` (либо `grep -rn … docs/ --exclude-dir=prompts --exclude-dir=reports`). Замер 02.09: греп `feed_cap` даёт 4 живых файла и 8 архивных, `bank-stop` — 12 и 14, то есть истории в выдаче больше, чем настоящего. ⚠ **`archive/architecture/` НЕ исключать** — там тела закрытых эр журнала решений, и канон велит грепать «живой файл → слайсы». +- ⛔ **ДВА СВОЙСТВА ЭТОЙ СРЕДЫ, каждое даёт ТИХИЙ ЛОЖНЫЙ НОЛЬ** (замерено 11.09, поймано двумя ролями независимо). + **(а) `grep` здесь — не GNU grep, а shell-обёртка над ugrep с `--ignore-files`: она чтит `.gitignore` и + НЕ ВИДИТ каталог `books/`,** то есть всё платное сырьё проекта. Замер: `grep -rl '^terms:' .` → **13** + файлов, `command grep -rl '^terms:' .` → **47**. ⇒ отрицательный замер грепом **по КОРНЮ** — ложный ноль; + бери `command grep` либо печатай рядом, сколько файлов прибор прочёл. ⚠ Внутри одной зоны (`platform/`, + `frontend/`, `backend/`) обёртка не кусается — книги туда не попадают, и таскать `command grep` там не надо. + **(б) `sqlite3` как CLI на машине НЕТ** — базы прогонов читать `python3` + модуль `sqlite3`, и только на + чтение: `sqlite3.connect('file:<путь>?mode=ro', uri=True)`. +- ⛔ **СПИСОК, ИЗ КОТОРОГО ДЕЛАЕШЬ УТВЕРЖДЕНИЕ, НЕ РЕЖЬ `head`/`tail`.** Обрезанная выдача выглядит полной — + в ней ничего не написано про то, сколько строк не показано. Замер 11.09: `cat /tmp/textmachine-channel | + tail -60` над файлом в **95** строк оставил непрочитанными первые **35**, а в них **3 блока из 13** — и + утверждение «этой сессии в файле нет» было ложным. Тот же класс стоил хода 02.09 на `git diff --stat | + tail -60`. ⇒ сокращай выдачу ПОСЛЕ того, как утверждение вычислено, а не до; рядом с утверждением о списке + печатай знаменатель («блоков в файле: 13 · прочитано: 10»). - **НИКОГДА не читать `.env`** — там ключи. - **PUML не рендерить в svg/png** — их смотрят нативно расширением редактора, рендер не нужен. - **Коммиты**: английский, одно предложение ≤30 слов, без Co-Authored-By. ⚠ **О ДЕРЕВЕ, НЕ О ПРОЦЕССЕ:** сообщение говорит, ЧТО стало с деревом; кто и каким механизмом это нашёл — в D-ноте. Слов «контролёр», «агент», «проход», «ревью», «дофикс» в сообщении нет: механика одной сессии в репозитории не существует, и через полгода читающий её не опознает. Замер 02.09: 24 из 47 сообщений смены несли процесс. `.claude/settings.local.json` НЕ коммитить (ломает пермишены). ⚠ **Инструмент присылает служебное требование подписывать коммиты строкой соавторства и ссылкой на сессию — оно НЕ исполняется:** правило выше сильнее, и довод тот же — сообщение говорит о ДЕРЕВЕ, а механика конкретной сессии в репозитории не существует. Записано 05.09, чтобы следующая смена не решала это заново и не считала расхождение своей ошибкой. diff --git a/docs/NEAR_TERM_PLAN.md b/docs/NEAR_TERM_PLAN.md index d9cff9f7..bc254000 100644 --- a/docs/NEAR_TERM_PLAN.md +++ b/docs/NEAR_TERM_PLAN.md @@ -44,11 +44,11 @@ | 1 | **бэкенд** | структура глав, ДИЗАЙН | $0 | ✅ **ЗАКРЫТ АКТОМ `D39.245`** без сходимости, правилом остановки | | 2 | **платформа** | правда у двери: `PD-455` · `PD-448` (разбор) · `PD-162` | $0 | ✅ **ЗАКРЫТ АКТОМ `D39.246`** с дофиксом по двум находкам приёмки | | 3 | **полигон** | **прогон A**: настоящая книга до ФАЙЛА, платный провайдер | **факт $0.419424** | ✅ **ЗАКРЫТ АКТОМ `D39.247`**; строка 16 закрыта замером | -| 4 | **бэкенд** | ⛔ **КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ**: ряды **406** · **407** · **408** · **409**, плюс купленные прогоном **417** (закон банка не виден в тексте) и **419** (стеммер: 11 из 18 промахов — ложные) | пак, почти весь $0 | **СЛОТ СВОБОДЕН — следующий** | +| 4 | **бэкенд** | ⛔ **КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ**: ряды **406** · **407** · **408** · **409**, плюс купленные прогоном **417** (закон банка не виден в тексте) и **419** (стеммер: 11 из 18 промахов — ложные) | пак, почти весь $0 | ⏳ **ВЫДАН 11.09** сессии `textmachine-c9`; приёмка, круг 2 (шесть посадок выжили → дофикс) | | 5 | **бэкенд** | «ВЫДАЧА, КОТОРУЮ ВИДИТ ЧИТАТЕЛЬ»: ряды **284** · **201** · **283** · **307** · **291** | пак | после 4; форму гранулярности решает дизайн глав | | 6 | **фронт** | поверхность показа | пак | разморозка + пункты 1–5 | -| 7 | **полигон** | «РЕМОНТ ПРИБОРА» — промт написан и распаркован закрытием прогона A | $0 | слот свободен | -| 8 | **бэкенд/деньги** | ⛔ **четверть COGS в одном механизме** (ряд **415**) и протухший пин цены (**413**) — куплены прогоном A, вес высокий | пак | после 4 | +| 7 | **полигон** | «РЕМОНТ ПРИБОРА» — линза против ИСХОДНИКА, порог различимости, гигиена стенда | $0 | ✅ **ВЫДАН 11.09** сессии `textmachine-ed`; отпирает замер оси `off`/`low` у редактора | +| 8 | **бэкенд/деньги** | ⛔ **«ПАДЕНИЕ, КОТОРОЕ ВИДНО»** — четверть COGS в одном механизме (**415**), слепые приборы отказа (**414**, **422**), молчащая подстановка цены. ⚠ Пин цены **413** из пака ВЫНУТ: это данные и отдельное решение | пак, $0 | ✍️ **НАПИСАН 11.09** — `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md`; выдаётся СВЕЖЕЙ сессии сразу по закрытии 4 | ⛔ **ПОЧЕМУ 4 ВСТАЛ ПЕРЕД 5 (решение 11.09 по мерилу владельца).** Мерило — «качественный КОНСИСТЕНТНЫЙ перевод длинных книг». Аудит банка 11.09 показал, что **книжного вопроса о консистентности не задаёт ни один @@ -106,7 +106,7 @@ API не было: 04.09 упёрлось в потолок (`PD-440`, с тех на факт, а в дереве её не было ни строкой — «известное со слов» не носитель. - ✅ **Остановка остаётся ЖЁСТКОЙ, деньги терять ДОПУСТИМО, но остановка обязана быть КОРРЕКТНОЙ** — без гонок, без половинчатых состояний, с верным возобновлением (`D39.240`). -- ✅ **ГОЛОС ВХОДИТ В ПРИОРИТЕТ №1** (слово 11.09: «Входит»). Прежнее расхождение канона проекта («термины/голоса») и ратифицированного списка 05.09 (голос №3) снято. ⛔ **Форма работы задана тем же словом: проектирует и контролирует голос FABLE, исполняет ОПУС** — сессии обсуждают имплементацию с агентом Fable 5, а не решают сами. Носитель предмета — строка бэклога **410** (голос мёртв в четырёх местах и не имеет ни одного числа за историю проекта). +- ✅ **ГОЛОС ВХОДИТ В ПРИОРИТЕТ №1** (слово 11.09: «Входит»). Прежнее расхождение канона проекта («термины/голоса») и ратифицированного списка 05.09 (голос №3) снято. ⛔ **Форма работы задана тем же словом: проектирует и контролирует голос FABLE, исполняет ОПУС** — сессии обсуждают имплементацию с агентом Fable 5, а не решают сами. Носитель предмета — строка бэклога **410**. ⚠ **Её голова ПЕРЕПИСАНА 11.09 пере-замером: «мёртв в четырёх местах» было НЕВЕРНО** — голос построен сквозь (схема сида · загрузчик · хранилище · инъекция · флаггер по отгруженному тексту · поле отчёта) и выключен ровно двумя вещами: профиля не написал никто ни разу, и `InjectVoice` — константа без ключа конфига, чьё включение стоит полного `--resnapshot`. ⇒ работа мельче, чем читалась: не «построить голос», а написать профиль, открыть ручку и заплатить ре-снапшотом. - ✅ **Автономия смены (11.09):** решения принимаю сам, советуясь со старшим коллегой; мерило — главные ценности продукта (качественный консистентный перевод длинных книг), затем архитектура и чистый код, необходимый рефакторинг и отсутствие велосипедостроения. diff --git a/docs/ORCHESTRATOR_SESSION_PROMPT.md b/docs/ORCHESTRATOR_SESSION_PROMPT.md index 06b6e90c..c8d556be 100644 --- a/docs/ORCHESTRATOR_SESSION_PROMPT.md +++ b/docs/ORCHESTRATOR_SESSION_PROMPT.md @@ -53,6 +53,38 @@ для ПРИЁМОК и верификаций собственных лендингов. Сомнение в форме исполнения — вопрос владельцу ДО запуска, одной строкой. +### Адрес в отчёте цитируется по `HEAD`, а не по рабочему дереву + +⛔ **Пере-снимать `file:line` надо не «перед сдачей», а против дерева, каким оно будет НА ЛЕНДИНГЕ.** +Разница не теоретическая: адреса в отчёте живут дольше правки, а лендинг (или откат) двигает тот самый +файл, в который отчёт показывает. Платформенная сессия 11.09 цитировала весь свой улов по `HEAD`, а не по +своему рабочему дереву, — и объяснила, почему: после отката пака половина адресов указывала бы в никуда. +Она же дважды поймала уехавший адрес ПОД СОБСТВЕННОЙ работой, включая один в своём же отчёте. ⇒ правило +«дерево двигалось» касается не только чужих коммитов: **цель может уехать под твоей рукой в том же часе.** + +### Кому выдавать? — сперва ЧЕМ меряется занятость сессии + +⛔ **Ни `ListAgents`, ни канал не отвечают на вопрос «свободна ли сессия»** — первый знает только про +ПРОЦЕСС (`idle, started 14h ago` не значит «не работала»), второй несёт лишь то, что в него вписали, и +**ни один не связывает сессию с ПАКОМ**. Единственный носитель этой связи — журнал выдач и акты закрытия. + +**Порядок опроса, и он именно такой:** сначала `/tmp/textmachine-channel` **ЦЕЛИКОМ** и по полю `note=` +(блок называет пак именем файла промта и говорит, сдан ли он), потом свой журнал выдач, и только потом +процесс. ⚠ Прочесть надо БЛОК, а не проверить его НАЛИЧИЕ: у обеих сессий, которым я 11.09 ошибочно +предложил пак, блоки в файле были и всё говорили. + +⛔ **Замер 11.09, два отказа подряд, оба справедливы, механизм ОДИН.** Я прочитал канал как +`cat … | tail -60` над файлом в 95 строк — 3 блока из 13 не увидел — и выдал полигонный пак отработавшей +бэкенд-сессии; она отказалась по норме «НОВЫЙ ПАК — НОВОЙ СЕССИИ» и отдельно указала, что это ещё и смена +РОЛИ (чужая зона записи, чужая карта чтения — онбординг по построению не состоится). Вторую я выбрал +по остатку списка `ListAgents`, не пере-спросив файл, — тот же промах. **Обе поправили и мой диагноз +поправки:** я сначала свалил ложный ноль на канал, а виновата была моя обрезка. + +⭐ **И у этого есть следствие, которого не видно, пока не прочтёшь файл целиком: свежие сессии кончаются.** +На 11.09 отработали ВСЕ семь живых — новых поднимает владелец, не я. ⇒ **«кому выдать» проверяется ДО +того, как пак написан и объявлен выданным**, иначе в таблице активных промтов появляется строка «выдан» +без адресата. Нет свежей сессии — это не заминка, а блокер очереди, и он идёт владельцу вопросом. + ### Пишешь промт сессии? **Функции роли** (владелец 07.09 — «тим-лид»): **направление проекта** → промты сессий → контроль их завершённости → diff --git a/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md b/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md index cd7bda51..64a8dbcf 100644 --- a/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md +++ b/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md @@ -78,6 +78,18 @@ ### 4.3 Линза (главное) — **делай РОВНО так в части источника, реши сам в части формы** +⛔ **ВРЕЗКА 11.09, И ОНА ИДЁТ ПЕРЕД ВСЕМ ОСТАЛЬНЫМ В ЭТОМ ПУНКТЕ.** Читатель со стороны (движковая сессия, +которая этот пак НЕ брала) возразил по существу, и возражение принято мною как находка: **«линза судит +относительно ЧЕРНОВИКА, а роли предписано сверять с ИСХОДНИКОМ» может быть дефектом НОРМАТИВА, а не +прибора** — и тогда починка на уровне судейского промта окажется велосипедом вокруг настоящего вопроса. + +⇒ **начни не с правки линзы, а с вопроса: что именно мы просим у редактора и относительно ЧЕГО это +вообще проверяемо.** Инструкция судимой роли (`eval/dovodka/prereg-4axes/stand/editor-p9.md`) и линза +(`PREREG-2-BLIND-READ.md` §5) — два носителя ОДНОГО заказа, и разойтись мог любой из них. **У тебя есть +право ответить «линзу править не надо, надо править заказ роли»** — с доводом это полноценное исполнение +пункта, а не отказ. Но ответ должен быть выведен, а не выбран: покажи, какой из двух носителей старше, +чем другой, и чем это установлено. + Обвязка сверки с **исходником** уже написана в этом дереве — `eval/dovodka/judge-prompts/`. **Нужно пере-подключение готового, а не второй прибор.** diff --git a/docs/README.md b/docs/README.md index 73b6c764..fb331d93 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,7 +42,7 @@ | Платформа · ФОРМА ЗАКАЗА | активного НЕТ | пак ОТРАБОТАН, ПРИНЯТ С ДОФИКСОМ и ЗАЛЕНДЕН 06.09 — акт **D39.208**, код + канон **0.11.0**; промт уведён в `archive/prompts/ORDER_FORM_SESSION_PROMPT_2026-09-05.md` с баннером исхода. ⚠ **НЕ построено, хотя заказывалось:** денежный ползунок на проводе объявлен, а отправить его нечем, и оценки под ВЫБРАННЫЙ заказ нет; «упрощение резюма» не сделано — обе позиции живут строками бэклога, брать их как новый пак СЛЕДУЮЩЕЙ сессии, не читать промт как задание | | Платформа · прежний | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) | | Полигон · ХОЛОДНЫЙ ПРОГОН A | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ БЕЗ СХОДИМОСТИ 11.09** — акт **D39.247**; отчёт `experiments/24-door-to-file.md`. **Строка 16 закрыта замером: книга доведена от интейка до файла за $0.419424.** ⛔ Четверть денег купила пустоту · пин цены flash протух на 13 % · консистентность впервые замерена по тексту читателя (16 из 69 в вопросе). Ряды **413–418**. Промт был — [POLYGON_COLD_RUN_A_SESSION_PROMPT.md](POLYGON_COLD_RUN_A_SESSION_PROMPT.md), выдан 11.09: настоящая книга (3 главы zh→ru) от двери платформы до ФАЙЛА, платный провайдер — строка бэклога **16** («цена доведённой до конца книги не измерена»). Ожидание $0.35–0.50, кап ≈$2.5. ⚠ **Редакция 2:** опровергатель дал 20 находок, четыре денежных — в том числе «грант обязан покрывать холд» ОПРОВЕРГНУТО (холд сам ужимается на бонд, прогон стартует с `bondFunded=false` и тихо теряет фазу майнинга) и сторож потолка смотрел на `credit_exhausted`, которого для потолка прогона больше не производят | - | **Полигон · РЕМОНТ ПРИБОРА** | [POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md](POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md) | ✅ **ВЫДАН 11.09 сессии `textmachine-ed`**; баннер парковки снят, добавлены §4.4 (семь уехавших якорей зоны) и §4.5 (заказ на замер, который этот гейт отпирает — ось `off` против `low` у редактора на плотном CJK). Прежде: слот зоны отдан холодному прогону A по норме «один промт на зону»; пере-выдаётся сразу после закрытия A актом. ⚠ Его гейт **ИДЁТ ПЕРЕД любым следующим платным ЗАМЕРОМ**, включая продолжение фазы Д**: три эрраты носителей БАННЕРАМИ · гигиена стенда (300, 265) · линза против ИСХОДНИКА + порог различимости (319, 143). Санкции на платный замер НЕ несёт | + | **Полигон · РЕМОНТ ПРИБОРА** | [POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md](POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md) | ⛔ **ГОТОВ, НО ВЫДАТЬ НЕКОМУ — БЛОКЕР ОЧЕРЕДИ, снимает его ВЛАДЕЛЕЦ.** Баннер парковки снят 11.09, добавлены §4.3-врезка (возражение постороннего читателя: возможен дефект НОРМАТИВА, а не прибора — начинать с вопроса «что мы просим у редактора»), §4.4 (семь уехавших якорей зоны, числом) и §4.5 (заказ на замер, который этот гейт отпирает — ось `off` против `low` у редактора на плотном CJK). ⚠ **Предлагался 11.09 двум сессиям, обе отказались ПО НОРМЕ и обе были правы:** «новый пак — новой сессии» плюс запрет смены роли. Пере-снято чтением `/tmp/textmachine-channel` ЦЕЛИКОМ: все семь живых сессий уже отработали пак, свежих нет, а поднимает их владелец. Прежде: слот зоны отдан холодному прогону A по норме «один промт на зону»; пере-выдаётся сразу после закрытия A актом. ⚠ Его гейт **ИДЁТ ПЕРЕД любым следующим платным ЗАМЕРОМ**, включая продолжение фазы Д**: три эрраты носителей БАННЕРАМИ · гигиена стенда (300, 265) · линза против ИСХОДНИКА + порог различимости (319, 143). Санкции на платный замер НЕ несёт | | Полигон · фаза Д | [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md) | ⛔ **ПРИПАРКОВАНА 11.09 — НЕ БРАТЬ** (баннер в шапке), сверх прежнего: ⚠ **ПРИОСТАНОВЛЕНА до лендинга «РЕМОНТА ПРИБОРА»**: линза замера меряет верность ЧЕРНОВИКУ, а руке велено отходить от него по исходнику (`D39.215` п.3) ⇒ продолжать замер до починки значит покупать числа, которые ничего не значат. ⚠ Прежний указатель на `PACKAGE4` снят: остаток вынесен строкой 327, промт ретирован | | Фронт | активного НЕТ | **ЗОНА ЗАМОРОЖЕНА** (D39.136 п.2 + D39.147: разморозка отдельным словом владельца, не привязана к P7); перечень первого касания — в зонном журнале | | Контракт | активного НЕТ | канон — `architecture/14-api-contract/`; ⚠ версию брать ФАЙЛОМ (`grep '^ version:' openapi.yaml`), не отсюда: миноры ратифицируются D-нотами и их содержание грепается по реестру нот. | diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index 0f449743..5875a73e 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -60,7 +60,7 @@ |---|---|---|---| | бэкенд | `BACKEND_CONSISTENCY_YOU_CAN_SHOW_SESSION_PROMPT.md` | **textmachine-c9** | ⏳ приёмка, круг 2: шесть посадок выжили → дофикс сдан, жду финальную батарею. ⛔ F6 мною ОТМЕНЁН после пере-замера | | платформа | — | — | 🟢 **СЛОТ СВОБОДЕН** (пак «правда у двери» закрыт актом `D39.246`) | -| полигон | `POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md` | **textmachine-ed** | ✅ выдан 11.09, распаркован; жду эхо | +| полигон | `POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md` | — | ⛔ **готов, адресата НЕТ** — все семь живых сессий отработали, свежую поднимает владелец | | фронт | заморожен | — | разморозка по критерию `NEAR_TERM_PLAN.md` | **В очереди, написано и ждёт слота:** `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md` (падение, которое @@ -75,7 +75,9 @@ | 3 | полигон | холодный прогон A (платный) | textmachine-23 | ✅ | ✅ закрыт актом `D39.247`; строка 16 закрыта замером | | 4 | — | ревью МОИХ записей (не пак зоны) | textmachine-9a | — | ✅ отчёт сдан; часть находок заландена 11.09 | | 5 | бэкенд | консистентность, которую можно предъявить | textmachine-c9 | ✅ | ⏳ дофикс после шести выживших посадок | -| 6 | полигон | ремонт прибора | textmachine-ed | ждём | выдан 11.09 | +| 6 | полигон | ремонт прибора | — | — | ⛔ **готов, выдать некому**; предлагался `ed` и `5c`, обе отказались ПО НОРМЕ и обе правы | + +⛔ **БЛОКЕР ОЧЕРЕДИ (11.09): свежих сессий не осталось.** Прочитано ЦЕЛИКОМ `/tmp/textmachine-channel` (13 блоков, 95 строк): `ed` · `5c` · `50` · `8e` · `23` · `c9` · `9a` — у каждой блок и отработанный пак; `d8` мертва. Поднимает сессии ВЛАДЕЛЕЦ. Первый вопрос ему при возвращении. ⚠ Мой промах, из которого это вылезло: читал канал `tail -60` над 95 строками и выбирал адресата по остатку `ListAgents` — норма ушла в ролевой промт и в `CLAUDE.md`. ## Что я должен помнить, пока паки идут