Skip to content

fix(coverage): фолбек моделі fix-сесій + live e2e обкатка fix-шляху (17→7 survived) - #198

Merged
vitaliytv merged 25 commits into
mainfrom
claude/merge-7n-test-rules-3bedc5
Jul 24, 2026
Merged

fix(coverage): фолбек моделі fix-сесій + live e2e обкатка fix-шляху (17→7 survived)#198
vitaliytv merged 25 commits into
mainfrom
claude/merge-7n-test-rules-3bedc5

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що змінено

Жива обкатка LLM fix-шляху концерну coverage (відкритий пункт absorb-беклогу) + знайдений нею баг:

  • Баг фолбека моделі: ctx.model ?? CLOUD_MAX — тир-константи model-tiers є порожніми рядками, коли N_CLOUD_*_MODEL env не задані, тож поза ladder-ом (який завжди передає model) fix-сесія падала «модель не знайдена: <порожньо>». Виправлено на ||-ланцюг із запасним CLOUD_AVG у всіх трьох fix-шляхах (js coverage-fix, rust/python fix-hooks).
  • Live e2e (fixSurvived на survived-мутантах lang-python/coverage-provider/mutmut.mjs): жива runAgentFix-сесія написала 5 гранично-кейсових тестів парсерів — 17 → 7 survived (вбито 10, mutation score 93.1%). Агентна одруківка (пропущена кома) — клас поломок, який у реальному пайплайні ловить canonical re-detect із rollback-ом рунга; тут виправлена вручну і тести доопрацьовані.
  • Синк-мерджі з main по ходу (релізи 1.45–1.46).

Рев'юеру

Делта-гейт EXIT 0, cspell 0, сьюти зелені (90 lang-python, 109 lang-rust). Це закриває пункт «живий e2e прогін fix-шляху» — у absorb-беклозі лишаються тільки міграція споживачів + архів і замір тривалості повного lint test на великому проєкті.

🤖 Generated with Claude Code

vitaliytv and others added 25 commits July 22, 2026 09:17
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…депів

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, lang-js провайдер (порт js-collector @7n/test), делта per-file гейт, ownership правила test у core

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… тести провайдера/класифікатора, перейменування coverage-provider проти колізії з артефактами vitest

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ast oxc-адаптер, provider shape, пороги/гейт core) — гейт провайдерної теки чистий

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ixin lang-js), канон-mdc секцією в test/main.mdc, правило storybook видалено

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…en-stories/fix-tests/coverage-fix через runAgentFix) + fix-worker концерну під ladder-контрактом; портовані тести; оновлені контракт-тест і mdc-дзеркала

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ль по дельті, рефактори складності js-collector, файлові доки з CRC, cspell-словник

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…test-discovery exclude прихованих тек і фільтр failing-тестів вкладених worktree

Локальне дерево 7n-test оновилось до 0.17.3 під час переносу; звірка з origin/main показала один пропущений фікс coverage-per-file.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rules-3bedc5

# Conflicts:
#	.cspell.json
#	eslint.config.js
#	npm/rules/test/main.mdc
#	npm/schemas/n-rules.json
#	plugins/lang-js/rules/storybook/main.json
#	plugins/lang-js/rules/test/storybook-adopt/docs/main.md
#	plugins/lang-js/rules/test/storybook-adopt/main.mjs
#	plugins/lang-js/rules/test/storybook-adopt/tests/adopt.test.mjs
#	plugins/lang-js/rules/test/storybook-hygiene/docs/main.md
#	plugins/lang-js/rules/test/storybook-scaffold/docs/main.md
#	plugins/lang-js/rules/test/storybook-scaffold/main.mjs
#	plugins/lang-js/rules/test/storybook-scaffold/template/app-main.js
#	plugins/lang-js/rules/test/storybook-scaffold/template/app-preview.js
#	plugins/lang-js/rules/test/storybook-scaffold/template/docs/app-main.md
#	plugins/lang-js/rules/test/storybook-scaffold/template/docs/app-preview.md
#	plugins/lang-js/rules/test/storybook-scaffold/template/docs/vitest.setup.md
#	plugins/lang-js/rules/test/storybook-scaffold/template/vitest.setup.js
#	plugins/lang-js/rules/test/storybook-scaffold/tests/scaffold.test.mjs
#	plugins/lang-js/rules/test/storybook-scope/docs/main.md
#	plugins/lang-js/rules/test/storybook-vitest-config/docs/fix-storybook-vitest-config.md
#	plugins/lang-js/rules/test/storybook-vitest-config/docs/main.md
#	plugins/lang-js/rules/test/storybook-vitest-config/main.mjs
#	plugins/lang-js/rules/test/storybook-vitest-config/template/app-storybook-project-entry.js
#	plugins/lang-js/rules/test/storybook-vitest-config/template/docs/app-storybook-project-entry.md
#	plugins/lang-js/rules/test/storybook-vitest-config/template/docs/vitest.config.app.baseline.md
#	plugins/lang-js/rules/test/storybook-vitest-config/template/vitest.config.app.baseline.mjs
…флікти розрулені на нові шляхи storybook-* концернів

- новий концерн page-coverage → storybook-page-coverage, app-шаблони/тести хвилі 2a за новими шляхами
- схема .n-rules.json: обидва нові поля (coverage + storybook)
- test/main.mdc: семантика 2a + rename-sweep; mdc-дзеркала регенеровано
- oxfmt: шаблонні теки storybook-* виключені (двічі ламав YAML-токен CI-матриці)
- doc_comments: єдине нове порушення понад rollout-стан main (defaultRunner export-doc) виправлено

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/js/repo-wide)

- js/doc_comments: 0 порушень repo-wide (T0-промоція //-блоків + 81 файл поведінкових JSDoc-хедерів і export-доків; T0-вада з */ у тексті глоба виправлена вручну в eslint.config.js)
- lint-repo: .jscpd.json/knip.json — стейл-шляхи після виносу плагінів і переносу storybook-* оновлено; невикористані deps (ignore, @7n/test) прибрані
- text: cspell repo-wide 0
- догфуд: scripts.coverage кореня → npx @7n/rules lint test --no-fix (канон test.mdc), @7n/test повністю випиляний з репо
- шаблонні теки storybook-* виключені з oxfmt (ламав YAML-токени)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…рані, peer llm-lib) + CRC-рестамп док

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… + cspell-чистка згенерованого (repo-wide 0)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…за портом CoverageProvider

Full-вимір (line coverage + мутаційний score, survived у shape концерну) і делта per-file шлях; форми lcov/outcomes.json звірені на живих прогонах (cargo-mutants 27.0, llvm-cov 0.8.7); realpath-рібейзинг проти macOS /var-симлінка; відсутні тулзи — чесний skip з hint. Реєстрація contributes.handlers.coverage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rules-3bedc5

# Conflicts:
#	.cspell.json
#	npm/rules/test/coverage/lib/classify/prompt.mjs
#	npm/rules/test/coverage/lib/classify/verdict-schema.mjs
#	plugins/lang-rust/docs/vitest.config.md
…t/coverage/lib/lcov.mjs) — jscpd-дублікат lang-js/lang-rust усунено

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…елта-ігнор, hardening

- lang-python: pytest-cov (lcov, спільний парсер core) + mutmut 4.x (results/show парсери, звірені на живих прогонах через uv) за портом CoverageProvider
- lang-rust: опційні fix-hooks generateTests/fixSurvived через runAgentFix (ladder ctx, #[cfg(test)]-канон)
- делта-гейт: comment-only зміни пропускаються (JS — AST-порівняння oxc, Rust — стрип коментарів); rollout doc-коментарів більше не тягне файли в гейт
- спільні lib концерну: manifest-roots (rust/python корені), схема .n-rules.json + classifyConfidenceThreshold (v8r)
- full-черга: wait-timeout ×4 під мутаційне тестування; classify-пілот (0.7) у цьому репо
- T0 promote-line-comments екранує закриття коментаря у тексті; fingerprint-тест ізольовано від живого дерева

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rules-3bedc5

# Conflicts:
#	plugins/lang-js/coverage-provider/docs/per-file.md
#	plugins/lang-js/coverage-provider/per-file.mjs
#	plugins/lang-rust/coverage-provider/docs/index.md
#	plugins/lang-rust/coverage-provider/docs/provider.md
#	plugins/lang-rust/coverage-provider/docs/roots.md
#	plugins/lang-rust/coverage-provider/provider.mjs
#	plugins/lang-rust/coverage-provider/roots.mjs
#	plugins/lang-rust/coverage-provider/tests/provider.test.mjs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pytest-канон)

Симетрія з rust: агентні сесії пишуть pytest-тести для файлів нижче порогу
покриття і проти survived-мутантів mutmut, під ladder-контрактом.

Оцінка classify-пілота (40 survived-мутантів lang-python, cloud-fallback):
вердикти точні (spawn-обгортки → wrapper/glue, -q → equivalent, семантична
різниця ?? vs && коректно лишена worth-testing). Рішення: дефолт лишається
opt-in (1.1), пілот 0.7 у цьому репо; увімкнення споживачам — per-repo під
час міграції після ширшої вибірки.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rules-3bedc5

# Conflicts:
#	plugins/lang-python/coverage-provider/docs/index.md
#	plugins/lang-python/coverage-provider/docs/mutmut.md
#	plugins/lang-python/coverage-provider/docs/provider.md
#	plugins/lang-python/coverage-provider/provider.mjs
…анти порожні без N_CLOUD_*_MODEL env) + live e2e обкатка fix-шляху

E2E на survived-мутантах lang-python/mutmut.mjs: жива runAgentFix-сесія
(CLOUD_AVG-фолбек) написала 5 гранично-кейсових тестів парсерів — 17→7
survived (вбито 10, score 93.1%). Знайдений і виправлений баг фолбека;
агентна одруківка (кома) — клас поломок, який у справжньому ladder ловить
canonical re-detect з rollback-ом рунга.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit 704ee30 into main Jul 24, 2026
7 checks passed
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