Scope
Who needs the workflow, what is visible, and what stays out.
Trust boundary · Communications
Transactional property communications only. Owner-visible and staff-only threads are separate; guest messaging, campaigns, access/security secrets, and emergency dispatch are excluded.
Module proof path
See the workflow, proof, and operating limits in one scan before reviewing the detailed path.
Inspect proof Open demoWho needs the workflow, what is visible, and what stays out.
Screenshot, proof card, or demo path that makes the claim inspectable.
What requires human review or source evidence.
Why this page is short
Some areas are intentionally represented by a narrow public boundary instead of a full feature page. That keeps sensitive operations, access rules, and unfinished marketing claims out of the buyer-facing experience.
How we evidence thisEnforced boundary
Transactional property communications only. Owner-visible and staff-only threads are separate; guest messaging, campaigns, access/security secrets, and emergency dispatch are excluded.
BOUNDARY · apps/api/src/ironbound_api/modules/communications/router.py:146
5 further boundary constants in this module
This timeline is a projection over source records, not a second message store. Staff see only workspace/property-scoped records; owners see owner-visible records; vendors see their own account packages; resident and guest content remains case-token scoped.
BOUNDARY · apps/api/src/ironbound_api/modules/communications/timeline.py:31Phone records are provider-neutral operational metadata only. Raw phone numbers, live carrier commands, recording files, transcripts, payment data, and secrets are excluded.
PHONE_BOUNDARY · apps/api/src/ironbound_api/modules/communications/router.py:151A record that the contact asked to be contacted again, not a decision that they should be. It restores SMS consent only, is bound to the number on file at the moment it is recorded, and is stored with the acting subject and the stated evidence. It is weaker provenance than an inbound START and is labelled as such. It lifts the number-wide carrier suppression, because that suppression is a fact about the person and not about one property, and it records opt-in for this property only -- every other property keeps the setting it had.
SMS_RECONSENT_BOUNDARY · apps/api/src/ironbound_api/modules/communications/router.py:1909This is what the API did with the message, not a delivery receipt. A queued attempt has reached no one yet, an accepted attempt was taken by a provider and not confirmed to a recipient, and the portal copy interrupts nobody. No channel here promises background push delivery.
DELIVERY_DISCLOSURE_BOUNDARY · apps/api/src/ironbound_api/modules/communications/router.py:636SMS consent is enforced at two scopes. A carrier STOP suppresses the phone number across every property in the organization and cannot be overridden by any per-property setting; only an inbound START or a management-recorded re-consent releases it. Per-property preferences remain per-property and govern only what is sent while no suppression stands.
SMS_CONSENT_SCOPE_BOUNDARY · apps/api/src/ironbound_api/modules/communications/service.py:56Copied verbatim from apps/api/src/ironbound_api/modules/communications/router.py and regenerated from apps/api/src/ironbound_api/modules. The API returns these same strings in its boundary fields, and a drift check fails the build if this page and the source stop agreeing.
Pilot access
The best demo is not a feature checklist. It follows a request from owner intake to manager triage, vendor packet, field evidence, reviewed closeout, and owner-safe reporting.
We respond with the recommended demo route, who should attend, and what production access would require.