feat(media-buy): add action rights assessment - #1098
Conversation
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — additive-only public surface with correct feat(media-buy) semver signal.
Checked:
- New
media_buy_actions.pyassessment/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_constraintsguards its validator insertions but not its import replace, sochange_term_constraints.pyships a triplemodel_validatorimport 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.
There was a problem hiding this comment.
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.
Summary
Compatibility
terms_refas opaque compatibility dataseller_managedas normal asynchronous task processingVerification
uv run pytest -q— 7,430 passed, 77 skipped, 9 deselected, 1 xfailedmake lint typecheck— Ruff clean; mypy clean across 1,235 source filesCloses #1067
Upstream: adcontextprotocol/adcp#6750
JavaScript parity: adcontextprotocol/adcp-client#2664