feat(aosguard): give forgejo-admin labels, repo settings, and branch protection #1069
No reviewers
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1069
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/ym96-forgejo-admin"
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?
Kai: the narrow scoping in
forgejo-admin.kdlwas an agent's decision, not a policy. Cosmetics, labels, repo settings and branch protection all belong on the attended admin surface.What was there, and why the narrowing was redundant
The wrapper held two leaves: a
repo editrestricted to--description, and topic replacement. Forgejo already refuses every one of these operations tocoilyco-ops- it is an org member holding push, not an owner holding repo-admin. So the credential was a sufficient gate and the per-field narrowing was a second gate stacked on it.It cost more than it bought. Repo merge policy and branch protection get converged often enough that the fallback was hand-running a script in an attended shell or editing the web UI.
Added
repo edit- the wholeEditRepoOption, 31 flags. That is also exactly the field setinfrastructure/scripts/forgejo-repo-settings.pyconverges: squash on, merge-commit and rebase off, fast-forward-only, delete-branch-after-merge, ignore-whitespace.org-labelget/list/create/edit/delete - a taxonomy change is now one verb.branch-protectionlist/get/create/edit/delete.repo getso a converge can diff before it writes.Branch protection needed its spec vendored
Neither committed swagger carried the branch-protection paths, and
specgen lockprunes the vendored snapshot rather than fetching upstream - it fails closed withoperationId not found in spec. So the two paths came from the live Forgejo swagger along withBranchProtection,CreateBranchProtectionOption,EditBranchProtectionOptionand the two shared response objects, written back in the vendored file's exact format (CRLF,indent=2,ensure_ascii=False, trailing newline, gzipmtime=0) and re-locked. 58 ops to 63.Ordinary wrapper now points here
org-labelcreate/edit/delete becomeneverleaves naming the admin verb. They previously answered a bare403 Must be an organization owner, which is true and tells the caller nothing. Verified the message renders like the existingfork repodenial. Reads stay on both wrappers.Two judgement calls, stated rather than buried
privateandarchivedride along onrepo editrather than being blocked. An operator holding an attended admin token can flip either in the web UI in fewer steps, so blocking them here buys nothing. The ordinary wrapper still denies archive. Say the word if you want them carved out.org-label deleteis marked irreversible in its describe and points atedit org-labelas the rename path, because an edit keeps the label id and every issue keeps its association. That is the distinction that made your 2026-08-15 rename non-destructive.Rationale moved to
docs/aosguard-forgejo-admin.md- the inline version tripped the 2-line comment cap and then the 80-line doc cap onaosguard.md.Verified
All 13 verbs materialize through
ward exec aosguard-run -- ops forgejo-admin describe.pre-commitclean. One pre-existing collection error intests/test_check_yaml_strict.pyreproduces on a clean tree and is unrelated.Follow-on from #1068.
🤖 Generated with Claude Code