Skip to content

feat(gates): block edits to unread or stale files and pin CI actions - #137

Open
ManSio wants to merge 2 commits into
mainfrom
feat/edit-gate-pins
Open

ManSio wants to merge 2 commits into
mainfrom
feat/edit-gate-pins

Conversation

@ManSio

@ManSio ManSio commented Nov 15, 2026

Copy link
Copy Markdown
Owner

Что и зачем

Две механики, которые в AGENTS.md существовали только как правило, стали отказами:

A1. «Прочитай перед правкой» — AGENTS.md §6 требует читать файл до правки, а плагин перехватывал только bash + git commit. Теперь .opencode/plugin/edit_gate.mjs (Gate 0 в tool.execute.before):

  • edit/write/patch по существующему файлу проходит, только если файл читали в этой сессии и sha1 не изменился (ловит и параллельную сессию, и генератор);
  • свой after-хук обновляет факт — вторая правка не блокируется собственной записью;
  • новый файл — разрешён (читать нечего); каталог/мусорный путь — fail-open;
  • переключатель MSCODEBASE_EDIT_GATE=block|warn|off (default block), состояние по sessionID, файлы >8 МБ — по size+mtime.

Логика вынесена в .mjs без зависимостей: тесты идут node --test и не требуют opencode и npm install.

A3. Пины CI — scripts/check_workflow_pins.py: каждое удалённое uses: обязано быть owner/action@<40 hex> с комментарием версии, каждый checkout — persist-credentials: false; пустой скан = exit 1 («не доказано»). Все 11 uses: закреплены (checkout fbc6f39 = v5.1.0, setup-python a26af69 = v5.6.0), 7 checkouts без токена в .git/config.

Что изменено

  • .opencode/plugin/edit_gate.mjs, edit_gate.test.mjs — новый гейт и 18 тестов;
  • .opencode/plugin/mscodebase_gate.ts — вызов Gate 0 перед git commit-гейтами;
  • scripts/check_workflow_pins.py, tests/test_workflow_pins.py — 10 тестов;
  • .github/workflows/ci.yml — SHA-пины, persist-credentials: false, шаг Edit-gate logic (node);
  • AGENTS.md — одна строка в §6 (160/160 строк, гейт check_agents_md.py зелёный);
  • AGENT_DIARY.md — запись.

Проверка

node --test .opencode/plugin/edit_gate.test.mjs   -> 18 passed
pytest tests/test_workflow_pins.py -q             -> 10 passed
python scripts/check_workflow_pins.py             -> 11 uses, 7 checkout(s), 0 problem(s)
python scripts/check_agents_md.py                 -> 160/160 lines, 0 problem(s)
pytest tests/ -q -n auto                          -> <см. ниже>

Мутации (каждая обязана красить тест):

edit_gate: read-проверка снята / stale-проверка снята / refresh в after убран /
           scope по сессии убран / off-замыкание убрано / хеш заменён на «существует»
pins:      SHA-проверка / persist-credentials / комментарий версии

Границы (не прячу)

  • Правки через bash (heredoc, sed -i, tee) гейт не видит — это записанный риск, а не «проверено».
  • Поведение в живом хосте не проверялось: плагин загружается при старте сессии (⏳ до перезапуска OpenCode); проверены логика и проводка.
  • persist-credentials: false не влияет на работу job'ов (ни один не пушит), но убирает токен из .git/config для последующих шагов.

@coderabbitai

coderabbitai Bot commented Nov 15, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0f7baf44-ad25-4910-a90b-ca903a256c32

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant