Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions docs/plans/integration-readiness-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,11 @@ The matrix below is the definition of "ready". A row is ready when every cell is
|---|---|---|
| Telegram | yes | Re-walked live 2026-09-27 on `c941626b` with a real account (below). **C1 green**: the code typed exactly as the page shows it, spaces and a capitalised group included, binds on the first try (#1931 TASK-153, #1932 TASK-157); on `7ccc6ac2` the same form was refused. **More than one pod, green outbound**: a second pod switched on under "Pods that reach this channel" relayed its agent's line to the chat within the minute, and a line typed in the chat went only to the active pod, as the connector is built (one private chat binds one Commonly user, pods behind it as gates; TASK-154, ruled by Wren). **C3 green** (an agent line relayed) and **C5 inbound green** with sender identity ("Sam Xu (via Telegram)"). C10 green: both refusals are named, and since #1878 a dead chat is a named failure. Shipped since the re-walk: relayed lines now carry their pod's name (#1935, TASK-156; seen live on `19d1d3e2` as "[Connector walk 0926] Scout: PONG-TAG"), and a quote-reply routes to the quoted line's pod or is refused by name (#1935; unit-witnessed, not walked live). The catalogue row names the multi-pod model (#1957, TASK-158) |
| Slack | yes | Walked live 2026-09-26/27 on `7ccc6ac2` with a real workspace (below). **C1, C3 and C5 green**: connect through consent, callback and confirm; a hosted agent's reply relays to Slack; a Slack mention reaches the agent and its answer comes back. C5 inbound was green only after two Slack app settings were fixed during the walk. Red for customers until the app was publicly distributed, which is now done, and the distribution attestation is now true of the running backend: #1929 (TASK-151) removed every `SLACK_BOT_TOKEN`/`SLACK_APP_TOKEN` read and injection, live on `f5eb5563`. A second authorize on a connected row is refused with 409 `slack_already_authorized` (measured through the API); the refusal copy on the page (#1890, Row C) is still unwalked in the UI. Before #1875 (09-04 to 09-25), every new install was refused at Authorize |
| Discord | partly | **red** in C0: not offered on the Connectors page (#1826, held for Sam's read of the renders). **red** in C1: not connectable (TASK-104). Two different fixes |
| Discord | partly | **C0 listed, not offered**: #1826 (Sam approved 2026-09-29) gives Discord its own row, live since `96cc9711` (2026-09-29 12:11Z). `/api/installables` returns `discord` under `channels` with `available: true, offered: false`. `offered` is the roster decision (`installableCatalogService.ts` `offeredByRoster`: an active builtin Installable row exists), and commonly.me has no `discord` Installable row, so it is not offered. `available` is the manifest readiness (`manifests.ts`: missing required keys would make it `false`), and it reads `true`. A stranger sees "Not enabled on this instance · ask your operator" rather than a merged "not yet" row. **red** in C1: not connectable (TASK-104) |
| GroupMe | yes | **red**: TASK-101 |
| X | yes (admin OAuth callback + feed) | unverified |
| GitHub (app) | yes | Walked 2026-09-25 and re-walked 2026-09-26 on `5561a1dd` (both below). Live on our own repository since 09-18. **red** in C1 until per-person GitHub: a team cannot connect its own repository. C2 at 390 is green since #1874, shown on `5561a1dd`. C3 (a hosted agent gets the broker, #1880) shipped and has not been walked. C8 was green on `9a32fca5`. C3, C4 and C8 on the current build wait on a new grant; the only grant lapsed 2026-09-25 11:32Z |
| GitHub (app) | yes | Walked 2026-09-25 and re-walked 2026-09-26 on `5561a1dd` (both below). Live on our own repository since 09-18. **red** in C1 until per-person GitHub: a team cannot connect its own repository. C2 at 390 is green since #1874, shown on `5561a1dd`. C3 (a hosted agent gets the broker, #1880) shipped and has not been walked. C8 was green on `9a32fca5`. A new grant from the connection's owner, `grant_3c4d6ad5` (2026-09-29, on Sam's approval), has the same scope as the lapsed 09-18 one: pod "C4 run 2026-09-18"; `list_issues`, `create_issue` and `close_issue`; write-with-confirm; audience Sam, `c3stranger0912` and `c4-smoke`. It runs to 2026-10-06, so C3, C4 and C8 are walkable again. None has been walked on the current build |
| Hosted MCP (generic type, TASK-172) | no entry yet | **Built through step 6a and live, nothing offered.** Steps 1–5 of `hosted-mcp-connection-scope.md` §10, and step 6's removal half, are on `2322de60` (live 2026-09-30 02:57Z): the connection row (#1976); catalogue entry, projection and drift (#1993, #2014, #2023); intake with browser-bound OAuth and rate-limited public routes (#1995, #1999, #2006, #2007); credential and refresh fence (#2001, #2004, #2009); mint and broker (#2002, #2005, #2010); the owner-credential trail (#2028); the banned/missing/bot-owner refusal (#2029, TASK-181); and the removal sequence (#2035, step 6a). **Still open, step 6b:** the admin account delete's 409 for a person who owns a hosted row (plan step 6; `admin/users.ts` deletes the User without it today), and TASK-147's remaining per-path witnesses (the pod-delete tripwire and the reconciler/admin paths). Both must land before the first entry. The catalogue is empty, so no vendor is reachable: an unknown entry's callback redirects to the Connectors page with `unknown_entry`, verified on the live build. **First entry is open for Sam:** Linear qualifies only if its authenticated `tools/list` carries `readOnlyHint` (Wren's ruling: no hint, no entry), and that needs one real Linear OAuth. Sentry qualifies by construction, since its source requires all three hints. Vera gates the entry, and C0–C10 are walked once end to end on it |
| next app | no | Sam's decision; see below |

## Walk of 2026-09-25
Expand Down Expand Up @@ -125,7 +126,7 @@ Walked by the Connectors session, 2026-09-27 02:43Z to 02:47Z, with `lily-shen`
| C5 inbound | green, with sender identity preserved |
| pod tags and quote-reply routing | shipped after the walk (#1935, TASK-156). Pod tags seen live on `19d1d3e2`; quote-reply routing is unit-witnessed and not yet walked live |

The test gate on "Scout (Default)" was switched back off after the walk. On Sam's word (2026-09-27 ~10:30Z) the test binding on "Connector walk 0926" was then removed, so the chat is free: Sam's Rewire Live Demo pod relays nothing until he binds it from his own account.
The test gate on "Scout (Default)" was switched back off after the walk. On Sam's word (2026-09-27 ~10:30Z) the test binding on "Connector walk 0926" was then removed, so the chat is free: Sam's Rewire Live Demo pod relays nothing until he binds it from his own account. **Restored 2026-09-29** on Sam's approval: his existing Aug-26 pod-scoped row was reactivated (`isActive: true`; `liveRelay` was already on), not re-bound with a new code. It is the only active row on that chat, and the outbound selector picks it for Rewire Live Demo. The walk row stays inactive.

**Membership, hardened across every connector write path (2026-09-27).** A connector now writes only where its owner is a listed pod member, the same rule `createMessage` uses (`isListedPodMember`): relay, inbound, the gate PATCH, install, bind confirm and the gate reconciler (#1940, TASK-161). A pod's creator cannot leave it (#1945, TASK-166), so `createdBy` no longer stands in for membership; the Discord/Slack owner routes follow (#1946, TASK-168); `agent-admin` pods are not a gate target (#1954, TASK-171); the PG chat path reads Mongo membership rather than its own mirror (#1942, TASK-162); and a seat whose own declaration cannot confine a broker is refused at the broker call — every dispatch except the native runtime's in-process one, which is exempt because a hosted turn has no shell, web or file tool to confine (#1971, TASK-175, ruled by Wren). This bears on C9 (authority is bounded) for every channel row above.

Expand Down Expand Up @@ -164,10 +165,10 @@ Recommendation: verify GroupMe and X inside the freeze, since they are existing

## Decisions for Sam

1. Release the GitHub App credentials on commonly.me, installed on our own repository only, and widen once the GitHub row is green. **Done:** live on our repository since 09-18. The only room grant lapsed 2026-09-25 11:32Z, and a new grant from the connection's owner is what C3 and C4 now wait on.
1. Release the GitHub App credentials on commonly.me, installed on our own repository only, and widen once the GitHub row is green. **Done:** live on our repository since 09-18. The 09-18 room grant lapsed 2026-09-25 11:32Z. **Renewed 2026-09-29** on Sam's approval: `grant_3c4d6ad5`, the same scope, runs to 2026-10-06 (see the GitHub row). C3 and C4 now wait on the walk, not on a grant.
2. Provide a dedicated Slack workspace and a Telegram account on a spare number, for the automated C1 checks. **Ruled 2026-09-26:** the test accounts are set up by Sam in his own browser. Agents do not create accounts or enter credentials, so C1 with a real account waits on those sign-ins.
3. Choose the next app. **Ruled 2026-09-26:** Linear, one build only, and only after Slack, GitHub and Telegram are green. No Linear code exists on main, so Wren scopes it first. **Re-ruled 2026-09-27 (74820):** "Start now, Linear first", as the first entry of the `hosted-mcp` type, with no wait on those three rows ([hosted-mcp-connection-scope.md](hosted-mcp-connection-scope.md)). That type has no inbound path, so it does not exercise C6.
4. Read the #1826 renders, which unblock the Discord page row. Open.
4. Read the #1826 renders, which unblock the Discord page row. **Done 2026-09-29:** approved, merged as `96cc9711` and live; see the Discord row.

**Goal scope, ruled 2026-09-26:** drive Slack, GitHub and Telegram to green across C0–C10 first. GroupMe and Discord come after them; X and Instagram are deprioritised.

Expand Down
Loading