chore(claude-config): secret-read + psycopg2 hooks, tradein.md rule, tradein-mvp globs #1975

Merged
lekss361 merged 1 commit from chore/claude-config-hooks into main 2026-06-27 10:03:20 +00:00
Owner

Summary

P0+P1 из config-аудита (2026-06-27). Non-guard файлы (скрипты + rules) → self-merge.

P0 security hooks (scripts/claude-hooks/):

  • check-secret-read.py — PreToolUse(Bash) guard. Блокирует чтение/передачу секрет-файлов (.env*, .pgpass, ssh-ключи) через cat/type/Get-Content/base64/curl -F @file/< redirect. Закрывает дыру: blanket Bash(*) обходит Read(./.env*) deny → cat backend/.env сливал prod DB-пароли + FORGEJO/GLITCHTIP токены без prompt. Allow: .env.example/templates, ls/stat. Протестирован 12/12 (6 block / 6 allow).
  • check-sql-pitfalls.py — PostToolUse(Edit|Write|MultiEdit). Блокирует import psycopg2 в backend/** + tradein-mvp/backend/** .py (psycopg v3, recurring bug). Cast-trap :p::type намеренно НЕ чекаем — FP на десятках comment/test-docstring которые документируют анти-паттерн (уже покрыт тестами). Протестирован 7/7.
  • session-preflight.py — SessionStart. Печатает статус FORGEJO_ACCESS_TOKEN / OBSIDIAN_API_KEY / db-tunnel(:15432) — ловит session-setup фейлы (tunnel-down, missing token) до начала работы.

P1 .claude/rules/tradein.md (НОВОЕ, paths tradein-mvp/**): закрывает coverage-дыру — самый активный subtree (tradein-mvp/, 124 SQL-файла) не матчился ни одним path-rule. Содержит: 2 БД (postgres-tradein vs gendesign), :8000-туннель = gendesign не tradein (тест только docker exec tradein-backend), scheduler в tradein-scraper, strict SQL auto-apply + NN-коллизии (108_*×2), rapid-merge trap.

P1 globs: backend.md / sql.md / frontend.md paths: расширены на tradein-mvp/** — backend/sql/frontend конвенции теперь авто-грузятся в trade-in.

Wiring

Хуки активируются через .claude/settings.json hooks (PreToolUse/PostToolUse/SessionStart) — это gitignored-local, делается отдельно (вне PR).

Test plan

  • check-secret-read 12/12 · check-sql-pitfalls 7/7 · session-preflight exit 0
  • pre-commit passed
  • docs/scripts-only — деплой не триггерится
## Summary P0+P1 из config-аудита (2026-06-27). **Non-guard файлы** (скрипты + rules) → self-merge. **P0 security hooks** (`scripts/claude-hooks/`): - **`check-secret-read.py`** — PreToolUse(Bash) guard. Блокирует чтение/передачу секрет-файлов (`.env*`, `.pgpass`, ssh-ключи) через `cat`/`type`/`Get-Content`/`base64`/`curl -F @file`/`< redirect`. **Закрывает дыру**: blanket `Bash(*)` обходит `Read(./.env*)` deny → `cat backend/.env` сливал prod DB-пароли + FORGEJO/GLITCHTIP токены без prompt. Allow: `.env.example`/templates, `ls`/`stat`. **Протестирован 12/12** (6 block / 6 allow). - **`check-sql-pitfalls.py`** — PostToolUse(Edit|Write|MultiEdit). Блокирует `import psycopg2` в `backend/**` + `tradein-mvp/backend/**` `.py` (psycopg v3, recurring bug). Cast-trap `:p::type` намеренно НЕ чекаем — FP на десятках comment/test-docstring которые документируют анти-паттерн (уже покрыт тестами). **Протестирован 7/7**. - **`session-preflight.py`** — SessionStart. Печатает статус `FORGEJO_ACCESS_TOKEN` / `OBSIDIAN_API_KEY` / db-tunnel(:15432) — ловит session-setup фейлы (tunnel-down, missing token) до начала работы. **P1 `.claude/rules/tradein.md`** (НОВОЕ, paths `tradein-mvp/**`): закрывает coverage-дыру — самый активный subtree (`tradein-mvp/`, 124 SQL-файла) не матчился ни одним path-rule. Содержит: 2 БД (postgres-tradein vs gendesign), `:8000`-туннель = gendesign не tradein (тест только `docker exec tradein-backend`), scheduler в `tradein-scraper`, strict SQL auto-apply + NN-коллизии (`108_*`×2), rapid-merge trap. **P1 globs**: `backend.md` / `sql.md` / `frontend.md` `paths:` расширены на `tradein-mvp/**` — backend/sql/frontend конвенции теперь авто-грузятся в trade-in. ## Wiring Хуки активируются через `.claude/settings.json` `hooks` (PreToolUse/PostToolUse/SessionStart) — это gitignored-local, делается отдельно (вне PR). ## Test plan - [x] check-secret-read 12/12 · check-sql-pitfalls 7/7 · session-preflight exit 0 - [x] pre-commit passed - [ ] docs/scripts-only — деплой не триггерится
lekss361 added 1 commit 2026-06-27 10:03:06 +00:00
chore(claude-config): secret-read + psycopg2 hooks, tradein.md rule, tradein-mvp globs
All checks were successful
CI / frontend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
b73161a133
- scripts/claude-hooks/check-secret-read.py — PreToolUse(Bash) guard: блокирует чтение/передачу
  .env*/.pgpass/ssh-key (cat/Get-Content/curl @file/<redirect), закрывает Bash(*) обход Read(.env)
  deny. Allow: .env.example/templates, ls/stat. Tested 12/12.
- scripts/claude-hooks/check-sql-pitfalls.py — PostToolUse(Edit|Write|MultiEdit): блокирует
  import psycopg2 в backend + tradein-mvp/backend .py (psycopg v3). Cast-trap НЕ чекаем (FP на
  comment/test-mentions). Tested 7/7.
- scripts/claude-hooks/session-preflight.py — SessionStart: статус FORGEJO/OBSIDIAN token + db-tunnel.
- .claude/rules/tradein.md — НОВОЕ: tradein-mvp gotchas (2 БД, :8000=gendesign, scheduler в
  tradein-scraper, strict SQL auto-apply + NN-collisions, rapid-merge trap).
- backend.md/sql.md/frontend.md: paths globs расширены на tradein-mvp/**.

Wiring (settings.json) — local/gitignored, отдельно. Audit 2026-06-27 P0+P1.
lekss361 merged commit 845f699176 into main 2026-06-27 10:03:20 +00:00
lekss361 deleted branch chore/claude-config-hooks 2026-06-27 10:03:20 +00:00
Sign in to join this conversation.
No reviewers
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: lekss361/gendesign#1975
No description provided.