Skip to content

post-tool-use-fix: LLM-фіксери псують чужі конфіги і роблять семантичні правки (4 баги, репро в nitra/task) #7

Description

@vitaliytv

Контекст

PostToolUse-hook (npx --no @nitra/cursor post-tool-use-fix) у репо nitra/task після кожного Edit/Write маршрутизує змінений файл у npx @nitra/cursor fix <rules>. LLM-фіксери правил (локальна omlx-модель) при цьому переписують конфіги репо шаблонами, що не відповідають типу воркспейсу, і роблять семантичні правки коду. Виявлено 2026-07-05 у сесії роботи над nitra/task (v5.3.1).

Баги

  1. js-lint фіксер: хибна детекція типу воркспейсу. У Tauri/Vue-репо eslint.config.js перезаписано шаблоном npm-воркспейсу: getConfig({ node: ['npm'] }) замість getConfig({ vue: ['app'] }); ignores (app/src-tauri/**, .claude/worktrees/**, docs/**) втрачено. Наслідок: усі .vue падають з Parsing error: Unexpected token <.

  2. text/cspell фіксер: знищення локального словника. .cspell.json перезаписано мінімізованим скаффолдом: words: [] (втрачено ~30 проектних слів), ignorePaths без **/target/** і **/src-tauri/gen/**, додано ru-ru у language. Наслідок: lint-text — 50k+ помилок у 2168 файлах. Аналогічно обрізається .v8rignore (з ~10 рядків до 3).

  3. ga фіксер: відкат SHA-пінів. .github/workflows/*.yml переписуються з запінених SHA (actions/checkout@df4cb1c0… # v6.0.3) назад на floating-теги (@v6) — прямий конфлікт із zizmor-політикою пінів, яку той самий lint-ga і вимагав.

  4. Семантичні правки слабкою моделлю. app/src/App.vue: фіксер замінив getVersion() з @tauri-apps/api/app на захардкоджений computed(() => '0.3.0') з коментарем «For this fix, we simulate it being available» — зламано відображення версії назавжди + unused import (сам же створює lint-помилку). Пропозиція: фіксерам заборонити семантичні зміни — лише механічні/форматні; семантика тільки через явний /n-fix із сильною моделлю.

Репро

Репо nitra/task @ 88d3d28, hook з .claude/settings.json. Редагування будь-якого .vue → баги 1–2; редагування .github/workflows/*.yml → баг 3. Диффи пошкоджень видно в історії робочого дерева між комітами 5e58ff8…88d3d28.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions