From 7fe5f57c6ebd520dddd8fa5e3a1a8931a3a579db Mon Sep 17 00:00:00 2001 From: Keysat Date: Sat, 20 Jun 2026 11:28:26 -0500 Subject: [PATCH] docs: mark card phone/mobile capture shipped (v0.1.0:98) --- docs/guides/matrix-intake.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/guides/matrix-intake.md b/docs/guides/matrix-intake.md index 14f303b..5d01408 100644 --- a/docs/guides/matrix-intake.md +++ b/docs/guides/matrix-intake.md @@ -99,17 +99,17 @@ existing flow (parse → match → disambiguate → approve → `log-communicati in the audit log, threaded via the proposal's `_source` control key (`handle_intake(…, source=…)` → `crm_client.build_commit_payload`, which defaults to `"matrix_intake"` when absent). - **Fields captured** (`parse._FIELDS`): investor, contact, email, title, **city**, **linkedin_url**, - note. `city` is a plain extracted field (low-harm if wrong; the human sees it); `linkedin_url` - follows the **email-integrity rule** — kept only if it literally appears in the source/instruction, - never minted (a wrong profile URL points at the wrong person). Both ride to the contact via the - existing `log-communication` upsert (`_upsert_contact_from_fundraising` already honors them; `city` - also syncs to the grid contact pill, `linkedin_url` lands on the canonical contact record). -- **Phone is NOT captured yet (pending a server change).** The transcription reads the phone, but the - bot's write path (`_upsert_contact_from_fundraising`) doesn't accept a `contact.phone` today, so - phone is deliberately left off the card to avoid showing a field that won't persist. Enabling it is - a small additive server change (read `contact.phone` → write `contacts.phone`; contact-level, not a - grid pill field) that ships in an **s9pk** (version bump + install), paired with adding `phone` to - the bot's extractor/card/payload in the same deploy. Tracked agreed 2026-06-20. + **phone**, **mobile**, note. `city` is a plain extracted field (low-harm if wrong; the human sees + it). `linkedin_url`, `phone`, and `mobile` follow the **email-integrity rule** — kept only if they + literally appear in the source/instruction, never minted (for phone/mobile the check is digit-run + membership, ≥7 digits, in the source). Mapping (from the labeled transcription): an office/main/ + direct number → `phone`, a cell/mobile → `mobile`, a **fax is skipped**. All ride to the contact + via the existing `log-communication` upsert (`_upsert_contact_from_fundraising`); `city` also syncs + to the grid contact pill, the rest land on the canonical contact record (contact-level, not pills). +- **Phone/mobile shipped in v0.1.0:98 (live 2026-06-20).** The server half — `_upsert_contact_from_ + fundraising` accepting `contact.phone` + `contact.mobile` — is in the s9pk; the bot's transcription + (Phone/Mobile/Fax labels), extractor, and card shipped on the Spark in the same deploy, so phone + never showed on a card before the box could store it. - **UX:** the bot acks `📇 Reading the card…` before the (slower) vision call; an unreadable image (model replies `NONE`, or transcription < 5 chars) gets a "try a clearer, well-lit photo" reply instead of a garbage proposal.