Skip to main content

resolve_only

Function resolve_only 

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