fix(review): address review findings (guardrails, prompts, tests, docs)

- permission-gate: block refs/tags/v* pushes, rm -r -f separated flags,
  git reset --hard, git clean (verified against actual bypasses)
- prompts: /bugfix /feature /review no longer hardcode go-standards —
  reference profile-gated <lang>-standards instead
- company-context: drop hardcoded Go stack, note TRACKER_URL priority,
  warn on context truncation instead of silently dropping rules
- repo-map/docs-map: graceful degradation when config values are TODO
- /kit-doctor: warn on unfilled config fields (repoMap/trackerUrl/docsUrl)
- audit: retry POSTs to endpoint (3 attempts, backoff), still best-effort
- install.sh: remove TODO course URL from cheat sheet
- tests: expand guardrails (43 node checks), add shell tests for create-mr.sh
  (scp/https origin parse, GITLAB_HOST override, protected branch refusal),
  cover company-context lib (normalize/fetch/truncation) and mcp-bridge
- commit package-lock.json for reproducible installs
- document npm test Node >= 22.6 requirement (type stripping)
This commit is contained in:
Aleksey Shakhmatov
2026-08-06 11:22:53 +03:00
parent 1df4ea1b72
commit c068dfae0c
21 changed files with 4970 additions and 131 deletions
+19 -7
View File
@@ -88,8 +88,9 @@ pi update --extensions
### Guardrails (встроенная защита)
- **protected-paths** — блокирует запись/редактирование секретов, ключей, `.git/`, прод-конфигов (по пути).
- **permission-gate** — переспрашивает перед опасными командами (`rm -rf`, force push,
push в `main`/`master`/`release-*`, тег `v*` (прод-деплой), прод-`kubectl`, `docker system prune`, `sudo`).
- **permission-gate** — переспрашивает перед опасными командами (`rm -rf`/`rm -r -f`, force push,
push в `main`/`master`/`release-*`, тег `v*` (в т.ч. через `refs/tags/` — прод-деплой),
`git reset --hard`, `git clean`, прод-`kubectl`, `docker system prune`, `sudo`).
- **secret-scanner** — блокирует запись контента, похожего на секрет (по содержимому).
- **commit-guard** — требует Conventional Commits и сканирует сообщение коммита на секреты.
- **llm-redaction** — вырезает секреты из payload перед отправкой в LLM.
@@ -112,7 +113,11 @@ pi-kit/
├── extensions/ # TS-расширения (guardrails + инъекция контекста)
│ ├── company-context.ts + company-context.md # контекст сессии + /kit-config
│ ├── protected-paths.ts
│ └── permission-gate.ts
│ ├── permission-gate.ts
│ ├── secret-scanner.ts commit-guard.ts llm-redaction.ts audit-log.ts
│ ├── mcp-bridge.ts # Jira/Confluence/GitLab MCP (по умолч. выкл.)
│ ├── kit-cli.ts # /kit-doctor, /kit-help
│ └── lib/ # общий код (secrets, audit, company-config)
├── skills/ # SKILL.md-скиллы (jira-workflow/repo-map/docs-map/go-standards)
├── prompts/ # шаблоны команд (/bugfix, /feature, /review, /rfc)
└── install.sh # bootstrap для новых сотрудников
@@ -129,15 +134,19 @@ pi-kit/
```json
{
"gitHost": "git.codelab.vc",
"trackerUrl": "TODO",
"docsUrl": "TODO",
"gitHost": "gitlab.tech.mvideo.ru",
"trackerUrl": "https://jira.mvideo.ru",
"docsUrl": "https://wiki.mvideo.ru",
"repoMap": "TODO: где какой код лежит",
"rules": ["не коммитить секреты", "не пушить в main", "MR обязателен"],
"remoteConfigUrl": null
}
```
> Значения выше — текущие действующие; в этом файле хранится **единственный** источник правды
> (адрес самого репозитория pi-kit — `git.codelab.vc` — к нему отношения не имеет, он живёт
> только в `install.sh`).
- Меняешь значение → правишь **только этот файл**. Скиллы и шаблоны на него ссылаются через
корпоративный контекст сессии, который инжектит `company-context.ts`.
- **`remoteConfigUrl`**: если указать URL, при старте сессии `company-context.ts` скачает свежий
@@ -200,7 +209,7 @@ pi-kit/
```bash
# из корня репозитория
pi install ./ # установить пакет из локальной папки
npm test # прогнать тесты guardrails
npm test # прогнать тесты guardrails и shell-скриптов
pi # запустить: расширения загрузятся, команды /bugfix и т.д. появятся
# опциональный строгий typecheck (нужны peer-типы Pi):
@@ -208,6 +217,9 @@ npm install
npm run typecheck
```
> ⚠️ `npm test` требует **Node.js ≥ 22.6** (type-stripping). Для сотрудников в `install.sh`
> достаточно Node ≥ 20 — это требование тест-харнеса мейнтейнеров, не установки.
Минимальный чек-лист MR: расширения загружаются без ошибок; `/kit-config` показывает значения;
запись в `.env` реально блокируется; изменение `config/company.json` отражается в `/kit-config`
без других правок.