Give every anchor in the new prompt a verifiable token, so none of its addresses can rot unnoticed

This commit is contained in:
heaven 2026-09-17 09:22:46 +03:00
parent 31f8ee6f14
commit 7fc24eeb89

View file

@ -89,7 +89,7 @@
**Поэтому базис подставляет ответ** — передачу, тип, род — там, где роль не спрашивали. Перечисли в записке **Поэтому базис подставляет ответ** — передачу, тип, род — там, где роль не спрашивали. Перечисли в записке
ВСЕХ читателей ответа и покажи в отчёте, что каждый получил своё; начни с `attachConsolidatedDst`, ВСЕХ читателей ответа и покажи в отчёте, что каждый получил своё; начни с `attachConsolidatedDst`,
`attachClassifiedGender` (`backend/internal/pipeline/terminologist.go:1306`), их соседа по типу, `consolidatedRows`, строк стоп-таблицы и `attachClassifiedGender` (`backend/internal/pipeline/terminologist.go:1306`=`attachClassifiedGender stamps`), их соседа по типу, `consolidatedRows`, строк стоп-таблицы и
проекции консолидации. проекции консолидации.
⛔ **И ДВА читателя, которых докблок фильтра называет ПРИЧИНОЙ своей двух-условности — мой первый список их упускал, ⛔ **И ДВА читателя, которых докблок фильтра называет ПРИЧИНОЙ своей двух-условности — мой первый список их упускал,
@ -114,7 +114,7 @@
Базис пишет ПРОГОН на своих выходных границах, и границ **две**: Базис пишет ПРОГОН на своих выходных границах, и границ **две**:
- `run-finished``backend/internal/pipeline/bookrun.go:258`=`r.exportBank(ctx, "run-finished")`, и она стоит - `run-finished``backend/internal/pipeline/bookrun.go:258`=`r.exportBank(ctx, "run-finished")`, и она стоит
под `if err == nil` (`backend/internal/pipeline/bookrun.go:254`); под `if err == nil` (`backend/internal/pipeline/bookrun.go:254`=`if err == nil {`);
- `bank-mining/signature-stop``backend/internal/pipeline/mining.go:270`=`bank-mining/signature-stop`. - `bank-mining/signature-stop``backend/internal/pipeline/mining.go:270`=`bank-mining/signature-stop`.
Одной мало не по вкусу, а по коду: сигнатурная остановка возвращается ЗНАЧЕНИЕМ-ОШИБКОЙ — Одной мало не по вкусу, а по коду: сигнатурная остановка возвращается ЗНАЧЕНИЕМ-ОШИБКОЙ —
@ -137,7 +137,7 @@
КРИЧАТЬ** — она означает, что резюм пере-спросит роли, то есть это денежное событие, а не строка бухгалтерии. КРИЧАТЬ** — она означает, что резюм пере-спросит роли, то есть это денежное событие, а не строка бухгалтерии.
**Писатель ОДИН — прогон; границ у него две.** Формулируй именно так. Онтология судит носитель с двумя **Писатель ОДИН — прогон; границ у него две.** Формулируй именно так. Онтология судит носитель с двумя
писателями так же строго, как проекцию без читателя (`docs/architecture/18-bank-ontology.md:70-72`), и писателями так же строго, как проекцию без читателя (`docs/architecture/18-bank-ontology.md:70-72`=`Отсюда правило таблицы выше`), и
консилиум на этом уже спотыкался. консилиум на этом уже спотыкался.
### 4.4. Форма отпечатка — РЕШИ САМА, но развилку знай: от неё зависит, переживёт ли пак следующую работу ### 4.4. Форма отпечатка — РЕШИ САМА, но развилку знай: от неё зависит, переживёт ли пак следующую работу
@ -145,7 +145,7 @@
Отпечаток — хеш того, что читает роль. Консилиум пишет «строки `ctx`». ⛔ **Так делать опасно**, и вот почему: Отпечаток — хеш того, что читает роль. Консилиум пишет «строки `ctx`». ⛔ **Так делать опасно**, и вот почему:
`ctx` — это окна KWIC, а их отбор, число и ширина управляются тремя независимыми ручками `ctx` — это окна KWIC, а их отбор, число и ширина управляются тремя независимыми ручками
(`AttachKWIC`, `backend/internal/terminology/terminology.go:340`=`func AttachKWIC`; вызов (`AttachKWIC`, `backend/internal/terminology/terminology.go:340`=`func AttachKWIC`; вызов
`backend/internal/pipeline/terminologist.go:310`; ключи `kwic_per_term`/`kwic_width` — пар-данные). Любая из них молча обнулит набор `backend/internal/pipeline/terminologist.go:310`=`terminology.AttachKWIC(cands, chunks`; ключи `kwic_per_term`/`kwic_width` — пар-данные). Любая из них молча обнулит набор
решённых у КАЖДОЙ книги: отпечатки не совпадут ни у одного кандидата, и книга потратит остаток пожизненного решённых у КАЖДОЙ книги: отпечатки не совпадут ни у одного кандидата, и книга потратит остаток пожизненного
потолка на пере-консолидацию. потолка на пере-консолидацию.
@ -159,7 +159,7 @@
единственной шириной и была бы пар-слепой по случайности, причём на ДЕНЕЖНОМ предикате. ⇒ ширина — пар-данное с единственной шириной и была бы пар-слепой по случайности, причём на ДЕНЕЖНОМ предикате. ⇒ ширина — пар-данное с
движковым умолчанием, и в отчёте ответь на ревью-вопрос канона: заработает ли пара, которой в репозитории нет, без движковым умолчанием, и в отчёте ответь на ревью-вопрос канона: заработает ли пара, которой в репозитории нет, без
правки Go. Инвариантность достигается тем, что отпечаток не читает ОТОБРАННЫЕ окна, а не тем, что ширина зашита. Якорь канона бери **по кандидату**, не по правки Go. Инвариантность достигается тем, что отпечаток не читает ОТОБРАННЫЕ окна, а не тем, что ширина зашита. Якорь канона бери **по кандидату**, не по
батчу: `CanonFor` принимает батч (`backend/internal/terminology/terminology.go:856`), и отпечаток по батчу вернул бы зависимость от состава, батчу: `CanonFor` принимает батч (`backend/internal/terminology/terminology.go:856`=`func CanonFor(batch []Candidate`), и отпечаток по батчу вернул бы зависимость от состава,
от которой пак как раз уходит. В отпечатке НЕТ вариантов черновиков, `freq` и `since_ch`. от которой пак как раз уходит. В отпечатке НЕТ вариантов черновиков, `freq` и `since_ch`.
**Посылка «исходник книги приходит целиком» — ОТКРЫТЫЙ вопрос владельцу от 17.09, а не допущение пака**, и это **Посылка «исходник книги приходит целиком» — ОТКРЫТЫЙ вопрос владельцу от 17.09, а не допущение пака**, и это
@ -182,7 +182,7 @@
завтра скачком двинет набор решённых, то есть деньги. завтра скачком двинет набор решённых, то есть деньги.
**И про «юнит целиком» знай ограничение.** Семьи и серии детектируются НАД `paid`, то есть ПОСЛЕ фильтра **И про «юнит целиком» знай ограничение.** Семьи и серии детектируются НАД `paid`, то есть ПОСЛЕ фильтра
(`backend/internal/pipeline/terminologist.go:483-487`), и комментарий `:481-482` объясняет причину: детектировать над полным набором (`backend/internal/pipeline/terminologist.go:486`=`terminology.DetectFamilies(paid, fp)`, блок 483487), и комментарий `:481-482` объясняет причину: детектировать над полным набором
значит рассогласовать юниты с батчами, из них построенными. ⇒ это развилка, а не приказ: либо юнит для значит рассогласовать юниты с батчами, из них построенными. ⇒ это развилка, а не приказ: либо юнит для
предиката считается отдельным проходом, не трогая батчер, либо «семья целиком» сужается и это называется. предиката считается отдельным проходом, не трогая батчер, либо «семья целиком» сужается и это называется.
Решение — в записку-план. Решение — в записку-план.
@ -203,12 +203,12 @@
его строят и называют ценой, а не наследуют. его строят и называют ценой, а не наследуют.
Назови выбор и довод в записке-плане. ⛔ Отпечаток в СТРОКЕ авто-банка — мёртвая форма: `writeAutoBank` в Назови выбор и довод в записке-плане. ⛔ Отпечаток в СТРОКЕ авто-банка — мёртвая форма: `writeAutoBank` в
продакшне зовётся ровно один раз, внутри ветки «не останавливаемся» (`backend/internal/pipeline/mining.go:242` под `if !stopping` на продакшне зовётся ровно один раз, внутри ветки «не останавливаемся» (`backend/internal/pipeline/mining.go:242`=`r.writeAutoBank(ctx, mined, proposals` под `if !stopping` на
`:235`), то есть на стопе подписи ему негде лечь. `:235`), то есть на стопе подписи ему негде лечь.
### 4.7. Что пак задевает наружу — поле контракта ### 4.7. Что пак задевает наружу — поле контракта
Сегодня `never_asked` в проекции равно числу снятых банком (`backend/internal/pipeline/bankexport.go:118`) и Сегодня `never_asked` в проекции равно числу снятых банком (`backend/internal/pipeline/bankexport.go:118`=`NeverAsked: t.BankSettled`) и
означает «сид держит поверхность и все черновики согласны». Поле живёт в каноне означает «сид держит поверхность и все черновики согласны». Поле живёт в каноне
(`docs/architecture/14-api-contract/openapi.yaml`) и читается платформой в десятке мест. ⇒ строки, решённые (`docs/architecture/14-api-contract/openapi.yaml`) и читается платформой в десятке мест. ⇒ строки, решённые
базисом, в это поле класть НЕЛЬЗЯ без смены смысла: заводи **аддитивное** поле, это минор контракта, и назови базисом, в это поле класть НЕЛЬЗЯ без смены смысла: заводи **аддитивное** поле, это минор контракта, и назови
@ -237,7 +237,7 @@
`backend/internal/pipeline/terminologist.go:541`=`This is a ONE-TIME cost; every later run replays for $0` (он в хвосте длинной строки — `backend/internal/pipeline/terminologist.go:541`=`This is a ONE-TIME cost; every later run replays for $0` (он в хвосте длинной строки —
я обрезал вывод по ширине и прочёл обрезок как факт). Устарел только адрес ряда (`:498`). **Носителей ТРИ:** сама я обрезал вывод по ширине и прочёл обрезок как факт). Устарел только адрес ряда (`:498`). **Носителей ТРИ:** сама
строка · голден каталога операторских сообщений `backend/internal/pipeline/testdata/operator-messages.txt:136`=`terminology: this book had already paid`, строка · голден каталога операторских сообщений `backend/internal/pipeline/testdata/operator-messages.txt:136`=`terminology: this book had already paid`,
который гейтит отдельный тест · два пина `backend/internal/pipeline/banksettled_test.go:193` (резюм: ноль обращений к провайдеру, $0, который гейтит отдельный тест · два пина `backend/internal/pipeline/banksettled_test.go:193`=`func TestAResumeFindsItsCheckpointsAfterTheFilter` (резюм: ноль обращений к провайдеру, $0,
и вдобавок ОТСУТСТВИЕ ключа `reconsolidated=true` в логе) и `:417` (обе половины: молчать на свежем прогоне, и вдобавок ОТСУТСТВИЕ ключа `reconsolidated=true` в логе) и `:417` (обе половины: молчать на свежем прогоне,
сработать в описанном случае). ⇒ пере-формулировка обязана обновить И голден: это не подгонка под зелень, а сработать в описанном случае). ⇒ пере-формулировка обязана обновить И голден: это не подгонка под зелень, а
обслуживание заказанной смены поведения (`D39.183`), и она ОБЪЯВЛЯЕТСЯ в отчёте. обслуживание заказанной смены поведения (`D39.183`), и она ОБЪЯВЛЯЕТСЯ в отчёте.
@ -355,8 +355,8 @@
⛔ **Две ноты 17.09 — условия работы твоего пака, и обе про деньги ровно тех ролей, которые он фильтрует.** ⛔ **Две ноты 17.09 — условия работы твоего пака, и обе про деньги ровно тех ролей, которые он фильтрует.**
`D39.264` вынес петлю повторной попытки в общий контур и подключил банк-роли к вердикту; `D39.259` включил `D39.264` вынес петлю повторной попытки в общий контур и подключил банк-роли к вердикту; `D39.259` включил
`gates.terminology.regenerate: 1` во ВСЕХ трёх боевых конвейерах (`backend/configs/pipeline-c1.yaml:193`, `gates.terminology.regenerate: 1` во ВСЕХ трёх боевых конвейерах (`backend/configs/pipeline-c1.yaml:193`=`regenerate: 1`,
`backend/configs/pipeline-arm-glm.yaml:72`, `backend/configs/pipeline-arm-mistral.yaml:79`). ⇒ на батч возможна ВТОРАЯ платная ступень, и `backend/configs/pipeline-arm-glm.yaml:72`=`regenerate: 1`, `backend/configs/pipeline-arm-mistral.yaml:79`=`regenerate: 1`). ⇒ на батч возможна ВТОРАЯ платная ступень, и
промт обязывает тебя назвать: **чей ответ ложится в базис, если батч куплен лестницей** (ответ выигравшей ступени, не промт обязывает тебя назвать: **чей ответ ложится в базис, если батч куплен лестницей** (ответ выигравшей ступени, не
первой) · не ломает ли базис посылку пина `backend/internal/pipeline/bankladder_test.go:111`=`func TestAHealthyBankTableIsNeverAskedAgain` первой) · не ломает ли базис посылку пина `backend/internal/pipeline/bankladder_test.go:111`=`func TestAHealthyBankTableIsNeverAskedAgain`
(«здоровая таблица покупается ровно раз»), чья посылка утверждается отдельной строкой — («здоровая таблица покупается ровно раз»), чья посылка утверждается отдельной строкой —