You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
owed_subscription_periods raises coverage input errors for values no schedule reads (invalid_timezone, missing_previous_timezone, missing_standard_dimensions) #1769
owed_subscription_periods (adcp 10.0.0b4) raises three coverage input errors for values that no schedule in play reads. In each case the TypeScript SDK or the spec's reference model, or both, return the owed rows. Differential testing found all three (adcontextprotocol/adcp tests/interop/differential, 5,000 seeded scenarios on tzdata 2026f, mapping as in tests/test_reporting_subscription_parity.py).
The spec's position comes from error-codes.json and the numeric-offset-timezone-is-refused vector, which was changed so that a refusal follows only "from the coverage rule": a utc schedule never reads the account timezone, so its periods are derivable.
Each repro starts from the baseline case input in static/compliance/source/test-vectors/reporting-subscriptions/vectors.json. Its only offering is utc-aligned, and it owes 11-03, 11-04 and 11-05.
1. invalid_timezone for an account timezone no schedule reads
Set account.timezone to "+05:00".
Reference model: the 3 rows.
Python: COVERAGE_INPUT_INVALID/invalid_timezone ("account_timezone '+05:00' is not a recognized IANA timezone").
error-codes.json: "A zone a schedule reads is not an IANA zone".
The TS SDK has the same bug (filed in adcp-client).
2. missing_previous_timezone when no account_timezone offering resolves
Add "coverage": {"timezone_cutovers": [{"effective_at": "2026-11-05T05:00:00Z", "timezone": "America/New_York"}]} (no previous_timezone).
Fixed on next by fc370c61 ("refuse coverage input only where a schedule reads it"), which landed with #1766. It merged into a non-default branch, so the issue didn't auto-close.
Each refusal now follows only from the coverage rule:
the account zone is validated where an account_timezone calendar is built;
previous_timezone is required only for cutovers that apply to a resolved account_timezone offering;
standard_dimensions is checked only on candidate offerings.
tests/test_reporting_subscription_parity.py reproduces all three cases from the spec's baseline vector (test_issue_1769_*), and each owes the same 11-03, 11-04 and 11-05 rows. The parity suite passes on next at 7edba16d (128 passed).
Activity
bokelley commentedon Nov 1, 2026
Fixed on
nextbyfc370c61("refuse coverage input only where a schedule reads it"), which landed with #1766. It merged into a non-default branch, so the issue didn't auto-close.Each refusal now follows only from the coverage rule:
account_timezonecalendar is built;previous_timezoneis required only for cutovers that apply to a resolvedaccount_timezoneoffering;standard_dimensionsis checked only on candidate offerings.tests/test_reporting_subscription_parity.pyreproduces all three cases from the spec'sbaselinevector (test_issue_1769_*), and each owes the same 11-03, 11-04 and 11-05 rows. The parity suite passes onnextat7edba16d(128 passed).