refactor(config+docker+docs): remove gh, Forgejo-first env/permissions, ADRs #14

Merged
slaid098 merged 3 commits from refactor/config-docker/forgejo-first into main 2026-08-07 12:44:33 +03:00
Owner

Что сделано

Dockerfile

  • Удалена установка gh CLI (apt source cli.github.com/packages, keyring, пакет gh)
  • Удалён git config --system credential.helper '!gh auth git-credential'
  • cloudflared download оставлен на github.com (Cloudflare публикует releases только там) — помечено комментарием
  • curl, git, python3, node остаются в образе (нужны для tools/scripts)

.env.example

  • Удалён GITHUB_TOKEN
  • OPENCODE_MEMORY_REMOTE → https://git.slaid098.dev/slaid098/opencode-memory.git
  • FORGEJO_URL/FORGEJO_TOKEN — primary auth

opencode.json permissions

  • Удалены все 24 gh* permission rules (14 allow, 1 deny, 1 ask, 8 deny в safety block)
  • Добавлен safety net: curl * -X DELETE *FORGEJO_URL*: deny
  • git commit *: deny и force-push/tag-deny rules остаются

AGENTS.md

  • Добавлена секция ## Git Host после ## Pipeline — документирует Forgejo-first политику

check-permissions.py

  • Удалены gh* паттерны из DANGEROUS_PATTERNS (мёртвый код — gh CLI не установлен)
  • python* *pipeline-status.py / python* *spec-status.py паттерны остаются

pyproject.toml / README.md

  • URLs github.com/slaid098/... → git.slaid098.dev/slaid098/...
  • "GitHub issue" → "issue" (host-agnostic, ADR-094)

ADRs

  • Созданы 4 новых ADR:
    • 092-forgejo-dispatch.md — Forgejo dispatch в status oracles и _shared.ts
    • 093-forgejo-first.md — стратегия Forgejo-first migration
    • 094-host-agnostic-docs.md — host-agnostic документация в skills/agents
    • 095-curl-in-skills-where-no-tool.md — curl в skills для операций без tool'а
  • Помечены SUPERSEDED: ADR-005, ADR-022, ADR-023 (GitHub-специфика)

Тесты

  • test_dockerfile.py: +3 теста (gh не установлен, credential helper удалён, curl остался)
  • test_permissions.py: удалены gh* deny-ассерты, добавлены test_gh_rules_removed, test_curl_delete_forgejo_denied, env.example Forgejo-first тесты
  • test_check_permissions.py: gh pr checks* тесты заменены на git reset * (gh паттерны удалены)

Почему

GitHub аккаунт удалён — gh CLI мёртв, все operations идут через Forgejo REST API. PR #10 (tools) и PR #13 (skills/agents) вырезали GitHub fallback из кода и промптов. Этот PR завершает адаптацию: Dockerfile, env, permissions, docs, ADRs.

