Skip to content

feat(lang-python): fix-hooks (runAgentFix, pytest-канон) + рішення classify-пілота - #197

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

feat(lang-python): fix-hooks (runAgentFix, pytest-канон) + рішення classify-пілота#197
vitaliytv merged 22 commits into
mainfrom
claude/merge-7n-test-rules-3bedc5

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що змінено

  • Python fix-hooks (plugins/lang-python/coverage-provider/fix-hooks.mjs): generateTests/fixSurvived через runAgentFix — агент пише pytest-тести для файлів нижче порогу і проти survived-мутантів mutmut, під ladder-контрактом (recordWrite/timeoutMs/tier), lazy-import (detect/collect не вантажать LLM-стек). Симетрія з rust-хуками. 23 тести зелені.
  • Оцінка classify-пілота (задокументовано в коміті/памʼяті): живий вимір з мутаційкою на lang-python workspace (664 мутанти, 275 survived), класифікація вибірки 40 — вердикти точні (spawn-обгортки → wrapper/glue з чіткими причинами; семантична різниця ?? 1 vs && 1 коректно лишена worth-testing). Рішення: дефолт classifyConfidenceThreshold лишається opt-in (1.1); пілот 0.7 тільки в цьому репо; увімкнення споживачам — per-repo під час міграційної хвилі після ширшої вибірки.

Рев'юеру

Делта-гейт EXIT 0, cspell 0, доки з CRC. Після цього PR у absorb-беклозі лишається лише операційна міграція споживачів + deprecate + архів 7n-test.

🤖 Generated with Claude Code

vitaliytv and others added 22 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
@vitaliytv
vitaliytv merged commit d35a993 into main Jul 23, 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