The Matrix connector behind the F4 abstraction (#617). Speaks the Matrix client-server API directly over HTTPS (injectable fetch, no SDK) — homeserver-agnostic (Conduit default, Synapse alt).
What it does
MatrixConnector implements OrchestratorConnector:
send → PUT …/rooms/{room}/send/m.room.message/{txn} (thread-aware via m.thread), returns event_id.
subscribe → /sync long-poll loop driven by the pure parseSyncResponse (skips the orchestrator's own echoes; carries threadId).
health → /_matrix/client/versions (reachable) + /account/whoami (authed against the configured user).
Pure helpers buildMessageBody + parseSyncResponse make send/receive unit-testable without running the loop or a live homeserver.
registerMatrixConnector(env) registers the factory; access token from MATRIX_ACCESS_TOKEN, never the roster.
Still a self-contained connectors/ module — no fleet.ts changes.
Stacking
Stacked on #617 (F4 Phase 1 — the types/registry). Merge order: #617 → this. Rebases onto main after #617 lands (the #617 commit drops, leaving the Matrix-client diff).
Remaining Phase 2 (follow-ups)
init/configure connector-selection UX + roster-parse wiring (touches fleet.ts — after #615 lands to avoid churn); systemd launch wiring so the orchestrator boots on the chosen connector; Conduit deploy guide.
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 2a — Matrix CS-API connector client + factory (#616)
The Matrix connector behind the F4 abstraction (#617). Speaks the Matrix client-server API directly over HTTPS (injectable fetch, no SDK) — homeserver-agnostic (Conduit default, Synapse alt).
What it does
MatrixConnector implements OrchestratorConnector:send→PUT …/rooms/{room}/send/m.room.message/{txn}(thread-aware viam.thread), returnsevent_id.subscribe→/synclong-poll loop driven by the pureparseSyncResponse(skips the orchestrator's own echoes; carriesthreadId).health→/_matrix/client/versions(reachable) +/account/whoami(authed against the configured user).buildMessageBody+parseSyncResponsemake send/receive unit-testable without running the loop or a live homeserver.registerMatrixConnector(env)registers the factory; access token fromMATRIX_ACCESS_TOKEN, never the roster.Verification
connectors/module — nofleet.tschanges.Stacking
Stacked on #617 (F4 Phase 1 — the types/registry). Merge order: #617 → this. Rebases onto main after #617 lands (the #617 commit drops, leaving the Matrix-client diff).
Remaining Phase 2 (follow-ups)
init/configure connector-selection UX + roster-parse wiring (touches
fleet.ts— after #615 lands to avoid churn); systemd launch wiring so the orchestrator boots on the chosen connector; Conduit deploy guide.🤖 Generated with Claude Code
aefcc9b5c0toeed12bd4ba