Write the shift's four checks into the platform journal with their limits, and stop the journal teaching the filtered lint that cannot see a foreign doc pointing in
This commit is contained in:
parent
616a8e4b37
commit
c533618a82
1 changed files with 95 additions and 4 deletions
|
|
@ -222,8 +222,13 @@ make check # ПОСЛЕДНИЙ прогон — после
|
|||
проверкой `pwd`, наличия файла и КОДА ВЫХОДА грепа (`1` = совпадений нет). Результат тот же, но
|
||||
предъявлять теперь можно.
|
||||
|
||||
`python3 docs/scripts/counts.py --lint`: **`✗ platform/` — 0** (проверено командой
|
||||
`… --lint | grep -c "✗ platform/"` → `0`). ⚠ Гонялся циклом: первый проход дал 6 уехавших якорей в
|
||||
`python3 docs/scripts/counts.py --lint` — **прогон БЕЗ фильтра по своей зоне, и это не мелочь**
|
||||
(разбор — секция «НОРМЫ, КУПЛЕННЫЕ СМЕНОЙ 05.09», норма 1): красных якорей с корнем цели
|
||||
`platform` — **0**, остальные корни чужие. ⚠ **Прежняя редакция этой строки предъявляла
|
||||
`… --lint | grep -c "✗ platform/"` → `0` — НЕГОДНЫЙ метод, и он же стоял тут образцом для
|
||||
следующей смены.** Он считает якоря, ВЫХОДЯЩИЕ из зоны, и структурно не видит чужой документ,
|
||||
который целится В неё; именно так пара якорей в `docs/` уехала от моей же правки и обнаружилась
|
||||
только ПОСЛЕ лендинга. Исправлено 05.09 этой же сессией по заказу оркестратора. ⚠ Гонялся циклом: первый проход дал 6 уехавших якорей в
|
||||
`DEFECT_REGISTER.md` и 2 в этом журнале — все от МОИХ ЖЕ вставок, все пере-нацелены; два якоря
|
||||
пришлось чинить руками, потому что токен оказался неоднозначным (`exportName`, `backupPathIn`), и
|
||||
один — потому что токен `<dc:title>` короче 12 знаков и линтер его не принимает.
|
||||
|
|
@ -466,8 +471,12 @@ owes that and when». Это стало неверным: `tmplatformctl token i
|
|||
|
||||
⚠ Остальные красные якоря линтера (`backend/internal/membank/*`, `pipeline/events.go`,
|
||||
`pipeline/status.go`, `pipeline/stagerun.go`, `17-seam-inbound-law.md`, `15-money-path.md`) — НЕ мои:
|
||||
их цели правит параллельная движковая сессия. Проверено: в `platform/**` красных якорей **0**
|
||||
(`python3 docs/scripts/counts.py --lint | grep -c "✗ platform/"` → `0`).
|
||||
их цели правит параллельная движковая сессия, и все эти файлы в тот момент были модифицированы в
|
||||
дереве. ⚠ **Честная формулировка — «мой прибор здесь не меряет», а не «там чисто»:** цели линтер
|
||||
читает ИЗ ДЕРЕВА, поэтому чужой незакоммиченный WIP и красит якорь ложно, и ложно спасает —
|
||||
считать их долгом можно только на чистом `backend/`. Оркестратор дождался чистого дерева и
|
||||
пере-нацелил семь из них коммитом `3ddd0f2`. Проверено безфильтровым прогоном: красных якорей
|
||||
с корнем цели `platform` — **0**; прежняя форма `--lint | grep -c "✗ platform/"` негодна по норме 1.
|
||||
|
||||
### Obstacle reporting: что не удалось и что не проверено
|
||||
|
||||
|
|
@ -820,6 +829,88 @@ credential» ровно на том пути, где что-то уже пошл
|
|||
обычную ошибку, `main.go` даёт default 1), и это ровно то, из-за чего мой дискриминатор обязан
|
||||
быть фактом ПЛАТФОРМЫ (`books.status`), а не кодом выхода.
|
||||
|
||||
## НОРМЫ, КУПЛЕННЫЕ СМЕНОЙ 05.09 — четыре проверки и их ГРАНИЦЫ (05.09, `textmachine-main-63` + оркестратор №22)
|
||||
|
||||
⚠ **Записано в репозиторий по заказу оркестратора и по прямой причине:** этих норм не было нигде —
|
||||
греп по `docs/`, `platform/`, `backend/`, `frontend/` и `CLAUDE.md` дал ноль вхождений всех четырёх,
|
||||
— а по шапке `CLAUDE.md` знание, живущее в переписке, умирает вместе с сессиями. Второй довод
|
||||
весомее первого: две строки ЭТОГО ЖЕ отчёта (выше по файлу) предъявляли чистоту якорей негодным
|
||||
способом, то есть в зоне лежал не пробел, а **записанный НЕВЕРНЫЙ МЕТОД, который следующая смена
|
||||
унаследовала бы образцом**. Обе строки исправлены тем же заходом.
|
||||
|
||||
⚠ **Адреса ниже — прозой, без якорной нотации,** по той же причине, что и в секции о сломанных
|
||||
якорях: линтер разбирает якорную форму где угодно, включая текст, который об этой форме РАССКАЗЫВАЕТ.
|
||||
|
||||
### Норма 1. Линт якорей гоняется БЕЗ фильтра по своей зоне
|
||||
|
||||
**Фильтр по своему каталогу структурно не может увидеть чужой документ, который целится В ТЕБЯ.**
|
||||
Форма `counts.py --lint | grep -c "✗ platform/"` отвечает на вопрос «целы ли якоря, ВЫХОДЯЩИЕ из моей
|
||||
зоны», а произносится как «целы якоря моей зоны». Правка файла, на который кто-то ссылается, двигает
|
||||
строки и ломает адреса в чужих доках МОЛЧА; всплывает это на чужом линте, когда причина уже не
|
||||
связывается с коммитом. Считать надо по КОРНЮ ЦЕЛИ — линтер печатает эту сводку сам, и она не
|
||||
капится.
|
||||
|
||||
**Два замера за одну смену, и оба — на авторах правила:**
|
||||
· мой дофикс добавил ОДНУ строку комментария в `platform/internal/config/config.go` — и два якоря в
|
||||
зоне оркестратора (`docs/PROGRESS.md` и `docs/architecture/05-decisions-log.md`) уехали с 427 и 530
|
||||
на 428 и 531. Прежний фильтрованный прогон их не видел: корень цели `platform`, а сломаны адреса
|
||||
в `docs/`. Найдено уже ПОСЛЕ лендинга;
|
||||
· правка канона `3ab23a9` сдвинула три якоря в спецификации (два на +18, один на +5), и один из них
|
||||
жил в ЗАМОРОЖЕННОМ журнале фронта — у замороженной зоны нет своего линта в цикле и некому заметить.
|
||||
**Замороженная зона — худший случай этого класса.**
|
||||
|
||||
### Норма 2. `--stat` — столбец ЗАТРОНУТЫХ строк, а не вставок
|
||||
|
||||
`git show --stat` печатает по файлу «сколько строк изменено» (добавленные ПЛЮС снятые), а итоговая
|
||||
строка коммита — «insertions», но по ВСЕМ файлам сразу. На `3ab23a9` оба числа равны 22 и значат
|
||||
разное: по файлу это 20 добавленных + 2 снятых, в итоге — 20+1+1 вставок по трём файлам. Совпадение
|
||||
случайное. **«Сколько добавлено» отвечает только `--numstat`.**
|
||||
⚠ Цена замерена: неверное «22» ушло из переписки в ПОСТОЯННУЮ запись — в текст коммита `cdfc569`,
|
||||
где сказано, что якоря уехали на двадцать две строки. Ни один не уехал на 22.
|
||||
|
||||
### Норма 3. Арифметическая сходимость — ТРЕВОЖКА, а не прибор
|
||||
|
||||
Чистая дельта файла обязана равняться сдвигу самого нижнего якоря. **Но выход этой проверки — всегда
|
||||
«иди мерь», и никогда «вот причина»:**
|
||||
· сошлось ⇒ про число ханков НИЧЕГО (на `3ab23a9` сошлось при ДВУХ ханках);
|
||||
· не сошлось ⇒ «якорь лежит не ниже всех ханков ЛИБО замер неверен» — про многоханковость ничего;
|
||||
· РАЗНЫЕ сдвиги у разных якорей ⇒ ханков ≥2, и это доказательно;
|
||||
· равные сдвиги ⇒ снова ничего.
|
||||
⚠ Контрпример к сильной форме лежит в том же коммите: ханки заняли старые 985–992 и 1647–1652, якорь
|
||||
на 1546 лёг МЕЖДУ ними и уехал на +5 при дельте файла +18 — не сошлось без единого неверного замера.
|
||||
Формулировка «не сошлось ⇒ правка многоханковая» увела бы искать несуществующие ханки.
|
||||
**Мерит по-настоящему одно — перегрепать токен в цели, ровно как делает линт.** Ценность арифметики
|
||||
не в точности, а в том, что она срабатывает на утверждении, которое автор УЖЕ написал и перемерять не
|
||||
собирался. Это единственная дешёвая защита против «записано точнее, чем проверено».
|
||||
|
||||
### Норма 4. Приёмка ищет не «где код неверен», а «какое утверждение отчёта никто не исполнил»
|
||||
|
||||
⛔ Главный вывод пака и он же самый неприятный: **четыре из пяти major приёмки — не новые дефекты, а
|
||||
МОИ СОБСТВЕННЫЕ ПОСЫЛКИ, записанные как факты** («каталог уходит с исходником» · «у книги в интейке
|
||||
терять нечего» · «граница одна на две двери» · «замер обеих веток»). Верификатор не нашёл кода,
|
||||
который я не додумала, — он нашёл предложения, которые я не проверила. На этой работе класс оказался
|
||||
ДОМИНИРУЮЩИМ, а не редким, и он же поймал меня ДВАЖДЫ уже после сдачи (нормы 1 и 2).
|
||||
**Следствие для следующей приёмки: сначала выпиши утверждения отчёта, потом спроси у КАЖДОГО, чем
|
||||
оно предъявлено.** И строку «я сказала „замер обеих веток“, а померена была одна» держать в отчёте
|
||||
обязательно: она единственная позволяет читателю понять, чему в отчёте вообще можно верить.
|
||||
|
||||
### Экспонат, найденный этой же нормой, и он НЕ мой
|
||||
|
||||
⚠ **Ссылку без токена линтер не проверяет вовсе** — только существование файла. В этом журнале такая
|
||||
живёт: пункт 7 ревизии (04.09, `textmachine-main-34`) ссылается на строки 314 и 455 ЭТОГО файла как
|
||||
на довод, что канон не давал `operationId` третьему адресу. Проверено: на `32be78a`, ДО моего пака,
|
||||
на тех строках уже стояло другое — ссылка протухла раньше и не от моих вставок. Сама ссылка ищется
|
||||
грепом по строке `platform-PROGRESS.md:314,455`; цели — два места, которые греп `operationId`
|
||||
третьему адресу даёт в этом же файле (на момент этой редакции 1382 и 1526). **Не чиню намеренно:
|
||||
это чужой довод о чужом замере, и правка чужой записи задним числом дороже протухшего номера.**
|
||||
Названо, чтобы следующая смена чинила осознанно, а не наследовала молча.
|
||||
|
||||
⛔ **И последнее — норма 1 укусила ЭТОТ САМЫЙ абзац, третий раз за смену.** Первая его редакция
|
||||
называла цели «1291 и 1435»: числа были верны, пока секция не встала на место, а вставка 84 строк
|
||||
сдвинула всё, что ниже, — включая то, на что абзац указывает. **Номер строки протухает от акта его
|
||||
записи, если запись стоит ВЫШЕ цели в том же файле.** Отсюда форма указателя: сначала ТОКЕН, которым
|
||||
цель ищется, и только потом номер — с оговоркой «на момент этой редакции».
|
||||
|
||||
## НАХОДКА В ЧУЖОЙ ЗОНЕ, ЖИВШАЯ ТОЛЬКО В ПЕРЕПИСКЕ — зеркало контракта у фронта (04.09, `textmachine-main-34`)
|
||||
|
||||
⚠ **Пишу сюда, потому что переписка между сессиями умирает вместе с сессиями, а канон велит долговечному знанию жить в репозитории.** Находка сделана по вопросу оркестратора «не построен ли фронт под старую версию контракта», передана ему сообщением — и до этой записи существовала ТОЛЬКО там.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue