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>
117 lines
5.0 KiB
YAML
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"
|