Compatibility: Pactmark 0.1.x. Fixture mode is offline and mandatory in CI. createExternalSearchAdapter fails closed unless live access is explicitly enabled, and this repository ships no provider implementation.

Run it

What it demonstrates

Fixture-backed search

Deterministic sources, so the test suite is reproducible and free.

Fail-closed live access

The external adapter refuses to work unless live access is explicitly enabled.

Citation verification

A verifier checks that citations are structurally resolvable against the retrieved bytes.

A bounded evidence record

With an explicit list of what citation-shape verification does not establish.

The fail-closed adapter is the interesting part

src/tools/fixture-search.ts
Compare this with the common pattern of an adapter that silently falls back to a stub when a key is missing. That pattern produces green tests that prove nothing. Failing closed makes “we are running against fixtures” a visible fact rather than an assumption.

What the citation verifier checks

1

Every claim carries a citation

A claim without one fails coverage.
2

Each citation references a stored artifact digest

Not a URL string that nobody retrieved.
3

Each quoted span exists in those bytes

A quotation the model invented is a verifier failure, not a reviewer’s discovery.
4

The citation structure resolves

Fields present, shapes correct, references internally consistent.

What it produces

Figure 1. For research output, the right-hand column carries most of the value. A verified citation shape and a true claim are different things, and the record says so. The example’s own words, from its README:
Citation shape, digest integrity, and fixture support do not prove that a live URL exists, that an external source is authoritative, or that the conclusion is complete.

What it does not prove

Nothing here is evidence about the live web. The sources are embedded fixtures. A passing run tells you the pipeline is correct — extraction, citation binding, verification, evidence assembly — and tells you nothing about any real source.

Taking it live, carefully

1

Declare an egress allowlist first

Exact HTTPS origins, GET only, networkEnforcement: "required". Choosing the allowlist is an editorial decision about which sources you consider credible.
2

Store every retrieved source as an artifact

Content-addressed, before anything reads it. Citations bind to digests, not to URLs.
3

Keep fixture mode for CI

A research agent whose tests hit the live internet has flaky tests and an unbounded bill.
4

Bound the context

maxRunToolResultContextBytes matters here more than anywhere else — it is both a cost control and an injection surface control.
5

Update doesNotProve honestly

Add “that relevant sources outside the allowlist were considered”. It will be true.

Research use case

The full scenario, with policy, egress and evidence.

Evidence

Why doesNotProve is a required field.