Files
Keysat 7ad0ee7624 Add Matrix intake bot (M1+M2): typed message → approved fundraising-grid write
New backend/matrix_intake/ runs as its own process (matrix-nio isolated from the
stdlib CRM): local-Qwen parse via Spark Control → in-thread human approval
(yes/edit/no) → write through the CRM's own log-communication endpoint, tagged
source=matrix_intake. Adds read-only GET /api/intake/match (returns grid row id,
no-duplicate contract); threads provenance through handle_log_fundraising_communication.
Reviewer-passed: pop-before-commit closes a double-approve race; edit-grammar fix.
Text-only v1; business-card photo (M3) deferred (no Spark vision model).
26/26 tests green; live Matrix smoke pending deploy.
2026-06-17 07:51:27 -05:00

8 lines
429 B
Python

"""Matrix intake bot — a dedicated Matrix room that turns a typed message into a
proposed fundraising-grid add/edit, gated on in-thread human approval before any write.
Separate process from the CRM (its only third-party dep, matrix-nio, lives here, never
in the stdlib CRM runtime). Parses with local Qwen via Spark Control; on approval, writes
through the CRM's own API. See docs/guides/matrix-intake.md and ROADMAP.md.
"""