5ffc755e76
Pre-tracker historical knowledge has zero rows in knowledge_processing_spans but parse_status correctly reads "completed" or "failed". The /spans handler was synthesizing five "pending" placeholders unconditionally, so legacy completed documents rendered as if they were stuck waiting in the queue forever. buildSpanTree now takes parse_status and chooses the placeholder status accordingly: - ParseStatusCompleted -> done - ParseStatusFailed -> failed - everything else -> pending (existing behaviour) Real rows always take precedence; this only changes what we put in the gaps. So healthy in-flight parses (parse_status=processing, some real rows, some still pending) keep showing pending placeholders exactly as before — the synthesized "completed" inference only fires when the parse already hit terminal state. Adds TestBuildSpanTree_LegacyCompletedRendersAsDone covering both the completed-legacy and failed-legacy branches.