Skip to content

Slack mounts should key on stable channel ID, not the slug-suffixed path (channel renames break read-down) #171

@khaliqgant

Description

@khaliqgant

Problem

Slack integration mounts derive their remoteRoot from the slug-suffixed path <channelId>__<slug> (e.g. C0B8ZL2L9GC__pear-pty-investigation), set in src/main/integration-mounts.ts (mountSpecsFor, spec.remotePath = mountPath). When a channel is renamed, the slug changes, so the suffixed mount root desyncs from the live channel and read-down breaks until the mount is re-provisioned — even though the channel ID (C0B8ZL2L9GC) is stable and fully sufficient to identify the conversation.

Operator ask (Khaliq): "We should have a more performant way to handle channel renames. We have the ID so it should be durable."

Why it matters

  • A rename silently breaks the inbound read-down we just activated (mirror mounts), with no error — same class as the bare-vs-suffixed seam fixed for the events feed in cloud#2010, one layer up.
  • The suffix is cosmetic; the ID is the durable key.

Proposed direction

  • Key mounts + event routing on the bare channel ID; treat the human slug as a cosmetic alias.
  • On a Slack channel_rename event, auto-reconcile the slug (or make the mount root tolerant of slug drift) instead of requiring re-provision.
  • Spans Pear mount-topology (integration-mounts.ts remoteRoot derivation) and cloud routing (record-path / events-feed path emission — same area as cloud#2010).

Evidence

  • Mount launch line: remote=/slack/channels/C0B8ZL2L9GC__pear-pty-investigation/messages — slug embedded in the durable root.
  • Related: bare-vs-suffixed channel-id handling (pear#155 / cloud#1995 / cloud#2010).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions