test(compliance): add timezone resolution storyboard matrix - #6629
Conversation
e4c522b to
1dcf3d6
Compare
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — additive AdCP 3.2 timezone-resolution compliance scenario matrix with grounded assertions.
Checked:
- No blocking findings. Reviewer found zero critical/high/medium issues.
- Additive-only wire surface: all asserted fields (account.timezone., media_buy.budget_capping., budget_cap_timezone, reporting_capabilities.timezone, financials timezone) already exist in base schemas; scenarios add no new wire shape and no oneOf changes.
- Governance: graded assertions grounded in schema MUSTs (core/media-buy.json:94 seller-echo rule, timezone_basis resolution, normative UNSUPPORTED_FEATURE reject); consistent with DR-0001.
- Changeset: minor + correct for additive compliance surface; no dist artifact modified, no hand-edited package.json version.
- index.yaml gating: default vs buyer_selected setup phases are mutually exclusive and total given the supported_timezones-iff-buyer_selected constraint, so exactly one phase always yields $context.account_id.
Gate checks: no no-auto-approve team match; gated_paths false; high_risk false; not a breaking-class change (additive normative scenarios only, no removed/renamed fields). No escalation trigger fires. Decision table falls through to row 9.
1dcf3d6 to
aa03d94
Compare
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — additive AdCP 3.2 conformance coverage, no blocking findings.
This PR adds conformance coverage for already-shipped account-timezone and budget-cap-timezone capabilities: five capability-gated storyboards, seven new required_scenarios plus a branched buyer-selected lifecycle in index.yaml, a wired-in executable test, and a patch changeset. The reviewer confirmed every referenced capability path and wire field already exists in static/schemas/source/**, so there is no schema↔docs drift, no wire-shape change, no oneOf/immutability impact, and the changeset scope/type is correct.
Medium findings (2 — non-blocking, fall through to row 9):
- static/compliance/source/protocols/media-buy/scenarios/account_timezone_seller_fixed.yaml:84 — seller_fixed scenario provisions a non-sandbox production account
- static/compliance/source/protocols/media-buy/scenarios/account_timezone_seller_assigned.yaml:81 — seller_assigned scenario provisions a non-sandbox production account
Decision path: no critical/high findings (row 1 no); gated_paths=false (row 2 no); high_risk=false, no deletions/modifications on sensitive files (rows 3–5 no); prior decision was approve, not escalate (row 6 no); no no-auto-approve team match (row 7 no); only 2 medium findings, below the 3-medium threshold (row 8 no) → row 9 approve. The two sandbox-provisioning inconsistencies are worth fixing but do not meet any blocking threshold.
Medium findings
- static/compliance/source/protocols/media-buy/scenarios/account_timezone_seller_fixed.yaml:84 — seller_fixed timezone scenario provisions a non-sandbox production account
- static/compliance/source/protocols/media-buy/scenarios/account_timezone_seller_assigned.yaml:81 — seller_assigned timezone scenario provisions a non-sandbox production account
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — timezone/budget-cap storyboard scenarios plus test coverage; prior mediums resolved.
This is a subsequent review. The prior run (approve) flagged two medium findings:
- account_timezone_seller_fixed.yaml:84 — non-sandbox production account
- account_timezone_seller_assigned.yaml:81 — non-sandbox production account
Both are resolved in this delta: the seller_fixed and seller_assigned account-timezone scenarios now carry sandbox: true on the sync_accounts provision step and the list_accounts readback, and the storyboard test asserts sandbox === true across all four sample_requests. The reviewer surfaced no new findings in the current run.
Decision walk (top-down):
- Row 1 (critical/high): no such findings.
- Row 2 (gated_paths): gated_paths is false — does not fire despite review_decision=REVIEW_REQUIRED.
- Rows 3–5 (high-risk/deletions/medium categories): high_risk is false; no findings.
- Row 6 (sticky escalate): prior decision was approve, not escalate — n/a.
- Row 7 (no-auto-approve team): no team match.
- Row 8 (≥3 mediums): zero findings.
- Row 9: approve.
Changeset present (.changeset/account-budget-timezone-storyboards.md); changes are compliance scenario/test assets, no schema wire-shape drift.
Summary
UNSUPPORTED_FEATUREWhy
The timezone authority chain added by #5990 spans capabilities, account provisioning, account lookup, media-buy creation/readback, reporting, and billing. These storyboards make that cross-surface contract executable for AdCP 3.2, including mismatched local preferences, reconnects, and immutable timezone-key switching.
Validation
node --test tests/timezone-resolution-storyboards.test.cjs(9/9)npm run build:compliance -- --checkCloses #6010