pub async fn resolve_only(
ref_: &Ref,
profile: &CapabilityProfile,
ctx: &FetchContext,
) -> Result<MetadataOnlyOutcome, FetchError>Expand description
Resolve a Ref to metadata with no local persistence.
This is the audit-trail-preserving sibling of metadata_only: each
consulted Source still emits its own LogEvent::Fetch row
through ctx.log (so the provenance hash chain remains continuous,
per docs/PROVENANCE_LOG.md), but the orchestrator MUST NOT write
the metadata TOML to the store under any code path — present or
future.
Binding spec: docs/MCP_TOOLS.md §1 (the doiget_resolve_paper
tool — Slice 7).
§Why this exists as a distinct orchestrator
metadata_only is the pure resolver and never writes to the
store; the store-write SIDE EFFECT lives only in the separate
metadata_only_to_store wrapper. Because the write is in a
different entry point that this function does not call,
delegating to metadata_only is permanently safe — there is no
code path by which resolve_only can acquire a store write, now or
in future (#139). This structural separation is the entire reason
metadata_only was split into a pure core + a persisting wrapper
rather than gaining a write: bool parameter.
§Dispatch
Identical to metadata_only (DOI → Crossref-first with Unpaywall
fallback; arXiv → Atom feed only). The oa_url and license
outputs follow the same rules.
§Side effects
One LogEvent::Fetch row per consulted resolver, written by the
underlying Source impls. No metadata TOML write. No PDF fetch.
No store mutation.
§Errors
Returns FetchError from the underlying Source dispatch,
identical to metadata_only.