feat(dowel): give the Dowel lane its own provenance, placement, and demo prose #952
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!952
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/dowel-prose"
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?
Gives the Dowel lane its own provenance, placement, demo context, and site-working discipline. Prose and behavior layer only: no deploy values, no MCP roster, no cutover. Those stay with the engineer on coilyco-bridge/deploy#658 and the operator on coilyco-bridge/deploy#655.
One lane-scoped skill root,
.agents/skills/sirens-dowel/, 7.4 KB inline across three files.Part one: who and where Dowel is
coilyco-org/references/organizations.mdisinline: alwaysand answers every provenance question with one relationship: Coilyco Gaming serves Sirens Discord under a contract, and "Sirens Echo and Sirens Deep are that Robotics Division."That is correct for Echo and Deep and wrong for Dowel. Dowel is a new Discord application, it runs in the Owl Glass guild only, and it is employed by the same Robotics Division under a different contract. Asked "who do you work for" today, this lane inherits Deep's answer and claims a contract it is not on, and a community it holds no placement in.
That lands on the surface the demo is contracted to examine. sirens-echo#929 names the second Temporal deliverable as "an evaluation of that agent's identity understanding," and #310 is the P0 principal-leak under impersonation framing, on the same lane, on a permanent public recording.
references/dowel-provenance.mdcarries it: a separate application from Echo and Deep, Owl Glass only, same employer and a different contract, terms not disclosed, staff of neither org, and what it may say about Sirens Discord without answering as though it were in it. Plus the August 19 Temporal Vibe Check context, including that other participants' agents share the guild and the recording is permanent.Part two: how Dowel works the site
references/site-work.mdcarries the write surface: list pages, read page, put page, no delete.The load-bearing sentence is that those verbs are this lane's entire landing workflow. A successful put is delivered work, not a change awaiting promotion. Without saying so, the engineer charter's deferral of live mutation reads a site put as an operator action, and Dowel hands off the exact work the demo exists to show. The file draws the line rather than waiving it: rollback, serving, and nginx stay out of reach and out of the agent's promises, because no verb reaches them.
The rest is the discipline the surface needs. One file per concern, so a new section is a new file rather than a regenerated page. Read-then-put, because a put rewrites the file whole and there is no append verb, so a put assembled from memory drops what it did not read. Minimal flat front matter or none, since indentation is the one way to break a page visibly, and plain beats broken. One put per section, because the audience sees each one within about two seconds.
A collision named rather than left to be guessed
capability.mdis inline on this lane and says "Never describe work as ongoing, queued, scheduled, or in progress." The changelog protocol asks for a queued line.Both instructions now sit in the same prompt, so the file says which is which: that rule is about work outliving the turn, which this service cannot do, and a changelog line for a put that lands before the same reply is sent is a record rather than a promise.
Phrasing guidance was measured, not inferred
The first draft claimed
ValidateIdentityClaimrejects "I'm not the Sirens agent." Running it againstinternal/community/decision.goshowed it does not:agentDenialonly matches bare category denials, because(?:a|an)?does not cover "the Sirens agent".The file now names the rejected forms exactly ("I am not a bot", "I'm not an AI", "I am not an agent") and does not claim the check catches qualified ones. Nine recommended sentences and four counterexamples were run through the real validator. The scratch test was removed rather than committed, per the no-config-tests rule.
Why a new root instead of extending coilyco-org
coilyco-orgis inline on every lane. deploy#932 measures a 116 KB fixed prefix with zero prompt-cache hits across a burst on this exact lane, so widening the shared always-inline source would charge Echo and Deep for Dowel's facts while prefix size is a named defect. This root loads only where it is named.Verification
go test ./internal/community/passes.pre-commit runon all three files passes, including skill conventions and the agent-compose source size budget.Two preconditions this does not do
The identity field. The dowel definition still reads
identity: Sirens Deep of Coilycowith aliasDeep. If the application is genuinely new and named Dowel, that field needs to say so, or the composed prompt carries this prose next to an identity string contradicting it.The wiring.
services/sirens-echo/deploy/sirens-dowel-definition.ymlin coilyco-bridge/deploy needs the root named:Both are deliberately left to the engineer holding that lane. The site MCP itself does not exist in either repository yet, so
site-work.mddescribes the surface by its shape and rules rather than asserting tool identifiers that are not written.Refs coilyco-bridge/deploy#658, coilyco-gaming/sirens-echo#310, coilyco-bridge/deploy#932, #953
🤖 Generated with Claude Code