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
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.