ELA · outbound comms · review board · 2026-08-17

Every message we send stakeholders

Every outbound template ELA composes for someone outside the building — law firms, consulates, trusted contacts, members, the ops desk, the insurer — inventoried from the code with file:line receipts, shown with realistic fake sample data (no real member data anywhere), and paired with a proposed rewrite. Where a template is already right, it says so and proposes nothing.

11
Law firm
4
Consulate
6
Trusted contact
14
Member
7
Ops desk
1
Insurer
43
Total sends

What “[simulated]” means: the prefix is stamped by server.ts:20436 whenever the runtime mode isn’t production — today’s safe-mode prod stamps it on purpose so nothing looks like a real dispatch. It disappears by itself the day providers go live; it is not part of any template and no rewrite needs to remove it.

Comms are dormant: email/SMS/WhatsApp providers aren’t enabled yet — everything here is captured in the safe outbox or simulated. That makes now the cheap moment to fix the words.

How to review: mark up this page or reply with edits per card — each card has a “✎ your edits” line. Nothing ships until you sign off.

Highlighted values are variable slots filled at send time · red slots mean the value isn’t plumbed to that compose site yet (one small server change) · Sample data: member Omar, contact Layla, firm Al Manara Legal Consultants, public ref ELA-4C2-9F1, internal id case_MTNmMThmZWMt… (≈50–90 chars).

Section 1 · 11 templates

Law firms

Tone: professional, counsel-to-counsel. Two code paths compose firm messages: the live safe outbox (raw internal ids — the ones you saw) and the durable drain (already uses ELA-XXX-XXX). Rewrites below unify both on the public ref.

New-case intake — email
raw case idno link in body
server.ts:20000–20004 · composed :20865 (dispatch), :20555 (cycled firm)

Sent to the firm the moment a case is dispatched to it — and again each time the round-robin cycles a new firm in.

Current

SubjectELA emergency intake case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
ELA emergency case case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw. Open the secure intake link in the admin/firm portal and accept or decline immediately.
  • The ~50–90-char internal id fills the subject; unreadable on any phone.
  • “admin/firm portal” is internal naming a firm has never heard.
  • Says “open the secure intake link” but the email carries no link — the link arrives by SMS. Never explained.
  • No emirate, no time received, no consequence for silence.

Proposed

SubjectNew ELA case ELA-4C2-9F1 — response requested
Dear Al Manara Legal Consultants, ELA has opened urgent case ELA-4C2-9F1 in Dubai, received at 14:32 Dubai time. An ELA member reports an arrest and needs counsel now. Your secure case brief — with the intake link to accept or decline — has been sent to your duty number by SMS. Please respond as soon as you open it. If no response is recorded, the case moves to the next firm and ELA operations is copied. ELA response coordination Quote ELA-4C2-9F1 in any correspondence.

Public ref is free here: createPublicCaseReference(caseId) is derivable at this compose site (it already computes it two lines later for the durable row). Emirate and received-at come from storedCase.

✎ your edits:
New-case intake — SMS
SMSraw case idemail body reused
server.ts:20000–20003 · composed :20874, :20564

Sent to the firm’s duty number at the same moment as the intake email (live-outbox path).

Current

ELA emergency case case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw. Open the secure intake link in the admin/firm portal and accept or decline immediately.
  • Identical body to the email — the internal id alone nearly fills one SMS segment.
  • Points at a link the SMS doesn’t contain (the drain’s magic-link SMS carries it).

Proposed

ELA: urgent case ELA-4C2-9F1 in Dubai. Your secure intake link follows by SMS. Accept or decline on opening.

One segment. Names the emirate, promises the link honestly.

✎ your edits:
Case brief with signed links — email (drain)
robotic
packages/comms/src/index.ts:1070–1085 · drained via server.ts:13409

Sent to the firm by the durable notification drain: the real deliverable brief, with freshly minted time-limited links.

Current

SubjectELA urgent case brief ELA-4C2-9F1
Al Manara Legal Consultants, ELA has opened urgent case ELA-4C2-9F1. Open the signed time-limited links below for the case packet. 1. https://ela.example/brief/a1b2c3…
  • Already uses the public ref — good. But no salutation, no ask (accept/decline never mentioned), links labelled “Secure document 1” in the HTML variant.

Proposed

SubjectELA case brief ELA-4C2-9F1
Dear Al Manara Legal Consultants, Your case brief for urgent ELA case ELA-4C2-9F1 is ready. Open the signed link below to review the brief and accept or decline the case. The link is time-limited to protect the member’s privacy. 1. Case brief and intake — https://ela.example/brief/a1b2c3… ELA response coordination

Names the action and why the link expires. HTML anchor text becomes “Case brief and intake”.

✎ your edits:
Intake magic link — SMS / WhatsApp (drain)
SMSnear fine
packages/comms/src/index.ts:988–990 · drained via server.ts:13481, 13445

Sent to the firm’s duty number by the drain — this is the message that actually carries the intake link.

Current

ELA urgent case ELA-4C2-9F1: Al Manara Legal Consultants, open secure intake https://ela.example/i/k7Jq…
  • Sound structure and public ref. The firm’s own name spends ~30 chars telling them who they are.

Proposed

ELA urgent case ELA-4C2-9F1: open your secure intake to accept or decline — https://ela.example/i/k7Jq…

Minor polish only: drop the self-addressed label, name the action.

✎ your edits:
Intake SLA breached, grace window — email
raw case idraw ISO timestamp
server.ts:20451–20459

Sent to the firm when it missed the intake SLA and a short grace window opens before the case moves on.

Current

Subject[simulated] ELA SLA breach grace case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
[simulated] ELA emergency case case_MTNmMThmZWMt… firm intake SLA breached. Post-escalation grace is 10 minutes and ends at 2026-08-15T15:07:00.000Z. Accept or decline before then; ops is copied and will advance the case if no response is recorded.
  • Raw internal id in subject and body.
  • Machine timestamp (…T15:07:00.000Z) — UTC, not Dubai time, in a message about a deadline.
  • “Post-escalation grace” is our state-machine vocabulary, not counsel language.

Proposed

SubjectELA case ELA-4C2-9F1 — response window closing
Dear Al Manara Legal Consultants, The intake window for urgent case ELA-4C2-9F1 has passed without a response. You have 10 minutes of grace, until 19:07 Dubai time. Accept or decline within it; after that the case moves to the next firm. ELA operations is copied. ELA response coordination

Deadline rendered in Gulf time at compose (the ISO instant is already in hand — formatting only).

✎ your edits:
Intake SLA breached, grace window — SMS
SMSraw case idraw ISO timestamp
server.ts:20462–20470

Same trigger as the grace email; the duty-number nudge.

Current

[simulated] ELA case case_MTNmMThmZWMt…: intake SLA breached. Grace 10 min until 2026-08-15T15:07:00.000Z; ops copied. Accept/decline now.
  • Raw id + ISO instant burn most of the segment; “ops copied” is jargon.

Proposed

ELA case ELA-4C2-9F1: response window closing. 10 min grace until 19:07 Dubai time. Accept or decline now.
✎ your edits:
Acceptance verification code — SMS
SMSraw case id
server.ts:21703

Sent to the firm’s duty number when a lawyer taps “accept” on the secure brief — the OTP that makes acceptance attributable.

Current

[simulated] ELA case case_MTNmMThmZWMt…: your acceptance verification code is 481923. It expires in 5 minutes. Enter it on the secure brief to take the case.
  • The code is buried mid-message behind a 50-char id — bad for a lawyer reading a lockscreen under time pressure, and it defeats OS code autofill.

Proposed

Your ELA acceptance code is 481923. It expires in 5 minutes. Enter it on the secure brief to confirm you are taking case ELA-4C2-9F1.

Leads with “code is 481923” — the phrasing iOS/Android autofill detects — and closes with the quotable ref.

✎ your edits:
Case closed — email · THE FOUNDER’S EVIDENCE
raw case id
server.ts:20696–20704

Sent to the acting firm when the case reaches a terminal state — e.g. the member ends the case.

Current

Subject[simulated] ELA case closed case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
[simulated] ELA case case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw is now closed: the member ended the case. No further action is required; this engagement is complete.
  • This is the email that prompted this board: the internal id monster in subject and body.
  • No thanks, no follow-up path for the firm’s invoice/records questions.

Proposed

SubjectELA case ELA-4C2-9F1 — closed
Dear Al Manara Legal Consultants, Case ELA-4C2-9F1 is closed: the member ended the case. The engagement is complete and no further action is needed. Thank you for responding. Quote ELA-4C2-9F1 in any follow-up with ELA operations. ELA response coordination
✎ your edits:
Case closed — SMS
SMSraw case id
server.ts:20707–20715

Duty-number counterpart of the closure email.

Current

[simulated] ELA case case_MTNmMThmZWMt… closed: the member ended the case. No further action required.
  • Raw id.

Proposed

ELA case ELA-4C2-9F1 closed — the member ended the case. No further action needed.
✎ your edits:
Case closed notice — email (drain, shared template)
one template, two audiences
packages/comms/src/index.ts:1008–1021 · routed server.ts:13344–13357

The durable drain’s closure notice — the same rendered copy goes to the firm and to the trusted contact (only the link differs).

Current

SubjectELA case closed ELA-4C2-9F1
Al Manara Legal Consultants, The emergency case ELA-4C2-9F1 is closed. No further emergency action is required. View closure status: https://ela.example/c/t0k3n…
  • Structural: one template can’t speak to a lawyer and to Omar’s sister at once — so it speaks to neither.
  • “No further emergency action is required” is state-machine English.

Proposed

SubjectELA case ELA-4C2-9F1 — closed
FIRM VARIANT — as the live closure email above (Dear firm, case closed, engagement complete, thank you). CONTACT VARIANT — see “Trusted contacts → Case closed” below (warm, name-led, closure page link).

Split the template into firm_case_closed / contact_case_closed: the drain already knows target_type at render time (server.ts:13399–13406), so the split is a template-id switch, not new plumbing.

✎ your edits:
Case closed notice — SMS / WhatsApp (drain, shared template)
SMSshared audiences
packages/comms/src/index.ts:981–983

Drain closure notice over SMS/WhatsApp — firms get it linkless, contacts get a closure-status link.

Current

ELA case ELA-4C2-9F1 is closed. No further emergency action is required. View closure status https://ela.example/c/t0k3n…
  • Same shared-audience problem in miniature.

Proposed

Firm (linkless)
ELA case ELA-4C2-9F1 closed. No further action needed.
Contact (with link)
ELA: the case is closed — nothing more is needed from you. How it went: https://ela.example/c/t0k3n…
✎ your edits:
Section 2 · 4 templates

Consulate duty desks

Tone: formal, factual, quotable. A duty officer must be able to log the case from the subject line alone — today’s dispatch subject carries no case identity at all.

Consular notification at dispatch — email
no ref in subjectraw case idjargon
server.ts:20006–20011 · composed :20927–20946 (packet attached)

Sent to the duty desk of the member’s consulate the moment a case dispatches; the signed case packet rides as an attachment.

Current

SubjectELA consular emergency notification
Nearest consulate fallback for IN, routed to Consulate-General of India, Dubai. ELA consular notification for emergency case case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw. Review the signed case packet and contact ops if the duty desk cannot assist.
  • Subject has no case identity — every consular email looks identical, nothing to quote or file.
  • Our internal routing note leads the body when a fallback fired — the reader’s first sentence is our plumbing.
  • “Contact ops” — a duty desk doesn’t know what “ops” is or how to reach it.
  • Who is ELA? First-contact recipients get no one-line identity.

Proposed

SubjectUrgent — ELA case ELA-4C2-9F1, consular assistance
To the duty desk, Consulate-General of India, Dubai, ELA (Emergency Legal Assistance, UAE) has opened urgent case ELA-4C2-9F1: a member reports an arrest in the UAE and consular assistance may be required. The signed case packet is attached. Please quote ELA-4C2-9F1 in any enquiry. If your desk cannot assist, reply to this address and ELA will re-route the case. Routing note: no UAE post is listed for IN; this notification went to the nearest desk. ELA response coordination — reachable any hour.

Ref in the subject; identity sentence first; routing note demoted to a labelled footnote that only renders on fallback.

✎ your edits:
Consular case packet, linkless — email (drain)
near fine
packages/comms/src/index.ts:1049–1060

The drain’s consular send when no packet artefact exists yet — honest “packet follows” notice.

Current

SubjectELA urgent consular case ELA-4C2-9F1
Consulate-General of India, Dubai, ELA has opened urgent case ELA-4C2-9F1 requiring consular assistance. The signed case packet follows from ELA operations; please quote the case reference in any enquiry.
  • Sound: public ref, quotable, honest about the packet. Only the ELA identity line is missing.

Proposed

SubjectUrgent — ELA case ELA-4C2-9F1, consular assistance
To the duty desk, Consulate-General of India, Dubai, ELA (Emergency Legal Assistance, UAE) has opened urgent case ELA-4C2-9F1 and consular assistance may be required. The signed case packet follows shortly from ELA. Please quote ELA-4C2-9F1 in any enquiry. ELA response coordination — reachable any hour.

Light touch: identity line + aligned subject with the dispatch email.

✎ your edits:
Consular case packet, with signed links — email (drain)
packages/comms/src/index.ts:1070–1085

Drain consular send when signed packet links exist — currently reuses the generic firm-brief body.

Current

SubjectELA urgent consular case ELA-4C2-9F1
Consulate-General of India, Dubai, ELA has opened urgent case ELA-4C2-9F1. Open the signed time-limited links below for the case packet. 1. https://ela.example/pkt/z9y8…
  • Generic firm wording for a consulate; “Secure document 1” anchor text; no reason the links expire.

Proposed

SubjectUrgent — ELA case ELA-4C2-9F1, consular assistance
To the duty desk, Consulate-General of India, Dubai, ELA (Emergency Legal Assistance, UAE) has opened urgent case ELA-4C2-9F1 and consular assistance may be required. The signed case packet is available at the time-limited link below; it expires to protect the member’s privacy. Please quote ELA-4C2-9F1 in any enquiry. 1. Case packet — https://ela.example/pkt/z9y8… ELA response coordination — reachable any hour.
✎ your edits:
Consular stand-down at closure — email
raw case id
server.ts:20743–20751

Sent to every consulate that was notified for the case, when the case closes.

Current

Subject[simulated] ELA consular case closed case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
[simulated] ELA consular notification for emergency case case_MTNmMThmZWMt…: the case is now closed (the member ended the case). No further consular action is required.
  • Raw id; can’t be matched to the (equally unquotable) dispatch email it stands down.

Proposed

SubjectELA case ELA-4C2-9F1 — closed, no consular action
To the duty desk, Consulate-General of India, Dubai, ELA case ELA-4C2-9F1 is now closed (the member ended the case). No further consular action is required. Thank you for standing by. ELA response coordination

Subject-line ref lets the desk match stand-down to notification in their own inbox.

✎ your edits:
Section 3 · 6 templates

Trusted contacts

Tone: the response-arc voice of the family status page (“Omar’s response is underway”, “Nothing is needed from you”, “A person at ELA, any hour”). Warm, honest, no legalese, no case-machinery. The member’s first name is the anchor — today no message carries it, and the drain can’t (yet) even fetch it.

Emergency alert at dispatch — SMS / WhatsApp / email
SMSraw case idcold
server.ts:20013–20017 · composed :21031–21039

Sent to every trusted contact the member entered, the moment their case dispatches. The scariest message ELA will ever send a family member.

Current

Subject (email)ELA emergency alert case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
ELA emergency alert for case case_MTNmMThmZWMt…. Follow the secure status link from ELA for updates. Do not reply with sensitive details.
  • Layla has possibly never heard of ELA; nothing says who this is about or why she got it.
  • “Case”, internal id, “Do not reply with sensitive details” — machinery vocabulary at the worst possible moment.
  • No member name (fetchable at this compose site — one kycProfiles lookup).

Proposed

SMS / WhatsApp
ELA: Omar pressed his emergency button and named you as his trusted contact. His response has started. A private status link follows by text.
Email — subject: “Omar’s ELA response is underway”
Layla, Omar pressed his ELA emergency button. His response began at once — a lawyer is being engaged and the right people are being told. A private status link is on its way to you by text. Nothing is needed from you right now. A person at ELA, any hour: +971 4 000 0000 ELA · Emergency Legal Assistance

Gaps to plumb: member first name (derivable at this site from userId) and the support phone (config). Case ref intentionally dropped from the family copy — the status page carries it.

✎ your edits:
Live status link — SMS / WhatsApp (drain)
SMSzero context
packages/comms/src/index.ts:991 · drained via server.ts:13481

The drain-delivered message that actually carries Layla’s private status-page link (fresh link at each milestone).

Current

ELA case ELA-4C2-9F1: view live status https://ela.example/c/t0k3n…
  • Reads like a server log. No who, no why, no reassurance — a family member’s first tap deserves one sentence of context.
  • Member first name is not available in the drain’s template input (caseReference + recipientLabel only).

Proposed

ELA: Omar named you as his trusted contact. Follow his response live — private to you: https://ela.example/c/t0k3n…

Needs plumbing: pass the member’s first name into the drain template input (or resolve it at drain time like the recipient is). Fallback without the name: “ELA: you were named as a trusted contact. Follow the response live — private to you: link”.

✎ your edits:
Live status link — email (drain)
cold
packages/comms/src/index.ts:1023–1035

Email counterpart for contacts who gave an address.

Current

SubjectELA emergency alert ELA-4C2-9F1
Layla, ELA has opened emergency case ELA-4C2-9F1. Do not reply with sensitive details. View live status: https://ela.example/c/t0k3n…
  • “Do not reply with sensitive details” as the entire second sentence — the reader is told off before being told anything.

Proposed

SubjectOmar’s ELA status — your private link
Layla, You were named as a trusted contact on an ELA emergency response. It is underway, and you can follow it live on your private page: View live status: https://ela.example/c/t0k3n… Fresh links arrive at each milestone. Nothing is needed from you. This inbox isn’t monitored — a person at ELA can talk any hour: +971 4 000 0000. ELA · Emergency Legal Assistance

Borrowed straight from the status page’s own language (trusted-contact/status/page.tsx). Same name/phone plumbing gaps as the SMS.

✎ your edits:
Case closed (resolved) — SMS / WhatsApp / email
SMSraw case id
server.ts:20768–20787

Sent to every alarmed contact when the case closes with a resolved outcome.

Current

Subject (email)ELA case closed case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
ELA update for case case_MTNmMThmZWMt…: the emergency case is now closed. No further action is needed.
  • The status page says “Omar is safe. The case is closed.” — the text that alarmed the family says “case closed” like a ticket system.

Proposed

SMS / WhatsApp
ELA: Omar’s case is closed. Nothing more is needed from you.
Email — subject: “Omar’s ELA case is closed”
Layla, Omar’s ELA case is closed. Nothing more is needed — from him, or from you. ELA · Emergency Legal Assistance

Deliberately reason-neutral (close reasons include ops stand-downs); the closure page tells the fuller story. “Is safe” only where the member confirmed — that nuance lives on the page, not in a blast.

✎ your edits:
Case ended without confirmed outcome — SMS / WhatsApp / email
SMSraw case idjargon
server.ts:20768–20771 (closed_failed branch)

The harder variant: the case ended but the member’s outcome is unconfirmed. Must stay honest without alarming.

Current

ELA update for case case_MTNmMThmZWMt…: this case has ended. If you have any concerns, you can reach ELA ops through the app or the case status page.
  • “ELA ops” — jargon; and Layla doesn’t have “the app”, she has a text link.

Proposed

ELA: Omar’s case has ended. If anything worries you, a person at ELA can talk any hour: +971 4 000 0000.

Keeps the honest asymmetry with the resolved copy (no “nothing more is needed”), and gives a human route instead of “ops”.

✎ your edits:
Closure notice — drain (shared with firm)
SMSshared template
packages/comms/src/index.ts:1008–1021, 981–983

The durable drain’s closure send to contacts (with closure-status link). Covered structurally under Law firms → “Case closed notice (drain, shared template)”.

Current

Same rendered copy as the firm’s drain closure — see the shared-template card above.

Proposed

SubjectOmar’s ELA case is closed
Layla, The case is closed. Nothing more is needed from you. How the response went, on your private page: View closure page: https://ela.example/c/t0k3n… ELA · Emergency Legal Assistance

Lands with the template split proposed above (contact_case_closed).

✎ your edits:
Section 4 · 14 sends

Members

Mostly push notifications, and mostly already good — the case-lifecycle pushes were written under the current copy laws and are proposed unchanged. The KYC/document emails still speak internal process language.

Sign-in & phone-change verification codes — SMS
SMSunchanged
packages/auth/src/otp.ts:85 · server.ts:32909

The login OTP and the phone-change OTP (identical copy).

Current

Your ELA verification code is 481923. It expires in 5 minutes.

Proposed

Leave as is. Short, autofill-friendly (“code is …”), no ids, no fluff. Changing it would be churn.
✎ your edits:
Verification decision ready — push
Pushunchanged
server.ts:4464–4465

Sent when a KYC review (manual or document-exception) reaches a decision — deliberately outcome-free on the lockscreen.

Current

TitleVerification update
Your verification review is complete. Open ELA to see the result.

Proposed

Leave as is. Outcome-free by design — a rejection must not render on a lockscreen. Correct as written.
✎ your edits:
Document resubmission ask — email
internal jargon
server.ts:18115–18131

Sent when the automated pre-screen flags a KYC document and the member needs to upload a clearer one.

Current

SubjectELA document resubmission needed
We need one clearer passport upload before ops can close your document review. Reason: glare obscures the photo page. You can continue to checkout; upload a replacement document from ELA and it will be checked again automatically.
  • “before ops can close your document review” — internal process narrated to a customer.
  • “Resubmission” in the subject reads like a government portal.

