Presenter walkthrough
User stories: Vital Records Indexing
Vital Records Indexing · City of Boston · Registry Department
Presenter walkthrough. Sign in from the persona dropdown on the sign-in page. Before a run, open any page with ?fresh=1 to reset the data.
Run the server with VITAL_AI_MODE=stored (the default in .env.local) so Transcribe returns the stored reading at once; a live read takes 40-60 s.
Say up front: Rashid's daughter is a modern record and is not in these 1630-1809 registers. These register pages are the proof of the pipeline, not her record.
Primary story: transcribe a page and get its births into the index (Morgan Ellis)
Page: Boston Births 1700-1800 (Record Commissioners Vol. 24), printed page 169, "Births — 1725." (rc24-n180). It is queued, assigned to Morgan. Its stored AI result has 54 entries, 5 flagged.
- 1Sign in as Morgan Ellis from the persona dropdown. You land on My queue. The KPI strip reads Queued 3 and In review 8 (counted over Morgan's pages), Flagged entries 89 and Indexed entries 482 (both counted over all pages; at seed all 89 flagged entries are on in-review pages, and Morgan's own in-review pages hold 30 of them). Each KPI states its scope in its label ("Queued · mine", "Flagged · all pages"). Row "Boston Births 1700-1800 · p. 169 · 1725 · Queued" is at the top.
- 2Open the page. The page workspace shows the scan on the left. On the right, the Legacy OCR tab is open by default for a queued page. It shows the archive.org OCR text, "Mean OCR confidence 33.8 / 100" and "Linked records: 0". The names are in one block and the dates in another, with nothing pairing them. The Transcribe page button is primary.
- 3Click Transcribe page. A progress state reads "Reading page…". When it finishes, the Entries tab opens with 54 entries, and the status badge changes from Queued to In review. An ActionBanner reads "5 entries need review". Flagged rows sort first, with their reasons: "surname unclear: Bacon", "name split across lines", "sex not stated" (twice) and "date faint". A provenance line reads "Transcribed by claude-sonnet-5-5". Flagged entries (all pages) goes 89 to 94 and Queued 3 to 2, In review 8 to 9. Audit event: "Page transcribed".
- 4Fix the Bacon entry. Click the row "Joseph Son · birth · 25 October 1725" (the AI took the relation word "Son" as the surname). A side panel shows the printed line "Joseph Son of Josiah and Mary Bacon, 25 October 1725." above editable fields. Use Demo fill (below), then Save correction. The row now reads "Joseph Bacon", the badge says Corrected, the banner reads "4 entries need review", and the original AI values are kept and shown as "AI read: Joseph Son / Josiah". Audit event: "Entry corrected".
- 5Confirm the other four. For each remaining flagged row, open it and click Confirm as read (four rows: Rebecca Beairsto, Elisha Bennet, Sarah Bennet, Elizabeth Cradock). Each badge becomes Confirmed and the banner counts down to "All entries reviewed".
- 6Approve the page into the index. Approve page becomes enabled only when no entry is still flagged and the page year is confirmed (this page's year is printed, so that is already done). Click it. The badge becomes Indexed, the queue row moves to the Indexed tab, and the KPI Indexed entries goes from 482 to 536. Audit event: "Page approved into index (54 entries)".
- 7Find the record. Open Index and search "Bacon". One result: Joseph Bacon, birth, 25 October 1725, parents Josiah Bacon and Mary Bacon, "Births 1700-1800, p. 169". Before step 6 this search returned nothing. Open it: the record page shows every field, the printed line, the page scan, the source citation with its archive.org link, "Transcribed by claude-sonnet-5-5", and "Corrected by Morgan Ellis" with today's date.
Secondary story: confirm a 1650s page year (Jordan Avery)
Page rc09-n056 (Vol. 9, printed page 41, "Births and Baptisms", 64 entries, 2 flagged, in review, assigned to Jordan). Entries on this page print only day and month ("born 29th Sept."), and the year comes from headings on earlier pages.
- 1As Jordan, open the page from My queue. An ActionBanner reads "Year not printed on this page. The AI read 1652-1653 from earlier pages. Confirm the page year." Entries with no printed year (63 of the 64; entry 17, "Sarah ... 16—", has a cut-off date and no inferred year) show their year as "—".
- 2Click Confirm page year. The form shows the AI's range, 1652-1653. Use Demo fill (1653) and save. The banner clears, the 63 entries with an inferred year show "1653 (page year, confirmed)" and entry 17 keeps "—", and the audit records it. The label says page year on purpose: the January to March entries on this page are Old Style dates that the register would write 1653/4, and correcting each date is not in scope. No entry rows are rewritten; the page holds confirmedPageYear.
- 3Resolve the 2 flagged entries ("month/day only" on John Ballantine, "date incomplete/cut off" on Sarah Oris) with Confirm as read, then click Approve page. Indexed entries goes up by 64.
Rules that make the Approve gate work: Confirm page year appears only on pages where at least one entry has yearInferred true (the 11 pages in register_pages.json); yearConfirmed is already true for the other 25 pages at seed, and Approve page needs yearConfirmed true and no entry flagged. The 4 other in-review pages with inferred years behave the same way but are not part of a story.
Demo fill values
- Entry editor (story step 4, the entry whose printed line contains "Josiah and Mary Bacon"; match by transcript, not id): Person name "Joseph Bacon"; Father "Josiah Bacon"; Mother "Mary Bacon"; Sex "M"; Date as printed "25 October 1725"; ISO date "1725-10-25"; Year 1725; Clerk note "\"Son\" is the relation, not a surname; family name Bacon from the printed line."
- Confirm page year (secondary story, rc09-n056): Page year 1653; Note "Year heading \"1653.\" is printed on p. 40 and no new heading appears on p. 41." (2 fields; listed for completeness)