Session: pool bring-up — ten pinned principals and their grants, ratified before activation #30
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Meta/Campaign
Meta/Epic
Meta/Session
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Curated
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Scope/Campaign
Status/Abandoned
Status/Blocked
Status/Conflicted
Status/In Progress
Status/In Review
Status/Need Grooming
Status/Need More Info
Status/Ready
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
Reference
Ting/Vedanta#30
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?
Proposal
Provision the durable drone pool once: ten UUID-pinned principals with reserved names, one immutable
AssignmentGranteach, and a human ratification of the realized mapping before any of it becomes active.Session review boundary
One PR, one verdict over the whole bring-up: name reservation, principal creation, grant issuance, collision and retry behaviour, and the ratification gate. This is a one-time act with a large blast radius and no steady-state loop in it — the checkout/return cycle is a separate Session with a different reviewer question.
Design
Provisioning creates identity and authority, and nothing else. It creates no per-drone Forgejo account, no standing Forge token, and no active lease; pool membership makes all ten eligible for allocation and allocates none of them.
The name is reserved before the principal is created, in the form
swarm-alpha-drone-<word>-<word>-<word>-<word>, and the returned UUID is pinned to that name and slot without a rename pass. The ordering is the point: a create-then-name flow has a window in which a principal exists under a name nothing reserved, and a retry across that window is how one slot becomes two principals. A retry therefore adopts matching name/slot metadata, and on collision denies or re-reserves rather than duplicating.The realized name/UUID/grant-ID/version/digest mapping is presented for ratification before activation. Per the freeholder ruling on Ting/Ting#2 Q4, ratification is presence, not channel: activation blocks on a freeholder act at a keyboard, never on a notification having been sent.
Tasks
AssignmentGrantper slot, delegated to theswarm-alpha/queenseat.Specification Delta
Requirement: bring-up creates eligibility, never an active credential
Scenario: the pool is provisioned
swarm-alpha/queenseatRequirement: a name is reserved before a principal exists
Scenario: provisioning is retried mid-flight
Requirement: activation waits for a person
Scenario: the mapping is realized but unratified
OpenSpec
OpenSpec 30 — agent identity pool lifecycle, which projects from ratified OpenSpec 61 v0.1.4. This Session is its bring-up half; #31 is the other.
Structural parent
Ting/Ting#2 — Epic: agent identity pool lifecycle. Session split ratified there as Q3 (2026-09-03).
Delivered by PR #38, merged into
fastlaneat7b9b5ba. All three leaves closed: #32, #33, #34.src/pool.rscarries reserve-before-create with adopt-on-retry, ten UUID-pinned principals with one immutable grant each, and the ratification gate. Gate green: fmt, clippy-D warnings, full workspace suite.What this Session does not give you.
PoolDirectoryhas no Kanidm implementation — the state machine is complete and nothing drives it against a real directory. That waits onsa-vedanta, which is flake-ops#98's owner act. Closing this record says the bring-up logic is written and tested, not that a pool exists.