Pin the tail-vocabulary gate to itself and close the row: four assertions run on every check, verified by planting three mutations of the gate
This commit is contained in:
parent
4410b13257
commit
99a6b05480
3 changed files with 32 additions and 1 deletions
|
|
@ -15,6 +15,7 @@
|
|||
> ⚠ **Эррата 27.08-в (D39.158 п.1):** «движок исполняет продуктовую модель сам» сказано без ратифицированной ОГОВОРКИ — правка ОТДЕЛЬНОГО термина через дверь доступна только для mined-термов; правка СИД-терма дверью отклоняется по имени (`internal/membank/decisions.go:359`), потому что это перенос базового снапшота и пере-оплата черновой волны — другое решение (щель ратифицирована, строка бэклога 192). Ещё три места, где модель шире кода, названы строками: окно глав одним решением не правится (named-узость v1) · банк-экспорт на стопе пуст (224) · «полный останов» — это граница ПЕРЕД редакторской волной, черновая довершается (S16). Найдено вычиткой старшего при ревью D39.159.
|
||||
> ⚠ **Эррата 27.08-г (D39.159 п.8):** отказ от правки `n != shape` СТОИТ, но обоснование было шире истины — «краснит семь ЗАКОННЫХ строк» неверно для двух из них. `PD-99` несла корректно markdown-экранированные черты (виноват был парсер, не строка), а `PD-197` — сырую черту в регексе, которая молча сдвигала ВЕС, потому что он читался с конца, а от конца далеко. Названный там остаточный риск ПОСТРОЕН 27.08 на эмпирике зоны (три молчаливых случая за двое суток): парсер уважает экранирование · вес регистра читается с НАЧАЛА · гейт `tail_vocab` судит словарь хвоста. Проверено подсадкой; числа не сдвинулись. Строка `PD-398` остаётся открытой на отсутствие автоматического пина у самого гейта.
|
||||
> ⚠ **Эррата 27.08-д (D39.159 п.7) — норма §3 п.8 применена к СОБСТВЕННОМУ бэклогу, три строки переsуждены.** Свип грепом по путям лендинга `d1eb8a9` нашёл, что лекарство трёх строк уже в дереве. **212 ЗАКРЫТА и снята с таблицы:** голый `yaml.Unmarshal` заменён строгим `seed.DecodeFile` (`internal/membank/memseed.go:51`, код называет строку по номеру), пин двойной — `internal/seed/decode_test.go:16` и `internal/membank/seedlint_test.go:39`. **218 ЗАКРЫТА и снята:** три тест-хелпера снесены, `miner_parity_test.go:35` говорит «the old $HOME/books address is dead». **199 СУЖЕНА:** движковая половина цепи доставки правок банка ПОСТРОЕНА, открыт только платформенный конец (пункт 2в очереди) — прежняя формулировка «канал НЕ построен» отправляла бы следующий пак строить построенное. Бэклог 177 → 175. ⚠ Норма окупилась на своём авторе в тот же день, что и на чужом.
|
||||
> ⚠ **Эррата 27.08-е (D39.159 п.8, финал): `PD-398` ЗАКРЫТА — у построенного гейта появился пин.** `selftest_tail_vocab()` гоняется на каждом `--check`, четыре утверждения, проверен ПОСАДКОЙ трёх мутаций самого гейта (все три пойманы, базовая линия молчит). ⚠ Первая редакция пина молчала на одной из трёх: утверждение про вес проверяло `cells()`, а мутация меняет то, чем пользуется `register()`. Пин, проверенный одним прогоном вместо посадки, — ровно тот класс, который эта строка описывает; поймано только потому, что посадку сделал. Регистр 96 → 95 открытых.
|
||||
|
||||
> ⚠ **Навигация (актуализация 07.08, эра D39.1xx):** append-only-дисциплина (D23.3) означает, что
|
||||
> НЕВЕРНЫЙ ФАКТ внутри старой ноты не переписывается, а получает эрратау — и тогда он опасен ровно
|
||||
|
|
|
|||
|
|
@ -208,6 +208,35 @@ def tail_vocab(rows: list, what: str) -> list:
|
|||
return bad
|
||||
|
||||
|
||||
def selftest_tail_vocab() -> list:
|
||||
"""Пин гейта хвостового словаря (PD-398). Гоняется на КАЖДОМ --check: гейт, проверенный один раз
|
||||
руками, — это не пин, а замер, и он тихо умирает от первой же правки парсера.
|
||||
|
||||
Четыре утверждения, каждое куплено настоящим случаем 25–27.08:
|
||||
1. чистая строка молчит;
|
||||
2. сырая «|» в СТАТУСНОЙ ячейке краснит — три случая за двое суток проходили молча;
|
||||
3. markdown-экранирование «\|» законно и НЕ считается лишней ячейкой (PD-99 была невиновна);
|
||||
4. сырая «|» в СЕРЕДИНЕ не сдвигает ВЕС — он читается с начала (на PD-197 сдвигала).
|
||||
"""
|
||||
ok = "| PD-999 | bug | major | `a.go:1` | суть | open | источник |"
|
||||
bad_tail = "| PD-999 | bug | major | `a.go:1` | суть | open | сломано | источник |"
|
||||
escaped = "| PD-999 | bug | major | `a.go:1` | код `x\\|y` | open | источник |"
|
||||
mid_pipe = "| PD-999 | bug | major | `a.go:1` | регекс `(a|b)` | open | источник |"
|
||||
fail = []
|
||||
if tail_vocab([ok], "пин"):
|
||||
fail.append("пин: чистая строка не должна краснить")
|
||||
if not tail_vocab([bad_tail], "пин"):
|
||||
fail.append("ПИН УПАЛ: «|» в статусной ячейке НЕ поймана — вернулась молчаливая потеря PD-398")
|
||||
if len(cells(escaped)) != len(cells(ok)):
|
||||
fail.append("ПИН УПАЛ: экранированная «\\|» посчитана лишней ячейкой — PD-99 снова «сломана»")
|
||||
# ⚠ Утверждение 4 судит НАСТОЯЩИЙ путь — счётчик register(), а не cells(): первая редакция пина
|
||||
# проверяла cells()[3] и МОЛЧАЛА на возврате веса к чтению с конца (поймано посадкой 27.08).
|
||||
counted = register(mid_pipe)["вес открытых"]
|
||||
if counted.get("major") != 1:
|
||||
fail.append(f"ПИН УПАЛ: «|» в середине сдвинула ВЕС — вернулся механизм PD-197 (счёт: {counted})")
|
||||
return fail
|
||||
|
||||
|
||||
def register(text: str) -> dict:
|
||||
rows = [l for l in text.splitlines() if REGISTER_ROW.match(l)]
|
||||
weight, status, open_ids = Counter(), Counter(), []
|
||||
|
|
@ -606,6 +635,7 @@ def main() -> int:
|
|||
bad.extend(b["битая форма"])
|
||||
bad.extend(r["битая форма"])
|
||||
bad.extend(r["хвост вне словаря"])
|
||||
bad.extend(selftest_tail_vocab())
|
||||
if not h["порядок = номер"]:
|
||||
bad.append(
|
||||
f"внеочередной аппенд в D-логе: последняя по порядку {h['последняя по порядку файла']}, "
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue