feat(aosguard): aosguard operates the estate, it does not create principals #1083
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1083
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/ym96-no-user-create"
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's answer to the open question on #1082: aosguard should not be creating users. Those scripts can stay on
aws ssm.Recorded as denials, not as absence
Absence is not a boundary. The next agent wanting
adminCreateUserwould have added it and been right to by local reasoning - every other Forgejo admin operation is on this wrapper, so user creation looks like an oversight rather than a decision. Aneverleaf carries the reason instead.Verified they fire:
The callable surface is unchanged at 28. A
neverleaf adds no verb.The line, stated once
aosguard operates the estate and does not create principals in it. Everything it does carry acts on something that already exists - a repo, a label, a secret, a package. Minting a user is a different class, because a guard that can create a principal can create one with any rights, which makes every other restriction here decorative.
What stays on the direct read
provision-coilyco-ops-bot.shandgrant-coilyco-ops-org-repo-create.shkeep reading/forgejo/admin-tokenfrom SSM as they do since infrastructure#847. They run approximately once, so the standing capability a verb would create costs more than the direct read does.Those two remain the only scripts in the fleet that hold the PAT, which is a small enough set to state in a doc and check against later.
Note on the spec
The three
/admin/users*paths are vendored so the denials resolve. They are reachable in the spec and callable through no verb.🤖 Generated with Claude Code