Multi-channel communications hub for Books in Hand — aggregates BH/personal text, email, voice, Messenger, and more into one triage interface.
Find a file
pyr0ball 75ee9f8117 fix: prevent Discord embed field 400s from empty/oversized values
C1: build_ping_embed set sender_id field value="" whenever sender_id was
None, which manual_share.py always passes -- Discord rejects empty embed
field values (min length 1), so every manual-share ping failed to send.
Fixed by using a zero-width space sentinel that round-trips back to ""
(raw_content) or None (sender_id) in parse_ping_embed. Added regression
tests asserting no field value is ever empty after build_ping_embed runs.

C2: raw_content over 1024 chars (Discord's embed field cap) caused
inbox.send() to raise before the UID was marked seen, so oversized emails
were retried forever and never ingested. Added a defensive hard truncation
in build_ping_embed itself, plus an explicit truncation in email_ingest.py
before the embed is built (lossy for very long emails, acceptable for MVP).
2026-07-13 15:01:23 -07:00
backend chore: add docker-compose stack and Caddy config for deployment 2026-07-13 14:36:37 -07:00
bot fix: prevent Discord embed field 400s from empty/oversized values 2026-07-13 15:01:23 -07:00
docs docs: add manual end-to-end smoke test checklist 2026-07-13 14:50:13 -07:00
frontend fix: match ItemModal stagesForType() to backend valid_stages_for() contract 2026-07-13 14:25:28 -07:00
.env.example chore: add docker-compose stack and Caddy config for deployment 2026-07-13 14:36:37 -07:00
.gitignore chore: initialize chorus repo 2026-07-13 11:01:51 -07:00
Caddyfile.snippet chore: add docker-compose stack and Caddy config for deployment 2026-07-13 14:36:37 -07:00
docker-compose.yml chore: add docker-compose stack and Caddy config for deployment 2026-07-13 14:36:37 -07:00
README.md chore: initialize chorus repo 2026-07-13 11:01:51 -07:00

Chorus

Multi-channel communications hub for Books in Hand.

Aggregates BH text, personal text, BH email, personal email, voice, Facebook Messenger, and ND messenger into a single triage interface, so Donna can coordinate with volunteers and donors without switching between apps.

Standalone client project for Books in Hand. Not part of the CircuitForge product line — no BSL tiering, no CircuitForge license server integration.

Design spec and implementation plan live in a separate private planning repo (circuitforge-plans/books-in-hand/superpowers/) and won't always be available to whoever is working in this repo.

Status

Design in progress.