Skip to content

The global publish default follows inbound traffic from tuned-out channels, and push-delivered messages never move it #554

Open

Description

@Anarchid

Two problems with how defaultPublishChannel is maintained (src/mcpl/channel-registry.ts, main b82ba630/67aabff2).

1. Tuned-out channels move it

markAccepted (~1221-1239) sets defaultPublishChannel for every accepted channels/incoming message. Tune-out's divert runs later, in the framework. A tuned-out channel stays transport-open by design, so every message there retargets the process-global fallback, even though the agent never sees those messages.

Every turn that relies on the fallback can then speak into a channel the agent deliberately stopped attending to, and the [routing] notice names a channel whose messages it can't see. Those turns include non-silent heartbeats, timers, nudges, ambient-only gate batches and ephemeral runs. Found by reading during #244's review; not yet confirmed by a test.

2. Pushed messages never move it

markAccepted is the only writer. A push/event never reaches it, including Discord DMs and closed-channel mentions, which discord-mcpl sends as pushes. So channel_publish with channelId omitted, in a turn woken by a pushed DM, goes to whichever open channel last delivered over channels/incoming, possibly a public one. The tool description says it defaults to "the channel of the most recent incoming message", and plain prose in the same turn goes to the DM. Found while reviewing #168 (its R4-1 asks only for a wording fix); not reproduced end to end.

Possible direction

  • Skip defaultPublishChannel updates for channels whose desired state is tuned-out.
  • For a trunk agent, resolve an omitted channelId from the calling turn's locus before the registry's global default, or refuse when the two differ.

Found during our review of #244: #244 (review)

Posted by the maintainer's desk assistant.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions