TorbatYar/docs/service-snapshots/communication.yaml
Mortezakoohjani 10c3c43a75 feat(communication): add SMS MVP frontend with governance artifacts.
Ship the full Communication portal (real SMS API, feature-locked future channels), BFF proxy, docs, snapshot, and phase handover.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 11:11:25 +03:30

117 lines
5.0 KiB
YAML

# Communication Platform service snapshot — MVP feature-complete (SMS).
# Spec: docs/ai-framework/service-snapshot-policy.md
schema_version: 1
snapshot_version: 1
service_name: communication
commercial_product: Torbat Communication
current_version: "0.8.10.1"
current_phase: communication-8
last_completed_phase: communication-8
next_phase: null
completed_phases:
- communication-8
remaining_phases: []
registered_modules:
- providers
- senders
- templates
- contacts
- contact_sources
- messages
- queue
- delivery_tracking
- otp
- webhooks
- monitoring
- audit
enabled_capabilities:
- sms_messaging
- provider_registry
- communication_router
- template_engine
- dynamic_contact_sources
- queue_engine
- delivery_tracking
- otp_platform
- incoming_webhooks
- monitoring
- production_ready_sms_mvp
enabled_bundles:
- torbat_communication
public_apis:
- { method: GET, path: /health, permission: public }
- { method: GET, path: /health/ready, permission: public }
- { method: GET, path: /capabilities, permission: public }
- { method: GET, path: /metrics, permission: public }
- { method: GET, path: /api/v1/providers, permission: communication.providers.view }
- { method: POST, path: /api/v1/providers, permission: communication.providers.manage }
- { method: GET, path: /api/v1/providers/status, permission: communication.providers.view }
- { method: POST, path: /api/v1/providers/senders, permission: communication.senders.manage }
- { method: GET, path: /api/v1/templates, permission: communication.templates.view }
- { method: POST, path: /api/v1/templates, permission: communication.templates.manage }
- { method: POST, path: "/api/v1/templates/{id}/approve", permission: communication.templates.approve }
- { method: GET, path: /api/v1/contacts/manual, permission: communication.contacts.view }
- { method: POST, path: /api/v1/contacts/sources, permission: communication.sources.manage }
- { method: POST, path: /api/v1/contacts/resolve, permission: communication.contacts.view }
- { method: POST, path: /api/v1/messages/send, permission: communication.messages.send }
- { method: GET, path: /api/v1/messages, permission: communication.messages.view }
- { method: POST, path: "/api/v1/messages/{id}/cancel", permission: communication.messages.cancel }
- { method: POST, path: /api/v1/messages/queue/process, permission: communication.queue.manage }
- { method: GET, path: /api/v1/messages/queue/dead-letters, permission: communication.queue.view }
- { method: POST, path: /api/v1/otp/request, permission: communication.otp.request }
- { method: POST, path: /api/v1/otp/verify, permission: communication.otp.verify }
- { method: POST, path: /api/v1/webhooks/incoming, permission: communication.webhooks.manage }
- { method: GET, path: /api/v1/monitoring/stats, permission: communication.monitoring.view }
- { method: GET, path: /api/v1/monitoring/metrics, permission: communication.monitoring.view }
published_events:
- { event_type: communication.message.queued, version: "1" }
- { event_type: communication.message.sent, version: "1" }
- { event_type: communication.message.delivered, version: "1" }
- { event_type: communication.message.failed, version: "1" }
- { event_type: communication.message.cancelled, version: "1" }
- { event_type: communication.message.expired, version: "1" }
- { event_type: communication.provider.failover, version: "1" }
- { event_type: communication.provider.circuit_opened, version: "1" }
- { event_type: communication.provider.circuit_closed, version: "1" }
- { event_type: communication.template.approved, version: "1" }
- { event_type: communication.template.rejected, version: "1" }
- { event_type: communication.otp.generated, version: "1" }
- { event_type: communication.otp.verified, version: "1" }
- { event_type: communication.otp.failed, version: "1" }
- { event_type: communication.queue.dead_letter, version: "1" }
- { event_type: communication.webhook.received, version: "1" }
permission_prefix: communication.*
active_adrs:
- ADR-001
- ADR-003
- ADR-006
- ADR-012
integration_contracts:
- ChannelProvider (in-service protocol)
- CRM / Loyalty / Sports / Restaurant / Marketplace / Accounting contact resolve (HTTP only)
- Core auth OTP remains on Core (no shared tables)
known_limitations:
- MVP scope is SMS-only; Email/Push/WhatsApp/Telegram/Rubika/Voice are architecture-ready stubs
- Continuous Celery worker drain is optional ops work (API/process_immediately covers correctness)
- Real message bus consumers not wired (publish-only envelopes)
- Sender unique constraint is not soft-delete-aware
- In-process rate limiter is per-instance (acceptable for MVP)
- Future channels documented in communication-roadmap.md only — no registered 9.x phases
open_todos: []
last_handover_reference: docs/phase-handover/phase-8.md
last_updated: "2026-07-26"