Pipeline
Ask the memory — chat
Every message is grounded on its own: answers cite retrieved sources (POST /api/v1/chat/messages, sessions via /api/v1/chat/sessions), unsupported questions get the canonical insufficient-information reply, and follow-ups are resolved against this conversation. Each message runs at most two LLM calls — nothing fires automatically.
Views
The nine operational views (GET /api/v1/views/<name>), computed deterministically from the latest extraction of each message; rows open the message drill-in. "By Client/Vendor" groups the extracted company name as written — alias resolution lands with the domain service.
Extracted tasks
| Task | Company | Owner | Deadline | Waiting for | Risk | Urgency |
|---|
From the latest AI extraction of each message, ordered overdue → soonest due → highest risk. Absent fields stay blank (never fabricated). Click a row for the source message.
Waiting on
| Waiting on | For | Company | Since | Risk |
|---|
Open waiting-for relationships from the latest extractions, oldest first. Click a row for the source message.
Recent decisions
Latest decision updates extracted from messages, newest first. Click a row for the source message.
Totals
Distributions
Q&A activity
Grounded Q&A usage (from the qa_queries execution log): every answer cites sources; unsupported questions are refused.
Data completeness
Share of extracted records that carry each field. Absent values are left blank (never fabricated); ambiguous ones route to review.
Recent messages
| Subject | Sender | Status | Stage | Extraction | Risk |
|---|
How it works
Auto-refreshes every 5s. Asking a question is the page's only write (each question is logged). Data flows left→right through the stages above.