Skip to content

Table topology and deterministic extraction

PDF cell coordinates use top-left PDF points. Coordinates alone do not prove that a value belongs to a label. Silver normalization therefore validates table structure before either ingestion path publishes trusted associations.

Tables carry table_topology with a version, status, reason, cell-pair list, and a digest binding that list to the cells. Cells retain extractor spans, header flags, and source_structure alongside canonical row/column offsets. The status is valid, reconciled, ambiguous, or invalid. Readers report missing, incompatible, or edited evidence as unvalidated.

Validation requires a complete column of physically ordered row anchors. Every eligible anchor column must agree on a unique assignment. Cell boxes must belong to the table, occupy consistent columns, and not collide in the logical grid. A cell touching two row anchors is ambiguous, even if one is closer. Spans are preserved and constrain validation; reconciliation does not split, shift, or invent merged cells.

Header flags are preserved. A displaced header candidate is normally ambiguous. The narrow exception requires an explicit printed label: next to its value, a uniquely validated physical row, a lone preceding heading, and unflagged body continuation. The association is recorded as explicit_label_value; the header annotation is not erased. Geometry alone does not turn Parameter | Model A into a data pair.

Pointed extraction consumes the certified pairs. Scalar shapes abstain when a row has multiple value columns or a key/value spans multiple rows. A column-spanning value may still be one unique cell. A slice includes a whole intersecting merged cell, and only projects existing pairs; dropping other columns cannot manufacture a new answer. Repeated identical values do not resolve an ambiguous key or source.

New pointed references include detail.table_topology: the key and value cell IDs, key text/bbox, canonical row, association basis, and table digest. These IDs are local to the selected table. They are not document generation IDs or globally unique citation IDs.

Existing documents and regeneration

Unversioned gold remains available for inspection but cannot supply new deterministic pairs or value-cell bbox refinement. Pointed extraction returns unfilled leaves with table_warnings; region inspection exposes the status and reason. Do not add a version stamp to old cells to bypass validation.

Re-ingest the original PDF through the supported workflow. Use --force for built-in ingestion, or force=true when starting a fresh harness session. An open older harness session must be restarted with force so it receives new silver candidates. Submit every page and finalize to rebuild gold and embeddings. Verify the returned key, value, page, and physical source cell.

Rebuild affected silver indexes, raw/polished page Markdown, candidates, gold regions/content, crops, and embeddings together. Re-running embedding alone does not repair old table semantics. Existing cached extraction responses and persisted canvas rows are historical claims: inspect and re-extract affected rows after regeneration. This patch does not rewrite their values or source references, replace document identities, or redesign replacement lifecycle. Search remains a discovery operation, not evidence that an old row is valid.

The validator deliberately abstains on unsupported layouts, missing geometry, conflicting annotations, and ambiguous spans. Its certificate records the supported structural interpretation, not a general natural-language truth verdict or a cryptographic signature from the PDF's author.