Skip to content

feat(media-buy): add action rights assessment - #1098

Merged
bokelley merged 2 commits into
mainfrom
feat/media-buy-action-assessment
Aug 28, 2026
Merged

feat(media-buy): add action rights assessment#1098
bokelley merged 2 commits into
mainfrom
feat/media-buy-action-assessment

Conversation

@bokelley

@bokelley bokelley commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add buyer assessment and routing helpers that join advisory product actions, accepted proposal change terms, and live MediaBuy availability without expanding authority
  • add seller materialization/projection helpers with status, authorization, delegation, policy, condition, and portable-constraint gates
  • restore beta.9 change-term runtime invariants in generated models and expose the relevant public types
  • expand update decomposition, reference seller behavior, cross-SDK fixtures, and action-rights documentation

Compatibility

  • preserves AdCP 3.1 terms_ref as opaque compatibility data
  • projects pre-beta.9 and beta.9+ action shapes explicitly
  • rejects mismatched aliases, invalid constraint/action pairs, duplicate terms, and unavailable or unknown routes
  • treats seller_managed as normal asynchronous task processing

Verification

  • uv run pytest -q — 7,430 passed, 77 skipped, 9 deselected, 1 xfailed
  • make lint typecheck — Ruff clean; mypy clean across 1,235 source files
  • 236 focused action, storyboard, codegen, public API, and response-builder tests
  • released beta.9 read/control responses validated against the bundled schemas
  • published JS storyboard runner against the reference seller — 90 selected scenarios passed

Closes #1067
Upstream: adcontextprotocol/adcp#6750
JavaScript parity: adcontextprotocol/adcp-client#2664

Comment thread src/adcp/media_buy_actions.py Fixed
Comment thread src/adcp/types/generated_poc/media_buy/change_term_constraints.py Outdated
aao-secretariat[bot]
aao-secretariat Bot previously approved these changes Aug 28, 2026

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — additive-only public surface with correct feat(media-buy) semver signal.

Checked:

  • New media_buy_actions.py assessment/projection logic is fail-closed and keeps product/proposal/live surfaces separated as documented.
  • Generated-model tightenings only bind beta.9-shaped payloads, so no existing-wire deserialization breaks (no forward-compat/discriminated-union regression).
  • Type-system import layering preserved; no hand-edits treated as source outside legitimate regen. No CI-gate weakening. No credential storage in ctx_metadata.
  • High-risk flag is true only on (modified) files, but the reviewer found no medium-or-higher concern tied to them, so the modifications are presumed contract-preserving.

Medium findings

  • scripts/post_generate_fixes.py — enforce_change_term_runtime_constraints guards its validator insertions but not its import replace, so change_term_constraints.py ships a triple model_validator import and no longer matches a clean regen (posted inline, recorded).

Decision path: no critical/high findings; gated_paths false; high_risk reasons are all (modified) but only 1 medium finding exists (row 5 requires both — it fires only if a medium exists on a modified high-risk file; this medium is in a non-high-risk script under scripts/, so row 5 does not apply); no data-loss/schema/infra medium; no prior escalation; no no-auto-approve team; fewer than 3 mediums. Falls through to row 9 → approve.

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve.

Clean pass. The delta is a well-tested idempotency fix for a prefix-collision bug in the codegen post-processing import rewrite (scripts/post_generate_fixes.py), its paired regenerated file collapsing a triple model_validator import to one, a regression test locking the fix, and a cosmetic Protocol stub change. No blocking or medium findings.

Gate checks: gated_paths is false, so row 2 does not apply despite review_decision: REVIEW_REQUIRED. high_risk is true, but all reasons are (modified) with no medium-or-higher findings, so rows 3–5 do not fire; the generated-file change is regeneration output paired with the codegen fix rather than a hand-edit. No no-auto-approve team match. Prior decision was also approve, so no sticky escalation. With zero findings, none of rows 1–8 fire — falls through to row 9.

@bokelley
bokelley enabled auto-merge (squash) August 28, 2026 22:41
@bokelley
bokelley merged commit 453cfd3 into main Aug 28, 2026
27 checks passed
@bokelley
bokelley deleted the feat/media-buy-action-assessment branch August 28, 2026 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(media-buy): parity for product, proposal, and live-buy action assessment

1 participant