Echo composes the ops role, and role stops implying voice #758
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
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-gaming/sirens-echo!758
Loading…
Reference in a new issue
No description provided.
Delete branch "eng/echo-composes-ops"
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?
Sirens Echo runs
ops. Sirens Deep keepscreator, which needed no change — it was the runtime default.closes #757
The blocker this had to clear
composed: truewithresponse_style: neutralwas unsatisfiable, not merely unusual:prompt.gorequired the literal## Personality meldfor a composing profile.personality meldfor a neutral profile.The validator had encoded a coincidence. Until now the only composing lane was also the only expressive one, so nothing ever needed role and voice to come apart.
The framing
role-opsis the operator charter, not the infrastructure one. The infrastructure is a binding — theuse-repository infrastructure / deploy / hardwarelines incoilyco-bridge/agentic-os-kai's role graph. This repository admits no bindings, only what its request declares, so Echo inherits the charter and none of the estate.Read that charter with its nouns removed and it is what
.agents/skills/sirens-echo-communityalready said longhand:knowledge-gap/correctionissue drafts, observed-onlyEcho was already running the ops charter; it was just written out longhand as local policy. Its estate is the Sirens Discord as a running system rather than a cluster. Written up in the new
docs/sirens-echo-role-and-voice.md.What changed
composedVoicePolicyrenders only for a neutral composing profile and states precedence outright: the bundle supplies doctrine, the response rules win on voice, the seat name and pronouns are never spoken.ValidateNeutralSystemPromptnow requires that clause exactly where it stopped requiring the meld's absence — the property is checked by presence rather than absence.SIRENS_DEEP_ROLE→SIRENS_ECHO_ROLE, matching every other harness variable.creatordefault is gone. Safe while one lane composed; with two, a forgotten variable would have answered the Sirens community in Deep's persona. An unnamed role now fails startup the way a missing bundle already does.opsgets no entry inagent/compose/roles.kdl— barerole-opsplus its meld. The skills a community lane would reach for are voice skills Echo's neutrality rejects, and widening it later stays a visible diff in the role record.Verification
go test ./...,go vet,prompt --check,policy-check, and the full pre-commit suite all pass. New test:TestNeutralProfileComposesARoleWithoutTakingItsVoice, which also asserts that stripping the precedence clause fails validation.Reviewer's eye
The ops meld is grounded/protective/reflective and the seat is Olaf (he). Protective is an emotional stance, which Echo's policy declines outright. Two layers hold it back — the precedence clause in the prompt, and
ValidateNeutralStylerejecting first person on every reply — but it is now doctrine Echo carries and cannot express. If that reads wrong, the fix is a meld override in the roster rather than anything in this diff.Paired with coilyco-bridge/deploy#491, which names the role on both lanes. Land that first: these values are inert until an image carrying this change is pinned, but pinning before the deploy side is set would fail startup on both lanes.
🤖 Generated with Claude Code
I want a meld override on the name exclusively
Built, landed upstream, and currently undeliverable. Details in that order.
Built
agent-composehad no override of any kind —ParseRequestis a closed switch and anything unrecognised fails asunknown node. So this was a new grammar node, not a config flip:Name and pronouns only, as you asked. That turned out to be the right cut for a reason beyond scope:
role.Personalitiesalso drives the melded favorite color, the nativeui theme tokens, and a validator requiring exactly three personalities on a core role. A name is one seam; a meld filter is several.The override rewrites the role identity and every seat, because the card and roster read the role while the overlay, statusline, launcher, and manifest read the seats — rewriting one alone ships a bundle whose card and statusline disagree. Covered by a test asserting the rendered card says
**Agent // Echo (it)**, thatOlafis gone rather than merely joined, and that a renamed seat cannot reuse an unrenamed bundle.Landed as
71b112bonagent-composemain, closing coilyco-flight-deck/agent-compose#280. It also required a carve-out todocs/person-contract.md, which said an overlay may not redefine seats. The line it now holds: who is speaking is a caller's to name, what the role is is not.Undeliverable
Nothing in this repository has changed, and I have not added the
identitynode toagent/compose/request.kdl, because doing so would break the image build today.The delivery chain is: agent-compose releases →
agentic-os/docker/dev-base/full/DockerfilebumpsAGENT_COMPOSE_VERSION→agentic-os:releaserepublishes → this image rebuilds against it.agent-compose's release pipeline has failed on every main push for a week. Last release is v2.19.0 on 2026-08-07, which is exactly the version agentic-os pins. Filed as coilyco-flight-deck/agent-compose#281 — I could not read the runner logs, so that issue carries metadata and one untested hypothesis rather than a cause.
What that means for this PR
It does not block it. Merging ships Echo composing
opswithOlaf (he)in the identity card, never spoken:ValidateNeutralStylerejects first person on every reply, and the precedence clause forbids the seat name outright. The rename lands as its own change once the pipeline is fixed.Worth restating since it changed since this PR opened: merging does auto-deploy. Echo is reconciled by the chart-pin loop, so this reaches the Sirens Discord within about five minutes of the image publishing. I told you earlier it was hand-pinned; that was wrong, and coilyco-bridge/deploy#502 fixes the files that said so.