Proposed

SubjectELA — one clearer photo of your passport
We need one clearer photo of your passport to finish your document check. Reason: glare obscures the photo page. Nothing else is held up — you can continue to checkout. Upload a replacement in the ELA app and it will be checked again automatically.
✎ your edits:
Document expiring — push
Pushinternal jargon
server.ts:7423–7438

Sent ahead of a tracked document’s expiry (passport / Emirates ID / residence visa; 30-day and 1-day marks).

Current

TitleDocument renewal needed
Your Emirates ID expires in 30 days. Re-upload the renewed document in ELA so the server pre-screen can check it automatically.
  • “the server pre-screen” — nobody outside this repo knows what that is.

Proposed

TitleDocument renewal needed
Your Emirates ID expires in 30 days. When you renew it, add the new copy in ELA and we’ll check it automatically.
✎ your edits:
Membership renewal reminder — push
Pushcontract-speak
server.ts:7787–7795

Sent ahead of the fixed-term membership’s end date.

Current

TitleELA renewal reminder
Your fixed-term ELA membership expires in 7 days. Renew before then to keep protection active.
  • “Fixed-term” is contract vocabulary — the member just has a membership.

Proposed

TitleELA renewal
Your ELA membership ends in 7 days. Renew to keep your protection active.
✎ your edits:
Case lifecycle pushes (5) — push
Pushunchanged
server.ts:4549–4580

The five member pushes across an active case: deadman auto-dispatch, firm accepted, reassigning, ops escalated, verification requested.

Current

deadman_dispatched
Help is on the way — Your countdown ended and we alerted your response team. Open ELA when you can.
firm_accepted
A lawyer has your case — Your duty lawyer will call you shortly. Answer unknown numbers.
reassigning
We’re finding another lawyer — Your case is being re-assigned — you don’t need to do anything.
ops_escalated
Our team is on your case — Our response team is coordinating your case directly. You don’t need to do anything.
verification_requested
Your lawyer reports this is resolved — Open ELA to confirm you’re okay. If you still need help, we’re here.

Proposed

Leave all five as is. Written under the current copy laws: no PII on the lockscreen, “response team” not “legal team”, never alarming, one behavioural instruction where it matters (“Answer unknown numbers”). These are the standard the rest of the board is being raised to.
✎ your edits:
Duress-flagged case — sanitized push
Pushunchanged
server.ts:4589–4592

Replaces every case push when the case carries a duress flag (plumbing dormant in v1) — nothing on the device may hint a case exists.

Current

TitleReminder
Open ELA when you can.

Proposed

Leave as is. Deliberately content-free; mirrors the client’s sanitizer byte for byte. Do not touch.
✎ your edits:
Help-desk reply — push
Pushminor
server.ts:5164–5165

Sent when ops replies to a member’s Help thread; the reply text itself renders only in-app.

Current

TitleELA
Our operations team replied to your message.
  • “Operations team” is mild jargon; otherwise fine.

Proposed

TitleELA
Our team replied to your message. Open ELA to read it.
✎ your edits:
Case-chat reply — push
Pushunchanged
server.ts:5238–5239

Sent when the member’s case coordinator replies in case chat (suppressed entirely on duress cases).

Current

TitleELA
New message from your coordinator

Proposed

Leave as is. Content-free by design, correct tone.
✎ your edits:
Section 5 · 7 templates

Ops desk

Internal recipients (today: your own phone/email as test stand-ins), but these still land in real inboxes and pagers. Convention proposed: public ref leads everywhere a human reads; the internal id survives as a final “Internal:” line for console tooling.

SLA-breach cc — email
raw case id
server.ts:20475–20483

Copies ops when a firm’s intake SLA breaches and the grace notice goes out.

Current

Subject[simulated] ELA ops cc SLA breach case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw
[simulated] CC: firm SLA breach notice sent for case case_MTNmMThmZWMt… to Al Manara Legal Consultants. Post-escalation grace is 10 minutes and ends at 2026-08-15T15:07:00.000Z.
  • Raw id in subject; “CC:” prefix inside the body; UTC instant.

Proposed

SubjectELA ops — SLA breach ELA-4C2-9F1
Firm intake SLA breached on ELA-4C2-9F1. Grace notice sent to Al Manara Legal Consultants; 10 min grace ends 19:07 GST. No action needed unless the grace lapses. Internal: case_MTNmMThmZWMt…
✎ your edits:
All firms exhausted — email
raw case id
server.ts:20515–20523

Sent when the round-robin runs out of firms and ops must run the case manually.

Current

Subject[simulated] ELA ops fallback all firms exhausted case_MTNmMThmZWMt…
[simulated] All configured law firms are exhausted for case case_MTNmMThmZWMt…. Ops handles manually from the case console and runbook. Last firm: firm_almanara_dxb.
  • Raw ids; the one email that should scream priority has a subject nobody can scan.

Proposed

SubjectELA ops — ACTION: no firm accepted ELA-4C2-9F1
Every firm declined or timed out on ELA-4C2-9F1. Take the case manually from the console (dispatch-fallback runbook). Last firm tried: Al Manara Legal Consultants. Internal: case_MTNmMThmZWMt…
✎ your edits:
Firm contact-confirmation action — email
raw case id
server.ts:20606–20630

Sent when an accepted firm misses the 2-working-hour client-contact confirmation, or explicitly withdraws.

Current

Subject[simulated] ELA firm contact confirmation action case_MTNmMThmZWMt…
[simulated] ELA case case_MTNmMThmZWMt…: accepted firm missed the 2 working-hour client-contact confirmation timer due at 2026-08-15T16:32:00.000Z; ops should chase while the case re-enters round-robin. Firm: firm_almanara_dxb.
  • A 40-word run-on reason clause; firm shown by internal id, not name.

Proposed

SubjectELA ops — chase firm on ELA-4C2-9F1
Al Manara Legal Consultants accepted ELA-4C2-9F1 but missed the 2-working-hour client-contact confirmation (was due 18:32 GST). Chase the firm; the case is back in round-robin meanwhile. Internal: case_MTNmMThmZWMt… · firm_almanara_dxb
✎ your edits:
Firm acceptance recorded — email
raw case id
server.ts:21753–21770

The attributed-acceptance record: firm + acting lawyer + confirmation timestamp. Doubles as a legal attribution artefact — content must stay complete.

Current

Subject[simulated] ELA firm accepted case_MTNmMThmZWMt…Al Manara Legal Consultants
[simulated] Firm acceptance recorded for case case_MTNmMThmZWMt…. Acting firm: Al Manara Legal Consultants (firm_almanara_dxb). Acting lawyer: Sara Haddad. Legally attributed at confirmation 2026-08-15T14:41:03.000Z. ELA operations now tracks first contact.
  • Raw id in the subject pushes the firm name (the scannable fact) off a phone screen.

Proposed

SubjectELA ops — firm accepted ELA-4C2-9F1 (Al Manara)
Acceptance recorded on ELA-4C2-9F1. Acting firm: Al Manara Legal Consultants (firm_almanara_dxb). Acting lawyer: Sara Haddad. Attributed at confirmation: 2026-08-15T14:41:03Z (kept verbatim — attribution record). First-contact tracking is running. Internal: case_MTNmMThmZWMt…

Attribution timestamp stays ISO on purpose — this one is a record, not prose.

✎ your edits:
Consulate routing alert — email
raw case id
server.ts:20020–20025, 20969–20991

Sent to ops when a member’s country has no UAE consulate in the directory (routed to nearest, or nothing viable found).

Current

SubjectELA ops notification case_MTNmMThmZWMt…
No UAE consulate for IN; routed to nearest Consulate-General of India, Dubai. ELA ops notification for case case_MTNmMThmZWMt…. Open the ops console for current state and runbook.
  • Generic subject hides the one thing that matters (routing anomaly); raw id.

Proposed

SubjectELA ops — consulate routing check ELA-4C2-9F1
No UAE consulate for IN; routed to nearest: Consulate-General of India, Dubai. Verify the routing on ELA-4C2-9F1 from the console. Internal: case_MTNmMThmZWMt…
✎ your edits:
Ops paging — email + SMS + voice script
SMSVoiceraw case id
packages/comms/src/index.ts:1197–1225

The pager: fires on hard escalations (reason-coded), with a [DURESS] prefix when flagged. Terse on purpose.

Current

Subject[DURESS] ELA ops escalation case_MTNmMThmZWMt…: firm sla exhausted
Email/voice: [DURESS] ELA ops escalation for case case_MTNmMThmZWMt…. Reason: firm sla exhausted. Open the ops console and take ownership of this case. SMS: [DURESS] ELA ops escalation case_MTNmMThmZWMt…: firm sla exhausted. Open ops console.
  • An on-call phone reading a 50-char id aloud in a voice call; the ref would page cleanly.

