A compose request cannot name the seat, so a composing agent carries two identities #280
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#280
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?
A consumer that composes a role gets that role's seat identity verbatim, with no way to say who the seat is in its context.
coilyco-gaming/sirens-echois the concrete case. Sirens Echo composesopsfor its operator doctrine and keeps its own neutral voice. The bundle's identity card then renders:while the runtime definition says the agent is
Sirens Echo. Two identities in one prompt, and the seat name belongs to a different context entirely.What exists today
ParseRequestininternal/schema/schema.go:200is a closed switch:personality-library,person-policy,person-source,role,delivery,model-tier,density,source. Anything else isunknown node, tested atinternal/schema/schema_test.go:93.Requestcarries no identity field.The nearest existing mechanisms do not reach:
person-sourcereplaces the whole embedded package rather than adjusting one role, perinternal/person/person.go:427— "An external package replaces the embedded package rather than extending it."--nameoverride atcmd/agent-compose/main.go:868changes the prompt box and terminal title only. It does not touch the identity card, the manifest, the statusline, or the overlay.Proposal — name and pronouns only
Deliberately not a personality override.
role.Personalitiesalso drives the melded favorite color, the nativeui theme tokens, andvalidateCorePersonalityMelds's exactly-three rule atinternal/person/person.go:746, so filtering a meld is several seams. Name and pronouns is one.The override must rewrite
role.Identityand everyrole.Seats[i].Name/.Pronouns, because the overlay, statusline,nativelaunch.seatName, and the bundle manifest read the seats rather than the role. Rewriting one and not the other yields a bundle whose card and statusline disagree.The doctrine question this raises
docs/person-contract.md:77currently says:A request-level identity override is a carve-out to that sentence and should be written as one rather than left to contradict it. The narrow reading that keeps the invariant intact: a caller may say who is speaking in its own deployment, and still may not change what the role is — its skills, methods, personalities, or boundaries. Naming the seat is identity, not role content.
Cache invalidation needs nothing:
bundle.cacheKeyatinternal/bundle/bundle.go:292already hashes the rendered instructions, which contain the card.