# ADR-026 Adapter Distribution Policy (v1)

## Intent
Freeze how the current ADR-026 adapter crates are distributed, with minimal blast radius:
- keep the new adapter crates in open core
- keep them available from source/workspace builds on `main`
- avoid taking on a crates.io support and semver contract before that surface is explicitly frozen

## Current State
The following crates now exist in the workspace on `main`:
- `assay-adapter-api`
- `assay-adapter-acp`
- `assay-adapter-a2a`
- `assay-adapter-ucp`

The release workflow can publish crates to crates.io through:
- `.github/workflows/release.yml`
- `scripts/ci/publish_idempotent.sh`

At the moment, that publish list does **not** include the adapter crates.

Historical note: `assay-adapter-api` has already appeared on crates.io
through `3.2.3`. That historical publication does not define the current
release-line contract. Current `main` treats every ADR-026 adapter crate,
including `assay-adapter-api`, as source/workspace-internal until a future
distribution freeze explicitly changes that.

## Decision
For the current ADR-026 line, the adapter crates remain **workspace-internal open-core crates**.

This means:
- open-core availability is via the repository source tree and workspace builds
- no adapter crate is published to crates.io yet
- no external semver/support promise is made for the adapter crate API surface yet
- release tags must not silently start publishing adapter crates without a dedicated freeze/update slice

## In-Scope
- Freeze the distribution decision for the current line
- Clarify the distinction between open-core availability and crates.io publication
- Preserve the current release workflow behavior

## Out-of-Scope
- Any release workflow changes
- Adding adapter crates to `scripts/ci/publish_idempotent.sh`
- Defining a public crates.io support matrix
- docs.rs/readme polish for external crate consumers
- release-lane adapter integration work

## Distribution Contract (v1)
Until a new freeze slice says otherwise:
- `assay-adapter-api` is not published to crates.io by current release automation; historical crates.io versions may exist
- `assay-adapter-acp` is not published to crates.io
- `assay-adapter-a2a` is not published to crates.io
- `assay-adapter-ucp` is not published to crates.io
- adapter crates may use workspace versioning without treating crates.io as the canonical distribution channel

## Rationale
Publishing now would create avoidable obligations before the surface is ready:
- `assay-adapter-api` would become a public semver contract
- protocol adapter crates would need an explicit external support/versioning story
- the release workflow would need a frozen publish order and migration rules

The current ADR-026 line froze:
- adapter API/workspace shape
- deterministic conversion behavior
- fixtures/tests/reviewer gates
- parser and host-boundary hardening

It did **not** freeze crates.io distribution as part of ADR-026.

## Criteria For A Future Publish Slice
A future distribution slice may publish adapter crates only after it freezes:
- public API stability for `assay-adapter-api`
- publish order and dependency policy in `scripts/ci/publish_idempotent.sh`
- external versioning/support expectations for ACP/A2A/UCP adapter crates
- release notes/docs for external crate consumers

## Acceptance Criteria
- The policy states that adapter crates stay workspace-internal for now
- The policy states that open-core availability does not imply crates.io publication
- A reviewer gate enforces allowlist-only scope and checks that the publish list still excludes the adapter crates
