day_facts is BandBrain's structured store for per-tour-day data. It's how the agent answers "what's tonight's hotel?" in 200 milliseconds without scanning your whole knowledge base.
What's stored
Each row is a (date, field, value) tuple. Fields include:
city,venue,venue_addresshotel,hotel_address,distance_from_venueday_type— show / off / travelschedule:load_in,schedule:soundcheck,schedule:doors,schedule:set,schedule:curfew, etc.contact:buyer,contact:production,contact:venue_mgr, etc.parking,production_notes,hospitality,wifi_network,wifi_passwordmerch_split,deal_terms,notesage_restriction,capacity,billing
How it gets populated
Two ingestion paths feed day_facts:
Resource extraction
When a tour document is indexed, an LLM pass runs over the chunked content and writes structured (date, field, value) rows for every date mentioned. This is debounced + per-source-path incremental, so editing one tab in a day sheet only re-extracts that tab.
Email body extraction
When an email lands in your BandBrain inbox, the body text is also parsed for dated facts. Venue confirmations, hotel reservations, day-of contact updates — all become structured facts the agent can read instantly.
Precedence
Multiple sources can claim the same (date, field) — e.g. the original day sheet says hotel is "Hilton DTLA" but a later email says "we switched to the Hyatt". day_facts orders by origin:
user_correction(highest priority — manual edit via the agent's set_day_fact tool)manual(admin-entered in the dashboard)ingestion(default — from auto-extraction)
The latest-updated row within the highest-priority bucket wins. So a user correction always beats an automatic extraction.
What the agent does with it
The find_today tool reads day_facts for the requested date and returns a structured TodayExtraction object — venue, hotel, schedule, contacts, hospitality. Everything else (the agent's response style, the SMS reply shape, the daysheet broadcast composition) reads from there.
This is faster and more accurate than searching the source docs for every query. Source-doc search (RAG via search_knowledge) is the fallback for open-ended questions where structured facts don't apply.
Editing facts
You can text the agent corrections:
- "Update van call to 9am tomorrow"
- "The hotel for Seattle is the Marriott Downtown, not the Hilton"
- "Today's load-in is actually 2pm"
The agent calls set_day_fact which writes a user_correction row. Next time find_today queries that date, your correction is what comes back.
If the source is a Google Sheet, BandBrain also writes the change back to the source cell so the human-readable doc stays in sync. See Editing tour data via SMS.