Bead: Slack Integration

**Bead** `c915581b-4179-409e-9e13-085531521fd9` · [canonical URI](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/) · discussion: Talk: Slack Integration This page is the wiki facet of a [bead](https://redfish.acequia.io/guerin/.agents/); the bead is the source of truth.

## Identity - **URI:** https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/ - **GUID:** c915581b-4179-409e-9e13-085531521fd9 - **Slug:** slack-integration - **Opened:** 2026-06-22

## Motivation (Why a GUID) A design bead for integrating Slack with the acequia WebDAV namespace. Slack is a sealed proprietary store of messages and file attachments that the team already lives in; the commons wants those artifacts addressable as URIs. This bead works out the adapter that lets a Slack-hosted resource flow into the namespace as if Slack were just another mountable WebDAV-ish endpoint. The worked example that drives the design is a single PDF shared in `#C014PECH5G8` that should land at `https://simtable.acequia.io/people/Graydon/newsletter/`.

## Mechanism (What this bead does) Designs and (eventually) ships a deterministic adapter that resolves a Slack permalink to its file attachment, fetches the bytes with Slack auth, and PUTs them into a destination WebDAV namespace, carrying provenance. The "WebDAV COPY from Slack" verb is the desire line being paved: make Slack feel like a resource you can `COPY` from, even though under the hood it is a two-legged Slack-API-GET → WebDAV-PUT, not a server-side third-party copy.

## Folder Layout - `about.md` — this file. - `2026-06-22/notes/` — design notes (the integration model, the impedance mismatch, scopes). - `2026-06-22/chats/` — verbatim chat log. - `2026-06-22/skills/` — the adapter skill, once built (`slack-to-acequia.mjs`). - `2026-06-22/artifacts/` — fetched artifacts, provenance sidecars, tests. - `uploads/` — inbound dock.

## Session Log - **2026-06-22** — Bead opened. Captured the integration design and the blockers (Slack permalink is not a file URL; no Slack credentials exist yet; WebDAV COPY cannot reach a non-WebDAV host). First worked example scoped: the `#C014PECH5G8` PDF → `simtable.acequia.io/people/Graydon/newsletter/`. Gated on Stephen for Slack app/token. See [00-slack-integration-design.md](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/notes/00-slack-integration-design.md). - **2026-06-22** — Decision: **user token (`xoxp-`), per-parciante** (a skill anyone runs under their own Slack access, not a top-heavy admin bot). Framing captured: [01-auth-goes-inta-goes-outa.md](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/notes/01-auth-goes-inta-goes-outa.md). Onboarding how-to written: [get-slack-user-token.md](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/skills/get-slack-user-token.md). - **2026-06-22 — WORKED EXAMPLE DONE.** Stephen provisioned the `xoxp-` user token (scopes: `channels/groups/im/mpim:history`, `channels/groups:read`, `files:read`, `search:read`, `users:read`, `chat:write`, `files:write`). Stored at `.credentials/slack-redfishgroup-token.txt` (+ manifest). The permalink resolved to **Q2-draft_6-19.pdf** (284,551 B, by Steve Graydon). COPIED two-legged (Slack GET → simtable PUT) to `https://simtable.acequia.io/people/Graydon/newsletter/Q2-draft_6-19.pdf` → 201 Created. Built and validated the reusable adapter [slack-to-acequia.mjs](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/skills/slack-to-acequia.mjs); provenance in [artifacts/Q2-draft_6-19.pdf.slack.json](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/artifacts/Q2-draft_6-19.pdf.slack.json). - **2026-06-22** — Debbie (sketch-ux mode) produced a 5-card rendered sketch of the **Slack ↔ acequia agent** for the team — what's going on (goes-inta/goes-outa membrane) and the migration-away-from-Slack arc (S4 centerpiece: phase scrubber shrinking Slack, growing acequia). Artifact: [slack-acequia-agent-sketches.html](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/artifacts/sketches/slack-acequia-agent-sketches.html); framing note: [02-debbie-slack-acequia-sketches.md](https://redfish.acequia.io/guerin/.agents/c915581b-4179-409e-9e13-085531521fd9/2026-06-22/notes/02-debbie-slack-acequia-sketches.md). Answer rows POST fork choices to this bead's `uploads/answers/` dock. - **First test case → its own bead.** This integration's first worked example (moving the Q2 newsletter PDF out of Slack) grew into a full newsletter thread, now homed at **[simtable-size-up](https://redfish.acequia.io/guerin/.agents/bc2bd3b1-10f7-40e1-9c92-5c444c3e13ae/about.md)** (`bc2bd3b1`). slack-integration stays scoped to the integration mechanism; the newsletter review/publishing/CRM work lives in simtable-size-up. The PDF COPY above remains this bead's canonical first test case.

## Modus Operandi (How to interact) Offer-only against foreign namespaces: this bead proposes adapters and writes its own notes/skills/artifacts, but does not write into `people/**` or anyone else's tree without explicit instruction. To engage, drop a message or material in `uploads/`.

## Capabilities - Resolve a Slack permalink (`/archives/<channel>/p<ts>`) to its message and file objects. - Fetch a Slack `url_private` file with a Slack bearer token. - PUT the bytes into a destination WebDAV namespace with a provenance sidecar.

## Lifecycle Active design bead. Apoptosis when the adapter is shipped and the integration pattern is either folded into a substrate skill or retired.

## Limitations - No Slack credentials yet; cannot fetch anything until a Slack token with `files:read` (and history scopes) is provisioned. - Slack is not a WebDAV server, so no genuine server-side COPY/MOVE is possible; the adapter is always a two-legged fetch-then-PUT.

## References (bead cross-links) - Bead: Simtable Size Up · [canonical](https://redfish.acequia.io/guerin/.agents/bc2bd3b1-10f7-40e1-9c92-5c444c3e13ae/)

See all: Beads