Skip to content

feat(accounts): money terms on resolved account requests; consistent timezone changes - #8620

Merged
bokelley merged 2 commits into
mainfrom
bokelley/beta3-account-request-followups
Oct 31, 2026
Merged

bokelley merged 2 commits into
mainfrom
bokelley/beta3-account-request-followups

Conversation

@bokelley

@bokelley bokelley commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

AdCP 3.3.0-beta.3, PR D: account-request follow-ups (experimental account.requests). This was split out of PR B because it touches a different surface and different reviewers.

  • matched and created carry the target account's money terms. account is now required (schema-enforced) when a request resolves as matched or created. Sellers MUST include the account's billing, billing_entity (without write-only fields) and payment_terms whenever it has them, because the resolved account can carry terms other than those requested.
  • Money changes get effective_at. It is required when a request resolves as updated and changed billing, billing_entity or payment_terms, and forbidden otherwise. It says when the new money terms take effect: delivery before it is invoiced under the old terms. It is at or after resolution, and the seller may choose its next invoice-period boundary. Other attributes change at resolution.
  • A created separate account says what didn't carry over. not_carried_over is required when a change request resolves as created. It lists the named account's account-level configurations the new account lacks, from notification_configs, reporting_delivery_configs, reporting_bucket, governance_agents, creatives, audiences, catalogs and event_sources; [] means everything carried over. The docs note that an all_authorized_accounts reporting subscription picks the new account up on authorization, while an account_ids one doesn't.
  • Timezone inconsistency fixed. request_account.mdx said only countries, unit and money terms were changeable. sync_principal.mdx described timezone changes "through a request_account change". The rule now: currency and timezone change only on sellers that list them in account.requests.changeable_attributes, which already allows both, and are otherwise refused with UNSUPPORTED_FEATURE. A seller that changes timezone through request_account MUST list it. Both pages, the request schema and the capability description agree.
  • The examples that resolve as matched or created now carry account. The matched example in account-request-record.json moved to fictional names.

Owner decisions (approved)

  • account is required for matched and created (approved, with a release-note line). Sellers that omitted it, previously allowed, now fail validation.
  • effective_at is seller-chosen only. A buyer-requested effective date is left for GA.
  • The not_carried_over vocabulary is closed. Extend it as account-scoped libraries are added.

Test plan

  • npm run build:schemas && npm run build:compliance (no symbol-link changes)
  • test:schemas, test:json-schema, test:compliance-snippets, test:owned-links, the MCP projection and analysis tests, and the bounds tests (no capabilities shape change, so no repin)
  • test:docs-nav live-source checks pass. The snapshot checks need dist/docs, which the sparse worktree omits.

Changes since review

🤖 Generated with Claude Code

@bokelley
bokelley marked this pull request as ready for review October 31, 2026 00:25
Comment thread docs/accounts/tasks/request_account.mdx Resolved

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ladon verdict: Escalate to human review

Escalate — gated schema paths require human/CODEOWNERS approval.

This PR modifies four files under static/schemas/source/**, which are under a hard, deterministic approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so the gate is not satisfied and the PR cannot be auto-approved or passed with a plain comment (decision table row 2).

Escalation reasons

  • Gated files require explicit human/CODEOWNERS review before merge: static/schemas/source/account/request-account-request.json, static/schemas/source/account/request-account-response.json, static/schemas/source/core/account-request-record.json, static/schemas/source/protocol/get-adcp-capabilities-response.json — all modified while review_decision is REVIEW_REQUIRED.

Medium findings (for the human reviewer to confirm)

  • docs/accounts/tasks/request_account.mdx:151 — Walkthrough example omits now-required account on a created resolution; prose promises account "with money terms" but the adjacent worked record (L153-160) resolves created and omits account, contradicting the new schema requirement and the PR's own claim.

No critical/high findings. Schema↔docs coherence, changeset scope/type, oneOf discriminator audit, and dist immutability all check out per the reviewer; base is main (not 3.1.x). The one medium is a doc example inconsistency worth fixing but not independently blocking.

Medium findings

  • docs/accounts/tasks/request_account.mdx:151 — Walkthrough example omits now-required account on a created resolution

Why human review

  • Gated paths touched while review_decision is REVIEW_REQUIRED (not APPROVED): static/schemas/source/account/request-account-request.json, static/schemas/source/account/request-account-response.json, static/schemas/source/core/account-request-record.json, static/schemas/source/protocol/get-adcp-capabilities-response.json — human/CODEOWNERS approval required.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/account/request-account-request.json (modified) matches static/schemas/source/**; static/schemas/source/account/request-account-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/account-request-record.json (modified) matches static/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.

@aao-secretariat aao-secretariat Bot added the ladon/needs-human-review Ladon has escalated this PR for human review. label Oct 31, 2026
bokelley and others added 2 commits October 31, 2026 04:29
…timezone changes

Account requests (experimental): matched and created resolutions must carry
the target account with its money terms; an updated request that changed
billing, billing_entity, or payment_terms carries effective_at; a change
request that resolves as a separate account lists not_carried_over. currency
and timezone change only where account.requests.changeable_attributes lists
them, so request_account and sync_principal docs now agree.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ts money terms

Ladon finding: the request_account walkthrough resolved as created without
the now-required account.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ladon verdict: Escalate to human review

Escalate — gated schema paths require human/CODEOWNERS approval.

This PR modifies four files under static/schemas/source/**, which are under a hard, non-overridable approval gate (gated_paths: true). The current GitHub review decision is REVIEW_REQUIRED, not APPROVED, so the gate is not satisfied (decision table row 2).

The reviewer reported a clean pass with no Critical/High/Medium findings. The prior Medium (request_account.mdx walkthrough omitting the now-required account on a created resolution) is resolved in this delta. Schema↔docs coherence holds, the changeset is appropriately scoped (minor, breaking-on-experimental tightening), examples validate, tests cover the new if/then/else branches, no oneOf regressions, and no dist/ artifact edits. On the merits the diff is clean — but the hard path gate cannot be lifted by a clean diff; it requires a recorded human/CODEOWNERS approval.

Escalation reasons

  • Touches gated paths while review_decision is REVIEW_REQUIRED (not APPROVED): static/schemas/source/account/request-account-request.json, static/schemas/source/account/request-account-response.json, static/schemas/source/core/account-request-record.json, static/schemas/source/protocol/get-adcp-capabilities-response.json — human/CODEOWNERS approval required.

Why human review

  • Touches gated paths under a hard approval gate while review_decision is REVIEW_REQUIRED (not APPROVED): static/schemas/source/account/request-account-request.json, static/schemas/source/account/request-account-response.json, static/schemas/source/core/account-request-record.json, static/schemas/source/protocol/get-adcp-capabilities-response.json — human/CODEOWNERS approval required.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/account/request-account-request.json (modified) matches static/schemas/source/**; static/schemas/source/account/request-account-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/account-request-record.json (modified) matches static/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.

Copy link
Copy Markdown
Contributor Author

Ladon's medium finding (the created walkthrough record) is fixed and its thread resolved; the re-review is clean. The advisory "Generate TypeScript SDK" failure is the SDK's compile-time exhaustiveness check on authorization.regranted_at, which arrived with #8618 and is unrelated to this PR. The owner approved the beta.3 set, including making account required on matched and created with a release-note line (in #8640), so this is being merged by admin.

@bokelley
bokelley merged commit 4af25bf into main Oct 31, 2026
62 of 64 checks passed
@bokelley
bokelley deleted the bokelley/beta3-account-request-followups branch October 31, 2026 05:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ladon/needs-human-review Ladon has escalated this PR for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant