feat: добавить pygrep-hooks no-agent-rules-in-code + todo-needs-issue (v0.2.0) #1

Closed
opened 2026-05-19 15:35:15 +07:00 by claude-secretary · 1 comment

Scope

Перенести в shared-репу 2 inline-pygrep правила, которые сейчас живут локально в .pre-commit-config.yaml каждой монорепо volody (baton). Чтобы все консьюмеры (mcp, baton, будущие) подключали один блок repo: вместо дублирующихся inline-регексов.

Hooks

no-agent-rules-in-code

Запрет ссылок на агентские правила из production-кода.

- id: no-agent-rules-in-code
  name: запрет ссылок AGENTS.md/CLAUDE.md/GEMINI.md в коде
  description: >-
    AGENTS.md/CLAUDE.md/GEMINI.md — внутренние файлы для AI-агентов.
    Production-код должен быть самодостаточным (комментарий «что и
    почему» прямо рядом), а не ссылаться «см. AGENTS.md». Документация
    и сам AGENTS — exclude задаёт consumer.
  language: pygrep
  entry: '(AGENTS\.md|CLAUDE\.md|GEMINI\.md)'
  # files: consumer ВСЕГДА задаёт явно

todo-needs-issue

TODO обязан ссылаться на open issue (формат TODO(#N) или TODO(...,#N,...)).

- id: todo-needs-issue
  name: TODO обязан содержать ссылку на issue (TODO(#N))
  description: >-
    Маркер TODO без ссылки на issue зависает без owner'а и срока.
    Ссылка #N делает каждое отложенное решение трекабельным.
    Negative lookahead ловит TODO, за которым НЕ идёт (...#число...).
  language: pygrep
  entry: 'TODO\b(?!\s*\([^)]*#\d+[^)]*\))'
  # files: consumer задаёт; exclude (docs, README, сам конфиг) — тоже consumer

Acceptance criteria

  • 2 hook добавлены в .pre-commit-hooks.yaml корневой репы.
  • fixtures/ расширены 4 кейсами (по 2 на hook): good + bad для каждого. Каждый fixture-файл — самодостаточный (полное content reflects intent).
  • fixtures/run_smoke.sh расширен 4 кейсами через grep -P или python3 -c "import re" — проверка regex'а напрямую (без установки pre-commit в CI).
  • CI matrix (Forgejo Actions) — зелёный.
  • Tag v0.2.0 (minor bump — новые hooks, без breaking).
  • README обновлён — описание двух новых hooks + пример consumer-конфига.

Why

  1. Один источник истины — сейчас 2 inline-копии в baton, потом будут такие же в mcp. После v0.2.0 — оба подключают через rev: v0.2.0.
  2. Backwards-compat — pygrep hooks не требуют скриптов, чисто language: pygrep + entry: <regex>. Никаких runtime-deps.

Linked

  • shared-repo v0.1.0: senokosov/pre-commit-hooks (релиз 2026-05-19)
  • mcp consumer: senokosov/mcp#7 (Этап 2, pre-commit-config с подключением shared)
  • baton consumer (миграция): senokosov/baton#295
## Scope Перенести в shared-репу 2 inline-pygrep правила, которые сейчас живут локально в `.pre-commit-config.yaml` каждой монорепо volody (baton). Чтобы все консьюмеры (mcp, baton, будущие) подключали один блок `repo:` вместо дублирующихся inline-регексов. ## Hooks ### `no-agent-rules-in-code` Запрет ссылок на агентские правила из production-кода. ```yaml - id: no-agent-rules-in-code name: запрет ссылок AGENTS.md/CLAUDE.md/GEMINI.md в коде description: >- AGENTS.md/CLAUDE.md/GEMINI.md — внутренние файлы для AI-агентов. Production-код должен быть самодостаточным (комментарий «что и почему» прямо рядом), а не ссылаться «см. AGENTS.md». Документация и сам AGENTS — exclude задаёт consumer. language: pygrep entry: '(AGENTS\.md|CLAUDE\.md|GEMINI\.md)' # files: consumer ВСЕГДА задаёт явно ``` ### `todo-needs-issue` `TODO` обязан ссылаться на open issue (формат `TODO(#N)` или `TODO(...,#N,...)`). ```yaml - id: todo-needs-issue name: TODO обязан содержать ссылку на issue (TODO(#N)) description: >- Маркер TODO без ссылки на issue зависает без owner'а и срока. Ссылка #N делает каждое отложенное решение трекабельным. Negative lookahead ловит TODO, за которым НЕ идёт (...#число...). language: pygrep entry: 'TODO\b(?!\s*\([^)]*#\d+[^)]*\))' # files: consumer задаёт; exclude (docs, README, сам конфиг) — тоже consumer ``` ## Acceptance criteria - [ ] 2 hook добавлены в `.pre-commit-hooks.yaml` корневой репы. - [ ] `fixtures/` расширены 4 кейсами (по 2 на hook): good + bad для каждого. Каждый fixture-файл — самодостаточный (полное content reflects intent). - [ ] `fixtures/run_smoke.sh` расширен 4 кейсами через `grep -P` или `python3 -c "import re"` — проверка regex'а напрямую (без установки pre-commit в CI). - [ ] CI matrix (Forgejo Actions) — зелёный. - [ ] Tag `v0.2.0` (minor bump — новые hooks, без breaking). - [ ] README обновлён — описание двух новых hooks + пример consumer-конфига. ## Why 1. **Один источник истины** — сейчас 2 inline-копии в baton, потом будут такие же в mcp. После v0.2.0 — оба подключают через `rev: v0.2.0`. 2. **Backwards-compat** — pygrep hooks **не требуют скриптов**, чисто `language: pygrep + entry: <regex>`. Никаких runtime-deps. ## Linked - shared-repo v0.1.0: `senokosov/pre-commit-hooks` (релиз 2026-05-19) - mcp consumer: `senokosov/mcp#7` (Этап 2, pre-commit-config с подключением shared) - baton consumer (миграция): `senokosov/baton#295`
volody reopened this issue 2026-05-19 15:52:32 +07:00
Author
Owner

Закрываю: оба хука давно в main и выпущены — no-agent-rules-in-code и todo-needs-issue есть в .pre-commit-hooks.yaml, описаны в README и включены в examples/.pre-commit-config.example.yaml; фикстуры fixtures/agent_rules/ и fixtures/todo/ покрыты кейсами в fixtures/run_smoke.sh.

Формат todo-needs-issue с тех пор ужесточён (с v0.11.0 принимается только голый номер: TODO(#N) / TODO(#N, #M), префикс ns/proj#N больше не легален) — это уже за рамками этой задачи.

Закрываю: оба хука давно в `main` и выпущены — `no-agent-rules-in-code` и `todo-needs-issue` есть в `.pre-commit-hooks.yaml`, описаны в README и включены в `examples/.pre-commit-config.example.yaml`; фикстуры `fixtures/agent_rules/` и `fixtures/todo/` покрыты кейсами в `fixtures/run_smoke.sh`. Формат `todo-needs-issue` с тех пор ужесточён (с `v0.11.0` принимается только голый номер: `TODO(#N)` / `TODO(#N, #M)`, префикс `ns/proj#N` больше не легален) — это уже за рамками этой задачи.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
senokosov/pre-commit-hooks#1
No description provided.