Turns a meeting transcript into owned, dated tasks. Never invents an owner.
Someone says "Priya will handle the pricing page" and the meeting moves on. There may be two Priyas. There may be none — she might have been on the call as a guest, or the speaker might have misremembered who volunteered.
A person reading the transcript notices the gap and asks. A system doesn't. It produces an owner called Priya and passes it downstream in exactly the same shape as a real one.
The failure isn't that a name gets invented. It's that an invented owner and a correct one are indistinguishable by the time anything acts on them — so the wrong person ignores a task, the right person never hears about it, and the record says everything is fine.
| Before | After | |
|---|---|---|
| Extraction | One model call producing finished rows | Model locates and classifies; code decides |
| Dates | "By Friday" resolved by the model | Resolved in code, against the meeting date |
| Owners | Nearest matching name | Exact or alias match, or flagged |
| Ambiguity | Pick the likeliest | Refuse, and surface both candidates |
| Delivery | Send, then mark it sent | Claim the row, then send |
| Provenance | The extracted text | The text plus the line it came from |
Anchoring dates to the meeting date rather than the current date is what made the rest reliable. A transcript processed three days late still resolves "by Friday" to the Friday the speaker meant. Anchor to now and every deadline in a late-processed meeting shifts by a week — silently, into a plausible-looking date, which is the kind of bug nobody reports because nobody notices.
A transcript lands in a watched folder. Its header is read in code for the meeting date, the organiser, and the attendee list, because everything downstream is measured against those three. The body is numbered line by line and handed to one model call, which returns a summary, the decisions stated aloud, and each action item with an owner, a deadline phrase, and the line number where it was said.
Code takes over from there. Deadline phrases resolve by precedence against the meeting date. Names resolve against a directory with aliases — one match assigns, no match flags, two matches flags. The excerpt attached to each item is sliced out of the original file using the line number, so it's the words that were spoken rather than the model's rendering of them. Rows are written invisible, then made visible in one update, so a reader can never catch a meeting half written.
A system that can't say "I don't know who" will always name someone.
The tempting version assigns everything. Most names in a transcript are unambiguous, the directory usually has one obvious match, and a system that leaves items unowned looks unfinished next to one that fills every field. Fuzzy matching would close nearly all of it, and it would be right most of the time.
It's the "most of the time" that costs. When a name matches nobody, or matches two people equally, the item is written with no owner and surfaced under Needs attention instead. The cost lands on a person: on some share of items, someone has to make a call the system could have made for them, and those items sit untouched until they do. That's a worse demo, and a better outcome, because an unassigned task fails in a section of the email specifically headed to be read.
The delivery semantics follow the same instinct. The row is claimed before the send rather than after, so a crash between "email left" and "status written" drops a reminder instead of repeating one. A duplicate teaches people to ignore the channel; a gap is recoverable, because the item is still sitting there marked open.
Audio in, so a recording can be dropped in the folder and transcribed in the same pass. Fuzzy resolution scoped to meeting attendees only, so a first name resolves against who was actually in the room rather than the whole directory. Chunking for long transcripts — truncation is currently detected and refused, not handled. [ Confirm before publishing ] Completion tracking, because the system knows whether a reminder went out and nothing about whether the work happened.