MANUAL_OVERRIDE and COMPLETED both require content. A human who blanks a field has
decided it stays empty, and an empty box is what the review screen, the counts and the PDF
must all agree on: it is not answered. The raw status still says a human made that call.
COMPLETED requires content because v1 wrote [""] for fields the model
skipped, so trusting the status alone reports a run that filled 8 of 12 fields as
12/12 and puts an "answered" chip on a visibly blank box. An empty completed cell is
reported as NO_ANSWER rather than PENDING: the pipeline did run this field and came
back with nothing, which is exactly what no_answer means. Calling it pending would
strand a terminal run's progress bar below 100% forever.
A NULL status (every v1 row, plus the empty row a kickoff seeds for every snapshot field)
falls back to content: a cell with text is answered, and an empty or SQL-NULL cell is pending
while the run is going and NO_ANSWER once it has settled. Unrecognized status strings take the
same path rather than being dropped.
Classify one answer row.
MANUAL_OVERRIDEandCOMPLETEDboth require content. A human who blanks a field has decided it stays empty, and an empty box is what the review screen, the counts and the PDF must all agree on: it is not answered. The raw status still says a human made that call.COMPLETEDrequires content because v1 wrote[""]for fields the model skipped, so trusting the status alone reports a run that filled 8 of 12 fields as 12/12 and puts an "answered" chip on a visibly blank box. An empty completed cell is reported as NO_ANSWER rather than PENDING: the pipeline did run this field and came back with nothing, which is exactly whatno_answermeans. Calling it pending would strand a terminal run's progress bar below 100% forever.A NULL status (every v1 row, plus the empty row a kickoff seeds for every snapshot field) falls back to content: a cell with text is answered, and an empty or SQL-NULL cell is pending while the run is going and NO_ANSWER once it has settled. Unrecognized status strings take the same path rather than being dropped.