From the north-star (#613) orchestrator-chat-connector decision. Phase 1 establishes the pluggable connector abstraction (your stated goal) + the Matrix design; the live Matrix wire + UX are Phase 2 follow-ups (scoped in the doc).
What's in it
connectors/types.ts — OrchestratorConnector with exactly your interface: send / subscribe / health. Thread-aware via optional threadId so Matrix threads and the future first-party Mosaic Discord plugin (threads) drop in with no interface change. SendResult = ack; health() = liveness.
roster.schema.json — optional connector block (tmux|discord|matrix; matrix homeserver/user/room). Secrets via env (the gateway pattern), never the roster.
docs/fleet/f4-matrix-connector.md — interface, config model, Matrix client-server API mapping (fetch-based, homeserver-agnostic), Conduit-default local homeserver (Synapse alt), phasing, back-compat.
Design choices (Lead-aligned)
Connectors are peers; fleet core depends only on the interface, never branches on kind.
Matrix talks the CS-API directly (no SDK) → dependency-light + homeserver-agnostic.
Local homeserver is an infra/deploy concern (Phase-2 guide), not connector code.
No fleet.ts changes — a self-contained connectors/ module, so this is independent of the stacked #615 (no rebase coupling). Branches from current main.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
F4 Phase 1 — orchestrator chat connector abstraction + Matrix design (closes #616 Phase 1)
From the north-star (#613) orchestrator-chat-connector decision. Phase 1 establishes the pluggable connector abstraction (your stated goal) + the Matrix design; the live Matrix wire + UX are Phase 2 follow-ups (scoped in the doc).
What's in it
connectors/types.ts—OrchestratorConnectorwith exactly your interface:send/subscribe/health. Thread-aware via optionalthreadIdso Matrix threads and the future first-party Mosaic Discord plugin (threads) drop in with no interface change.SendResult= ack;health()= liveness.connectors/registry.ts— extensible factory registry;resolveConnectorKinddefaults tmux (existing rosters unchanged — back-compat);createConnectorthrowsConnectorNotImplementedErroruntil Phase 2 registers factories.roster.schema.json— optionalconnectorblock (tmux|discord|matrix; matrix homeserver/user/room). Secrets via env (the gateway pattern), never the roster.docs/fleet/f4-matrix-connector.md— interface, config model, Matrix client-server API mapping (fetch-based, homeserver-agnostic), Conduit-default local homeserver (Synapse alt), phasing, back-compat.Design choices (Lead-aligned)
Verification
Independence
No
fleet.tschanges — a self-containedconnectors/module, so this is independent of the stacked #615 (no rebase coupling). Branches from current main.Phase 2+ (follow-ups, in the doc)
Matrix CS-API client + factory;
fleet init/configureconnector-selection UX + roster-parse wiring; systemd launch wiring; Conduit deploy guide; first-party Mosaic Discord (threads) as a connector.🤖 Generated with Claude Code
85a93428ebtoc6735d9949