Watch out

  • cloudflared binary всё ещё скачивается с github.com — это не наш код, Cloudflare публикует releases только там
  • pre-commit-config.yaml hook repos (github.com/astral-sh/ruff-pre-commit, github.com/pre-commit/mirrors-mypy) — не трогаем, third-party
  • docker build не запущен (нет Docker daemon в окружении), но gh удалён из apt install — образ соберётся без него
  • create-pr tool не использовался (баг #9 — не передаёт head field), PR создан через raw curl

Pending

  • Smoke-test docker-compose restart после merge — opencode поднимается без gh, tools работают
  • README.md содержит устаревшую ссылку /support (нужно /contacts per PR#270) — вне scope этого issue
  • run-pipeline/SKILL.md:150 + bug-discovery/SKILL.md:10-12 docs-drift (PR#13 follow-up) — вне scope

Closes #7

## Что сделано ### Dockerfile - Удалена установка `gh` CLI (apt source `cli.github.com/packages`, keyring, пакет `gh`) - Удалён `git config --system credential.helper '!gh auth git-credential'` - `cloudflared` download оставлен на `github.com` (Cloudflare публикует releases только там) — помечено комментарием - `curl`, `git`, `python3`, `node` остаются в образе (нужны для tools/scripts) ### .env.example - Удалён `GITHUB_TOKEN` - `OPENCODE_MEMORY_REMOTE` → `https://git.slaid098.dev/slaid098/opencode-memory.git` - `FORGEJO_URL`/`FORGEJO_TOKEN` — primary auth ### opencode.json permissions - Удалены все 24 `gh*` permission rules (14 allow, 1 deny, 1 ask, 8 deny в safety block) - Добавлен safety net: `curl * -X DELETE *FORGEJO_URL*: deny` - `git commit *: deny` и force-push/tag-deny rules остаются ### AGENTS.md - Добавлена секция `## Git Host` после `## Pipeline` — документирует Forgejo-first политику ### check-permissions.py - Удалены `gh*` паттерны из `DANGEROUS_PATTERNS` (мёртвый код — `gh` CLI не установлен) - `python* *pipeline-status.py` / `python* *spec-status.py` паттерны остаются ### pyproject.toml / README.md - URLs `github.com/slaid098/...` → `git.slaid098.dev/slaid098/...` - "GitHub issue" → "issue" (host-agnostic, ADR-094) ### ADRs - Созданы 4 новых ADR: - `092-forgejo-dispatch.md` — Forgejo dispatch в status oracles и `_shared.ts` - `093-forgejo-first.md` — стратегия Forgejo-first migration - `094-host-agnostic-docs.md` — host-agnostic документация в skills/agents - `095-curl-in-skills-where-no-tool.md` — curl в skills для операций без tool'а - Помечены SUPERSEDED: ADR-005, ADR-022, ADR-023 (GitHub-специфика) ### Тесты - `test_dockerfile.py`: +3 теста (gh не установлен, credential helper удалён, curl остался) - `test_permissions.py`: удалены `gh*` deny-ассерты, добавлены `test_gh_rules_removed`, `test_curl_delete_forgejo_denied`, env.example Forgejo-first тесты - `test_check_permissions.py`: `gh pr checks*` тесты заменены на `git reset *` (gh паттерны удалены) ## Почему GitHub аккаунт удалён — `gh` CLI мёртв, все operations идут через Forgejo REST API. PR #10 (tools) и PR #13 (skills/agents) вырезали GitHub fallback из кода и промптов. Этот PR завершает адаптацию: Dockerfile, env, permissions, docs, ADRs. ## Watch out - `cloudflared` binary всё ещё скачивается с `github.com` — это не наш код, Cloudflare публикует releases только там - `pre-commit-config.yaml` hook repos (`github.com/astral-sh/ruff-pre-commit`, `github.com/pre-commit/mirrors-mypy`) — не трогаем, third-party - `docker build` не запущен (нет Docker daemon в окружении), но `gh` удалён из apt install — образ соберётся без него - `create-pr` tool не использовался (баг #9 — не передаёт `head` field), PR создан через raw curl ## Pending - Smoke-test `docker-compose restart` после merge — opencode поднимается без `gh`, tools работают - `README.md` содержит устаревшую ссылку `/support` (нужно `/contacts` per PR#270) — вне scope этого issue - `run-pipeline/SKILL.md:150` + `bug-discovery/SKILL.md:10-12` docs-drift (PR#13 follow-up) — вне scope Closes #7
docs(decisions): update URLs to Forgejo, add ADRs for forgejo-first hosting
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 4s
CI / bootstrap (pull_request) Successful in 7s
Permission Security Check / check (pull_request) Successful in 8s
CI / complexity (pull_request) Successful in 29s
CI / lint (pull_request) Successful in 28s
CI / typecheck (pull_request) Successful in 29s
CI / test (3.13) (pull_request) Successful in 1m32s
9fa9fed7f5
Author
Owner

Code Review Summary

Чистый, хорошо структурированный refactor: удаление GitHub-специфики (gh CLI, GITHUB_TOKEN, 24 gh* permission rules) и миграция на Forgejo-first подход. 4 новых ADR (092-095) документируют решения, 3 старых ADR помечены SUPERSEDED. 773 теста проходят, coverage 83.6%, ruff чист. Cross-file paired updates (reviewer.md, memory-syncer.md) в одном PR — окно сломанного main закрыто.

Positives

  • Dockerfile — gh CLI убран полностью (apt source, keyring, package, credential.helper), curl/git/python3/node остались. Cloudflare download помечен комментарием "not our code" + ADR-093:43-44 документирует это как upstream constraint.
  • opencode.json — 24 gh* rules удалены (0 осталось, проверено), curl * -X DELETE *FORGEJO_URL*: deny safety net добавлен, нет broad curl allow. JSON валиден (145 rules total).
  • .env.example — GITHUB_TOKEN/GH_TOKEN полностью отсутствуют, FORGEJO_URL/FORGEJO_TOKEN есть, OPENCODE_MEMORY_REMOTE → git.slaid098.dev.
  • AGENTS.md — секция ## Git Host добавлена после ## Pipeline, описывает Forgejo-first политику, host-agnostic язык для skills/agents.
  • ADRs 092-095 — структура корректна (Статус/Контекст/Решение/Альтернативы/Последствия), нумерация последовательна (091→092→093→094→095), 005/022/023 помечены SUPERSEDED со ссылкой на ADR-093. ADR-095 описывает scoped curl pattern с safety net.
  • Cross-file paired update — reviewer.md и memory-syncer.md: gh* rules удалены, добавлены scoped curl allow-rules (*/pulls/*, */issues/* read-only), инструкции заменены на curl к Forgejo API. Связь обновлена совместно в одном PR.
  • Тесты — 3 новых теста в test_dockerfile.py (gh CLI not installed, credential helper removed, curl still installed), test_permissions.py и test_check_permissions.py обновлены (gh* tests → git reset/destructive tests, Forgejo vars tests). 773 passed, 10 skipped, coverage 83.60%.
  • check-permissions.py — gh* DANGEROUS_PATTERNS удалены (dead code), скрипт работает: "OK: No dangerous permission rules found."
  • Host-agnostic docs — README.md, pyproject.toml URLs → git.slaid098.dev, нет битых ссылок на github.com/slaid098.

Suggestions (info, not blocking)

  • check-permissions.py:114 [pre-existing] mypy no-any-return на parse_global_bash_rules (config.get("permission", {}).get("bash", {}) возвращает Any). Подтверждено pre-existing — ошибка есть на main (строка 142 до удаления gh* patterns). Не введено этим PR, не блокирующее. Можно исправить отдельным PR: return dict(config.get("permission", {}).get("bash", {})) или type cast.
  • run-pipeline/SKILL.md:151 [info] Упоминает gh pr checks / gh pr view --json statusCheckRollup — но в контексте "Запрещено" (секция API Restrictions), корректно. Можно заменить на host-agnostic "raw checks-rollup API" для консистентности с ADR-094, но не критично.

Verdict: APPROVE

## Code Review Summary Чистый, хорошо структурированный refactor: удаление GitHub-специфики (gh CLI, GITHUB_TOKEN, 24 gh* permission rules) и миграция на Forgejo-first подход. 4 новых ADR (092-095) документируют решения, 3 старых ADR помечены SUPERSEDED. 773 теста проходят, coverage 83.6%, ruff чист. Cross-file paired updates (reviewer.md, memory-syncer.md) в одном PR — окно сломанного main закрыто. ### Positives - **Dockerfile** — gh CLI убран полностью (apt source, keyring, package, credential.helper), curl/git/python3/node остались. Cloudflare download помечен комментарием "not our code" + ADR-093:43-44 документирует это как upstream constraint. - **opencode.json** — 24 gh* rules удалены (0 осталось, проверено), `curl * -X DELETE *FORGEJO_URL*: deny` safety net добавлен, нет broad curl allow. JSON валиден (145 rules total). - **.env.example** — GITHUB_TOKEN/GH_TOKEN полностью отсутствуют, FORGEJO_URL/FORGEJO_TOKEN есть, OPENCODE_MEMORY_REMOTE → `git.slaid098.dev`. - **AGENTS.md** — секция `## Git Host` добавлена после `## Pipeline`, описывает Forgejo-first политику, host-agnostic язык для skills/agents. - **ADRs 092-095** — структура корректна (Статус/Контекст/Решение/Альтернативы/Последствия), нумерация последовательна (091→092→093→094→095), 005/022/023 помечены SUPERSEDED со ссылкой на ADR-093. ADR-095 описывает scoped curl pattern с safety net. - **Cross-file paired update** — reviewer.md и memory-syncer.md: gh* rules удалены, добавлены scoped curl allow-rules (`*/pulls/*`, `*/issues/*` read-only), инструкции заменены на curl к Forgejo API. Связь обновлена совместно в одном PR. - **Тесты** — 3 новых теста в test_dockerfile.py (gh CLI not installed, credential helper removed, curl still installed), test_permissions.py и test_check_permissions.py обновлены (gh* tests → git reset/destructive tests, Forgejo vars tests). 773 passed, 10 skipped, coverage 83.60%. - **check-permissions.py** — gh* DANGEROUS_PATTERNS удалены (dead code), скрипт работает: "OK: No dangerous permission rules found." - **Host-agnostic docs** — README.md, pyproject.toml URLs → `git.slaid098.dev`, нет битых ссылок на `github.com/slaid098`. ### Suggestions (info, not blocking) - **check-permissions.py:114** [pre-existing] mypy `no-any-return` на `parse_global_bash_rules` (`config.get("permission", {}).get("bash", {})` возвращает `Any`). Подтверждено pre-existing — ошибка есть на main (строка 142 до удаления gh* patterns). Не введено этим PR, не блокирующее. Можно исправить отдельным PR: `return dict(config.get("permission", {}).get("bash", {}))` или type cast. - **run-pipeline/SKILL.md:151** [info] Упоминает `gh pr checks` / `gh pr view --json statusCheckRollup` — но в контексте "Запрещено" (секция API Restrictions), корректно. Можно заменить на host-agnostic "raw checks-rollup API" для консистентности с ADR-094, но не критично. ### Verdict: APPROVE
slaid098 deleted branch refactor/config-docker/forgejo-first 2026-08-07 12:44:34 +03: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
slaid098/opencode-config!14
No description provided.