fix(lint): worktree-ізоляція перед self-upgrade + posix-relative шлях у js/eslint detector - #200
Merged
Merged
Conversation
…типологія 1/2a/2b/3, задачі T1-T10 Фіксує рішення brainstorm-сесії: три копії тір/ACP-логіки (llm-lib JS, llm-cascade Rust, tauri-components) зводяться до одного Rust-крейта llm-lib (нині llm-cascade) з napi-проєкцією для Node і tauri-командами для webview. Типологія викликів: 1 ACP (cursor/codex/pi), 2a OpenAI- сумісний sync, 2b batch (v1 — емуляція, перший споживач doc-files), 3 pi-npm (Node-only). MIN/AVG/MAX — спільний Tier-інтерфейс усіх типів. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… у js/eslint detector Два незалежні баги в lint --full поза .worktrees/: 1. ensureNRulesInRootDevDependencies мутувала package.json ДО ensureRunningInWorktree — self-upgrade бруднив дерево прямо перед власним dirty-гейтом і провалював auto-create worktree на інакше чистому дереві. Виніс спільний предикат isLintFullFixArgs(), відклав ensure до ПІСЛЯ worktree-ізоляції (той самий патерн, що вже застосований для `skill taze`). 2. toViolation() у js/eslint detector-і робив relative(cwd, f.file) без попереднього resolve(). oxlint (на відміну від eslint API) віддає ВІДНОСНІ filePath — node:path relative() резолвить відносний другий аргумент проти process.cwd(), не проти переданого cwd. Після auto-created worktree (CLI не робить chdir) це давало `..`-шлях і валило весь --full прогін через DetectorError. Додав regression-тести для toViolation/lint(), підняв покриття js/eslint/main.mjs з 9.7% до 83.9% (поріг 80%), синхронізував docs/main.md. Coverage-below-threshold для npm/bin/n-rules.js (0%, 844 рядки) лишається невирішеним — pre-existing debt, файл структурно не імпортується безпечно в тестах (top-level CLI-диспатч без import.meta.main-гейту), рефакторинг за межами цієї задачі. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Два незалежні баги в
lint --full, знайдені в одному прогоні поза.worktrees/на bun workspaces:ensureNRulesInRootDevDependenciesмутувалаpackage.json(self-upgrade) ДОensureRunningInWorktree— self-upgrade бруднив дерево прямо перед власним dirty-гейтом і провалював auto-create worktree на інакше чистому дереві. Виніс спільний предикатisLintFullFixArgs()(щобskipDevDepsEnsureіneedsWorktreeIsolationне розійшлись) і відклав ensure до ПІСЛЯ worktree-ізоляції — той самий патерн, що вже застосований дляskill taze.DetectorErrorвалить весь--full-прогін):toViolation()уjs/eslintdetector-і робивrelative(cwd, f.file)без попередньогоresolve(). oxlint (на відміну від eslint programmatic API) віддає відносніfilePath, аnode:pathrelative()резолвить відносний другий аргумент протиprocess.cwd(), не проти переданогоcwd. Після auto-created worktree (CLI не робитьchdir) це давало..-шлях і валило інваріант уdetect.mjs(violation.file має бути posix-relative без "..").Changes
npm/bin/n-rules.js—isLintFullFixArgs()предикат;skipDevDepsEnsureпоширено наlint --full; явний викликensureNRulesInRootDevDependencies(runCwd)після worktree-ізоляції.plugins/lang-js/rules/js/eslint/main.mjs—resolve(cwd, f.file)передrelative()уtoViolation; функцію експортовано для тестованості.plugins/lang-js/rules/js/eslint/tests/main.test.mjs(новий) — regression-тести дляtoViolation/filterJsFiles/lint()(whole-project/per-file/empty), покриттяmain.mjsпіднято з 9.7% до 83.9% (поріг 80%).plugins/lang-js/rules/js/eslint/docs/{index,main}.md— синхронізовано з новим експортом.npmіplugins/lang-js(patch/Fixed).Known gap
test/coverageвсе ще падає наnpm/bin/n-rules.js(0% покриття, 844 рядки) — це pre-existing debt (файл мав 0% покриття і до цих змін), не нова проблема. Файл — shebang-скрипт з top-level CLI-диспатчем безimport.meta.main-гейту, тож його не можна безпечноimport-нути в тестах без рефакторингу на окремийmain(). Залишив як відому нерозв'язану проблему — рефакторинг за межами цієї задачі.Test plan
node --checkна обох змінених файлахbunx vitest run rules/js/eslint/(plugins/lang-js) — 24/24 passedbunx vitest run bin/ scripts/(npm) — 838/838 passedjs/eslint/main.mjsперевірено (--coverage) — 83.87% рядківnpx @7n/rules lint --fullend-to-end на консюмер-репо з nested bun workspace (не прогнано в цій сесії — потребує окремого репро-середовища з описаної структуроюrun/<pkg>+node_modules/<pkg>symlink)🤖 Generated with Claude Code