Proposed

Subject[DURESS] ELA page ELA-4C2-9F1: firm SLA exhausted
Email/voice: [DURESS] ELA ops page for ELA-4C2-9F1. Reason: firm SLA exhausted. Open the console and take ownership. Internal: case_MTNmMThmZWMt… (email only) SMS: [DURESS] ELA page ELA-4C2-9F1: firm SLA exhausted. Open console.

Keeps the pager terseness and the [DURESS] convention; a voice call can actually say “ELA-4C2-9F1”.

✎ your edits:
Internal ops notice — email (drain)
near fine
packages/comms/src/index.ts:1036–1048 · queued from server.ts:20491, 20531, 20995, 11587

The durable, linkless ops record the drain sends for SLA breaches, exhaustion, routing alerts and voice-note salvage notices. Linkless by design (stores send intent only).

Current

SubjectELA internal ops notice ELA-4C2-9F1
ELA Ops Desk, An internal ops escalation was recorded for case ELA-4C2-9F1. Review the case in the ELA admin console for details and next actions.
  • Public ref, honest about being a pointer — structurally right. Only gap: which escalation? All reasons render identically.

Proposed

Keep the shape; optionally thread the reason code onto the durable row so the drained notice can say which escalation it records. Copy itself needs no rewrite.
✎ your edits:
Section 6 · 1 template

Insurer (FNOL)

The First Notice of Loss email to the underwriter’s FNOL address. A reconciliation document — claim/policy ids are the point here, so this is a light touch, not a rewrite.

First Notice of Loss — email
light touch
server.ts:7280–7311 · sent :33866–33877

Sent to the insurer’s FNOL address when ops submits a filed claim.

Current

SubjectFNOL clm_8f31c2 — policy SUK-ELA-002211
First Notice of Loss — ELA legal-expense insurance Claim reference: clm_8f31c2 Policy number: SUK-ELA-002211 Member name: Omar Al Rashid Member reference: 7c1d2e3f-49ab-4cde-9012-3456789abcde Case reference: case_MTNmMThmZWMtYzY4NC00ZjY0LTk0MDgtN2E2NDI2NzlhM2Mw Incident reported at: 2026-08-15T14:32:00.000Z Incident summary: Member arrested in Dubai; duty lawyer engaged via ELA dispatch. Legal fees claimed: AED 12,500.00 Bail bond claimed: AED 20,000.00 Prior-exclusion verdict: no exclusion (checked 2026-08-15T14:35:00.000Z)
  • “Case reference” hands the insurer the internal id — the public ref is the identity ELA staff can actually discuss on a call.
  • Raw member uuid labelled “Member reference” — meaningless to the insurer; keep it, but label it as ELA’s reconciliation id.

Proposed

SubjectFNOL clm_8f31c2 — policy SUK-ELA-002211
First Notice of Loss — ELA legal-expense insurance Claim reference: clm_8f31c2 Policy number: SUK-ELA-002211 Member name: Omar Al Rashid ELA member id (reconciliation): 7c1d2e3f-49ab-4cde-9012-3456789abcde ELA case: ELA-4C2-9F1 Incident reported at: 2026-08-15T14:32:00.000Z Incident summary: Member arrested in Dubai; duty lawyer engaged via ELA dispatch. Legal fees claimed: AED 12,500.00 Bail bond claimed: AED 20,000.00 Prior-exclusion verdict: no exclusion (checked 2026-08-15T14:35:00.000Z)

Structure, ids and timestamps kept verbatim (reconciliation document); only the case identity swaps to the quotable ref.

✎ your edits:

Not on this board (deliberately)

Notification-audit ledger rows (delivery_blocked_config / delivery_failed_terminal / ops_escalated, server.ts:13662–13732) are append-only audit records, not sends — nobody receives them. In-app marketing/paywall copy (server.ts:25511 ff.) is screen copy, not outbound comms. Watch/phone push payload plumbing without human copy is likewise excluded.

Cross-cutting changes the rewrites assume: ① every live-outbox compose site swaps caseIdcreatePublicCaseReference(caseId) in recipient-facing text (already computed for the durable rows at the same sites); ② deadline instants render as Gulf time at compose; ③ member first name + support phone get plumbed to the trusted-contact compose sites and drain template input; ④ case_closed_notice splits into firm/contact variants. Nothing ships until you sign off here.