A defer-side boundary should not compose when its owner is not on the roster #309
Labels
No labels
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/agent-compose#309
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?
Reported from the
sirens-dowellane, which runsSIRENS_ECHO_ROLE=engineeras the only agent in its Discord guild. Kai's read: that deployment should be loading no boundaries at all. Having gone through the model, I think that is right, and I think the model already contains the reason.What the roster says a boundary is
From
docs/ownership.md:validateBoundaryOwnersenforces it as a relationship in both directions - an owner receives the body by owning it, and loading fails if an owner also declares it, "since that would place one role on both sides."So the defer side of a boundary is a routing rule.
internal/person/data/boundary-modify-live-system/boundary.kdl:"Hand the action over" - to
ops.Where that stops being true
Engineer owns nothing and defers both:
On a single-seat deployment there is no
opsand noexec. The relationship the boundary describes has one participant. So both bodies resolve to "hand this to a role that is not present", which is not routing - it is a stop with no continuation. The agent reads a rule about a colleague it does not have.That is not the boundary being wrong. It is the boundary being composed into a roster it does not apply to.
The evidence that it already bites
The sirens-echo lane worked around it in prose rather than in composition.
.agents/skills/sirens-dowel/references/site-work.md:I wrote that, and writing it is the tell. When a deployment has to ship a local file saying "ignore the shipped doctrine above," the doctrine was composed into the wrong place. And that override is scoped to site verbs only, so the general case is still unopposed: an agent told to defer live-system changes, in a room with nobody to defer to, hedges. On a livestream lane whose whole point is to be interesting rather than neutral, that is a direct cost.
sirens-echo#1008 makes
roster:coreeager, so these bodies are now at full weight in every prompt rather than merely named on the card. That sharpens the problem rather than causing it - the card named them either way - but it is worth stating plainly since I opened that PR.Shape of the fix
The schema already permits a role with no declared boundaries:
role-creatorships that way today. So this is not a new capability in the role model, it is a composition-time question - is the owner present in this deployment's roster?Candidates, roughly in order of how well they match the existing model:
ownerrelationship, evaluated instead of assumed. A single-seat launch gets no defer-side boundaries and still gets everything it owns.engineerandopsbut noexec, which option 1 handles correctly for free.I favour 1. It says something true that the roster currently only assumes, and it degrades correctly at every roster size rather than only at one.
Not requesting this before the livestream
The demo is 2026-08-19 11:00 PT. This is a shipped tool, pinned into dev-base, which then has to reach the image and the deployment. That chain is not one to start the night before a live recording, and the lane is currently working. Filing it for after.
Duplicate of #304, which was filed earlier today on the same gap and has better detail on the request parser. Folded the distinct part of this - Kai's broader "no boundaries at all" directive, and a roster-presence alternative to
boundary-omit- into a comment there. Closing.