Skip to content

docs: add MIGRATION_v8_to_v9.md covering behavior changes not in the topic guides #1440

Description

@bokelley

Summary

9.0's breaking changes are documented across topic guides (docs/types-9-migration.md, docs/reporting-caller-ownership-migration.md, docs/canonical-format-kinds-migration.md, docs/request-signing-migration.md). There is no top-level MIGRATION_v8_to_v9.md, which every earlier major has had (up to MIGRATION_v7_to_v8.md). Some changes that broke or nearly broke a production seller aren't in any of the guides.

Behavior changes we'd like called out in one place

  • Credential carriers (bug(auth): MCP leg accepts conflicting Authorization and alias tokens that the A2A leg rejects as ambiguous #1305). On the MCP leg, 8.x read the first Authorization: Bearer and fell back to a legacy alias such as x-adcp-auth otherwise. 9.0 inspects every carrier and answers 401 when any is empty or malformed, or when tokens differ. Requests that authenticated on 8.x now fail: a Basic or bare-token Authorization next to a valid x-adcp-auth, an empty x-adcp-auth next to a valid Bearer, and repeated headers with different tokens. (We shipped a log-only audit to measure this before upgrading.)
  • A2A Host allowlist defaults to loopback and now returns 421 for unlisted hosts. Agent-card discovery is included.
  • Origin enforcement now covers discovery. See the separate issue on the agent card returning 403.
  • Strict bool/int/number validation and format: uri/hostname checks on inbound requests. Lax payloads that 8.x coerced now return ValidationError.
  • Generated validators reject documents their schemas forbid: for example FrequencyCap() with no field group, or CreateMediaBuyRequest without packages or a proposal.
  • Reporting caller ownership requires a schema migration before the new version starts. This means planning a deploy, not just upgrading the package.

Ask

Add MIGRATION_v8_to_v9.md as the index: one line per breaking change, linking to the topic guides, plus the items above that no guide covers yet.

Activity

  1. added
    claude-triagingTriage routine is actively working on this issue (1-3 min)
    on Oct 7, 2026
  2. bokelley commented on Oct 7, 2026

    @bokelley
    ContributorAuthor

    Triage

    Classification: docs
    Bucket(s): docs
    Status: clarify

    What the experts said:

    • docs-expert: Additive and non-breaking, format fits the established pattern — but docs/canonical-format-kinds-migration.md and docs/types-9-migration.md §6 contradict each other on format_kind treatment; the index can't safely link both until that's resolved.
    • dx-expert: Strong DX benefit, most undocumented items are fine at index depth — but credential carriers (bug(auth): MCP leg accepts conflicting Authorization and alias tokens that the A2A leg rejects as ambiguous #1305) describes the failure mode without a migration path, which is dangerous for an auth-touching item.

    My take: Both blocking concerns are real. The format_kind contradiction needs to be resolved before the index links to both guides, and a credential-carriers entry that only says "this now 401s" without telling integrators what to change is the most hazardous kind of migration note.

    Questions:

    1. format_kind contradiction: docs/canonical-format-kinds-migration.md describes format_kind as a closed CanonicalFormatKind enum in 9.0 (unknown kinds rejected, is comparisons work), while docs/types-9-migration.md §6 says 9.0 makes format_kind a bare str everywhere (unknown kinds retained, is comparisons break). Which guide is correct, or do they describe different subpopulations of fields? The index needs to link one or both accurately, and at least one may need updating before this ships.

    2. Credential carriers migration path (bug(auth): MCP leg accepts conflicting Authorization and alias tokens that the A2A leg rejects as ambiguous #1305): The issue body explains what 9.0 rejects (mixed carriers, empty x-adcp-auth alongside a valid Bearer, disagreeing tokens), but not what an integrator should actually do. For a seller that was sending both Authorization: Bearer and x-adcp-auth in 8.x: what's the correct 9.0 migration? Remove the legacy header? Configure a single authoritative carrier? A separate docs/credential-carriers-migration.md topic guide (following the pattern of the other v9 guides) would cover this adequately; otherwise the index entry should include the fix, not just the failure mode.


    Triaged by Claude Code. Session: https://claude.ai/code/session_012XVoBQ5iPGeDiQEYG8cSTR


    Generated by Claude Code

  3. added and removed
    claude-triagingTriage routine is actively working on this issue (1-3 min)
    on Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions