Add two complementary data quality fields to quote, character, source, and person records.
The problem
Currently null on a nullable field is ambiguous: it means both "not yet investigated" and "we looked and no value exists." Enrichment providers cannot distinguish between the two, so they repeatedly attempt to fill fields that have no answer. The UI also cannot distinguish records that are genuinely finished from records that just haven't been worked on yet.
Two new fields
isComplete: bool (default false)
A human-set flag meaning "I have reviewed this record and I am satisfied with it." Set manually in the management UI — never set automatically by enrichment or import.
noValueKnown: string[] (default [])
A list of field names that have been confirmed as having no findable value. Examples:
"noValueKnown": ["date", "character"]
Meaning: a date for this quote has been researched and genuinely does not exist in any source; and there is no named character (e.g. it is a voiceover or narration).
- Enrichment providers skip any field listed here — do not attempt a lookup
- The UI shows a "No value known" indicator next to each affected field instead of leaving it blank
- Users can set and unset entries via the management UI per field
- A record can be
isComplete: false with some noValueKnown entries — still being worked on, but certain fields are confirmed empty
- A record can be
isComplete: true with noValueKnown entries — fully reviewed; those fields just have no answer
UI behaviour
In the quote detail/edit page:
- Each nullable field (
date, character, author, genres, etc.) has a "Mark as no value known" action alongside its input
- Fields with a
noValueKnown entry render a distinct visual state (e.g. a strikethrough placeholder or a "—" badge) rather than an empty input
- A "Mark complete" button sets
isComplete: true; the record is visually distinguished in the list
Applies to
All four entity types: quotes, characters, sources, persons. The specific fields that are meaningful to mark as noValueKnown differ by type (e.g. date is relevant on all; character only on quotes).
Notes
Add two complementary data quality fields to quote, character, source, and person records.
The problem
Currently
nullon a nullable field is ambiguous: it means both "not yet investigated" and "we looked and no value exists." Enrichment providers cannot distinguish between the two, so they repeatedly attempt to fill fields that have no answer. The UI also cannot distinguish records that are genuinely finished from records that just haven't been worked on yet.Two new fields
isComplete: bool(defaultfalse)A human-set flag meaning "I have reviewed this record and I am satisfied with it." Set manually in the management UI — never set automatically by enrichment or import.
isComplete: trueisComplete: falseregardless of the source payloadnoValueKnown: string[](default[])A list of field names that have been confirmed as having no findable value. Examples:
Meaning: a date for this quote has been researched and genuinely does not exist in any source; and there is no named character (e.g. it is a voiceover or narration).
isComplete: falsewith somenoValueKnownentries — still being worked on, but certain fields are confirmed emptyisComplete: truewithnoValueKnownentries — fully reviewed; those fields just have no answerUI behaviour
In the quote detail/edit page:
date,character,author,genres, etc.) has a "Mark as no value known" action alongside its inputnoValueKnownentry render a distinct visual state (e.g. a strikethrough placeholder or a "—" badge) rather than an empty inputisComplete: true; the record is visually distinguished in the listApplies to
All four entity types: quotes, characters, sources, persons. The specific fields that are meaningful to mark as
noValueKnowndiffer by type (e.g.dateis relevant on all;characteronly on quotes).Notes
IsComplete BIT NOT NULL DEFAULT 0,NoValueKnown TEXT NOT NULL DEFAULT '[]'as a JSON array)completeandincompletecounts tobyType; addnoValueKnownfield frequency counts