# Target architecture
> **TARGET architecture — implementation pending.** This package records the
> intended public design for a later implementation. It does not describe the
> current `0.1.0` scaffold's API or promise source compatibility with it.
`captcha-sdk` is intended to be a unified, server-side, framework-agnostic Rust
SDK for verifying opaque CAPTCHA tokens. One configured verifier represents one
provider product or mode, exposes the provider's normalized verdict and
evidence, and can optionally apply application policy.
## Documents
- [Scope and principles](scope-and-principles.md)
- [Target public API](public-api.md)
- [Verification model](verification-model.md)
- [Attempts and safe retries](attempts-and-retries.md)
- [Error taxonomy](errors.md)
- [Capabilities](capabilities.md)
- [Providers and versioning](providers-and-versioning.md)
- [Adapter contract](adapter-contract.md)
- [HTTP transport boundary](http-transport.md)
- [HTTP, runtime, and frameworks](http-runtime-and-frameworks.md)
- [Credential lifecycle](credentials.md)
- [Security and serialization](security-and-serialization.md)
## Decisions
- [ADR 0001: Server-side core](decisions/0001-server-side-core.md)
- [ADR 0002: Open provider ecosystem](decisions/0002-open-provider-ecosystem.md)
- [ADR 0003: Verdict, evidence, and policy](decisions/0003-verdict-evidence-and-policy.md)
- [ADR 0004: Effective capabilities](decisions/0004-effective-capabilities.md)
- [ADR 0005: Provider product naming](decisions/0005-provider-product-naming.md)
- [ADR 0006: Root error taxonomy](decisions/0006-root-error-taxonomy.md)
- [ADR 0007: Cloneable Captcha facade](decisions/0007-cloneable-captcha-facade.md)
- [ADR 0008: Attempt options and safe retry](decisions/0008-attempt-options-and-safe-retry.md)
- [ADR 0009: HTTP transport boundary](decisions/0009-http-transport-boundary.md)
- [ADR 0010: Credential lifecycle](decisions/0010-credential-lifecycle.md)
## Reading the target
Names and signatures in these documents are normative design direction but
illustrative Rust. They remain subject to implementation validation and are not
the current ABI. Provider facts and capability claims must be checked against
official documentation while each adapter is implemented.
The central flow is:
1. Build a provider-specific, cloneable `Captcha` with a compatible
`VerificationPolicy`.
2. Supply an opaque `CaptchaToken` in a `VerificationRequest`.
3. Call `verify` to obtain `Result<ProviderVerdict, CaptchaError>`.
4. Or call `Captcha::assess` to obtain an `Assessment` whose `Decision` applies
policy without hiding the underlying verdict and evidence.
Provider rejection is data (`Ok(ProviderVerdict::Rejected { .. })`). A failure
to configure or complete verification is an error (`Err(CaptchaError)`).