Measured, not vibes

How good is the extraction?
Here's the number, and how it's made.

Every AI-extraction demo claims it "finds the requirements". SpecTrace ships with an evaluation harness instead of a claim: a hand-labeled gold sample, a one-to-one alignment, and a recall figure that is recomputed on every pipeline run.

recall on gold

The pipeline being measured

1

Layout-aware parse

pdfplumber line extraction with font metadata. Numbered headings (cross-checked against bold/size cues) build a section tree; repeating headers/footers and TOC dot-leaders are stripped; page boundaries stay attached to every paragraph.

2

Section-scoped LLM extraction

Each section (chunked ~7K chars) goes to Gemini (2.5/3.5 Flash) with a strict JSON response schema: {text, type, source_page, confidence, obligated_party}. The model only ever sees one section — no cross-document hallucination surface.

3

Grounding verification

Every extracted requirement is fuzzy-located back in its source section. Verbatim ≥ 0.92, close ≥ 0.75, anything weaker gets its confidence capped and lands in the review queue. An LLM quote that can't be found in the document never silently enters the matrix.

4

Dedup & merge

RFPs restate the same obligation across parts and attachments. Near-duplicates (token-trigram Jaccard / sequence ratio) are collapsed into one row that keeps every source page and a merge counter.

5

Typed matrix + exports

Stable IDs (REQ-001…), an 8-type taxonomy, filterable web view, and XLSX/CSV compliance-matrix exports with a vendor-response column.

The gold sample

What the pipeline missed

Honest limitations

Why this matters for real RFP work

A compliance matrix with unknown recall is a liability: a single missed shall can make a proposal non-responsive. A measured pipeline turns "we think we got everything" into "we found of a hand-verified sample, duplicates were collapsed, and the uncertain 10% is queued for a human." That's the difference between a demo and a tool.