feat(dowel): give the Dowel lane its own provenance, placement, and demo prose #952

Merged
coilysiren merged 1 commit from aos/claude/dowel-prose into main 2026-08-18 15:11:01 +00:00
Member

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.md is inline: always and 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.md carries 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.md carries 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.md is 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 ValidateIdentityClaim rejects "I'm not the Sirens agent." Running it against internal/community/decision.go showed it does not: agentDenial only 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-org is 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 run on 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 Coilyco with alias Deep. 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.yml in coilyco-bridge/deploy needs the root named:

    local_skill_roots:
      - .agents/skills/coilyco-general
      - .agents/skills/coilyco-org
      - .agents/skills/sirens-dowel

Both are deliberately left to the engineer holding that lane. The site MCP itself does not exist in either repository yet, so site-work.md describes 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

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.md` is `inline: always` and 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.md` carries 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.md` carries 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.md` is 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 `ValidateIdentityClaim` rejects "I'm not the Sirens agent." Running it against `internal/community/decision.go` showed it does not: `agentDenial` only 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-org` is 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 run` on 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 Coilyco` with alias `Deep`. 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.yml` in coilyco-bridge/deploy needs the root named: ```yaml local_skill_roots: - .agents/skills/coilyco-general - .agents/skills/coilyco-org - .agents/skills/sirens-dowel ``` Both are deliberately left to the engineer holding that lane. The site MCP itself does not exist in either repository yet, so `site-work.md` describes 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](https://claude.com/claude-code)
feat(dowel): give the Dowel lane its own provenance, placement, and demo prose
All checks were successful
ci / image-build (pull_request) Successful in 41s
ci / test (pull_request) Successful in 1m1s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
d39deacccb
Dowel is a new Discord application in the Owl Glass guild, not a rename of
Echo or Deep. The shared coilyco-org provenance source answers every
who-do-you-work-for question with the Sirens contract, which is correct for
Echo and Deep and wrong for this lane: Dowel is employed by the same Robotics
Division under a different contract and holds no placement in Sirens Discord.

Adds .agents/skills/sirens-dowel as a lane-scoped root rather than extending
coilyco-org, so the 3.2 KB stays off Echo's and Deep's always-inline prefix
while deploy#932 is open on prefix size and cache misses.

Carries the August 19 Temporal Vibe Check context, including that other
participants' agents share the guild and the recording is permanent.

Phrasing guidance was measured against ValidateIdentityClaim rather than
inferred: only bare category denials are rejected, so the file names those
exactly and does not claim the check catches qualified ones.

Refs coilyco-bridge/deploy#658, coilyco-gaming/sirens-echo#310

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Angie <coilyco-ops@coilysiren.me>
Co-authored-by: Claude <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!952
No description provided.