refactor(skills): host-agnostic prompts, replace raw gh with tools/curl #6

Closed
opened 2026-08-07 09:45:28 +03:00 by slaid098 · 0 comments
Owner

Контекст

PR #1 (refactor tools) вырезал GitHub-fallback из кода и расширил pipeline-status оракул. Но 9 skills и 2 agents всё ещё инструктируют агентов вызывать raw gh через bash — что в Forgejo-режиме (без gh binary) падает. 62 упоминания GitHub/gh в skills, 0 — Forgejo. Нужно переписать промпты на host-agnostic + Forgejo-first инструкции.

Принцип: новые tools НЕ создаём (см. PR #1 — решение пользователя). Для операций без существующего tool'а (release create, repo edit, repo create, label create, branch protection set) — используем прямой curl к Forgejo API в bash-блоке skill'а. Для pr view/run list/issue view — используем pipeline-status оракул (расширенный в PR #1).

Задача

  1. 9 skills — host-agnostic описания (frontmatter description + тело):

    • issue/SKILL.md L3: "Creates GitHub issues" → "Creates issues"
    • audit/SKILL.md L10, L111, L133, L144: "GitHub issue" → "issue"
    • bug-discovery/SKILL.md L10-11: "gh issue list" → pipeline-status оракул или curl; "GitHub issue" → "issue"
    • spec/SKILL.md L10, L29, L76, L303, L321: "GitHub owner" → "git-host owner"; "GitHub issues" → "issues"
    • configure-opencode/SKILL.md L118, L124: примеры gh pr merge*/gh pr checks* → host-agnostic examples
    • project-template/SKILL.md L3, L8, L11, L49, L80, L82, L96, L99, L124, L173-174, L184: "GitHub" → host-agnostic
    • release/SKILL.md L3, L73, L83: "GitHub Release" → "release"
    • repo-readme/SKILL.md L26, L29, L31-33, L35, L57, L197, L209, L232: "GitHub" → host-agnostic
    • run-pipeline/SKILL.md L30, L69, L75-76, L90-91, L93, L113, L146, L151: "GitHub"/"gh" → host-agnostic
  2. 6 критичных skills — заменить raw gh инструкции:

    issue/SKILL.md L155-157: gh label create <name> --color <hex> → curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/labels" -d '{"name":"<name>","color":"<hex>"}'

    run-pipeline/SKILL.md:

    • L70 (gh pr view M --json headRefName,body,title) → pipeline-status({pr_number: M}) оракул (возвращает headRefName, body, title)
    • L90 (gh run list --branch <headRefName>) → pipeline-status({pr_number: M}) оракул (расширенный в PR #1, возвращает CI runs из /actions/tasks)
    • L91 (gh run view <run-id> --log-failed) → ссылка на https://git.slaid098.dev/{repo}/actions/runs/{N} (веб-UI, деталей jobs через API нет)
    • L93 (gh pr checkout M) → git fetch origin pull/M/head:pr-M && git checkout pr-M (git-native, не gh)
    • L113-114 (gh pr view M --json body,title + gh issue view) → pipeline-status оракул
    • L146 (gh run list/view, gh api repos/.../actions/runs — разрешено) → pipeline-status оракул как единственный способ

    release/SKILL.md L76: gh release create vX.Y.Z --title ... --notes ... → curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/releases" -d '{"tag_name":"vX.Y.Z","name":"vX.Y.Z","body":"<содержание из changelog>","draft":false,"prerelease":false}'

    repo-readme/SKILL.md L29-32: gh repo edit --description/--add-topic → curl -sX PATCH -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}" -d '{"description":"<описание>","topics":["topic1","topic2"]}'

    spec/SKILL.md L76: GitHub owner: ___ → git-host owner: ___ (вопрос юзеру)

    project-template/SKILL.md L224-304 (Template GITHUB → Template FORGEJO):

    • L234 gh repo view <owner>/<project_name> → curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>" (200 = существует, 404 = нет)
    • L238 gh repo create <owner>/<project_name> --public --source=. --remote=origin --push → curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/user/repos" -d '{"name":"<project_name>","private":false,"auto_init":false}' + git remote add origin $FORGEJO_URL/<owner>/<project_name>.git + git push -u origin main
    • L240 gh auth setup-git → git config --local http.https://git.slaid098.dev/.extraheader "Authorization: token $FORGEJO_TOKEN" (или token-in-URL)
    • L243-250 gh api repos/.../PATCH -f allow_squash_merge=true ... → curl -sX PATCH -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>" -d '{"allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase":false,"default_delete_branch_after_merge":true}'
    • L253-292 gh api repos/.../rules/branches/main POST --input - <<EOF ... EOF → curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>/branch_protections" -d '{"branch_name":"main","enable_push":false,"enable_status_check":true,"required_approvals":0}' (Forgejo schema, НЕ GitHub Rules API)
  3. 2 agents — raw gh → tools/оракулы:

    memory-syncer.md:

    • L44, L119: gh pr view <N> --json body,title → pipeline-status({pr_number: N}) оракул (расширенный в PR #1, возвращает body, title)
    • Frontmatter L19 (gh pr merge*: deny), L31-33 (gh pr view*/gh issue view*/gh issue list*: allow) → удалить (raw gh больше не используется)

    reviewer.md:

    • L98: gh pr view <PR_NUMBER> --json headRefName,body,title → pipeline-status({pr_number: N}) оракул
    • L106: gh run list --branch <headRefName> --limit 3 → pipeline-status оракул
    • L397: gh pr view --json author → pipeline-status оракул (расширить, если ещё не возвращает author) или curl GET /repos/{repo}/pulls/{N} для author
    • Frontmatter L33-55 (16 gh* allow правил), L69 (gh pr merge*: deny) → удалить
    • L107, L372: упоминания gh pr checks/gh pr comment как запрещённых → обновить (raw gh вообще запрещён, не только specific commands)
  4. bug-discovery/SKILL.md L10: gh issue list → curl -s -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/issues?state=open&type=issues" или pipeline-status оракул

Контракты

  • pipeline-status({pr_number: N}) оракул — после PR #1 возвращает: CI status, PR body, title, headRefName, author, issue context. Используется вместо gh pr view/gh run list/gh issue view.
  • curl к Forgejo REST API: ${FORGEJO_URL}/api/v1/..., auth Authorization: token ${FORGEJO_TOKEN}
  • POST /repos/{repo}/labels — body {name, color} (color без #, hex)
  • POST /repos/{repo}/releases — body {tag_name, name, body, draft, prerelease}
  • PATCH /repos/{repo} — body {description, topics, allow_squash_merge, allow_merge_commit, allow_rebase, default_delete_branch_after_merge}
  • POST /user/repos — body {name, private, auto_init, default_branch}
  • POST /repos/{repo}/branch_protections — body {branch_name, enable_push, enable_status_check, required_approvals}
  • git fetch origin pull/N/head:pr-N && git checkout pr-N — git-native checkout PR (не gh pr checkout)

Инварианты

  • Принцип: tools где есть (create-issue, create-pr, merge-pr, post-review, pipeline-status, project-status, spec-status) → вызываем tools
  • Принцип: operations без tool'а (label create, release create, repo edit, repo create, branch protection set) → curl к Forgejo API в bash-блоке
  • Принцип: gh CLI НЕ используется НИГДЕ в skills/agents (вырезано в PR #1 из кода, здесь из промптов)
  • Описания host-agnostic ("issue", не "GitHub issue"/"Forgejo issue") — задел на будущие зеркала
  • Внешний контракт skills НЕ меняется — /run-pipeline, /release, /spec работают так же
  • Новые tools НЕ создаются (решение пользователя)

Граничные случаи

  • pipeline-status оракул недоступен (tool не вызван) → skills должны fallback на прямой curl к Forgejo API (но это редко, оракул всегда доступен)
  • curl в skill без FORGEJO_TOKEN env → понятная ошибка "FORGEJO_TOKEN required"
  • git fetch origin pull/N/head — remote origin должен указывать на Forgejo (после миграции PR #1 это так)
  • curl POST /branch_protections — если branch protection уже существует (409) → PATCH вместо POST, или skip
  • curl POST /user/repos — если repo уже существует (409) → skip create, переходить к settings
  • Cookiecutter project_name может содержать дефисы — URL-encoding не нужен (Forgejo принимает)
  • Reviewer: если pipeline-status не возвращает author → добавить curl GET /repos/{repo}/pulls/{N} для user.login

Влияние на связанные компоненты

  • PR #1 (tools) — зависимость: pipeline-status оракул должен быть расширен (returns body, title, author, CI runs) ДО этого PR
  • opencode.json agent секция — memory-syncer и reviewer tool-флаги НЕ меняются (tools те же)
  • opencode.json permission.bash — 24 gh* правила удаляются в PR #3 (этот PR не трогает opencode.json)
  • Agent frontmatter permission.bash секции (memory-syncer L19/L31-33, reviewer L33-55/L69) — удаляются в этом PR (это agent files, не opencode.json)
  • commands/*.md — 3 упоминания gh (audit, project-template, spec) — косметика, обновить в этом PR
  • bug-discovery/SKILL.md — связан с issue skill (оба упоминают gh issue list/create)
  • project-template/SKILL.md Template GITHUB → FORGEJO — самый объёмный кусок (L224-304, 80 строк)
  • ADR-005 (gh pr checks 403) — устаревает (GitHub-специфика), пометить superseded в PR #3
  • ADR-019 (post-review tool) — актуален, не меняется

Вне scope

  • opencode.json global permission.bash — PR #3
  • Dockerfile (убрать gh) — PR #3
  • .env.example (удалить GITHUB_TOKEN) — PR #3
  • AGENTS.md (секция про git-host) — PR #3
  • pyproject.toml/README.md URLs — PR #3
  • ADR creation — PR #3
  • Templates (cookiecutter files) — PR #4
  • Новые tools — НЕ создаём (решение пользователя)
  • .github/workflows/ — НЕ трогаем (рабочий CI)

Критерии приемки

  • rg "gh " .opencode/skills/ .opencode/agents/ .opencode/commands/ → 0 совпадений в инструкциях (описания-запреты "НЕ raw gh" можно оставить)
  • rg "github.com" .opencode/skills/ .opencode/agents/ .opencode/commands/ → 0 совпадений (кроме исторических примеров в ADR)
  • rg "GitHub" .opencode/skills/ .opencode/agents/ .opencode/commands/ → 0 совпадений в descriptions/instructions
  • issue/SKILL.md L155-157 — gh label create заменён на curl POST /repos/{repo}/labels
  • run-pipeline/SKILL.md L70/L90/L91/L93/L113/L146 — raw gh заменён на pipeline-status оракул или git-native
  • release/SKILL.md L76 — gh release create заменён на curl POST /repos/{repo}/releases
  • repo-readme/SKILL.md L29-32 — gh repo edit заменён на curl PATCH /repos/{repo}
  • project-template/SKILL.md L224-304 — Template GITHUB → Template FORGEJO (curl POST/PATCH, Forgejo branch protection schema)
  • memory-syncer.md L44/L119 — raw gh pr view заменён на pipeline-status оракул; frontmatter L19/L31-33 удалены
  • reviewer.md L98/L106/L397 — raw gh заменён на pipeline-status оракул; frontmatter L33-55/L69 удалены
  • bug-discovery/SKILL.md L10 — gh issue list заменён на curl или pipeline-status
  • Smoke-test: /run-pipeline на тестовом PR работает без raw gh (pipeline-status оракул используется)
## Контекст PR #1 (refactor tools) вырезал GitHub-fallback из кода и расширил `pipeline-status` оракул. Но 9 skills и 2 agents всё ещё инструктируют агентов вызывать raw `gh` через bash — что в Forgejo-режиме (без `gh` binary) падает. 62 упоминания GitHub/gh в skills, 0 — Forgejo. Нужно переписать промпты на host-agnostic + Forgejo-first инструкции. Принцип: новые tools НЕ создаём (см. PR #1 — решение пользователя). Для операций без существующего tool'а (`release create`, `repo edit`, `repo create`, `label create`, `branch protection set`) — используем прямой `curl` к Forgejo API в bash-блоке skill'а. Для `pr view`/`run list`/`issue view` — используем `pipeline-status` оракул (расширенный в PR #1). ## Задача 1. **9 skills — host-agnostic описания** (frontmatter description + тело): - `issue/SKILL.md` L3: "Creates GitHub issues" → "Creates issues" - `audit/SKILL.md` L10, L111, L133, L144: "GitHub issue" → "issue" - `bug-discovery/SKILL.md` L10-11: "gh issue list" → `pipeline-status` оракул или `curl`; "GitHub issue" → "issue" - `spec/SKILL.md` L10, L29, L76, L303, L321: "GitHub owner" → "git-host owner"; "GitHub issues" → "issues" - `configure-opencode/SKILL.md` L118, L124: примеры `gh pr merge*`/`gh pr checks*` → host-agnostic examples - `project-template/SKILL.md` L3, L8, L11, L49, L80, L82, L96, L99, L124, L173-174, L184: "GitHub" → host-agnostic - `release/SKILL.md` L3, L73, L83: "GitHub Release" → "release" - `repo-readme/SKILL.md` L26, L29, L31-33, L35, L57, L197, L209, L232: "GitHub" → host-agnostic - `run-pipeline/SKILL.md` L30, L69, L75-76, L90-91, L93, L113, L146, L151: "GitHub"/"gh" → host-agnostic 2. **6 критичных skills — заменить raw `gh` инструкции:** **`issue/SKILL.md` L155-157**: `gh label create <name> --color <hex>` → `curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/labels" -d '{"name":"<name>","color":"<hex>"}'` **`run-pipeline/SKILL.md`**: - L70 (`gh pr view M --json headRefName,body,title`) → `pipeline-status({pr_number: M})` оракул (возвращает headRefName, body, title) - L90 (`gh run list --branch <headRefName>`) → `pipeline-status({pr_number: M})` оракул (расширенный в PR #1, возвращает CI runs из `/actions/tasks`) - L91 (`gh run view <run-id> --log-failed`) → ссылка на `https://git.slaid098.dev/{repo}/actions/runs/{N}` (веб-UI, деталей jobs через API нет) - L93 (`gh pr checkout M`) → `git fetch origin pull/M/head:pr-M && git checkout pr-M` (git-native, не `gh`) - L113-114 (`gh pr view M --json body,title` + `gh issue view`) → `pipeline-status` оракул - L146 (`gh run list/view`, `gh api repos/.../actions/runs` — разрешено) → `pipeline-status` оракул как единственный способ **`release/SKILL.md` L76**: `gh release create vX.Y.Z --title ... --notes ...` → `curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/releases" -d '{"tag_name":"vX.Y.Z","name":"vX.Y.Z","body":"<содержание из changelog>","draft":false,"prerelease":false}'` **`repo-readme/SKILL.md` L29-32**: `gh repo edit --description`/`--add-topic` → `curl -sX PATCH -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}" -d '{"description":"<описание>","topics":["topic1","topic2"]}'` **`spec/SKILL.md` L76**: `GitHub owner: ___` → `git-host owner: ___` (вопрос юзеру) **`project-template/SKILL.md` L224-304** (Template GITHUB → Template FORGEJO): - L234 `gh repo view <owner>/<project_name>` → `curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>"` (200 = существует, 404 = нет) - L238 `gh repo create <owner>/<project_name> --public --source=. --remote=origin --push` → `curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/user/repos" -d '{"name":"<project_name>","private":false,"auto_init":false}'` + `git remote add origin $FORGEJO_URL/<owner>/<project_name>.git` + `git push -u origin main` - L240 `gh auth setup-git` → `git config --local http.https://git.slaid098.dev/.extraheader "Authorization: token $FORGEJO_TOKEN"` (или token-in-URL) - L243-250 `gh api repos/.../PATCH -f allow_squash_merge=true ...` → `curl -sX PATCH -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>" -d '{"allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase":false,"default_delete_branch_after_merge":true}'` - L253-292 `gh api repos/.../rules/branches/main POST --input - <<EOF ... EOF` → `curl -sX POST -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" "$FORGEJO_URL/api/v1/repos/<owner>/<project_name>/branch_protections" -d '{"branch_name":"main","enable_push":false,"enable_status_check":true,"required_approvals":0}'` (Forgejo schema, НЕ GitHub Rules API) 3. **2 agents — raw `gh` → tools/оракулы:** **`memory-syncer.md`**: - L44, L119: `gh pr view <N> --json body,title` → `pipeline-status({pr_number: N})` оракул (расширенный в PR #1, возвращает body, title) - Frontmatter L19 (`gh pr merge*: deny`), L31-33 (`gh pr view*`/`gh issue view*`/`gh issue list*: allow`) → удалить (raw `gh` больше не используется) **`reviewer.md`**: - L98: `gh pr view <PR_NUMBER> --json headRefName,body,title` → `pipeline-status({pr_number: N})` оракул - L106: `gh run list --branch <headRefName> --limit 3` → `pipeline-status` оракул - L397: `gh pr view --json author` → `pipeline-status` оракул (расширить, если ещё не возвращает author) или `curl GET /repos/{repo}/pulls/{N}` для author - Frontmatter L33-55 (16 `gh*` allow правил), L69 (`gh pr merge*: deny`) → удалить - L107, L372: упоминания `gh pr checks`/`gh pr comment` как запрещённых → обновить (raw `gh` вообще запрещён, не только specific commands) 4. **`bug-discovery/SKILL.md` L10**: `gh issue list` → `curl -s -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_URL/api/v1/repos/{owner}/{repo}/issues?state=open&type=issues"` или `pipeline-status` оракул ## Контракты - `pipeline-status({pr_number: N})` оракул — после PR #1 возвращает: CI status, PR body, title, headRefName, author, issue context. Используется вместо `gh pr view`/`gh run list`/`gh issue view`. - `curl` к Forgejo REST API: `${FORGEJO_URL}/api/v1/...`, auth `Authorization: token ${FORGEJO_TOKEN}` - `POST /repos/{repo}/labels` — body `{name, color}` (color без `#`, hex) - `POST /repos/{repo}/releases` — body `{tag_name, name, body, draft, prerelease}` - `PATCH /repos/{repo}` — body `{description, topics, allow_squash_merge, allow_merge_commit, allow_rebase, default_delete_branch_after_merge}` - `POST /user/repos` — body `{name, private, auto_init, default_branch}` - `POST /repos/{repo}/branch_protections` — body `{branch_name, enable_push, enable_status_check, required_approvals}` - `git fetch origin pull/N/head:pr-N && git checkout pr-N` — git-native checkout PR (не `gh pr checkout`) ## Инварианты - Принцип: tools где есть (create-issue, create-pr, merge-pr, post-review, pipeline-status, project-status, spec-status) → вызываем tools - Принцип: operations без tool'а (label create, release create, repo edit, repo create, branch protection set) → `curl` к Forgejo API в bash-блоке - Принцип: `gh` CLI НЕ используется НИГДЕ в skills/agents (вырезано в PR #1 из кода, здесь из промптов) - Описания host-agnostic ("issue", не "GitHub issue"/"Forgejo issue") — задел на будущие зеркала - Внешний контракт skills НЕ меняется — `/run-pipeline`, `/release`, `/spec` работают так же - Новые tools НЕ создаются (решение пользователя) ## Граничные случаи - `pipeline-status` оракул недоступен (tool не вызван) → skills должны fallback на прямой `curl` к Forgejo API (но это редко, оракул всегда доступен) - `curl` в skill без `FORGEJO_TOKEN` env → понятная ошибка "FORGEJO_TOKEN required" - `git fetch origin pull/N/head` — remote `origin` должен указывать на Forgejo (после миграции PR #1 это так) - `curl POST /branch_protections` — если branch protection уже существует (409) → PATCH вместо POST, или skip - `curl POST /user/repos` — если repo уже существует (409) → skip create, переходить к settings - Cookiecutter `project_name` может содержать дефисы — URL-encoding не нужен (Forgejo принимает) - Reviewer: если `pipeline-status` не возвращает `author` → добавить `curl GET /repos/{repo}/pulls/{N}` для `user.login` ## Влияние на связанные компоненты - PR #1 (tools) — зависимость: `pipeline-status` оракул должен быть расширен (returns body, title, author, CI runs) ДО этого PR - `opencode.json` `agent` секция — memory-syncer и reviewer tool-флаги НЕ меняются (tools те же) - `opencode.json` `permission.bash` — 24 `gh*` правила удаляются в PR #3 (этот PR не трогает opencode.json) - Agent frontmatter `permission.bash` секции (memory-syncer L19/L31-33, reviewer L33-55/L69) — удаляются в этом PR (это agent files, не opencode.json) - `commands/*.md` — 3 упоминания `gh` (audit, project-template, spec) — косметика, обновить в этом PR - `bug-discovery/SKILL.md` — связан с issue skill (оба упоминают `gh issue list/create`) - `project-template/SKILL.md` Template GITHUB → FORGEJO — самый объёмный кусок (L224-304, 80 строк) - ADR-005 (`gh pr checks` 403) — устаревает (GitHub-специфика), пометить superseded в PR #3 - ADR-019 (post-review tool) — актуален, не меняется ## Вне scope - `opencode.json` global `permission.bash` — PR #3 - `Dockerfile` (убрать `gh`) — PR #3 - `.env.example` (удалить `GITHUB_TOKEN`) — PR #3 - `AGENTS.md` (секция про git-host) — PR #3 - `pyproject.toml`/`README.md` URLs — PR #3 - ADR creation — PR #3 - Templates (cookiecutter files) — PR #4 - Новые tools — НЕ создаём (решение пользователя) - `.github/workflows/` — НЕ трогаем (рабочий CI) ## Критерии приемки - [ ] `rg "gh " .opencode/skills/ .opencode/agents/ .opencode/commands/` → 0 совпадений в инструкциях (описания-запреты "НЕ raw gh" можно оставить) - [ ] `rg "github.com" .opencode/skills/ .opencode/agents/ .opencode/commands/` → 0 совпадений (кроме исторических примеров в ADR) - [ ] `rg "GitHub" .opencode/skills/ .opencode/agents/ .opencode/commands/` → 0 совпадений в descriptions/instructions - [ ] `issue/SKILL.md` L155-157 — `gh label create` заменён на `curl POST /repos/{repo}/labels` - [ ] `run-pipeline/SKILL.md` L70/L90/L91/L93/L113/L146 — raw `gh` заменён на `pipeline-status` оракул или git-native - [ ] `release/SKILL.md` L76 — `gh release create` заменён на `curl POST /repos/{repo}/releases` - [ ] `repo-readme/SKILL.md` L29-32 — `gh repo edit` заменён на `curl PATCH /repos/{repo}` - [ ] `project-template/SKILL.md` L224-304 — Template GITHUB → Template FORGEJO (curl POST/PATCH, Forgejo branch protection schema) - [ ] `memory-syncer.md` L44/L119 — raw `gh pr view` заменён на `pipeline-status` оракул; frontmatter L19/L31-33 удалены - [ ] `reviewer.md` L98/L106/L397 — raw `gh` заменён на `pipeline-status` оракул; frontmatter L33-55/L69 удалены - [ ] `bug-discovery/SKILL.md` L10 — `gh issue list` заменён на `curl` или `pipeline-status` - [ ] Smoke-test: `/run-pipeline` на тестовом PR работает без raw `gh` (pipeline-status оракул используется)
Sign in to join this conversation.
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#6
No description provided.