feat(ir): INV-06 — candidate-корпус в opt-in субпат ./ir/candidates - #85
Conversation
…idates Default ./ir несёт только runtime-проекцию (32 декларации accepted-моделей + транзитивные mirror-источники, 49KB вместо 304KB anatomy.json); candidate- корпус (53 глифа) подключается явным registerCandidates() из нового субпата. - build-anatomy-projection.mjs: детерминированное разбиение anatomy.json на runtime/candidates в составе build:ir - гейт по состоянию модели, не по декларации: mixed-иконки (candidate-вариант при runtime-декларации) без регистрации падают fail-closed, как pure - registerCandidateAnatomy @internal + stripInternal (не входит в публичный d.ts), реестр first-write-wins — публичной точки мутации нет - test/ir-candidates-gate.test.ts: fail-closed доказан для обоих классов, способность упасть проверена саботажем гейта - vitest exclude .claude/** — worktree субагентов не попадают в verify - ratchet: dist/ir/index.js 1064174->805401 B (gzip 144005->125302), index.d.ts 11027->9594 B после stripInternal; числа = точное измерение Ревью: изолированная корректность (разбиение сверено с catalog, 0 утечек candidate-координат в ./ir, tarball/attw/publint OK) + второй порядок (Хайрам-риски реестра закрыты, candidateGlyphCount удалён как YAGNI). CI=true pnpm verify: 68 files / 793 tests, exit 0.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 7 minutes Limit details: You’ve used the included review currently available. Your 104 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (20)
Comment |
…tes в offline-consumer гейте Находки финального изолированного ревью PR #85 (exact head 3014cb1): - registerCandidateAnatomy({}) ставил candidatesRegistered до проверки содержимого — mixed-модели строились без корпуса (обход INV-06 через runtime-экспорт, невидимый в d.ts, но живой по Хайраму). Гейт теперь открывается только непустым корпусом; регресс закрыт тестом (sabotage: удаление гвардии -> 1 failed). - check-package-artifact: offline-consumer smoke импортирует ./ir/candidates, вызывает registerCandidates() и строит все 476 вариантов в allow-candidate — заявление 'проверяет все ESM entrypoints' снова точно.
…и пустой регистрации Корневая причина красного CI 90e006a: 3-строчная гвардия registerCandidateAnatomy добавила +48 B min / +12 B gzip, а ratchet сверяет baseline точно (drift в обе стороны). Числа = измерение check-package-size на пересобранном dist; census перегенерирован штатным генератором. Моя ошибка исполнения: коммитил фикс гвардии без пересборки dist перед push.
Что
Закрывает INV-06-невязку GATE-1 (план product-lab-icons r2, Unknowns): candidate-декларации (53 глифа, ~78KB координат) больше не входят в default
./ir— каждый потребитель платил за opt-in режим../ir→ runtime-проекция: 32 декларации accepted-моделей + транзитивные mirror-источники (semantics/anatomy.runtime.json, 49KB вместо 304KB).@labpics/icons/ir/candidates: явныйregisterCandidates()включаетallow-candidate; bare-импорт запрещён как паттерн (sideEffects:false).registerCandidateAnatomy—@internal+stripInternal: не входит в публичный d.ts; реестр first-write-wins..claude/**— worktree субагентов больше не глобятся в verify.Числа (точное измерение, не потолки)
Доказательства
CI=true pnpm verify: 68 files / 793 tests, exit 0 (локально; авторитет — CI этого PR)../ir-бандле при чувствительности пробы 29/32 runtime, tarball/attw/publint OK.Контекст плана
Узел: закрытие INV-06-невязки GATE-1 до CONTRACT-01 (после снапшотов это стало бы breaking). SIZE-01-отчёт готов отдельно и ляжет следующим срезом после мержа (baseline B пересчитается).