# Friendship PCS — extraction notes Text extracted with pdfjs 4.10.38 (line-grouped by y-position). 52pp, 105,154 chars, **no page needed OCR** — the text layer is clean throughout. Raw output in `extracted/`. This is a reading aid for authoring, *not* the production pipeline's output — that runs through Document AI and is what gets measured later. ## The rubric is real and nested three deep Verbatim from Section K.2, "Technical Rating Scale": ``` Pricing 40 Total Bid Cost (Base Year) (no separate points) Method of Approach and Implementation 30 Food and Packaging 15 Utilization of USDA Foods 10 Geographic preference 5 Bidder's Experience, Expertise & Reliability 20 Knowledge of USDA / District requirements 5 Dependability 5 Inspection of warehouse and facilities 5 Customer Service 5 Proven Organizational Capacity 5 (three sub-bullets, NO points) Community Connection, Values Alignment 5 (three sub-bullets, NO points) ``` Matches what #22 recorded. Two structural facts it did not capture: **Sub-items are inconsistent.** Under Method of Approach and Experience they are *weighted sub-criteria* summing to the parent. Under Organizational Capacity and Community Connection they are *unweighted guidance*. The same visual nesting means two different things in one document. **Geographic preference embeds a mandatory submission inside a scored criterion:** "Bidder must submit certification of percentage of locally grown or raised foods." A scored criterion carrying a pass/fail artifact. ## Extraction hazards confirmed here **The rubric never uses the word "criteria" as a heading.** It lives under "SECTION K: Evaluation Factors" → "K.2 Technical Rating Scale", with weights as bullet suffixes (`– 40 points`). A keyword search for "evaluation criteria" or "scoring" returns nothing. First-pass evidence for why #16's completeness sweep cannot rely on headings. **Schedule C is the price sheet and contains no prices.** Verbatim, the entire section body is: > SCHEDULE C: PRICING SHEET > *Separate attachment to be completed in Excel. This is #22's second extraction hazard in its purest form: a PDF-only extractor finds **zero pricing** on a solicitation where pricing is 40% of the score. It is also a ready-made **labelled known-miss** for the sweep — the obligation is present, its content is not, and no amount of better PDF parsing recovers it. ## Obligation density 149 × "shall", 64 × "must" across 52 pages. An earlier ad-hoc extraction reported zero of each; that was the extractor failing, not the document. --- # Response set Three synthesized responses in `responses/source/`, each paired with a truth file. Designed so the field has a real outcome rather than three interchangeable bids. | Vendor | Binding | Price | Gates | Distinguishing feature | |---|---|---|---|---| | Potomac Provisions | tabbed compliance matrix | $589,970 | PASS | Complete; volume-banded pricing; 18% local | | Chesapeake Food Service | free prose, no anchors | $541,280 | **FAIL** | Cheapest and disqualified; unlabelled exception | | Anacostia Farm Collective | named sections + enumeration | $624,315 | PASS | 61% local; three labelled exceptions; seasonal pricing | The lowest bid is disqualified and the highest bid is strongest on the criterion the SFA wrote into its own rubric. That is deliberate: a ranking that cannot represent absence puts Chesapeake first. ## Deliberate traps **Planted arithmetic error (Potomac).** The stated base-year total is $589,970; band price times scenario volume is $589,570. A $400 gap. #15 decision 2 puts all price arithmetic in code precisely so a stated total is never trusted over a computed one — this is the case that catches an extractor lifting the vendor's own figure. **Unverifiable total (Chesapeake).** The case price exists only in the external Excel sheet, so no computed total can be produced at all. Contrast Potomac, where the arithmetic can be checked and fails. **Unlabelled exception (Chesapeake).** A price-relief request phrased as politeness inside the Pricing section, with no heading and no delta. Anacostia's three exceptions are explicitly headed with deltas and act as the control. **Non-priceable exception (Anacostia, EX-3).** If declined, the vendor cannot bid produce at all — a conditional withdrawal expressed as an exception. A price-delta field cannot hold it. **Answered-but-negative (Anacostia).** "We are not currently an approved USDA Foods processor." Squarely answers the requirement; the substance is a disclosure of inability. Coverage and quality are orthogonal, and a system that scores this like Potomac's 340,000 lbs is broken. **Three certifications in one sentence (Chesapeake).** Attachments B, C and D are satisfied by a single clause naming all three. A per-requirement extractor must split one span three ways. ## Finding: a gate that no response document can satisfy `R-B6C` — "Two bid copies submitted" — is a physical submission fact. Potomac happens to assert it; the other two do not, and no better extraction would change that. Coverage over it is neither answered nor not_answered but **unknowable from the artifact**. Surfaced by `validate-responses.py`, not by design. Treating it as not_answered would disqualify two of three bidders over a packaging detail. Raised against #10.