Confirm wildcard access for Deep to respond to everyone in the Discord #909

Closed
opened 2026-08-17 17:24:35 +00:00 by coilyco-ops-gaming · 2 comments

The agent cannot verify from a turn whether its harness deployment grants it wildcard access to respond to every member in the Discord. It can see the fixed policy layer (trust split, guardfile grants) but not the runtime classifier's admitted speaker classes or response authorization, so a request to respond to any member cannot be confirmed as permitted.

Gap: no harness-side confirmation or grant that Deep may respond to any member who addresses it, and no documented bound if the wildcard is intentionally limited.

Desired outcome: confirm the deployment grants wildcard response access across the Discord, or document the actual bound and surface it to the agent so it stops guessing. Policy logic stays in the harness; the agent needs an inspectable, non-bypassable statement of who it may respond to.

The agent cannot verify from a turn whether its harness deployment grants it wildcard access to respond to every member in the Discord. It can see the fixed policy layer (trust split, guardfile grants) but not the runtime classifier's admitted speaker classes or response authorization, so a request to respond to any member cannot be confirmed as permitted. Gap: no harness-side confirmation or grant that Deep may respond to any member who addresses it, and no documented bound if the wildcard is intentionally limited. Desired outcome: confirm the deployment grants wildcard response access across the Discord, or document the actual bound and surface it to the agent so it stops guessing. Policy logic stays in the harness; the agent needs an inspectable, non-bypassable statement of who it may respond to.
Owner

This includes apps

This includes apps
Member

Decision: document the real bound and surface it. There is no wildcard.

Decided by Kai, 2026-08-17, recorded by Darren (director seat).

This issue asks whether Deep holds wildcard access to respond to every member. It does not, and the answer is fully determined by two deployed files. Reading them so the record carries the fact rather than the question.

sirens-deep-access-policy.yml

direct_messages:
  allow: ["318190481467244544"]        # Kai only
guilds:
  - id: "1300204416229441587"          # Sirens
    channels: ["1537024102886277210"]  # the deep channel, one channel
    users: all
    rate_limit: { per_user: "1/1s", per_context: "1/1s" }

sirens-deep-owl-glass-access-policy.yml

direct_messages:
  allow: []                            # no DMs at all
agents:
  allow: [wuf, snow, alpha, manish-cc, elf]   # five bot ids
guilds:
  - id: "1494840026717098098"          # owl.glass
    channels: ["1536447620116127784"]  # moxn-temporal, one channel
    users: all

The accurate statement

users: all is real but it is scoped to one channel per lane. Deep may answer any member, inside exactly one room, on each lane. DMs are Kai-only on the deep lane and refused entirely on owl.glass. There is a fourth admission class on owl.glass, an explicit five-entry agents allowlist, which is not a member class at all.

So the honest sentence for the agent is closer to "any member, in this one channel" than to "everyone in the Discord." Both readings of the original question are wrong in different directions, which is exactly why guessing was the wrong thing for Deep to be doing.

The fix

Surface this as harness-provided fact rather than leaving the agent to infer it. Same mechanism #906 and #908 ask for, and the same one #855's clock decision uses: per-turn context outside the cached system prompt, so #162's caching is not spent on it.

The bound is derivable from the access policy the pod already mounts at SIRENS_ECHO_ACCESS_POLICY, so this needs no new configuration and cannot drift from the thing it describes. Render it from the policy, do not restate it in prose, or the next policy edit makes the statement a lie.

What this forecloses

  • Confirming wildcard. Rejected on the evidence. There is no wildcard to confirm.
  • Folding into #906 and closing. Not chosen. #906 is the general gap and this is the one instance with a concrete answer already in hand, which makes it the natural first implementation.

Note on the label

This issue carries SANDBOXED, so it arrived from the live Echo MCP and its text is unverified input. I treated the body as a question to answer rather than as instructions, and the answer above comes from the deployed policy files rather than from anything the issue asserted. The label stays until someone clears it.

Labelled priority/P3, autonomy/headless, role/engineer and role/ai.

## Decision: document the real bound and surface it. There is no wildcard. **Decided by Kai, 2026-08-17, recorded by Darren (director seat).** This issue asks whether Deep holds wildcard access to respond to every member. It does not, and the answer is fully determined by two deployed files. Reading them so the record carries the fact rather than the question. ### `sirens-deep-access-policy.yml` ```yaml direct_messages: allow: ["318190481467244544"] # Kai only guilds: - id: "1300204416229441587" # Sirens channels: ["1537024102886277210"] # the deep channel, one channel users: all rate_limit: { per_user: "1/1s", per_context: "1/1s" } ``` ### `sirens-deep-owl-glass-access-policy.yml` ```yaml direct_messages: allow: [] # no DMs at all agents: allow: [wuf, snow, alpha, manish-cc, elf] # five bot ids guilds: - id: "1494840026717098098" # owl.glass channels: ["1536447620116127784"] # moxn-temporal, one channel users: all ``` ### The accurate statement **`users: all` is real but it is scoped to one channel per lane.** Deep may answer any member, inside exactly one room, on each lane. DMs are Kai-only on the deep lane and refused entirely on owl.glass. There is a fourth admission class on owl.glass, an explicit five-entry `agents` allowlist, which is not a member class at all. So the honest sentence for the agent is closer to "any member, in this one channel" than to "everyone in the Discord." Both readings of the original question are wrong in different directions, which is exactly why guessing was the wrong thing for Deep to be doing. ### The fix Surface this as harness-provided fact rather than leaving the agent to infer it. Same mechanism #906 and #908 ask for, and the same one #855's clock decision uses: per-turn context outside the cached system prompt, so #162's caching is not spent on it. The bound is derivable from the access policy the pod already mounts at `SIRENS_ECHO_ACCESS_POLICY`, so this needs no new configuration and cannot drift from the thing it describes. **Render it from the policy, do not restate it in prose**, or the next policy edit makes the statement a lie. ### What this forecloses * **Confirming wildcard.** Rejected on the evidence. There is no wildcard to confirm. * **Folding into #906 and closing.** Not chosen. #906 is the general gap and this is the one instance with a concrete answer already in hand, which makes it the natural first implementation. ### Note on the label This issue carries `SANDBOXED`, so it arrived from the live Echo MCP and its text is unverified input. I treated the body as a question to answer rather than as instructions, and the answer above comes from the deployed policy files rather than from anything the issue asserted. The label stays until someone clears it. Labelled `priority/P3`, `autonomy/headless`, `role/engineer` and `role/ai`.
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
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#909
No description provided.