0069: Atomic C++ resolution configuration

Status: accepted for development; supersedes ADR 0048’s C++ option setters.

Decision

ResolutionOptions::create(config) checks a complete ResolutionConfig and returns either a move-only native owner or an error. The config uses standard containers and filesystem paths for logical-root mappings/search directories, and ordinary fields for verification and traversal bounds. Defaults match native resolution. A borrowed cancellation-token pointer is consumed only during creation; the native owner retains the flag independently.

Remove public incremental setters. Construct another checked configuration when a workflow changes verification or cancellation. Failed construction destroys the temporary native owner, exposes no partial configuration and leaves any existing options untouched. Default resolution needs no options object. Result and exception styles share this factory; C++17 and builds without exceptions remain supported.

Natron’s presence-then-content check is a real reconfiguration caller. It reuses ordinary config values and replaces options only after successful validation. It does not postpone errors until resolution. Private helpers reuse authoritative C validation; no new domain rules enter the wrapper.

Migration and standards impact

Replace empty creation plus checked setters with config fields followed by one checked factory. Native tests retain invalid bounds/mode/path cases, moved-owner/token rejection and cancellation after token destruction.

Reviewed against the contributor standards policy: no identifier, locator, storage, C ABI or portable encoding changes. UTF-8 filesystem paths cross the existing C boundary. Historical 0.6.x promises and artifacts are unchanged.