Skip to content

Reliable Reporting: report-definition contract_version 1.2 requires a package_id dimension for media buys #8971

Closed

Description

@EmmaLouise2018

Problem

A Reliable Reporting revision for a media buy can carry no package dimension and still be fully valid. reporting-report-definition.json declares dimensions as a free list of strings, and the reference fixture static/compliance/source/test-vectors/reporting-reconciliation/report-definition.json itself uses ["date", "media_buy_id"].

Every media buy has at least one package (create_media_buy takes packages with minItems: 1, or a proposal_id that creates them), and packages in one buy can carry different rates, pricing models and budgets. A buyer that bills, caps or reconciles per package cannot split a buy-level revision back into packages without guessing.

Proposal: report-definition contract_version 1.2

Add contract_version: "1.2" to reporting-report-definition.json. A 1.2 definition whose revisions cover media buys MUST declare a package_id dimension, so every row carries the buyer-visible package.

This follows the pattern 1.1 already uses (it requires official_correction_mode only when contract_version is "1.1"):

{
  "if": { "properties": { "contract_version": { "const": "1.2" } }, "required": ["contract_version"] },
  "then": { "properties": { "dimensions": { "contains": { "const": "package_id" } } } }
}

1.2 keeps 1.1's requirements.

Compatibility

Non-breaking, so it can ship as a minor in 3.x: 1.0 and 1.1 definitions stay valid and the existing reference fixture is unchanged. Only sellers that adopt 1.2 take on the requirement. A new 1.2 fixture with package-grain rows (media_buy_id, package_id, date) would cover it. Buyers that need package rows can require 1.2 when they enroll a seller's Reliable Reporting offering.

Making package_id required for every media-buy definition, whatever its version, would be a 4.0 change (see #8973 for the matching by_package rule).

Open questions

  1. Is there media-buy reporting that is legitimately not package-scoped (an account-level summary, for example)? If so, should the 1.2 rule key off media_buy_ids on the revision, or a declared grain?
  2. Dimension name: package_id (matching media_buy_id in the reference fixture), or package (as subscription selectors use today)?

Related: #8970 (3.x by_package guidance), #8973 (4.0 by_package requirement).

Activity

  1. added this to the 3.3.0 milestone on Nov 13, 2026
  2. bokelley commented on Nov 13, 2026

    @bokelley
    Contributor

    Implemented in #8983. Report definitions at contract_version 1.2 require package_id when dimensions include media_buy_id. Account-level definitions without media_buy_id are exempt. 1.0 and 1.1 stay valid, with an advisory for a missing package_id. The reference fixture is unchanged, and a new vector set covers 1.2. Thanks @EmmaLouise2018 for the clear report.

  3. bokelley commented on Nov 13, 2026

    @bokelley
    Contributor

    Follow-up from the #8983 review: #8987 asks whether structural dimensions (date, media_buy_id, account_id) count as unmapped_dimensions for subscription match: exact. Read literally, the 1.2 per-package definition would never match dimensions: ["package"].

  4. added 2 commits that reference this issue on Nov 13, 2026
  5. changed the title [-]Reliable Reporting: media-buy report definitions should require a package_id dimension[/-] [+]Reliable Reporting: report-definition contract_version 1.2 requires a package_id dimension for media buys[/+] on Nov 13, 2026
  6. added a commit that references this issue on Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions