Skip to content

fix(tr): бумни правилата на tr-rules-2 - режимът се смени, версията не - #332

Merged
todorkolev merged 1 commit into
mainfrom
fix/bump-rules-version-tr-rules-2
Aug 24, 2026
Merged

fix(tr): бумни правилата на tr-rules-2 - режимът се смени, версията не#332
todorkolev merged 1 commit into
mainfrom
fix/bump-rules-version-tr-rules-2

Conversation

@todorkolev

Copy link
Copy Markdown
Collaborator

Какво

RULES_VERSION става tr-rules-2, а фикстурите в audit.test.mjs, които значеха "текущата версия",
вече сочат константата вместо низа.

Защо

Константата версионира правилата, не кода, и гейтът за монотонност виси точно на нея: изчезнала
връзка при непроменена версия е твърда находка, при сменена - очаквана разлика. Собственият ѝ коментар
казва да се бумва, щом смисълът на стъпало се промени.

Смени се два пъти, без версията да го отрази:

Как се прояви

Първото пускане с пълен регистърен обход (32670990181, 731/731 присъди, 100%) стигна до одита и спря:

## monotonicity — 103 published last run, 277 now; 37 regression(s), 0 declared removal(s)

Гейтът сравняваше повърхност, публикувана на 2026-08-04 - преди #309 да съществува - със сегашната,
и виждаше законното затягане като тиха загуба. Сред 37-те се повтарят и псевдо-институции като
"ВСТЪПИТЕЛНИ И ФИНАЛНИ ДЕКЛАРАЦИИ", тоест отпадат и дублирания, а не същински връзки.

Под tr-rules-2 същите 37 стават отпечатана разлика за преглед - каквито са - вместо провал на хода.

Тестовете

audit.test.mjs зашиваше 'tr-rules-1' на седем места, където значеше "текущата версия". Тоест тестът
"изчезнала връзка при НЕПРОМЕНЕНА версия е твърда находка" щеше да се обърне при всяко бумване и да
мери точно обратното на замисленото. Вече сочат RULES_VERSION. 'tr-rules-0' остава литерал, защото
там нарочно значи "стара версия".

Минават: audit.test.mjs 23, evidence.test.mjs 42, всички scripts/cacbg + scripts/tr - 305.

Какво НЕ прави

Не отписва нищо самоволно: 37-те продължават да се отпечатват при всеки одит, само че като декларирана
разлика, а не като спиране. Прегледът им си остава човешка работа.

Константата версионира ПРАВИЛАТА, не кода, и гейтът за монотонност виси
на нея: изчезнала връзка при непроменена версия е твърда находка, при
сменена - очаквана разлика. Собственият ѝ коментар казва да се бумва,
щом смисълът на стъпало се промени.

Смени се два пъти, без версията да го отрази. #309 въведе изискването
изобщо да има регистърно доказателство - дотогава връзка се публикуваше
без никакво, защото таблицата interest_link_evidence я нямаше. ADR-0035
после затегна стъпало 2: освен фирменото наименование трябва и нещо
друго да установи дружеството.

Затова първото пускане с пълен регистърен обход отчете 37 регресии:
гейтът сравняваше повърхност отпреди #309 със сегашната и виждаше
законното затягане като тиха загуба. Под tr-rules-2 същите 37 стават
отпечатана разлика за преглед, каквито са.

Фикстурите в audit.test.mjs сочеха низа 'tr-rules-1' там, където значеха
"текущата версия" - тоест тестът за "изчезнала при НЕПРОМЕНЕНА версия"
щеше да се обърне при всяко бумване и да мери обратното на замисленото.
Вече сочат константата. 'tr-rules-0' остава литерал, защото там нарочно
значи "стара версия".
@github-actions

Copy link
Copy Markdown

Test coverage

Workspace Lines Δ Branches Δ Functions Statements
apps/etl 75.43% +1.43pp 63.52% +5.32pp 70.00% 74.11%
apps/web 91.07% +0.07pp 82.44% +0.04pp 91.30% 89.75%
packages/config 92.85% +0.05pp 72.22% +0.02pp 92.85% 89.18%
packages/db 94.55% +0.05pp 79.34% +0.04pp 87.29% 91.58%
packages/ingest 89.71% +3.41pp 85.52% +5.12pp 81.74% 88.14%
packages/shared 95.50% +0.00pp 80.83% +0.03pp 92.30% 89.56%
Total (informational) 91.43% 81.30% 87.21% 89.32%

✅ No workspace dropped below its baseline (tolerance 0.5pp).

📈 Coverage rose by more than 1pp — run node scripts/check-coverage.mjs --update locally and commit coverage-baseline.json to ratchet the threshold up.

@todorkolev
todorkolev merged commit f75589b into main Aug 24, 2026
5 checks passed
todorkolev added a commit that referenced this pull request Aug 26, 2026
Първата версия на печата имаше преходен капан от същия вид, който #332 и
#333 вече ни удари: всички съществуващи кешове са отпреди печата, тоест
ход без обхождане (понеделнишкият cron) щеше да откаже на extract - не
защото корпусът е отрязан, а защото е СТАР. И поправката щеше да зависи
от поредността "слей, после пусни full_crawl=true преди понеделник".

Вместо това ходът се лекува сам. Нова стъпка след възстановяването
проверява печата; краулът тръгва при full_crawl ИЛИ при липсващ печат.
Върху пълен кеш това е ~2 минути (файловете на диска се прескачат) и
сверява срещу живия регистър - авторитетния източник, а не евристика
върху това какво има на диска. Запазването и проверката на кеша следват
същото условие, за да не се изгуби довършеното.

Стабилно състояние с печатан кеш остава без мрежа, по замисъла на
графика: лекуването се задейства само за кеш, който никога не е бил
потвърден цял - точно случаят, в който довярването му е бъгът.

Гейтът в extract.mjs остава непроменен и вече означава друго: всички
пътища дотам гарантират печат, значи задействането му е непредвидено
състояние, не позната преходност. Fail-closed е верният отговор за това.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant