Groundcheck · Model Card

Model card

Version: v1 · 2026-08-13  ·  Source of truth: docs/MODEL-CARD-groundcheck.md

What Groundcheck is (and is not)

Groundcheck is a contractor and business verification engine. It ingests public-record data (Secretary-of-State filings, statewide contractor-license rosters, municipal permit records, federal and state adverse-record sources) and publishes trust reports about named real businesses and contractors.

Groundcheck is not:

  • A background-check service. It does not run criminal, credit, or employment vetting on individuals.
  • An FCRA-regulated consumer report.Groundcheck is not a Consumer Reporting Agency, and its outputs are not “consumer reports” as defined by 15 U.S.C. §1681a(d). FCRA-styled internal symbols (gateAdverseForIntegrity, the §1681i-styled dispute route, files under src/lib/compliance/fcra-*) are shorthand for accuracy guardrails, not a legal claim.
  • A recommendation to hire, avoid, or contract with any specific entity. Reports are informational.

The real legal exposure is defamation and accuracy. The failure modes that create liability are wrong-entity anchoring, ungated adverse claims, and stale data presented as current. The system is designed to fail closed, never open: weak signal or uncertain identity suppresses or caveats output.

Model pins

Synthesis

claude-opus-4-7

Canonical id PRIMARY_SYNTHESIS_MODEL in src/lib/trust/synthesize-v2-prompt.ts. Used for narrative synthesis over already-gated, already-scored evidence.

Trust scrapers

claude-sonnet-4-6

Used for narrow field-level extraction inside the scraper pipeline (payloads scrapers cannot parse structurally on their own).

Both pins are enforced by .github/workflows/model-pin-guard.yml. The forbidden next-major opus id (assembled at CI time; the literal string is banned in this repo, so it does not appear here) will fail CI on any PR that reintroduces it (cost multiplier, and a different effort default the pipeline does not want).

What the LLM does

  • Field-level extraction from HTML, JSON, or PDF payloads that scrapers cannot parse structurally.
  • Natural-language synthesisof the report’s descriptive prose over evidence that has already cleared identity anchoring, per-source verdict emission, and the adverse gate.

What the LLM does not do

  • It does not decide whether to publish an adverse claim. That is gateAdverseForIntegrity — deterministic TypeScript.
  • It does not decide the composite score. That is deterministic code, shared with the Broker Defense product.
  • It does not decide identity anchoring. That is search_roster_entities + entity-search.ts.
  • It does not decide refusal. The evidence-floor scrub is a Postgres trigger, and the rendering side (refusal-copy.ts) maps stored machine codes to user copy with an own-property check that fails closed on unknown codes.

The gate that decides whether an adverse claim is publishable is never an LLM. If you are reading a public write-up that says an LLM makes that decision on Groundcheck, that write-up is wrong. Cite this page.

Known failure modes

Summarized here; the full list with mechanism links lives in the methodology page.

  • Stale corpora. Every surfaced datum carries an as-of / staleness caveat.
  • Walled boards. A handful of state licensing boards sit behind managed anti-bot interstitials or CFAA/ToS boundaries that reputable proxies will not clear.
  • Phoenix / fraud-spine lane is gate-deadlocked. Publishable population today is zero and the ceiling is bounded by acquisition, not algorithm.
  • Coverage-matrix status is a stored value, not a live measurement. validated means reachable, not covering.
  • Web-search floor dependency. For grade-D states without an ingested roster or free portal, the retrieval-provider seam is the only licence-answer mechanism; its liveness depends on external credential state.
  • Retention gap on historical evidence. A subset of older evidence rows pre-date the retention chain and do not carry a stored artifact.
  • Bindable-but-thin subjects. Identity anchoring can succeed while corroboration for a score does not — the report suppresses the numeric verdict.

Change log

  • v1 · 2026-08-13. Initial model card. Synthesis pinned to claude-opus-4-7; scrapers pinned to claude-sonnet-4-6. Refusal vocabulary: four codes per src/lib/trust/refusal-copy.ts. Coverage authorities named: gc_state_license_required + licenseLaneForState(). Adverse gate identified as deterministic (gateAdverseForIntegrity), not LLM-decided.

For any numeric claim — coverage grade split, row counts, freshness — the source of truth is node scripts/ci/dod-scoreboard.mjs and docs/AUDIT-groundcheck-2026-08-02.md. Numbers do not live on this page.