fix(skills): add --max-time to all forgejo curl commands #43
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Контекст
PR#41 (issue #40) пофиксил hang в
_shared.ts:callForgejo. Но 20 curl-вызовов к Forgejo API в skills/agents — все без--max-time/--connect-timeout(curl default = infinite). Агенты выполняют эти curl в bash, полностью bypass'я_shared.ts. Тот же класс 5-мин hang'а.Проблемные call sites (неполный список — полный в аудите):
reviewer.md:86,387—curl -s .../pulls/<N>(PR metadata)memory-syncer.md:42,121—curl -s .../pulls/<N>(PR body)bug-discovery/SKILL.md:11-12—curl .../issues?state=open&type=issues(duplicate check, листает ВСЕ issues без пагинации)run-pipeline/SKILL.md:71,117-118—curl .../pulls/<M>(Template C/E)issue/SKILL.md:171—curl -sX POST .../labels(label autocreate)project-template/SKILL.md:240,245,254,260— 4 curl (repo-exists, repo create, settings, branch protection)repo-readme/SKILL.md:31,32—curl -sX PATCH .../repos/...+curl -sX PUT .../topicsrelease/SKILL.md:76—curl -sX POST .../releasesЗадача
curlкоманд к$FORGEJO_URLилиgit.slaid098.devили/api/v1/в.opencode/**/*.md— добавить--max-time 30 --connect-timeout 10послеcurl -s.bug-discovery/SKILL.md:11-12— ДОПОЛНИТЕЛЬНО добавить--limit 50(или&limit=50) к duplicate-check curl (пагинация вместо листания всех open issues).opencode.json— если curl allow-rules используют regex/pattern, добавить--max-timeНЕ должно сломать match (curl флаги не часть permission pattern).tests/test_permissions.pyили类似 — проверить что curl с--max-timeпроходит permission check.Контракты
curl --max-time 30 --connect-timeout 10— 30с общий таймаут, 10с на connect. Если Forgejo не ответил за 30с — curl exits с кодом 28 (timeout), агент видит ошибку.opencode.json— pattern matching на команду, флаги--max-time/--connect-timeoutне должны влиять на match (они послеcurl -s).bug-discoveryduplicate-check:&limit=50добавляется к URL query string. Если issues >50 — агент должен понимать что это первая страница (можно добавить&page=1).Инварианты
--max-time 30— достаточно для нормальных Forgejo-ответов (issue create <1с, issue list <5с).--connect-timeout 10— если TCP connect не установился за 10с (Forgejo down), curl fails fast.Граничные случаи
curl -sX POST .../releases(release create) — может быть медленным (загрузка assets). 30с может быть tight. Рассмотреть--max-time 60для POST с upload. Но release create без assets — 30с достаточно.curl .../issues?state=open&type=issues(bug-discovery) — с&limit=50response меньше, но если репо >50 issues, duplicate-check неполный. Документировать что это first-page check (агент может пагинировать если нужно).curl * -X DELETE *FORGEJO_URL*(deny) —--max-timeне влияет на match (pattern наcurl ... -X DELETE ...).Влияние на связанные компоненты
bug-discoveryduplicate-check — теперь пагинированный (50 issues за раз).Вне scope
urlopentimeout — issue Волны 1.callForgejoиз_shared.ts— слишком инвазивно для skills (skills = markdown инструкции, не код).Критерии приемки
.opencode/**/*.mdимеют--max-time 30 --connect-timeout 10.bug-discovery/SKILL.md:11-12duplicate-check имеет&limit=50(или--limit 50).opencode.jsonне сломаны (curl с флагами проходит allow).--max-timeне осталось.