Architecture Decisions
This section captures architectural decisions made on Open Chat Studio as Architecture Decision Records (ADRs). See ADR-0000 for the introduction.
Index
| ADR | Status | Title |
|---|---|---|
| 0000 | ACCEPTED | Record architecture decisions |
| 0001 | ACCEPTED | Use AWS SES + django-anymail signal handler for email ingress |
| 0002 | ACCEPTED | Slack-style routing priority chain for email channel |
| 0003 | ACCEPTED | Email thread continuity via ExperimentSession.external_id |
| 0004 | ACCEPTED | Persist inbound email attachments in the webhook handler |
| 0005 | ACCEPTED | Validate inbound email attachments by content sniffing |
| 0006 | ACCEPTED | Combine email reply text and attachments into a single message |
| 0007 | ACCEPTED | Adopt ty as the Python type checker |
| 0008 | ACCEPTED | Enable ty rules progressively from a baseline of all-ignored |
| 0009 | ACCEPTED | Context-based stateless message processing pipeline |
| 0010 | ACCEPTED | Exception-based early exit with guaranteed terminal stages |
| 0011 | ACCEPTED | Silent pipeline halt via EarlyAbort |
| 0012 | ACCEPTED | Lean Score value layer in apps/assessments |
| 0013 | ACCEPTED | Dual-write Scores from evaluations and annotations |
| 0014 | ACCEPTED | Minimal read-side concordance view backed by Score |
| 0015 | ACCEPTED | Dedicated human_annotations app with queue/item/annotation/aggregate model |
| 0016 | ACCEPTED | Authoritative annotation for multi-reviewer consensus |
| 0017 | ACCEPTED | Eager per-submission aggregation into a per-queue record |
| 0018 | ACCEPTED | Scope team querysets by FK identity, not slug join |
| 0019 | ACCEPTED | Poll source experiments to auto-populate evaluation datasets |
| 0020 | ACCEPTED | Delta evaluation runs scoped to newly appended messages |
| 0021 | PROPOSED | Invest in API surface, not a read-only role |
| 0022 | PROPOSED | URL-path API versioning, v1 frozen / v2 new |
| 0023 | PROPOSED | Rename experiment to chatbot in the v2 API |
| 0024 | PROPOSED | inspect as a denormalized read-only projection |
| 0025 | PROPOSED | Inline nested resource tree for the inspect payload |
| 0026 | PROPOSED | Identify v2-exposed resources by database primary key |
| 0027 | PROPOSED | Secrets exclusion via per-resource allowlist serializers |
| 0028 | PROPOSED | Inspect authorizes on chatbot view + team scope, not per-resource permissions |
| 0029 | ACCEPTED | Download WhatsApp inbound attachments in an overridden hydration stage |
| 0030 | ACCEPTED | Gate the email channel with a global allowed-domains setting |