Goal
Treat translation as two products, not one:
| Product |
Audience |
Behavior |
| In-group translation |
Smaller / V1 use case |
Translate (or dual-post) inside a single Signal group — the original product shape (!translate-on / per-user-in-group, etc.) |
| Language Threads |
High-functioning large mutual-aid groups |
Parallel sidecar groups per language, bridged to a bilingual main chat |
This branch / PR implements Language Threads. In-group translation should be a separate product that can ship and deploy on its own timeline.
Why
- Language Threads optimize for scale and monolingual lanes (many members, many langs, less dual-posting in main).
- In-group translation optimizes for one room, simpler mental model, V1 behavior organizers already know.
- Shipping both in one bot binary/CVM blurs product boundaries and ops (memory, feature flags, support).
Scope
Interoperability
- Transcription (separate product / CVM) should work with either translation product — see the transcription issue.
- The two translation products do not need to be mutually composable in one chat (pick one translation mode per deployment / group). They should both compose with transcription.
Related
Acceptance hints
- Clear README / docs per product
- An operator can deploy Language Threads without enabling in-group auto-translate, and vice versa
- Transcription CVM can be pointed at either product via documented config
Goal
Treat translation as two products, not one:
!translate-on/ per-user-in-group, etc.)This branch / PR implements Language Threads. In-group translation should be a separate product that can ship and deploy on its own timeline.
Why
Scope
!translate-onas the primary path.Interoperability
Related
docs/language-threads.mdon that branchAcceptance hints